Освещение не работает с gluSphere - PullRequest
2 голосов
/ 15 апреля 2010

Это простая проблема, о которой мне несколько стыдно просить о помощи.

Я делаю простой вызов 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);

Пожалуйста, сообщите.

EDIT: легкие значения:

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);

где-то активен, и это приводило к тому, что у моей модели не было затенения, если с ней не было связанной текстуры. -_- продолжай в том же духе, продолжай.

Ответы [ 3 ]

2 голосов
/ 29 марта 2014

Я тоже столкнулся с проблемой освещения и понял, что мне нужно добавить glEnable(GL_NORMALIZE).

0 голосов
/ 02 мая 2010
  1. Есть ли какие-либо переводы / повороты, которые вы делаете, которые могут повлиять на положение света?
  2. GL_COLOR_MATERIAL включен или отключен? Это может перезаписать ваши настройки материала, если это так.
  3. Даже если ваш код не включает GL_TEXTURE_2D, вы должны попытаться отключить его вручную непосредственно перед достижением строки, на всякий случай.
  4. Если вы хотите полностью игнорировать gluSphere, в этой ветке есть код, который вы можете использовать.
0 голосов
/ 15 апреля 2010

Какого освещения вы ожидаете? Предполагается, что третьим параметром glLightfv являются значения света, который вы устанавливаете.

...