在opengl中为球体创建正确的纹理坐标

时间:2013-02-04 18:33:36

标签: opengl textures

我正在尝试渲染天空圆顶。球体是使用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);

problem image

2 个答案:

答案 0 :(得分:1)

没关系,我正在使用atan(float x),而不是atan(float x,float y),它本质上是atan2。

答案 1 :(得分:1)

如果要在使用gluSphere创建的球体上映射纹理,则无需生成球面坐标,您可以使用gluQuadricTexture在其上映射纹理。您可以看到示例程序here