【问题标题】:open Gl ES texture renderopenGl ES 纹理渲染
【发布时间】:2013-01-15 20:15:18
【问题描述】:

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

下载了一个示例项目

link

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

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

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

这是我的纹理:

和原文:

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

【问题讨论】:

    标签: ios opengl-es


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于这个特定的教程,您可以使用正方形的二次幂纹理来解决您的问题。你发的是135x134,所以需要转换成128X128或者256x256

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

      【讨论】:

      • 我刚刚将一个 128x128 的纹理转换为 128x129,当我运行我的项目时它就消失了。因此,请先尝试使用二维幂的纹理。
      • -1 iOS 上的纹理不需要是二的幂!我每天都使用 NPOT 纹理!
      • 确实如此,但本初学者教程显然就是这种情况,并且明显的原因是意外结果。 NPOT 纹理是 OpenGL ES 中更高级的主题。在走路之前学会爬行等等。
      【解决方案3】:

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

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

      【讨论】:

      • 我将图像添加到项目中,然后按照您的建议重命名了图像(交换了名称)。如何检查每像素位数?根据信息,它们都是 RGB
      • 如果您使用的图像是您在此处复制的图像,那么这应该不是问题。两者都是 24 bpp。 (为了检查,我使用 GIMP 打开了它们,但右键单击获取信息也应该这样做)。重命名图片后运行项目不行吗?
      • 教程和您的图像显示了两个相互重叠的纹理。您要替换哪种纹理。目前,从代码中删除鱼纹理,以便您只需要处理平铺纹理。同时删除/注释处理鱼纹理的任何代码,例如 alpha 混合。
      • 好的。您确定您没有更改任何代码吗?使用时旧纹理是否仍能正常显示?
      • 另外,尝试使用其他图像作为纹理。也许这个紫外线是不对的。通常,UV 都在 (0,1) 范围内,就像教程假设的那样。但有时他们可能不是。我曾经遇到过 uv 倒置的问题(所以 0 为 1,1 为 0)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多