2017-04-14 8 views
-1

私のOpenGLプロジェクトでは、光が天井の光のように-z軸を下に向けて光っていますが、これは大きなクワッドです。原点での主光に続くゴースト光

私は現在、光の周囲に光を当てる立方体を持っていますので、常に光がどこにあるのかを正確に見ることができます。

私の問題は、メインライトに続く別の明るいスポットライトがあることです。これは、原点またはフロアの左下隅から始まります。

この白いライトは、何が原因かわからないため、削除する方法を削除したいと思います。

私は変数のいくつかを試してみて、その影響を見ようとしましたが、ほとんど成功しませんでした。

ご協力いただければ幸いです。

エラー:

The error

//ceiling light 
GLfloat Light_Ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
GLfloat Light_Diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
GLfloat Light_Position[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 
GLfloat Spot_Direction[] = { 0.0f, 0.0f, -1.0f }; 

//ambient 
GLfloat Light_Ambient1[] = { 0.4f, 0.4f, 0.4f, 1.0f }; 
GLfloat Light_Diffuse1[] = { 1.0f, 1.0f, 1.0f, 0.0f }; 
GLfloat Light_Position1[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 

//ceiling light 
glLightfv(GL_LIGHT0, GL_AMBIENT, Light_Ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, Light_Diffuse); 
glLightfv(GL_LIGHT0, GL_POSITION, Light_Position); 
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 55); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, Spot_Direction); 
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 5); 
glEnable(GL_LIGHT0); 

//ambient 
glLightfv(GL_LIGHT1, GL_AMBIENT, Light_Ambient1); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, Light_Diffuse1); 
glLightfv(GL_LIGHT1, GL_POSITION, Light_Position1); 
glEnable(GL_LIGHT1); 
+0

どういう意味ですか? – StrayProg

+0

ああ、申し訳ありません、私は今それを追加します – StrayProg

+1

@ chbchb55ちょっと画像がない画像関連の問題を表示するのは難しいですか? – Vallentin

答えて

0

私は周りにいくつかのことを変更し、私はそれを解決しているように見えます。

//ceiling light 
GLfloat Light_Ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
GLfloat Light_Diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
GLfloat Light_Position[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 
GLfloat Spot_Direction[] = { 0.0f, 0.0f, -1.0f }; 

//ambient 
GLfloat Light_Ambient1[] = { 0.6f, 0.6f, 0.6f, 1.0f }; 
GLfloat Light_Diffuse1[] = { 1.0f, 1.0f, 1.0f, 0.0f }; 
GLfloat Light_Position1[] = { 0, 0, 0, 0.0f }; 

//ceiling light 
glLightfv(GL_LIGHT0, GL_AMBIENT, Light_Ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, Light_Diffuse); 
glLightfv(GL_LIGHT0, GL_POSITION, Light_Position); 
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 55); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, Spot_Direction); 
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 20); 
glEnable(GL_LIGHT0); 

//ambient 
glLightfv(GL_LIGHT1, GL_AMBIENT, Light_Ambient1); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, Light_Diffuse1); 
glLightfv(GL_LIGHT1, GL_POSITION, Light_Position1); 
glEnable(GL_LIGHT1); 

UPDATE:

私はこの答えはライトでOpenGLと多くの人々と、この混乱を助けるかもしれないと感じているという理由だけで、後に、この数ヶ月の編集に戻っています。

あなたのライトが壊れている場合(私の場合のように)、実際にはあなたのライトには何も問題はありませんが、どのように世界をレンダリングしているのでしょうか。これは、そのOpenGLが少しこのようになります覚えておく価値がある:あなたが私の最初の質問から見ることができるように私は実際には、ZはYとYがあったことを私は確信していた、間違って何をやっていた

https://imgur.com/a/saYxy

Z、そしてその逆の場合、これは私のライティング計算をすべて破ったものです。あなたのライトが私のように見える場合、あなたの軸を混乱させる可能性があります.2dから3DのOpenGLに移動するときにこれを行うのは難しくありません。

+0

コードで以前のバージョンにロールバックして、新しい編集をアップデートに追加しました。言及したように、答えのコードは将来誰かを助けるかもしれません。コードが回答に価値を追加しないと思う場合は、テキストだけのバージョンにロールバックしてください。 – adiga

関連する問題