我目前正在尝试渲染天穹。球体是使用 gluSphere 创建的,在顶点着色器中,我从每个顶点中提取球坐标。然后,我将球体坐标 theta 和 phi 都映射到 [0,1] 范围内,就像正常的纹理坐标一样。目前,片段着色器只考虑 phi。
如您所见,phi 似乎没有正确映射,因为梯度出现了两次,这意味着 phi 在 pi 旋转后被重置。
我在 VS 中计算 theta 和 phi,如下所示:
theta = acos(gl_Vertex.y/radius)/(pi);
phi = (atan(gl_Vertex.x/gl_Vertex.z)+pi)/(2*pi);
FS中的颜色很简单:
gl_FragData[0].rgb = vec3(phi, phi, phi);