OpenGL-lichtpositie

Ik heb een probleem met de positie van licht in opengl.

Ik verander de positie van het licht, maar de lichtbron staat altijd in het midden.

i.stack.imgur.com/uXZR8.png

dit is een code die ik heb ...

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]);

Een punt heeft een float3 en een normale vector. Een driehoek heeft 3 punten. cam0 is x. cam1 is y. cam2 is z.

I made a solution with my own calculations (with dot prodtuct and glColor3f) But I want to use OpenGL functions. Here is the result with my solution: http://i.stack.imgur.com/4aVFS.png

3
Is het een juiste verwijzing naar array [0..3] van GLFloat?
toegevoegd de auteur Kromster, de bron
Hoe wordt speler-> light_pos berekend?
toegevoegd de auteur bernie, de bron
Waarom gebruik je je eigen oplossing niet als het werkt? Opengl zou alleen moeten worden gebruikt om dingen op het scherm weer te geven. Eventuele berekeningen moeten idealiter zelf worden gedaan en de resultaten van de berekeningen worden doorgegeven aan opengl.
toegevoegd de auteur NickLH, de bron

1 antwoord

Sorry dat ik het probleem zelf heb opgelost.  Ik ben vergeten enkele vectoren te normaliseren.

3
toegevoegd
-1 voor het niet plaatsen van de oplossing, zodat anderen kunnen leren van uw fouten.
toegevoegd de auteur ja72, de bron