2

これは単純な問題ですが、助けを求めるのは少し恥ずかしいです。

球体をレンダリングするために 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:

何とか、私は私が持っていると考えました:

gl.glEnable(GL.GL_TEXTURE_2D);

どこかでアクティブになっていて、テクスチャが関連付けられていない場合、モデルにシェーディングがありませんでした。-_- 善良な人々を続けてください、続けてください。

4

3 に答える 3

0
  1. ライトの位置に影響を与える可能性のある移動/回転はありますか?
  2. GL_COLOR_MATERIAL は有効ですか、無効ですか? マテリアル設定が上書きされる場合があります。
  3. コードで GL_TEXTURE_2D が有効になっていない場合でも、念のため、行に到達する直前に手動で無効にしてみてください。
  4. gluSphere を完全に無視したい場合は、このスレッドに使用できるコードがいくつかあります。
于 2010-05-02T08:36:30.183 に答える
0

どんな照明を期待していますか?glLightfv の 3 番目のパラメーターは、設定するライトの値であると想定されています。

于 2010-04-15T17:17:59.603 に答える