2011-12-07 48 views
3

我在opengl中的光位置有問題。OpenGL光源位置

我改變光的位置,而且所述光源始終處於中心。

i.stack.imgur.com/uXZR8.png

這是一些代碼,我有...

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT1); 
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); 
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); 

...

glMatrixMode(GL_MODELVIEW); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 



look[0] = player->dir[0] + player->cam[0]; 
look[1] = player->dir[1] + player->cam[1]; 
look[2] = player->dir[2] + player->cam[2]; 

normalize_vector(player->dir); 
glNormal3f(player->dir[0],player->dir[1],player->dir[2]); 
gluLookAt(player->cam[0],player->cam[1],player->cam[2], 
look[0],look[1],look[2],0, 0, 1); 

glLightfv(GL_LIGHT1, GL_POSITION, player->light_pos); 

...

void glNormalVec(float * vec){ 
glNormal3f(vec[0],vec[1],vec[2]); 
} 
void glVertexPoint(POINT * p){ 
glVertex3f (p->p[0],p->p[1],p->p[2]); 
} 

...

glNormalVec(tri->point[0]->p); 
glTexCoord2f(0.0f, 1.0f); glVertexPoint(tri->point[0]); 
glNormalVec(tri->point[1]->p); 
glTexCoord2f(1.0f, 1.0f); glVertexPoint(tri->point[1]); 
glNormalVec(tri->point[2]->p); 
glTexCoord2f(1.0f, 0.0f); glVertexPoint(tri->point[2]); 

甲點具有FLOAT3和法向矢量。 三角形有3點。 cam0是x。 cam1是y。 cam2是z。

我用自己的計算做了一個解決方案(帶點產品和glColor3f) 但我想使用OpenGL函數。 這裏是我的解決方案的結果是:http://i.stack.imgur.com/4aVFS.png

+0

player-> light_pos如何計算? – bernie

+0

它是GLFloat數組[0..3]的正確指針嗎? – Kromster

+0

爲什麼不使用自己的解決方案? Opengl只能用於在屏幕上顯示內容。理想情況下應該自己完成任何計算,並將計算結果傳遞給opengl。 – NickLH

回答

-3

對不起,我來解決自己的問題。 我忘了規範化一些載體。

+10

-1沒有發佈解決方案,所以其他人可以從你的錯誤中學習。 – ja72