我想用立方体贴图纹理一个球体。到目前为止,我的研究已经在 Google 上提出了许多关于使 OpenGL 自动生成纹理坐标的结果,但我想生成自己的坐标。
给定一个坐标数组,其中包含以 0,0,0 为中心的不完美球体(高度映射但本质上是一个球体)的顶点,如何为立方体贴图生成纹理坐标?
我想用立方体贴图纹理一个球体。到目前为止,我的研究已经在 Google 上提出了许多关于使 OpenGL 自动生成纹理坐标的结果,但我想生成自己的坐标。
给定一个坐标数组,其中包含以 0,0,0 为中心的不完美球体(高度映射但本质上是一个球体)的顶点,如何为立方体贴图生成纹理坐标?
你是通过 GLSL 做的吗?在这种情况下,textureCube 接受 vec3 作为纹理坐标,它是球体上的单位向量。在您的情况下,您将获取片段相对于球体中心的坐标,对其进行标准化并将其作为坐标传递。无需担心内部表示为六个二维纹理。
uniform samplerCube cubemap;
varying vec3 pos; // position of the fragment w.r.t. the center of the sphere
/* ... */
vec4 color = textureCube(cubemap, normalize(pos).stp);
在固定流水线 OpenGL 中也是如此。
顺便说一下,这里是如何在内部使用坐标的:绝对值中的最大坐标用于选择从六个纹理中的哪一个读取(符号选择正或负)。其他两个坐标在除以最大坐标后用于查找所选地图中的纹素。