Problem mit Direct 3D: Rotation!?



  • Hiho,
    Ich hab mich mal versucht einwenig in Direct3D ein zu arbeiten, nuja also ich habs geschaft nen Triangel zu erstellen und zu zeichnen, aber bei der Rotation geht irgendwas schief.

    Ich hab hier mal den Code hochgeladen, ist nocht viel aber wär cool wenn ihr euch das mal anschauen könntet

    ➡ http://uploaded.to/?id=12m1z6

    Ich hoffe ihr könnt mir sagen worans liegt?!

    Gruß Tobi.



  • Zeig doch einfach den relevanten Code.



  • void RotateMatrix( float fAngle, char *szAxis ) {
    
    	D3DXMATRIXA16 d3WorldMa;
    
    	if( ( szAxis[ 0 ] == 'x' ) || ( szAxis[ 0 ] == 'X' ) )
    		D3DXMatrixRotationX( &d3WorldMa, fAngle );	
    
    	if( ( szAxis[ 0 ] == 'y' ) || ( szAxis[ 0 ] == 'Y' ) )
    		D3DXMatrixRotationY( &d3WorldMa, fAngle );	
    
    	if( ( szAxis[ 0 ] == 'z' ) || ( szAxis[ 0 ] == 'Z' ) )
    		D3DXMatrixRotationZ( &d3WorldMa, fAngle );	
    
    	// ***** Rotate it *****
    	g_lpDD9->SetTransform( D3DTS_WORLD, &d3WorldMa );
    
    	D3DXMATRIXA16 d3ViewMa;
    	D3DXVECTOR3 vEye( 0.0f, 3.0f, -5.0f );
    	D3DXVECTOR3 vLookAt( 0.0f, 0.0f, 0.0f );
    	D3DXVECTOR3 vUp( 0.0f, 1.0f, 0.0f );
    
    	D3DXMatrixLookAtLH( &d3ViewMa, &vEye, &vLookAt, &vUp );
    
    	// ***** Look *****
    	g_lpDD9->SetTransform( D3DTS_VIEW, &d3ViewMa );
    
    	D3DXMATRIXA16 d3ProjectMa;
        D3DXMatrixPerspectiveFovLH( &d3ProjectMa, D3DX_PI / 4, 1.0f, 1.0f, 100.0f );
        g_lpDD9->SetTransform( D3DTS_PROJECTION, &d3ProjectMa );
    }
    


  • Ich hab mich zwar schon lange nicht mehr mit DX9 beschäftigt, aber sieht eigentlich alles richtig aus.
    Könntest du das Problem etwas genauer beschreiben als "geht schief"?



  • Ich hab doch da extra den ganzen source mit hochgeladen. Ich habe die d3d initialisiert, eine custom vertex erstellt für ein Dreieck, es zeichnen lassen und nu will ich das es sich dreht. Und genau da liegt mein problem, ich weiß net wie.

    Gruß Tobi.



  • Und man soll sich jetzt deinen ganzen Code anschauen, nur weil du nicht in der Lage bist dein Problem präzise zu formulieren?
    Naja, ich hab dazu auf jeden Fall keine Lust. Vielleicht findest du ja einen anderen.



  • hä?
    Ich hab nicht wirklich viel Ahnung von D3D und dachte eigentlich, dass mir hier geholfen werden kann?
    Ich denke mal was mein Problem ist habe ich beschrieben und wenn ich wüßte woran es liegt würde ich glaube hier nicht schreiben ...



  • Stichwort: transformieren + Matrix

    Such dir am Besten ein Tutorial, und schau es dir ab...
    Ich persönlich kann kein Dx und halte auch nichts davon...



  • T0bi schrieb:

    hä?
    Ich hab nicht wirklich viel Ahnung von D3D und dachte eigentlich, dass mir hier geholfen werden kann?
    Ich denke mal was mein Problem ist habe ich beschrieben und wenn ich wüßte woran es liegt würde ich glaube hier nicht schreiben ...

    Du hast absolut nichts beschrieben. "geht schief" ist eine Nullaussage. Was geht schief? Dreht es sich zu schnell? Dreht es sich garnicht? Dreht es sich in eine falsche Richtung?

    langeweile schrieb:

    Ich persönlich kann kein Dx und halte auch nichts davon...

    🙄



  • Hi,

    T0bi schrieb:

    Ich hab doch da extra den ganzen source mit hochgeladen.

    hm ... was geht wohl schneller? Auf deinen Download zu klicken, sich durch die Werbebanner zu arbeiten, die Strafzeit für den Download-Timer abzusitzen, deine Sourcen downzuloaden, auf Viren zu checken, ein VC++ Projekt daraus zu machen, zu kompilieren und zu linken und selber naczuschauen .... ODER in deinem Post das entsprechende Codestück zu lesen?

    Achtung: Das ist eine rethorische Frage!

    langeweile schrieb:

    Ich persönlich kann kein Dx und halte auch nichts davon...

    Die korrekte Formulierung wäre gewesen: "Ich persönlich kann kein Dx und kann daher auch keine Aussage dazu treffen wie ich dazu stehe." 😉

    code schrieb:

    Ich rotiere irgendwie falsch ...

    Deine Triangel ist extrem groß und zudem nicht um den Nullpunkt (0,0,0) zentriert. Bei der Rotation (rufe einfach RotateMatrix(static_cast<float>(getTickCount ()) * 0.001f, "y") auf, wird aber immer um den Nullpunkt rotiert. Daher sieht deine Rotation eventuell nicht so aus wie du es erwartest.

    Ciao,
    Stefan


Anmelden zum Antworten