[opengl][glut]Skybox und Mesh
-
hi, ich suche schon seit etwa einer woche überall rum,
finde aber keine lösung dafür, wie ich mit glut eine skybox machen kann und wie ich ein model, dass ich mit blender erstellt habe importieren kann.
auch im redbook habe ich nichts dergleichen gefunden.Kann mir da wer ein Howto schicken oder so etwas? danke!
-
um eine skybox zu rendern schaltest du den z-buffer aus und zeichnest einen würfel mit passender textur um deine szene.
um ein passendes model zu laden schaust du dir einfach das format deiner wahl an und implementierst den loader dementsprechend.
-
Servus,
ich kenn mich mit glut zwar net aus, glaube aber zu wissen, dass die Bibliothek keine Funktionen zur Verfügung stellt, Modelle zu laden(ist ja auch nicht besonders schwer).
Was für eine Modelldatei hast du denn?
-
Nuja ich denke mal .obj dateien, irgendwas was blender exportieren kann eben XD
mein problem dabei is dass ich recht neu dabei bin glut zu programmieren
und deshalb auch keine ahnung hab, wie ich von einem haufen vertices die normalenvektoren berechnen soll...
-
-
ok vielen dank ich beschäftig mich jetzt erstmal mit der automatisierten normalenvektorberechnung...
-
Und da kommt offenbar ein großen problem auf mich zu.
Muss ich für jeden Punkt einen Normalenvektor berechnen?
oder für jedes Dreieck?
Wie funktioniert das Genau?ich habe es folgendermaßen versucht:
für jedes Dreieck einen Normalenvektor berechnet:
vektor1-vektor2 X vektor2-vektor3
dann beim malen:
glBegin(GL_TRIANGLES); int j=0; for(int i=0;j<numNormalVertices;i+=3){ glNormal3fv(normalVertices[j].getGLfloatArray()); glVertex3f(vertices[i].getX(), vertices[i].getY(), vertices[i].getZ()); glVertex3f(vertices[i+1].getX(),vertices[i+1].getY(), vertices[i+1].getZ()); glVertex3f(vertices[i+2].getX(),vertices[i+2].getY(), vertices[i+2].getZ()); j++; } glEnd();vertices ist ein Array von Vektoren (eigene Klasse für Vektoren)
normalVertices ebenso. Hierdrin stehen die jeweils für die folgenden 3 Vektoren berechneten Normalenvektoren.so funktionierts auf jeden fall nicht....

kann mir das mal jemand so erklären dass ichs versteh?
^^was dabei rauskommt:
der Würfel den ich so erstellt habe, leuchtet entweder komplett oder gar nicht, aber nie so wie es gehört...
Danke für eure Hilfe !
-
für flat shading brauchst du nur eine normale pro dreieck, für gouraud(smooth) shading eine normale pro punkt.
falls die eckpunkte der dreiecke keine einheitlich reihenfolge haben, dann zeigt nach deiner rechnung einmal die normale in die eine richtung (fläche beleuchtet) und einmal in die andere (fläche schwarz).
-
was verstehst du unter derselben reihenfolge?
im uhrzeigersinn oder wie?
aber warum leuchtet dann alles auch des was nicht leuchten sollte?
EDIT:
ich poste mal die koordinaten der Dreiecke, vielleicht liegt da ja tatsächlich der fehler:
ObjektVektor vertices[30]; //Vorderseite des Würfels vertices[0] =ObjektVektor(-1.0, -1.0, -1.0 ); vertices[1] =ObjektVektor(1.0, -1.0, -1.0 ); vertices[2] =ObjektVektor(1.0, 1.0, -1.0 ); vertices[3] =ObjektVektor(1.0, 1.0, -1.0 ); vertices[4] =ObjektVektor(-1.0, 1.0, -1.0 ); vertices[5] =ObjektVektor(-1.0, -1.0, -1.0 ); //Unterseite des Würfels vertices[6] =ObjektVektor(-1.0, -1.0, -1.0 ); vertices[7] =ObjektVektor(-1.0, -1.0, 1.0 ); vertices[8] =ObjektVektor(1.0, -1.0, 1.0 ); vertices[9] =ObjektVektor(1.0, -1.0, 1.0 ); vertices[10]=ObjektVektor(1.0, -1.0, -1.0 ); vertices[11]=ObjektVektor(-1.0, -1.0, -1.0 ); //Oberseite des Würfels vertices[6] =ObjektVektor(-1.0, 1.0, -1.0 ); vertices[7] =ObjektVektor(-1.0, 1.0, 1.0 ); vertices[8] =ObjektVektor(1.0, 1.0, 1.0 ); vertices[9] =ObjektVektor(1.0, 1.0, 1.0 ); vertices[10]=ObjektVektor(1.0, 1.0, -1.0 ); vertices[11]=ObjektVektor(-1.0, 1.0, -1.0 ); //Rückseite des Würfels vertices[12]=ObjektVektor(-1.0, -1.0, 1.0 ); vertices[13]=ObjektVektor(1.0, -1.0, 1.0 ); vertices[14]=ObjektVektor(1.0, 1.0, 1.0 ); vertices[15]=ObjektVektor(1.0, 1.0, 1.0 ); vertices[16]=ObjektVektor(-1.0, 1.0, 1.0 ); vertices[17]=ObjektVektor(-1.0, -1.0, 1.0 ); //Linke Seite des Würfels vertices[18]=ObjektVektor(-1.0, -1.0, -1.0 ); vertices[19]=ObjektVektor(-1.0, -1.0, 1.0 ); vertices[20]=ObjektVektor(-1.0, 1.0, 1.0 ); vertices[21]=ObjektVektor(-1.0, 1.0, 1.0 ); vertices[22]=ObjektVektor(-1.0, 1.0, -1.0 ); vertices[23]=ObjektVektor(-1.0, -1.0, -1.0 ); //Rechte Seite des Würfels vertices[24]=ObjektVektor(1.0, -1.0, -1.0 ); vertices[25]=ObjektVektor(1.0, -1.0, 1.0 ); vertices[26]=ObjektVektor(1.0, 1.0, 1.0 ); vertices[27]=ObjektVektor(1.0, 1.0, 1.0 ); vertices[28]=ObjektVektor(1.0, 1.0, -1.0 ); vertices[29]=ObjektVektor(1.0, -1.0, -1.0 );
-
ich glaube ich habe das problem entdeckt.
und wiedereinmal ist es ein problem mit arrays

EDIT:siehe hier

http://www.c-plusplus.net/forum/viewtopic-var-t-is-176281.html