这是一个简单的问题,我有些惭愧地要求帮助。照明不适用于gluSphere
我正在做一个简单的调用gluSphere渲染一个球体,但是,它不能正常点亮,即使我非常确定我正确添加了法线和光照。但是,如果我添加纹理,模型会正常点亮,除非它总是SMOOTH,并且我无法将其更改为平坦。
这是照明代码在我的init()函数:
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT , AMBIENT_LIGHT, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE , DIFFUSE_LIGHT, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_pos , 0);
gl.glEnable (GL.GL_LIGHT0);
gl.glEnable (GL.GL_LIGHTING);
这是我显示我的球代码()函数:
gl.glColor3d(1.0, 1.0, 1.0);
glu.gluQuadricDrawStyle (quad, GLU.GLU_FILL);
glu.gluQuadricNormals (quad, GLU.GLU_FLAT);
glu.gluQuadricOrientation(quad, GLU.GLU_OUTSIDE);
glu.gluSphere(quad, 1.0, lat, lon);
请指教。
编辑: 光值:
public final static float[] DIFFUSE_LIGHT = { 1.0f, 1.0f, 1.0f, 1.0f };
public final static float[] AMBIENT_LIGHT = { 0.3f, 0.3f, 0.3f, 1.0f };
public float[] light_pos = { -2.0f, 2.0f, 10.0f, 0.0f };
添加的材料,没有任何变化:
gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT , new float[]{0.5f, 0.5f, 0.5f, 1.0f}, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE , new float[]{1.0f, 1.0f, 1.0f, 1.0f}, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, new float[]{0.7f, 0.7f, 0.7f, 1.0f}, 0);
gl.glMaterialf (GL.GL_FRONT, GL.GL_SHININESS, 0.5f);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_EMISSION, new float[]{0.3f, 0.3f, 0.3f, 0.0f}, 0);
EDIT2:
布拉赫,我想我有一个:
gl.glEnable(GL.GL_TEXTURE_2D);
在某处活跃,并且如果没有与其关联的纹理,它会导致我的模型不具有阴影。 - 继续做好人,继续下去。
在这一点上,任何老照明,我所得到的只是一个黑球。 照明值如下,但是,我不确定是否会有所帮助。他们对于我用我自己的法线手动构建的任何形状都能很好地工作。也许我需要实现我自己的球形码。 已被添加到帖子因为评论没有自动格式。 – badcodenotreat 2010-04-15 17:25:39
对不起,我误解了你的函数调用。你传递的第四个参数是什么? – 2010-04-15 17:38:56
不知道,这是JOGL特有的参数。抵消? – badcodenotreat 2010-04-15 17:45:05