Harry
- Forum-Beiträge: 52
22.07.2011, 11:34:22 via Website
22.07.2011 11:34:22 via Website
Hallo OpenGL-Spezialisten,
ich arbeite gerade an einer OpenGL-Anwendung, bei der ich Bilder im Kreis anordne, die nach vorne ausgerichtet sind.
Der Kreis ist 10° um die x-Achse geneigt. Der Kreis kann um die zentral gelegende y-Achse gedreht werden.
Der Code:
Problem:
Ich möchte nun alle Bilder zum vordersten Bild verschieben. Darum ändere ich die Koordinaten in den Cover objecten mit folgenden Formeln:
Xneu = Xalt + (Xziel - Xalt) * verschiebung; // verschiebung = der grad der verschiebung (0.0 (keine verschiebung) - 1.0 (ziel erreicht))
Y = 0; (ist immer 0)
Zneu = Zalt + (Zziel - Zalt) * verschiebung;
Dies funktioniert jedoch nur so halbwegs in einer Rotations-Position. In allen anderen Positionen fliegen die Bilder wild durch die Gegend.
Was mache ich falsch? Muss ich berücksichtigen, dass sich das OpenGL-Koordinatensystem mit verdreht und somit die Koordinaten eine ganz andere bedeutung haben?
Gruß Harry
ich arbeite gerade an einer OpenGL-Anwendung, bei der ich Bilder im Kreis anordne, die nach vorne ausgerichtet sind.
Der Kreis ist 10° um die x-Achse geneigt. Der Kreis kann um die zentral gelegende y-Achse gedreht werden.
Der Code:
1// Neigung um -10° um die X-Achse
2 gl.glRotatef(KREIS_NEIGUNG, 1, 0, 0);
3 // Drehung abhängig von TouchEvent
4 gl.glRotatef(m_Modell.getRotation(), 0, 1, 0);
5
6 for (int i = 0; i < m_Modell.getAnzahlCovers() ; i++)
7 {
8 cover = m_Modell.getCover(i);
9 gl.glPushMatrix();
10
11 fX = cover.getX();
12 fY = 0;
13 fZ = cover.getZ();
14
15 // Cover gerade nach vorne ausrichten
16 // Cover zum Mittelpunkt verschieben
17 gl.glTranslatef(fX, fY, fZ);
18 // Cover um den Drehwinkel gegen die Rotation um die Y-Achse drehen
19 gl.glRotatef(-m_Modell.getRotation(), 0, 1, 0);
20 // Cover um -10° um die X-Achse neigen (Kompensierung der Kreis-Neigung)
21 gl.glRotatef(-KREIS_NEIGUNG, 1, 0, 0);
22 // Cover zurück an seine Position verschieben
23 gl.glTranslatef(-fX, -fY, -fZ);
24
25 // COVER ZEICHNEN
26 // Cover-Koordinaten laden
27 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, m_alCoverPunkte.get(i * 2));
28 // Cover-Farbe resetten
29 gl.glColor4f(0, 0, 0, 0);
30 // Textur binden
31 gl.glBindTexture(GL10.GL_TEXTURE_2D, cover.getClip().getCoverTexturId());
32 // Textur-Koordinaten laden
33 gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, m_fbTexturPunkte);
34 // zeichnen
35 gl.glDrawElements(GL10.GL_TRIANGLES, 2 * 3, GL10.GL_UNSIGNED_SHORT, m_sbIndices);
36
37 gl.glPopMatrix();
38 }
2 gl.glRotatef(KREIS_NEIGUNG, 1, 0, 0);
3 // Drehung abhängig von TouchEvent
4 gl.glRotatef(m_Modell.getRotation(), 0, 1, 0);
5
6 for (int i = 0; i < m_Modell.getAnzahlCovers() ; i++)
7 {
8 cover = m_Modell.getCover(i);
9 gl.glPushMatrix();
10
11 fX = cover.getX();
12 fY = 0;
13 fZ = cover.getZ();
14
15 // Cover gerade nach vorne ausrichten
16 // Cover zum Mittelpunkt verschieben
17 gl.glTranslatef(fX, fY, fZ);
18 // Cover um den Drehwinkel gegen die Rotation um die Y-Achse drehen
19 gl.glRotatef(-m_Modell.getRotation(), 0, 1, 0);
20 // Cover um -10° um die X-Achse neigen (Kompensierung der Kreis-Neigung)
21 gl.glRotatef(-KREIS_NEIGUNG, 1, 0, 0);
22 // Cover zurück an seine Position verschieben
23 gl.glTranslatef(-fX, -fY, -fZ);
24
25 // COVER ZEICHNEN
26 // Cover-Koordinaten laden
27 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, m_alCoverPunkte.get(i * 2));
28 // Cover-Farbe resetten
29 gl.glColor4f(0, 0, 0, 0);
30 // Textur binden
31 gl.glBindTexture(GL10.GL_TEXTURE_2D, cover.getClip().getCoverTexturId());
32 // Textur-Koordinaten laden
33 gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, m_fbTexturPunkte);
34 // zeichnen
35 gl.glDrawElements(GL10.GL_TRIANGLES, 2 * 3, GL10.GL_UNSIGNED_SHORT, m_sbIndices);
36
37 gl.glPopMatrix();
38 }
Problem:
Ich möchte nun alle Bilder zum vordersten Bild verschieben. Darum ändere ich die Koordinaten in den Cover objecten mit folgenden Formeln:
Xneu = Xalt + (Xziel - Xalt) * verschiebung; // verschiebung = der grad der verschiebung (0.0 (keine verschiebung) - 1.0 (ziel erreicht))
Y = 0; (ist immer 0)
Zneu = Zalt + (Zziel - Zalt) * verschiebung;
Dies funktioniert jedoch nur so halbwegs in einer Rotations-Position. In allen anderen Positionen fliegen die Bilder wild durch die Gegend.
Was mache ich falsch? Muss ich berücksichtigen, dass sich das OpenGL-Koordinatensystem mit verdreht und somit die Koordinaten eine ganz andere bedeutung haben?
Gruß Harry
— geändert am 26.07.2011, 08:43:30
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.