0

Hello I've been trying to find out information on how i can add a gradient from the top of the sphere to the bottom. Is it possible or do i have to texture the sphere?

    Sphere sphere = new Sphere();
    sphere.setOrientation(GLU.GLU_OUTSIDE);
    GL11.glPushMatrix();
    GL11.glColor3d(0.0D, 0.0D, 1.0D);
    sphere.draw(16.0f, 200, 16);
    GL11.glColor3d(1.0D, 1.0D, 1.0D);
    GL11.glPopMatrix();
4

1 回答 1

0

当然,这是可能的。与为球体生成自己的坐标和属性相比,使用 GLU 球体时要复杂一些,因为您需要使用 GLU 球体提供的功能。

您可以将灯光定位在球体的北极,然后调整漫反射材质属性。这将在北极提供最大的颜色,向赤道渐变(基于余弦),然后从赤道到南极变暗。两极之间的渐变不会是平滑的,但您没有指定它需要是恒定的渐变。

另一种方法是使用纹理映射。特别是,如果您想要一个恒定的梯度(即,从北极到南极的梯度相等),这可能是在使用没有着色器的 GLU 球体时实现此目的的唯一方法。这里的解决方案是使用基于“垂直”(即t)纹理坐标的一维纹理映射(例如,如果s纹理坐标用于纬度方向,而t坐标用于经度)。只需在一维纹理中指定渐变。

当然,如果你正在使用着色器,那么使用顶点着色器指定一个便于在片段着色器中进行这种着色的参数几乎是微不足道的。

于 2013-06-05T03:53:35.640 回答