2

我目前正在学习 Open GL ES 以构建 iOS 应用程序。我正在尝试向我的模型添加纹理但没有成功。我从下载了一个示例项目

关联

并一直在研究它。我的问题是:当我不改变运行项目时,我得到以下信息:

具有工作纹理的图像

如您所见,它是一个带有纹理的基本立方体。我决定将 .png 文件更改为不同的图像。但是当我这样做时,我遇到了:

图像不渲染纹理

我不知道为什么我的 .png 文件没有渲染到立方体?

这是我的质地: 我的质地

和原件: 原来的

只是为了确认我没有收到任何错误,并且我没有对代码进行任何更改。

4

3 回答 3

3

如果您使用非二次幂纹理,则不能使用 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。

于 2013-01-15T12:05:50.927 回答
1

对于这个特定的教程,您可以使用正方形、二维的幂的纹理来解决您的问题。您发布的是135x134,因此您需要将其转换为128X128or 256x256

有关相关讨论,请参阅此帖子:iphone opengl es 2.0 non power of two

于 2013-01-15T11:20:07.020 回答
0

你是如何改变你的图像文件的?您是否只替换了文件夹中的文件或将其也包含在项目中?以防万一,您应该通过将文件拖入 XCode 并将其重命名为tile_floor.png,或将方法中的(纹理)图像文件名更改为纹理文件的名称,从而将文件包含在项目中initWithFrame

如果这不起作用,则可能是两个图像文件中的颜色格式或每像素位数信息不同。

于 2013-01-15T10:49:35.280 回答