我打算在一下四边形面片上贴一张rgb格式的纹理,纹理如图1所示:
代码如下:
void COpenGL::DrawScene()
{
unsigned char * pixels;
int type, width, height;
GLuint  texId;
    glEnable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mgReadImage("church.rgb", &pixels, &type, &width, &height); //一个外部函数,用来读取rgb格式的纹理,将读取到的数据存放在数组pixels里。 glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
    
glBegin(GL_POLYGON);
    glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.0);
           glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.0);
           glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, 0.0);
           glTexCoord2f(1.0, 0.0); glVertex3f(0.5, -0.5, 0.0);     
glEnd(); glFinish();
}但最后的结果出乎我的意料,结果如图2所示:
从图中可以看出,所贴的纹理是图1的重复(重复了八次),而我的设想是纹理不重复(即四边形四个顶点对应纹理的四个顶点)。哪位朋友能帮忙想想问题的所在,谢谢了!

解决方案 »

  1.   

    纹理坐标的问题,这样改一下试试:
    glBegin(GL_POLYGON);
         glTexCoord2f(0.0, 0.0); glVertex(0, 1);
         glTexCoord2f(0.0, 1.0); glVertex(0, 0);
         glTexCoord2f(1.0, 1.0); glVertex(1, 0);
         glTexCoord2f(1.0, 0.0); glVertex(1, 1);
    glEnd();
      

  2.   

    glBegin(GL_POLYGON);
            glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.0);        
               glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.0);
               glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, 0.0);
               glTexCoord2f(1.0, 0.0); glVertex3f(0.5, -0.5, 0.0); 
                glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.0);               
        glEnd();
    再加一行