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

01.04.2009, 00:19

Problem mit Rotation

Hallo,

da ich am Anfang das Kapitel über die Matrizen übersprungen habe und jetzt schon fast beim 1. Spiel bin wollte ich die Rotationsmatrix etc. einmal explizit testen.

Ich hab dafür ein einfaches Dreieck gerendert und wollte es zuerst um die X-Achse drehen.

Funktion fürs Rotieren (in der Render-Funktion):

Quellcode

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
30
31
32
33
void mRotation(Triangle &mTriangle,const float Angle,RotationA Axis)
{
D3DMATRIX m =
{ 1, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 1 };  

switch(Axis)
{
case 1:
    m._22 = cosf(Angle);
    m._23 = sinf(Angle);
    m._32 = -m._23;
    m._33 = m._22;
    break;
case 2:
break;
case 3:
break;
}
mTriangle.aVertex[0].Position.x = ((mTriangle.aVertex[0].Position.x * m._11)+ (mTriangle.aVertex[0].Position.y * m._21) + (mTriangle.aVertex[0].Position.z * m._31) + m._41);
mTriangle.aVertex[0].Position.y = ((mTriangle.aVertex[0].Position.x * m._12)+ (mTriangle.aVertex[0].Position.y * m._22) + (mTriangle.aVertex[0].Position.z * m._32) + m._42);
mTriangle.aVertex[0].Position.z = ((mTriangle.aVertex[0].Position.x * m._13)+ (mTriangle.aVertex[0].Position.y * m._23) + (mTriangle.aVertex[0].Position.z * m._33) + m._43);

mTriangle.aVertex[1].Position.x = ((mTriangle.aVertex[1].Position.x * m._11)+ (mTriangle.aVertex[1].Position.y * m._21) + (mTriangle.aVertex[1].Position.z * m._31) + m._41);
mTriangle.aVertex[1].Position.y = ((mTriangle.aVertex[1].Position.x * m._12)+ (mTriangle.aVertex[1].Position.y * m._22) + (mTriangle.aVertex[1].Position.z * m._32) + m._42);
mTriangle.aVertex[1].Position.z = ((mTriangle.aVertex[1].Position.x * m._13)+ (mTriangle.aVertex[1].Position.y * m._23) + (mTriangle.aVertex[1].Position.z * m._33) + m._43);

mTriangle.aVertex[2].Position.x = ((mTriangle.aVertex[2].Position.x * m._11)+ (mTriangle.aVertex[2].Position.y * m._21) + (mTriangle.aVertex[2].Position.z * m._31) + m._41);
mTriangle.aVertex[2].Position.y = ((mTriangle.aVertex[2].Position.x * m._12)+ (mTriangle.aVertex[2].Position.y * m._22) + (mTriangle.aVertex[2].Position.z * m._32) + m._42);
mTriangle.aVertex[2].Position.z = ((mTriangle.aVertex[2].Position.x * m._13)+ (mTriangle.aVertex[2].Position.y * m._23) + (mTriangle.aVertex[2].Position.z * m._33) + m._43);
}


Aufruf mit:

Quellcode

1
mRotation(Dreieck,TB_DEG_TO_RAD(0.8),XAXIS);



Das Dreieck rotiert zwar jedoch wird es mit der Zeit immer mehr zu einer Linie :O.

Ich hab in meiner Funktion jedoch erstmal keinen Fehler gefunden auch nach mehrmaligem vergleichen mit dem Buch.

Es ist gewollt das Case 1 und 2 leer sind.

Seltsam ist auch das ich beim Winkel nicht 0-360 angeben kann, sondern 0-0.99 (bei 1 verschwindet das Dreieck) trotz der Umrechnung.

Hoffe mir kann jemand helfen.


Mfg Woodfire.

Anonymous

unregistriert

2

01.04.2009, 07:50

Sehr schlecht, dass du das Kapitel über Matritzen übersprungen hast, denn da müsstest du nicht jedes Vertex einzeln anpacken.

3

01.04.2009, 11:21

und das dreieck zu ner linie wird ist klar, wenn es senkrecht zur sichtebene steht ;)

4

01.04.2009, 11:29

Ok ich arbeite jetzt mit der Welt Matrix, geht um einiges einfacher^^.

Das Problem vorher war irgendwie seltsam, das Dreieck ist nicht einfach zur Linie geworden sondert hat sich langsam verzerrt.

Vielen Dank für eure Hilfe.

Werbeanzeige