c – 在OpenGL中加载纹理时颜色错误
发布时间:2020-12-16 09:40:34 所属栏目:百科 来源:网络整理
导读:我试图了解如何在OpenGL中加载纹理,我写了这个非常简单的代码: GLuint texture;void loadTexture() { GLubyte data[] = { 255,255,0 }; glGenTextures(1,texture); glBindTexture(GL_TEXTURE_2D,texture); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL
我试图了解如何在OpenGL中加载纹理,我写了这个非常简单的代码:
GLuint texture; void loadTexture() { GLubyte data[] = { 255,255,0 }; glGenTextures(1,&texture); glBindTexture(GL_TEXTURE_2D,texture); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameterf( GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT ); glTexParameterf( GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT ); int chk = gluBuild2DMipmaps( GL_TEXTURE_2D,GL_RGB,2,GL_UNSIGNED_BYTE,data ); if (chk!=0) printf("error code = %dn",chk); else printf("successn"); } 我使用loadTexture()在内存中加载纹理.在这个样本中,纹理非常简单,但目前无关紧要. void drawTexturedSquare() { glEnable( GL_TEXTURE_2D ); glBegin (GL_QUADS); glTexCoord2f (0.0,0.0); glNormal3f(0,1); glVertex3f (0.0,0.0,0.0); glTexCoord2f (1.0,1); glVertex3f (10.0,1.0); glNormal3f(0,1); glVertex3f (10,10,0.0); glTexCoord2f (0.0,0.0); glEnd (); glDisable( GL_TEXTURE_2D); } 我想将这个简单的纹理应用到正方形.我从我已经调用的draw()函数内部调用函数drawTexturedSquare() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); 问题是这是我得到的结果 虽然我预计正方形在主对角线上是绿色的(左上角到右下角),红色是次要对角线(右上角到左下角).愿有人解释我为什么吗? 此外,每次运行程序时,我都会得到不同的结果: ??? 我不明白这个蓝色出现在哪里……有人可以帮帮我吗? 解决方法
数据的每一行都需要4字节对齐.用0 0填充每一行,或使用RGBA纹理.
如果您不想进行上述操作,可以使用: glPixelStorei(GL_UNPACK_ALIGNMENT,1); 颜色变化的原因是,由于您没有正确填充行,OpenGL会读取数组的末尾. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |