Aiuto della proprietà materiale in Open GL usando Glut & C ++
Domanda
Per la porzione di illuminazione di un progetto OpenGL, sto facendo questa parte per il mio team al momento:
.Definisci proprietà materiali per i modelli in parte 1. Rendi facilmente le definizioni del materiale sostituibile. Nello specifico, i componenti del robot e il telecomando dovrebbero essere "lucenti"; Le pile di macerie dovrebbero disinnescare se varie sfumature di colore; Le piastrelle della piattaforma principale dovrebbero essere diffuse grigio. Seleziona le tue proprietà del materiale e documenta correttamente per i blocchi, le basi, le fabbriche, ecc.
Ho solo cercato di applicare l'effetto "lucido" sull'unità di controllo e non ha funzionato bene. Ho provato a mettere in qualche campione di illuminazione poiché non abbiamo ancora inserito (o almeno non è nel repository) per testerlo. Il risultato è che le porzioni del cubo del controller riflettono (anche se troppo bianche, non importa quello che ho provato, il colore dei cubi è grigio) ma non l'antenna del cilindro. (Nessuno di questi test è nel repository poiché non potevo commettere qualcosa che non funzionerà.)
Fondamentalmente ho bisogno di aiuto con le proprietà dei materiali e impostare un po 'di illuminazione di base per testarle (l'illuminazione del test è temporanea poiché uno dei miei compagni di squadra sta lavorando all'illuminazione).
apprezzerei davvero se qualcuno potesse aiutarmi a fare questa parte.
Informazioni sul progetto:
.
- Repository per il nostro progetto (un progetto Visual Studio 2010)
- La mappa / griglia si trova lungo il piano XZ con Y essere l'altezza
- Tutto è fatto usando GLCUBES o forme di glut in modo che non ci siano delle normali devono essere definite per quelle, solo alcune delle tessere e i numeri 4 ovunque vengono fatti usando GL_QuaDS
Se ho perso qualcosa o se hai bisogno di maggiori informazioni per favore chiedi!
Soluzione
Ti aiuterò con le basi su Lightning in OpenGL ... Per prima cosa devi abilitare e impostare le luci, quindi, qui è un esempio:
void setlight(){
//here you set the lights and parameters, example with one light
float LightAmbient[] = { 0.1f, 0.1f, 0.05f, 1.0f };
float LightEmission[] = { 1.0f, 1.0f, 0.8f, 1.0f };
float LightDiffuse[] = { 1.0f, 1.0f, 0.8f, 1.0f };
float LightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float LightDirection[]={-0.5f, -0.5f, -0.5f};
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
glLightfv(GL_LIGHT0, GL_POSITION, LightDirection);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
void setmaterial(){
//here you set materials, you must declare each one of the colors global or locally like this:
float MatAmbient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
float MatDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float MatSpecular[] = { 0.1f, 0.1f, 0.0f, 0.1f };
float MatShininess = 60;
float black[] = {0.0f,0.0f,0.0f,1.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MatAmbient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MatDiffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, MatSpecular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, MatShininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
}
void render(){
//your render function
//clean buffers, set viewport, projection, lookat, etc...
. . .
//set light and materials
setlight();
setmaterial();
//draw your stuff
. . .
glutSwapBuffers();
}
.
Ora, se è necessario impostare diversi materiali per oggetti differenti da disegnare devi impostare i materiali per ciascun oggetto prima di disegnarli ... Esempio:
for(int i=0; i<num_objetcs; i++){
setmaterial(i);
drawobject(i);
}
.
Certo, devi modificare ciò che ho scritto prima ... devi solo impostare la luce e poi per ogni oggetto hai impostato il loro materiale e poi disegna, uno per uno.È necessario modificare la funzione "setmateriale" per prendere il parametro materiale e suppongo che tu sappia cosa fare per il resto ... Buona fortuna!