PDA

View Full Version : [C - openGL]


valakas92
04-12-2017, 16:48
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:


typedef struct{
Vec3 point; (x,y,z)
Color3 color; (r,g,b)
Vec3 n; (x,y,z)
}Vertex;



la mappa viene quindi renderizzata con:



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



il problema consiste nelle eccessive oscurita' da parte di superfici leggermente scoscese

https://drive.google.com/file/d/1yY4zCrQkcizlMEGD1zMG5lgna_ha8BeZ/view?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/1QsXCtkIofgrEh0flHKMOty0pWB07imr4/view?usp=sharing