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.