Fehler bei erweitertem D3Dtut

bluescreen
ich hab ma das mit geliefertete tut für D3D9 nach programmiert.
jetz wollte ich tutorial 4 erweitern. es wird ein zylinder erzeugt der sich um die x-Achse dreht und der von einer Lichtquelle beleutet wird die sich um ihn dreht.
Jetzt wollte ich, dass sich der zylinder an der z-Achse bewegt bis er "verschwindet".
der Code vorher:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
void SetupMatrices()
{
D3DXMATRIXA16 matWorld;

D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX( &matWorld, timeGetTime()/500.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

(der code wird von render() aufgerufen...)
meine kleine veränderung:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
void SetupMatrices()
{
D3DXMATRIXA16 matWorld;

D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX( &matWorld, timeGetTime()/500.0f );
D3DXMatrixTranslation( &matWorld, 0, 0, 5); //<--VERÄNDERUNG!!!!!
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

Jetzt wird der zylinder aber nur um 1 an der z-Achse verschoben und der Zylinder dreht sich garnicht mehr...

wei kann das sein?!!! die Funktion wird immer wieder von Windows aufgerufen, sobald keine messages mehr vorliegen.

Sieht jemand den Fehler?

@EDIT: tut mir leid.. habs mehrmals versucht ersucht, aber er will den Code ned einrücken heulen
Hanfling
Nur mal so als Gedanke, kanns sein das D3DXMatrixRotationX() / D3DXMatrixTranslation() dir nur eine Matrix baut? Also komplett dein matWorld überschreibt, beim 2. Aufruf? Probier mal jeweils für beide Funktionen eine eigene Matrix zu nehmen, dann beide zu multiplizieren (umgedrehte Reihenfolge) und das dann g_pd3dDevice->SetTransform( D3DTS_WORLD, * ) zu übergeben.

@edit:
Benutz den php Tag für C++ Code, sieht besser aus. ;)
bluescreen
also grundsätzlich scheinst du richtig zu liegen...
ich konnte jetzt zwei schöne folgen beobachten(da ich mir nicht sicher war wie ich die matrizen übergeben soll xD):
1.
php:
1:
2:
3:
4:
5:
6:
7:
8:
<?php D3DXMATRIXA16 matWorld;
D3DXMATRIXA16 trsZyl;
D3DXMATRIXA16 gesMat;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX( &matWorldtimeGetTime()/500.0f );
D3DXMatrixTranslation( &trsZyl005);
D3DXMatrixMultiply(&gesMat, &matWorld, &trsZyl);
g_pd3dDevice->SetTransformD3DTS_WORLD, &gesMat ); ?>

der Zylinder wird um 5 an der z-Achse verschoben und bleibt dort stehen. aber er dreht sich *freu*
2.
php:
1:
2:
3:
4:
5:
6:
7:
8:
<?php D3DXMATRIXA16 matWorld;
D3DXMATRIXA16 trsZyl;
D3DXMATRIXA16 gesMat;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX( &matWorldtimeGetTime()/500.0f );
D3DXMatrixTranslation( &trsZyl005);
D3DXMatrixMultiply(&gesMat, &trsZyl, &matWorld);
g_pd3dDevice->SetTransformD3DTS_WORLD, &gesMat ); ?>

der zylinder dreht sich um seine anfangsposition in einem radius von 5 (loool)hab ich jetzt die matrizen falsch übergeben?
Hanfling
Mal generell:
Entweder brauchst du das D3DXMatrixIdentity(&matWorld); nicht, oder du brauchst es zweimal. Augenzwinkern
Ich kann kein D3D, aber anscheinend, machen die D3DXMatrixRotationböse ) / D3DXMatrixTranslation() Funktionen jeweils ne eingene Matrix. Also brauchst du die vorher ned mit E initialisieren.

Wie soll sich der Zylinder den überhaupt bewegen?
bluescreen
er soll sich um die X-Achse drehen und gleichzeitig langsam an der z-Achse sich "gen Horizont" bewegen...
Hanfling
D3DXMatrixTranslation( &trsZyl, 0, 0, z(t));

z(t) sollte dann in irgend einer Form von der Zeit abhängen. Augenzwinkern
bluescreen
was meinst du mit "von der Zeit"?
einen timer, die aktuelle Uhrzeit, die sekunden...?
Hanfling
Genau wie deine Rotation da timeGetTime() benutz.