我目前正在学习 Open GL ES 以构建 iOS 应用程序。我正在尝试向我的模型添加纹理但没有成功。我从下载了一个示例项目
并一直在研究它。我的问题是:当我不改变运行项目时,我得到以下信息:
如您所见,它是一个带有纹理的基本立方体。我决定将 .png 文件更改为不同的图像。但是当我这样做时,我遇到了:
我不知道为什么我的 .png 文件没有渲染到立方体?
这是我的质地:
和原件:
只是为了确认我没有收到任何错误,并且我没有对代码进行任何更改。
如果您使用非二次幂纹理,则不能使用 mipmap,您需要正确设置过滤。
过滤:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
夹钳:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
但这有一个缺点,在 3D 对象上,如果距离太远,纹理质量会很差。因此,在这种情况下,请使用二次幂纹理并使用 mipmap。
对于这个特定的教程,您可以使用正方形、二维的幂的纹理来解决您的问题。您发布的是135x134
,因此您需要将其转换为128X128
or 256x256
。
有关相关讨论,请参阅此帖子:iphone opengl es 2.0 non power of two
你是如何改变你的图像文件的?您是否只替换了文件夹中的文件或将其也包含在项目中?以防万一,您应该通过将文件拖入 XCode 并将其重命名为tile_floor.png
,或将方法中的(纹理)图像文件名更改为纹理文件的名称,从而将文件包含在项目中initWithFrame
。
如果这不起作用,则可能是两个图像文件中的颜色格式或每像素位数信息不同。