【问题标题】:What are the correct cube map coordinates for openGL ES 2.0 on iOS after loading the cube map with GLKit?使用 GLKit 加载立方体贴图后,iOS 上 openGL ES 2.0 的正确立方体贴图坐标是什么?
【发布时间】:2014-10-07 07:24:15
【问题描述】:

为了调试我的着色器,我试图显示立方体贴图的正面。 立方体贴图是 125x750 的图像,6 个面相互重叠:

首先,我使用 GLKit 加载立方体贴图:

_cubeTexture = [GLKTextureLoader cubeMapWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"uffizi_cube_map_ios" ofType:@"png"] options:kNilOptions error:&error];

然后我将它加载到着色器中:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, self.cubeTexture.name);
glUniform1i( glGetUniformLocation( self.shaderProgram, "cube"), 0);

然后在片段着色器中:

gl_FragColor = textureCube(cube, vec3(-1.0+2.0*(gl_FragCoord.x/resolution.x),-1.0+2.0*(gl_FragCoord.y/resolution.y),1.0));

这会显示一个扭曲的图像,它似乎是立方体贴图顶部的一部分:

它不应该被扭曲,它应该显示右面,而不是顶面。

我找不到任何描述坐标如何映射到立方体的文档,那么我做错了什么?

【问题讨论】:

    标签: ios opengl-es-2.0


    【解决方案1】:

    cubeMapWithContentsOfFile 似乎有问题。 cubeMapWithContentsOfFiles 方法(采用 6 个图像数组的方法)在模拟器上完美运行。 (这两种方法在设备上存在不同的问题)。

    【讨论】:

      【解决方案2】:

      要可视化立方体贴图的纹理坐标如何工作,请想象一个以原点为中心的立方体,面与原点的距离为 1,每个面上都有指定的立方体贴图图像。

      然后可以将纹理坐标视为方向向量。从原点开始,这 3 个分量定义了一个可以指向任何方向的向量。然后,由向量定义的射线将在给定点与 6 个立方体面之一相交。这是在纹理过程中对相应立方体贴图图像进行采样的点。

      例如,取一个指向最接近正 z 轴方向的向量。此向量定义的射线与立方体的顶面相交。因此,立方体贴图的顶部 (POSITIVE_Z) 图像在光线与面部相交的点处被采样。

      等效规则适用于所有其他方向。其中一个向量分量的绝对值最大对应的人脸决定了采样哪一张人脸,交点决定了图像内的位置。

      可以在规范文档中找到确切的规则和公式。例如在最新的规范(OpenGL 4.5)中,参见第 8.13 节“立方体贴图纹理选择”,匹配表 8.19。但只要您了解纹理坐标定义了一个方向向量,您就已经涵盖了主要方面。

      如何确定纹理坐标实际上取决于您想要实现的目标。常见情况包括:

      • 使用法线向量作为立方体贴图纹理坐标。例如,这可以用于预先计算的光照效果,其中立方体贴图图像的内容包含每个可能的法线方向的预先计算的光照结果。
      • 使用反射向量作为立方体贴图纹理坐标。这支持环境映射的实现。立方体贴图的内容是环境的图片。

      【讨论】:

      • 我也是这么想的。尽管立方体坐标从 -1 到 1 而不是 0 到 1 的事实有点令人惊讶。尽管如此,我更新的代码仍然没有产生正确的输出。此代码: vec2 coords = vec2(-1.0+2.0*(gl_FragCoord.x/resolution.x),-1.0+2.0*(gl_FragCoord.y/resolution.y)); gl_FragColor = textureCube(cube, vec3(coords,1.0));产生这个输出:postimg.org/image/jkqjdz87t
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      相关资源
      最近更新 更多