你好我一直试图找出有关如何从球体顶部到底部添加渐变的信息。是否有可能或者我必须对球体进行纹理化?
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();
答案 0 :(得分:0)
当然,这是可能的。使用GLU球体时要比使用球体生成自己的坐标和属性要复杂一些,因为您需要使用GLU球体提供的内容。
您可以将灯光定位在球体的北极,然后调整漫反射材料属性。这将在北极提供最大颜色,赤道逐渐(基于余弦的)渐变,然后从赤道到南极变暗。两极之间的梯度不平滑,但您没有指定它需要是一个恒定的梯度。
另一种方法是使用纹理映射。特别是,如果你想要一个恒定的梯度(即从北极到南极的等级渐变),这可能是使用没有着色器的GLU球体时实现这一目标的唯一方法。这里的解决方案是使用基于“垂直”(即 t )纹理坐标的一维纹理映射(例如,如果 s 纹理坐标用于纬度方向, t 坐标是经度)。只需在一维纹理中指定渐变。
当然,如果你正在使用着色器,那么使用顶点着色器指定一个方便在片段着色器中进行这种着色的参数几乎是微不足道的。