2009-04-13 11 views
3

Ich versuche, einen verchromten Würfel in GLUT/OpenGL zu machen, und ich bin nicht sicher, wie es genau geht.Erstellen Sie einen Chrome-Cube in OpenGL/Glut?

Ich suchte in einem Lehrbuch nach einer "Materialtabelle", die "Chrome" als Umgebung: (0,25, 0,25, 0,25), Diffuse: (0,4, 0,4, 0,4) und Specular: (0,774597, 0,774597,0,774597).

Meine Frage ist, wie erstelle ich einen einfachen Cube und verwende dieses Material/Textur in Glut/OpenGL?

Verwenden Sie "glutSolidCube()"? Wenn ja, wie wende ich dann die Chromtextur an?

Können mir GLUT/OpenGL Leute in die richtige Richtung zeigen?

Antwort

5

Dies sollte so einfach sein wie glMaterialfv() vor glutSolidCube() aufrufen.

Ich habe nicht OpenGL seit der Schule getan, aber hier einige Loop-Code-Anzeige aus einem alten Projekt, das eine Kugel verwendet, die Sie auf dem richtigen Weg bekommen sollten:

_Ambient[CHROME][0] = 0.25f; 
_Ambient[CHROME][1] = 0.25f; 
_Ambient[CHROME][2] = 0.25f; 
_Ambient[CHROME][3] = 1.0f; 
_Diffuse[CHROME][0] = 0.4f; 
_Diffuse[CHROME][1] = 0.4f; 
_Diffuse[CHROME][2] = 0.4f; 
_Diffuse[CHROME][3] = 1.0f; 
_Specular[CHROME][0] = 0.774597f; 
_Specular[CHROME][1] = 0.774597f; 
_Specular[CHROME][2] = 0.774597f; 
_Specular[CHROME][3] = 1.0f; 
_Shininess[CHROME] = 76.8f; 


void Display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glPushMatrix(); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, _Ambient[CHROME]); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, _Diffuse[CHROME]); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, _Specular[CHROME]); 
    glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, _Shininess[CHROME]); 
    // Translations... 
    glutSolidSphere(_Radius, _Slices, _Stacks); 
    glPopMatrix(); 

    glFlush(); 

    glutSwapBuffers(); 
} 
+0

Danke, dass ich dieses Projekt wieder öffnen durfte, ich schrieb einen ordentlichen Code (na ja, meiner Meinung nach), den ich vergessen hatte! –

2

Haben Sie bei Umgebungs-Mapping geschaut? Sie möchten, dass Ihr Objekt Licht von anderen Objekten in der Umgebung reflektiert. Sie wenden also grundsätzlich eine Textur an, die wie die Umgebung aussieht und Texturkoordinaten basierend auf Normalen generiert. Dies verleiht der Oberfläche eine gespiegelte Erscheinung. Sie können OpenGL automatisch Texturkoordinaten für jeden Stützpunkt basierend auf glTexGen generieren lassen.

NeHe tutorial 23 deckt dies mit Sphere-Mapping ab. Sie können auch Ihre eigenen Texturkoordinaten per Vertex oder pro Pixel mit GLSL erzeugen. Here's a tutorial darauf.