2017-04-14 54 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看起來有點像這樣:

https://imgur.com/a/saYxy

其實我在做什麼錯了,因爲你可以從我最初的問題看,我確信,在Z是Y和Y爲Z,反之亦然,這打破了我當時的所有照明計算。如果你的燈看起來和我的一樣,那麼你很可能會混淆你的座標軸,當從2d移動到3D opengl時,這並不難。

+0

我已使用代碼回滾到以前的版本,並在更新中添加了新的編輯。正如你所提到的,答案中的代碼可能會在未來幫助某人。如果您認爲代碼對答案沒有任何價值,請僅使用文本回滾到該版本。 – adiga