Domanda

Vorrei attirare edifici nel mio mondo di gioco, i loro ombra con il seguente codice:

GLfloat light_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat light_position[] = {135.66f, 129.83f, 4.7f, 1.0f};

glShadeModel(GL_SMOOTH);

glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glColorMaterial(GL_FRONT, GL_AMBIENT);

E funziona bene.

Ma quando iniziare a volare in tutto il mondo, l'illuminazione reagisce a che, come se il mondo fosse un oggetto che viene ruotato. Così le luci cambia quando la mia macchina fotografica angolazione cambia.

Come faccio a Revert che la rotazione? così l'illuminazione potrebbe pensare che io non sono in realtà in rotazione il mondo, e poi ho potuto fare il mio edifici hanno shading statica che cambierebbe a seconda di dove il sole è nel cielo.

Edit: ecco il codice di rendering:

int DrawGLScene()
{

    // stuff

    glLoadIdentity();

    glRotatef(XROT, 1.0f, 0.0f, 0.0f);
    glRotatef(YROT, 0.0f, 1.0f, 0.0f);
    glRotatef(ZROT, 0.0f, 0.0f, 1.0f);

    glTranslatef(-XPOS, -YPOS, -ZPOS);

    // draw world
}
È stato utile?

Soluzione

http://www.opengl.org/resources/faq/technical /lights.htm

Vedere # 18,050

In breve, è necessario assicurarsi che si sta definendo la vostra luce di posizione nel sistema di riferimento a destra e applicando l'appropriata trasforma ogni fotogramma per tenerlo dove si desidera.

Altri suggerimenti

Credo che il problema nasce dal fatto che OpenGL luci sono specificati nel mondo coordinate, ma memorizzato internamente in Camera coordinate. Ciò significa che una volta che si inserisce una luce, ogni volta che si sposta la macchina fotografica, la tua luce si muoverà con esso.

Per risolvere questo problema, è sufficiente riposizionare le luci ogni volta che si sposta la macchina fotografica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top