Glut - Objekt verschieben
-
Hallo zusammen,
ich habe mehrere Objekte gezeichnet und instanziiert. Diese befinden sich im Vektor "myVec". Nun will ich diese Objekte in der display Methode zeichnen. Die sollen nebeneinander gezeichnet werden. Ich habe es so versucht:
vector<IconDrawer*> myVec; void display ( void ) // Create The Display Function { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer glLoadIdentity(); // Reset The Current Modelview Matrix glPushMatrix(); glTranslatef(0.0f,0.0f,-5.0f); // Move Left 1.5 Units And Into The Screen 6.0 myCube.draw(); //Hauptschirm zeichnen glPopMatrix(); float n = -2.5f; for(int i=0; i<myVec.size();i++) { //cout << "Icon type: " << myVec.at(i)->getType() << endl; glLoadIdentity(); glTranslatef(1.0f ,0.0f , n); myVec.at(i)->draw(); n += 0.01f; } glutSwapBuffers(); // Swap The Buffers To Not Be Left With A Clear Screen } }IconDrawer.cpp:
IconDrawer::IconDrawer(char* i) { type = i; } char* IconDrawer::getType() { return type; } void IconDrawer::draw() { if(type == "FILE"){ glRotatef(_rtri, 1.0f,0.0f,0.0f); glColor3f(0.5f,0.5f,1.0f); // Setzt die Farbe auf Blau glBegin(GL_QUADS); // Fange an Quadrate zu zeichnen glVertex3f(-0.1f, 0.1f, -0.0f); // links und eine Einheit nach oben (oben links) glVertex3f( 0.1f, 0.1f, -0.0f); // rechts und eine Einheit nach oben (oben rechts) glVertex3f( 0.1f,-0.1f, -0.0f); // rechts und eine Einheit runter (unten rechts) glVertex3f(-0.1f,-0.1f, -0.0f); // links und eine Einheit nach unten (unten links) glEnd(); } if(type == "DIRECTORY"){ glRotatef(_rtri, 1.0f,0.0f,0.0f); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_QUADS); // Fange an Quadrate zu zeichnen glVertex3f(-0.1f, 0.1f, -0.0f); // links und eine Einheit nach oben (oben links) glVertex3f( 0.1f, 0.1f, -0.0f); // rechts und eine Einheit nach oben (oben rechts) glVertex3f( 0.1f,-0.1f, -0.0f); // rechts und eine Einheit runter (unten rechts) glVertex3f(-0.1f,-0.1f, -0.0f); // links und eine Einheit nach unten (unten links) glEnd(); } }Jedoch sehe ich nur 2 Icons, obwohl in der Liste viel mehr stehen. Woran liegt es?
gruß
Alex
-
weil Du statt type=="FILE" zb strcmp verwenden solltest.
-
Wo wird denn fetsgelegt, welchen Wert TYPE hat?
-
nein daran liegt es nicht, es gibt rote und blaue würfel, wenn ich
float n = -2.5f; for(int i=0; i<myVec.size();i++) { //cout << "Icon type: " << myVec.at(i)->getType() << endl; glPushMatrix(); glLoadIdentity(); glTranslatef(1.0f ,0,n); myVec.at(i)->draw(); n += 0.01f; glPopMatrix(); }mache. Irgendwas stimmt nur mit der Positionierung nicht, wenn ich den x Wert verändere
-
also bei 1.0 gehts oder wie?
Weil n ist ja an der Stelle von z.
Hast du vielleicht mal nen Screenshot?
-
Ja,
so siehts bei glTranslatef(n ,0,1.0f); aus:
www.captured-dreams.de/temp/2.jpg
und so bei glTranslatef(1.0f ,0, n);
-
n = -2,5?
Schonmal mit n=2,5 versucht? Weil minus heißt ja bei z, dass du es sozusagen aus in Richtung aus dem Bildschirm raus verschiebst.
-
Powerpaule schrieb:
n = -2,5?
Schonmal mit n=2,5 versucht? Weil minus heißt ja bei z, dass du es sozusagen aus in Richtung aus dem Bildschirm raus verschiebst.Nein! Die Kamera schaut in OpenGL standardmäßig entlang der negativen Z-Achse.
-
David_pb schrieb:
Nein! Die Kamera schaut in OpenGL standardmäßig entlang der negativen Z-Achse.
Stimmt, hab ich was verdreht...
aber wird wohl trotzdem daran liegen: glTranslatef(n ,0,1.0f);
-> z > 0, also hinter der Kamera
-
Stimmt, daran lag es! Vielen Dank!
Aber jetzt stellt sich eine neue Frage:
Ich habe mehrere Objekte auf dem Schirm (diese Würfel).Wie kann man jetzt, nachdem alle gezeichnet sind, nur einen einzelnen verschieben?
Rotieren klappt per glRotatef(rtri2, 1.0f,0.0f,0.0f); , aber das Verschieben halt nicht. Jemand eine Idee?
-
Du musst dir für diesen Würfel die Translation eben extra merken.
-
Jop hat auch geklappt.
Nochmals danke