2011-12-07 2 views
3

OpenGL에서 빛의 위치에 문제가 있습니다.OpenGL Light Position

빛의 위치는 바뀌지 만 광원은 항상 중앙에 있습니다.

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입니다.

나는 내 자신의 계산으로 솔루션을 만들었다. (도트 prodtuct와 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