Es rotiert nicht! ;)
-
Hallo,
ich habe eine kleine Frage. Ich versuche ein Sprite auf dem Bildschirm darzustellen und dieses u.a. auch rotieren lassen. Sprite wird angezeigt, lässt sich auch verschieben nur rotieren tuts ned. Drücke ich die Taste fürs rotieren verschwindet das Sprite einfach vom Bildschirm.
Hier mal mein Code:
D3DXVECTOR3 vRotationCenter(64.0f, 64.0f, 128.0f); D3DXMatrixRotationX(&d3dMatrix,Rotation*D3DX_PI/180); D3DXVECTOR3 vPosition(g_x, g_y, 128.0f); D3DCOLOR ModulateColor = 0xFFFFFFFF; lpSprite->Begin(D3DXSPRITE_ALPHABLEND); lpSprite->SetTransform(&d3dMatrix); lpSprite->Draw(lpSpriteTexture, NULL, &vRotationCenter, &vPosition, ModulateColor);Bei der Variablen Rotation handelt es sich um ein Float mit Defaultwert 0.0, drückt man ne Taste wird dieser Wert um 0.1f erhöht. Aber wie gesagt, sobald man die Taste drückt ist das Sprite weg!

Wäre über nen Tipp sehr dankbar!
thx & cu
pc-dau
-
also ich kenn mich jetzt damit nicht soo gut aus...
Aber mir kommt es komisch vor, dass du dem Sprite erst mit SetTransform eine Matrix setzt (bei welcher gar kein rotationszentrum usw. beachtet wird), und dann erst beim sprite::draw-aufruf deine Position und rotation angibst. Beißt sich das nicht irgendwie?Und wieso hat dein Rotationszentrum als zwert 128? ich denke 0 wäre doch angemessener, oder? Das sprite hat ja keine tiefe.
-
Naja ich denke es kommt drauf an was in deinen g_x, g_y steht denn wenn das weit weg ist von deinem rotation center... dann ist die rotationsachse natürlich viel größer und das bild wird weiter verschoben als du mit dem bildausschnitt sehen kannst
-
Also meiner Meinung nach bezieht sich dieses RotationCenter auf das Sprite selbst. Das Sprite ist 128*128 Pixel gross, folglich wollte ich mit mit der Angabe RotationCenter(64, 64, 128) festlegen dass es sich um den Mittelpunkt dreht. Der Wert 128 für die Z-Achse gefällt mir auch nicht bzw passt nicht ganz in meine Logik, aber wenn ich dort 0 statt der 128 reinsetze wird das Sprite nicht mehr angezeigt. Nur selbst wenn es ein Problem mit dem RotationCenter geben würde - bei der Rotation um den Faktor 0.1 sollte ich doch trotzdem etwas sehen wenn ich nur ein mal die Taste für Rotation drücke.
@Maxi: Jetzt wo dus sagst kommts mir auch komisch vor. Aber ne andere Möglichkeit seh ich gar nicht. Mit dem Release vom DirectX SDK Dez 06 wurde die Rotation und Skalierung ausgelagert und kann nur noch über die D3DXMATRIX gesetzt werden. Vor dem Dez 06 SDK war die Rotation wie auch Skalierung direkt als Parameter in der Draw-Funktion festgelegt.
Werd wohl noch nen bisschen rumprobieren - bin aber für weitere Lösungsvorschläge offen!

-
vielleicht ist 0.1 sogar zu viel als rotation. Mach es doch mal so, dass du bei Tastendruck nicht 0.1 addierst, sondern die Rotation testweise auf 0.1 setzt. Es kann ja sein, dass deine Schleife öfter durchlaufen wird und du bekommst das gar nicht mit.
Oder nimm als Wert nicht 0.1 sondern vl 0.00001f oder so, vielleiocht siehst du dann besser ein Problem.