3

我在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

4

1 回答 1

-3

对不起,我自己解决了这个问题。我忘了规范化一些向量。

于 2011-12-08T20:10:37.560 回答