Ich habe ein Problem mit der Position des Lichts in Opengl.
Ich ändere die Position des Lichts, aber die Lichtquelle befindet sich immer in der Mitte.
Das ist ein Code, den ich habe...
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]);
Ein Punkt hat einen float3 und einen Normalenvektor. Ein Dreieck hat 3 Punkte. cam0 ist x. Nocke1 ist y. Nocke2 ist z.
Ich habe eine Lösung mit meinen eigenen Berechnungen (mit dot prodtuct und glColor3f) Aber ich möchte OpenGL-Funktionen verwenden. Hier ist das Ergebnis mit meiner Lösung: