Domanda

Ho lavorato su un motore di gioco per un mese, e ho finito le cose di base di OpenGL. Tuttavia, l'unica cosa che non posso andare al lavoro, come mi aspetto che è l'illuminazione. (Nota: Questa è la prima volta che ho seriamente lavorato con OpenGL)

Quello che voglio è una stretta a realistica simulazione di illuminazione - in cui le superfici affacciate della luce sono illuminati più di quelli più in là, ecc .. La luce di base dovrebbe avere una posizione e un colore. Questo è quanto ho pensato che potesse essere implementato:

float lightv[4]; // populated with (0.6, 0.6, 0.6, 1)
float positionv[4]; // populated with (0, 10, 0, 1)
int lightID = GL_LIGHT0;
int attenuationType = GL_LINEAR_ATTENUATION;
float attenuationValue = 1;
glLightf(lightID, attenuationType, attenuationValue);
glLightfv(lightID, GL_DIFFUSE, lightv);
glLightfv(lightID, GL_POSITION, positionv);
glEnable(lightID);

Invece di fare quello che mi aspetto che faccia, mi dà come illuminazione se ci fosse una luce in cui la fotocamera è! Ogni superficie ha la stessa illuminazione!

Che cosa sto facendo di sbagliato?

Grazie, lo apprezzo molto.

È stato utile?

Soluzione

La prima cosa da fare è assicurarsi di avere glEnable(GL_LIGHTING); chiamato ad un certo punto. Passato che, la prima cosa da controllare è che i normali siano corrette. Per l'illuminazione funzioni correttamente è necessario avere un set normale per ogni vertice si disegna. Se avete già impostato le vostre normali, è necessario assicurarsi che essi sono tutti di lunghezza unitaria. Se non hanno una lunghezza di uno, l'illuminazione può agire in modo strano. Se questo è tutto come dovrebbe essere, si dovrebbe tenere presente che quando si imposta la posizione di una luce, viene modificata dalla matrice Modelview corrente come se fosse un vertice. Se nessuna di queste cose sono rilevanti, vedrò se riesco a pensare a qualcosa di più.

Altri suggerimenti

Impostare la luce di posizione dopo si imposta il GL_MODELVIEW trasformazione, dal momento che è influenzato dalla corrente matrice di trasformazione. In caso contrario, si ottiene l'effetto di "faro" che avete scoperto.

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