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!

È stato utile?

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!

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