一千萬個為什麽

搜索

照明不適用於gluSphere

這是一個簡單的問題,我有點羞於尋求幫助。

我正在簡單地調用gluSphere來渲染一個球體,但是,即使我非常確定我正確地添加了法線和光照,它也不會正確點亮。但是,如果我添加一個紋理,模型會正常點亮,除了它似乎總是光滑的,我無法將其更改為平面。

這是我的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 );

這是我的display()函數中的球體代碼:

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:

Blah,我想我有一個:

gl.glEnable(GL.GL_TEXTURE_2D);

在某處活動,如果沒有與之關聯的紋理,它會導致我的模型沒有陰影。 -_-繼續做好人,繼續。

最佳答案

我也遇到了照明問題,並且發現我需要添加 glEnable(GL_NORMALIZE)

轉載註明原文: 照明不適用於gluSphere