Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.06.2006, 12:13

Rotieren eines Sprites

Hallo zusammen,


kann mir jemand einen Beispielcode zeigen, um eine einfaches 2D Object mit DirectX9 um sich selbst rotieren zu lassen.

Bei mir rotiert es zwar, aber nicht um sich selbst bzw. um den Mittelpunkt es Objektes, sondern um die linke obere Ecke (0,0) des Bildschirms.


Gruß

Phili

unregistriert

2

18.06.2006, 13:10

Transformationen immer in der Reihenfolge: Skalierung, Rotation, Verschiebung. Dann sollte sich das Problem erübrigen.

3

18.06.2006, 13:39

Hi,

nun ja das hab ich versucht aber es funktioniert nicht!

hier mal der Beispielcode:

Das Sprite hat die Größe 128*128.
Bei Betätigung der Leertaste wird m_Rotation um 0.001 erhöht.

Die Funktion "D3DXMatrixTransformation2D" wurde hier nur mal Testweise
ausprobiert. Leider mit dem gleichen Ergebnis wie bei dem auskommentierten Teil. Das Sprite wird rotiert allerdings nicht um sich selbst sondern um die linke obere Ecke des Bildschirms.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void CSprite::SetRotation(float rotation) {

    m_Rotation += rotation;

    //D3DXMatrixRotationZ(&m_RotationZ, m_Rotation);

    //D3DXMatrixScaling(&m_Scaling, 1.0f, 1.0f, 1.0f);

    //D3DXMatrixTranslation(&m_Translation, 1.0f, 1.0f, 0.0f);


    //m_Matrix = m_RotationZ * m_Translation * m_Scaling;


    D3DXMatrixTransformation2D( &m_Matrix,
                                &D3DXVECTOR2(0.0f, 0.0f),
                                0.0f,
                                &D3DXVECTOR2(1.0f,1.0f),
                                &D3DXVECTOR2(64, 64), 
                                m_Rotation,
                                &D3DXVECTOR2(1.0f,1.0f)
    );

    m_lpSprite->Begin(D3DXSPRITE_ALPHABLEND);
    m_lpSprite->SetTransform(&m_Matrix);
        m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     NULL,
                     &D3DXVECTOR3(1.0f,1.0f,0.0f), //&m_vRotationCenter,

                     &m_vPosition,
                     ModulateColor);
    m_lpSprite->End();

}

ext

Treue Seele

  • Private Nachricht senden

4

18.06.2006, 13:45

Man rotiert ja auch immer relativ zum Koordinatenursprung, wenn du um ein beliebigen Punkt Rotieren willst, dann geht das so:
Punkt P(x|y)

Verschieben um -Px und -Py
Rotieren
Verschieben um Px und Py

5

18.06.2006, 14:16

Danke! Ich versuchs mal.

Gruß
snooper

Werbeanzeige