|
|
|
|
Strumenti |
04-12-2017, 16:48 | #1 |
Junior Member
Iscritto dal: May 2015
Messaggi: 27
|
[C - openGL]
Salve, sto sviluppando un semplice gioco 3d su linux.
Con le opengl e' la mia prima esperienza, purtroppo online ho trovato poco materiale che mi chiarisse le idee. La mappa di gioco viene creata dinamicamente usando l'algoritmo di diamond square, e viene salvata nell'array di vertici (triangoli) di struttura: Codice:
typedef struct{ Vec3 point; (x,y,z) Color3 color; (r,g,b) Vec3 n; (x,y,z) }Vertex; la mappa viene quindi renderizzata con: Codice:
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, position); glEnable(GL_COLOR_MATERIAL); glBindBuffer(GL_ARRAY_BUFFER,vbo); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3,GL_FLOAT,sizeof(Vertex),0); glColorPointer(3,GL_FLOAT,sizeof(Vertex),(void*)12); glNormalPointer(GL_FLOAT,sizeof(Vertex),(void*)24); glDrawArrays(GL_TRIANGLES,0,(int)(pow(size,2)*3*2)); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glBindBuffer(GL_ARRAY_BUFFER,0); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHT0); glDisable(GL_LIGHTING); https://drive.google.com/file/d/1yY4...ew?usp=sharing Ho controllato e mi pare che le normali siano giuste.. Una possibile soluzione sarebbe quella di falsare leggermente le normali in modo da avere superfici meno scure, ma non credo sia il giusto modo di procedere. Cosa mi suggerite ? codice sorgente: https://drive.google.com/file/d/1QsX...ew?usp=sharing Ultima modifica di valakas92 : 04-12-2017 alle 16:51. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:26.