[英]What are the correct cube map coordinates for openGL ES 2.0 on iOS after loading the cube map with GLKit?
为了调试着色器,我试图仅显示立方体贴图的正面。 立方体贴图是一张125x750的图像,六个面彼此重叠:
首先,我使用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));
这将显示扭曲的图像,该图像似乎是立方体贴图顶部的一部分:
它不应该失真,并且应该显示正确的面孔,而不是顶面。
我找不到任何描述坐标如何映射到多维数据集的文档,那我在做什么错呢?
似乎cubeMapWithContentsOfFile有问题。 cubeMapWithContentsOfFiles方法(需要6个图像的数组)可以在模拟器上完美运行。 (设备上的两种方法都有一个不同的问题)。
若要可视化纹理坐标对立方体贴图的工作方式,请绘制一个以原点为中心的立方体,其面与原点的距离为1,并且每个面上都具有指定的立方体贴图图像。
然后可以将纹理坐标视为方向向量。 从原点开始,这三个分量定义了可以指向任何方向的向量。 然后,由矢量定义的射线将在给定点与6个立方体面之一相交。 这是在纹理化过程中采样相应的立方体贴图图像的点。
例如,采用指向最接近正z轴的方向的向量。 该矢量定义的光线与立方体的顶面相交。 因此,在光线与人脸相交的点处对立方体贴图的顶部( POSITIVE_Z
)图像进行采样。
等效规则适用于所有其他方向。 与矢量分量之一的最大绝对值相对应的面部确定了要采样的面部,而交点则确定了图像内的位置。
确切的规则和公式可在规格文档中找到。 例如,在最新的规范(OpenGL 4.5)中,请参见第8.13节“多维数据集贴图纹理选择”,以及匹配表8.19。 但是,只要您了解纹理坐标定义了方向矢量,就可以涵盖主要方面。
您如何确定纹理坐标确实取决于您要实现的目标。 常见的情况包括:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.