Rotation auf Vertices anwenden



  • Hallo,ich brauch mal wieder Hilfe.

    Weiß jmd. wie man Rotation auf Vertices anwendet,um so die neuen Koordinaten zu erhalten.

    Danke.



  • haben dir die unmengen von links die google ausspuckt nicht geholfen 😕



  • rotationsmatix errechnen, matrix mit den vertices multiplizieren



  • Du musst auf den Vertex die RotationsMatrix anwenden:

    So sieht eine Rotationsmatrix für eine Rotation um die X-Achse aus (Setze bei Wert deinen Rotationswert in Grad ein) (das * 0.017453293 ist eine Umrechnung von Grad in radiant):

    ( 1, 0                    , 0                     , 0,
      0, cos(Wert*0.017453293), -sin(Wert*0.017453293), 0,
      0, sin(Wert*0.017453293),  cos(Wert*0.017453293), 0,
      0, 0                    , 0                     , 1 )
    

    Das hier ist für die Y-Achse:

    ( cos(Wert*0.017453293), 0, -sin(Wert*0.017453293), 0,
      0                    , 1, 0                     , 0,
      sin(Wert*0.017453293), 0,  cos(Wert*0.017453293), 0,
      0                    , 0, 0                     , 1 )
    

    Hier nochmal die Z-Achse:

    ( cos(Wert*0.017453293), -sin(Wert*0.017453293), 0, 0,
      sin(Wert*0.017453293), cos(Wert*0.017453293) , 0, 0,
      0                    , 0                     , 1, 0,
      0                    , 0                     , 0, 1 )
    

    Dann rechnest du (X-Rotationsmatrix * Y-Rotationsmatrix * Z-Rotationsmatrix) * Vertex



  • Danke.



  • Warum benutzt du nicht glm wie dir empfohlen wurde?



  • Werden mir bei glm etwa die neuen Daten zurückgegeben?



  • Naja, natürlich.
    Ist nur eine Multiplikation eines Vektors mit einer Matrix am Ende.

    Beispiel aus meinem Code:

    if ( needsTransform() )
        {
            // Multiply matrices
            glm::mat4 tmp = m_rotation * m_translation;
                // Apply Matrix
                for ( int i=0; i<6; i++ )
                {
                    glm::vec4 transformed = tmp * glm::vec4(vertices[i].x, vertices[i].y, 0, 1.0f);
                    vertices[i].x = transformed.x;
                    vertices[i].y = transformed.y;
                }
                m_translation = glm::mat4(1);
                m_rotation    = glm::mat4(1);
                m_needsTransform = false;
        }
    

    Danach schiebst die Vertices wieder in deinen Buffer und gut is.
    Man kann das ganze auch im Shader machen, indem man die nötige rotation oder translation an den Shader übergibt. Kommt halt drauf an wie du deine Pipeline gebaut hast.

    Am einfachsten wäre es, auf batching zu verzichten und alle transformationen im Shader des Objekts zu erledigen.



  • Achso,danke. 🙂


Anmelden zum Antworten