我想用立方体贴图纹理球体。到目前为止,我的研究已经在Google上引发了许多结果,包括让OpenGL自动生成纹理坐标,但我想生成自己的坐标。
给定一个坐标数组,包括以0,0,0为中心的不完美球体(高度映射但基本上是球体)的顶点,如何为立方体贴图生成纹理坐标?
答案 0 :(得分:6)
你是通过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。
顺便说一下,这里是如何在内部使用坐标:绝对值中的最大坐标用于选择从中读取六个纹理中的哪一个(符号选择正或负)。另外两个坐标用于在被最大坐标分割后在所选地图中查找纹素。