我用Vc++2005写了一个openGL程序,就是给一个人脸3d模型贴上贴图使之像一个3d的人脸.
为了能使用任意大小的贴图我使用的纹理生成函数是 gluBuild2DMipmaps , 图像格式是24位真彩色,但无论怎样贴出来的效果都有点偏蓝,像死人脸似的,请问这是怎么回事?跟颜色设置有关系吗?
以下是像素颜色设置代码:
//定义窗口的像素格式
PIXELFORMATDESCRIPTOR pixelDesc=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
以下是纹理生成函数:
gluBuild2DMipmaps(GL_TEXTURE_2D, //此纹理是一个2D纹理
4, //颜色成分R(红色分量)、G(绿色分量)、B(蓝色分量)三部分,若为4则是R(红色分量)、G(绿色分量)、B(蓝色分量)、Alpha
txTexture.bmpinfo->biWidth, //纹理的宽度
txTexture.bmpinfo->biHeight, //纹理的高度
GL_RGBA, //告诉OpenGL图像数据由红、绿、蓝三色数据组成
GL_UNSIGNED_BYTE, //组成图像的数据是无符号字节类型
pRgba);
望高手不啬赐教!
给一个程序截图,这贴图本来是很正常的人脸,颜色以红色调为主,贴上去却偏蓝了.
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/%CE%B4%CE%C5%B5%C0/pic/item/ea2fb9a3cf81c69dcaefd024.jpg
//////////////////////////////////////////////////////////////////////////////////////
呵呵,问题自己解决了,把rgb的r和b调换一个位置就行啦,问题直接关闭,就希望能给看到的朋友一些帮助吧.
倒数第二个参数修改为 GL_UNSIGNED_INT 试试