Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 照明不适用于gluSphere_Opengl_Graphics_Jogl - Fatal编程技术网

Opengl 照明不适用于gluSphere

Opengl 照明不适用于gluSphere,opengl,graphics,jogl,Opengl,Graphics,Jogl,这是一个简单的问题,我有点不好意思寻求帮助 我对gluSphere进行了一个简单的调用来渲染一个球体,但是,尽管我非常确定我正确地添加了法线和照明,但它并没有正确地照明。但是,如果我添加纹理,模型会正常发光,只是看起来总是平滑的,而且我无法将其更改为“平面” 这是my init()函数中的照明代码: gl.glLightfv( GL.GL_LIGHT0, GL.GL_AMBIENT , AMBIENT_LIGHT, 0 ); gl.glLightfv( GL.GL_LIGHT0, GL.GL_D

这是一个简单的问题,我有点不好意思寻求帮助

我对gluSphere进行了一个简单的调用来渲染一个球体,但是,尽管我非常确定我正确地添加了法线和照明,但它并没有正确地照明。但是,如果我添加纹理,模型会正常发光,只是看起来总是平滑的,而且我无法将其更改为“平面”

这是my 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);
这是我的display()函数中的球体代码:

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);
编辑2:

废话,我想我有一个:

gl.glEnable(GL.GL_TEXTURE_2D);

某个地方处于活动状态,如果没有与之相关的纹理,则会导致我的模型没有着色。-\u-好人,加油。

你期待什么样的照明?glLightfv的第三个参数应该是正在设置的灯光的值

  • 是否有可能影响灯光位置的平移/旋转
  • GL_颜色_材质是否启用或禁用?如果是,它可能会覆盖材质设置
  • 即使您的代码没有启用GL_TEXTURE_2D,您也应该尝试在到达行之前手动禁用它,以防万一
  • 如果您希望完全忽略gluSphere,可以使用一些代码

  • 我也遇到了照明问题,并发现我需要添加
    glEnable(GL_NORMALIZE)

    在这一点上,任何旧的照明,我得到的都是一个黑球。照明值如下所示,但是,我不确定它是否有帮助。对于我用自己的法线手动构造的任何形状,它们都能很好地工作。也许我需要实现我自己的球体代码。添加到帖子,因为评论不会自动格式化。对不起,我误读了你的函数调用。你要传递的第四个参数是什么?