我有纹理128 x 128像素24位BMP文件。这是一条垂直线的绿色广场。它用stbi_image加载OK。在初始化启用OpenGL纹理不起作用,因为它应该
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
和纹理参数
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
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);
我有与立方体和圆柱(和一些多边形顶点带)制成的对象。我绑定纹理一个像这样过剩:
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, tex1_id);
glColor3f(0.0f, 1.0f, 0.0f);
glTranslatef(-0.5f, 0.2f, 0.05f);
glScalef(2.4f, 0.4f, 1.0f);
glutSolidCube(0.6f);
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
或顶点方:
glPushMatrix();
glTranslatef(-0.03f, 1.26f, -0.35f);
glRotatef(94, 1.0f, 0, 0);
glBindTexture(GL_TEXTURE_2D, tex1);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.3f, 0.4f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.3f, 0.4f, 0.0f);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
我知道glutSolidCube不generete纹理坐标,但显然与上glEnables它工作得精细。所以纹理显示在对象上。一切看起来都很好。
问题在我用lookAt更改视图时开始,或者我在一些路径中翻译和旋转对象。然后它看起来像纹理不会随对象移动和旋转,而是保持静态。
第一:初始视图;第二:稍微旋转的看法(lookAt);第三种:稍微翻译的对象
如果我将使用顶点绘制该对象,则会发生同样的事情。我在C++中使用OpenGL 2.1。
我相信你自己发现了这个问题。没有纹理坐标,它怎么可能将顶点映射到纹理中的一个点? – Dave
@Dave我希望有一些神奇的方式可以让它成为可能。立方体很容易实现,所以我更关心实体圆柱体的实现。如果我执行glutSolidCylinder并在其中添加一些纹理坐标,它会起作用吗? –