1

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

问题图片

4

2 回答 2

1

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

于 2013-02-04T18:38:44.730 回答
1

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

于 2013-02-05T03:46:36.933 回答