2016-05-26 3 views
-1

簡単な光で十二面体を回転しようとしています。矢印キーでオブジェクトを回転させたOpenGLライト

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5f); 
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.75f); 
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.4); 
GLfloat black[] = { 0, 0, 0, 1 }; 
GLfloat blue[] = { 0, 1, 1, 1 }; 
glLightfv(GL_LIGHT1, GL_AMBIENT, black); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, blue); 
glLightfv(GL_LIGHT1, GL_SPECULAR, blue); 
glEnable(GL_LIGHT1); 
glEnable(GL_LIGHTING); 

glTranslatef(0, 0, -50); 
glRotatef(angle, 0, 1.0, 0); 
glutSolidDodecahedron(); 

angle変更:

表示機能のコードはこれです。しかし、いくつかの角度のために、絵はこのような奇妙に見える:

enter image description here

、より回転した後、それは次のようになります。 enter image description here

後ろにいた顔が透明であるようです。何故ですか?このオブジェクトを正しく印刷するにはどうしたらいいですか?

答えて

0

編集:解決策は、glEnable(GL_CULL_FACE)を使用して裏面のカリングを有効にすることです。オブジェクトのポリゴンが正しい巻き線順序で定義されていることを確認し、オブジェクトの内部を見るつもりがない場合は背面のカリングが設定されていることを確認することができます(glCullFace(GL_BACK_FACE))。


オリジナルの答え:

光が物体の反対側に触れていないし、あなたの周囲の照明を黒に設定されています:

GLfloat black[] = { 0, 0, 0, 1 }; 
glLightfv(GL_LIGHT1, GL_AMBIENT, black); 

はにあなたの環境光を設定してみてください

GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; 
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); 
:おおよそ global illuminationの周辺光の寄与を近似する濃い灰色
+0

それでも同じように見えます...なぜオブジェクトの背面が前面に黒く表示されますか?私は黒い顔をまったく見る必要はありません。私はオブジェクトと私の後ろの光をまっすぐに見ています... – nrofis

+0

あなたの明確な色は何ですか?また、裏面のカリングが有効になっていますか?これが当てはまる場合、おそらくオブジェクトのポリゴンは、前面を外面の代わりに内面として定義する巻き線順序を持っています。多分 'glDisable(GL_CULL_FACE);'を試してみてください。 –

+0

ええと、私は背面のカリングを有効にするのを忘れてしまったようです...「glEnable(GL_CULL_FACE)」を追加した後、うまく動作します。ありがとうございました! – nrofis

関連する問題