我用以下代码在 OpenGL 上创建了一个平面:
glBegin(GL_TRIANGLE_STRIP);
glColor4f(0.8, 0.8, 0.5, 1.0);
glVertex3f(startlen, height, startwid);
glVertex3f(startlen, height, startwid + width);
glVertex3f(startlen + length, height, startwid);
glVertex3f(startlen + length, height, startwid + width);
glEnd();
现在我想在这个平面上应用纹理。
我在这里阅读了本教程,但我在“在 OpenGL 中使用纹理”部分停了下来,因为我没有 UV 坐标。
我知道我们必须导入纹理文件,在我的例子中是位图文件。
loader返回一个Glint,也就是textureID,是全局的吗?例如,如果我需要加载该纹理,我只需要使用给定的 ID 调用绑定纹理函数?
无论如何,我怎样才能将纹理应用到飞机上?
编辑#1:
示例蚊子发布的纹理现在可以使用。
我发现我正在将纹理加载到类的构造函数中,我不应该这样做,因为该对象是公共的,并且它是在 OpenGL 初始化之前构造的。
所以纹理现在在四边形示例中加载得很好:)
现在的问题是我试图在我的飞机上使用它,它看起来很扭曲。对此的解决方案可能是使纹理能够加载多次,但保持其原始大小(虽然我不知道如何做到这一点)。
此外,我在当前平面旁边创建了另一个平面,颜色为奶油色,但在纹理化之后,它看起来像这样:
所以现在有2个问题:
- 纹理必须保持其原始分辨率,但显示的次数要覆盖整个平面
- 它旁边的飞机失去了颜色(为什么会发生这种情况?如何修复它?--我也可以为这架飞机使用纹理)
编辑#2:
第二个问题现在已经解决了,感谢蚊子!但是平铺仍然不起作用。这是它现在的样子:
这是我使用的纹理:
它的尺寸是 256x256(我使用图像编辑器裁剪它)
编辑#3:
这些是 glTexCoord2f 坐标及其匹配顶点(用于内边距):
glTexCoord2f(0.0f, 0.0f); glVertex3f(startlen, height, startwid);
glTexCoord2f(0.0f, 1.0f); glVertex3f(startlen, height, startwid - width/2);
glTexCoord2f(1.0f, 0.0f); glVertex3f(startlen + length, height, startwid);
glTexCoord2f(1.0f, 1.0f); glVertex3f(startlen + length, height, startwid - width/2);