我正在尝试渲染天空圆顶。球体是使用gluSphere创建的,在顶点着色器中,我从每个顶点提取球面坐标。然后,我将球体坐标theta和phi映射到范围[0,1],就像普通纹理坐标一样。目前,片段着色器仅考虑phi。
正如你所看到的,phi似乎没有被正确映射,因为渐变出现了两次,暗示在pi旋转之后phi被重置。
我像这样计算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);
答案 0 :(得分:1)
没关系,我正在使用atan(float x),而不是atan(float x,float y),它本质上是atan2。
答案 1 :(得分:1)
如果要在使用gluSphere创建的球体上映射纹理,则无需生成球面坐标,您可以使用gluQuadricTexture在其上映射纹理。您可以看到示例程序here。