Texture Matrix Rotation/Translation



  • Hey,

    ich möchte eine Textur mittels Texturematrix verschieben/rotieren/skalieren.

    In OpenGL hab ich das so gemacht:

    glMatrixMode(GL_TEXTURE);
    glLoadIdentity();
    
    glTranslatef(0.5f, 0.5f, 0.0f);
    glRotatef(angle, 0.0f, 0.0f, 1.0f);
    glTranslatef(-0.5f, -0.5f, 0.0f);
    

    Das selbe wollte ich jetzt in DirectX umsetzen:

    D3DXMATRIX texMat, tmpMat0, tmpMat1, tmpMat2;
    
    D3DXMatrixTranslation(&tmpMat0, 0.5f, 0.5f, 0.0f);
    D3DXMatrixRotationZ(&tmpMat1, DEG_TO_RAD(angle));
    D3DXMatrixTranslation(&tmpMat2, -0.5f, -0.5f, 0.0f);
    
    texMat = tmpMat0 * tmpMat1 * tmpMat2;
    
    Direct3D::Instance().GetDevice()->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 );
    Direct3D::Instance().GetDevice()->SetTransform(D3DTS_TEXTURE0 , &texMat);
    

    Die Textur dreht sich... -aber um den Ursprung, also 0|0, und nicht um das Zentrum... Die Matrixtranslation scheint sowieso komplett wirkungslos, egal was ich für Parameter einsetze.

    Wie kann ich denn eine Textur mittels Texturmatrix in Direct3D um das Zentrum drehen?

    Dankeschön



  • Veruch mal das Zeug in eine 3x3 Matrix umzubasteln. Also nach der Matrixmultiplikation die 4. Spalte/Zeile in die 3. kopieren. f'`8k

    Gruß, TGGC (\-/ has leading)


Anmelden zum Antworten