我想用立方体贴图来纹理球体.到目前为止,我的研究已经在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.
顺便说一下,这里是如何在内部使用坐标:绝对值中的最大坐标用于选择从中读取六个纹理中的哪一个(符号选择正或负).另外两个坐标用于在被最大坐标除以后在所选地图中查找纹素.