我想在使用openGL的窗口上显示纹理。但是,纹理仅映射到窗口的左下角,并被切断! outputopenGL纹理映射-c
这里是我的代码:
质地:
GLuint textureID[1];
GLubyte Image[1024*768*4];
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1,textureID);
glBindTexture(GL_TEXTURE_2D, textureID[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, Image);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
四:
glPushMatrix();
glTranslatef(0, 0.0, -1.1);
glMaterialf(GL_FRONT, GL_SHININESS, 30.0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID[0]);
glViewport(-511,-383,1025,768);
glBegin(GL_QUADS);
glTexCoord2d(0.0, 0.0); glVertex2f(0.0, 0.0);
glTexCoord2d(1.0, 0.0); glVertex2f(1024.0, 0.0);
glTexCoord2d(1.0, 1.0); glVertex2f(1024.0, 768.0);
glTexCoord2d(0.0, 1.0); glVertex2f(0.0, 768.0);
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glFlush();
我想纹理映射到我的窗口。我的窗口和纹理都有1024x768的大小。我做错了什么?如果我注释掉glViewport
,纹理将被映射到右上角。
任何具体的理由给-ve值指定左下角的视口?你为什么不给0,0呢? – Raki
,因为给0,0或评论它,我们会给我这个[图片](http://i.imgur.com/USHBwqc.png)。我想要这样的东西:[image2](http://i.imgur.com/f3DlLVO.png) – user3335341
评论glviewport给你的行为的原因是,视口(和剪刀箱)被设置为帧缓冲尺寸(0, 0,1024,768)首次使上下文变为当前。 – Andreas