【发布时间】:2013-02-06 22:44:39
【问题描述】:
我已经用这段代码在 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();
现在我想在这个平面上应用一个纹理。
我已经阅读了本教程here,但由于没有 UV 坐标,所以我已经停止了“在 OpenGL 中使用纹理”部分。
我知道我们必须导入纹理文件,在我的例子中是位图文件。
loader返回一个Glint,也就是textureID,是全局的吗?例如,如果我需要加载该纹理,我只需要使用给定的 ID 调用绑定纹理函数?
无论如何,我怎样才能将纹理应用到平面上?
编辑#1:
蚊子发布的示例中的纹理现在可以使用。
我发现我正在将纹理加载到类的构造函数中,我不应该这样做,因为该对象是公共的,并且它是在 OpenGL 初始化之前构造的。
所以纹理现在在四边形示例中加载良好:)
现在的问题是我尝试在我的飞机上使用它,但它看起来变形了。 解决这个问题的方法可能是让纹理加载多次,但保持原来的大小(虽然我不知道怎么做)。
另外,我在当前平面旁边创建了另一个平面,颜色为奶油色,但经过纹理处理后,它看起来像这样:
所以现在有两个问题:
- 纹理必须保持其原始分辨率,但显示的次数与覆盖整个平面一样多
- 它旁边的飞机失去了颜色(为什么会发生这种情况?如何修复它?--我也可以为这架飞机使用纹理)
编辑#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);
【问题讨论】:
-
我会给你我的标准“你知道你在使用旧的和不推荐使用的功能吗?这里是a better tutorial”
-
@BartekBanachewicz:我使用的哪个功能已弃用?我正在使用这些来完成我的任务,这就是我们所学的。我会看你发布的教程,因为我看了一点,它看起来不错。但是我看到它使用的是一个框架,那是哪个?
-
本教程不针对任何框架;可能只有一些窗口/上下文创建便利功能。至于实际不推荐使用的功能......实际上,您的代码的每一个功能。但是,如果这是一项任务,我知道根据我自己的经验可能很难更新。
-
@Chris 我刚刚根据您的新问题编辑了我的答案。请检查一下。
-
@BartekBanachewicz 您发布的链接指向一个已过期的域名...