此代码用到了opencv将图像转换为usigned char数据,以及对图像进行显示
#include <stdlib.h>
#include<iostream>
#include<GL/glew.h>
#include<GL/glut.h>
#include <opencv.hpp>
cv::Mat I = cv::imread("C://Users//Yao//Desktop//wall.jpg");
int width = I.cols;
int height = I.rows;
static GLuint FBO;
static GLuint texture_in;
static GLuint texture_out;
static GLfloat outPutFb[512 * 512]; //输出纹理缓冲
static GLubyte pData[512 * 512]; //存储最终的图像数据
void initFBO()
{
//创建FBO,准备屏幕外帧缓存
glGenFramebuffersEXT(1, &FBO);
//绑定屏幕外帧缓存,即避开了窗口系统默认的渲染目标
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
}
void init()
{
glShadeModel(GL_FLAT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glViewport(0, 0, width, height);
//设置输入纹理
glGenTextures(1, &texture_in);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture_in);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
//纹理过滤的方式不应该设置为线性插值
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST