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
Du hast zwei MöglichkeitenZitat
Meine Frage ist nun aber wie ich diese Transformationsmatrix berechnen muss ?
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
D3DXMATRIX mat,matView,matProj; // View- und Projektionsmatrix hohlen g_pD3DD->GetTransform(D3DTS_VIEW,&matView); g_pD3DD->GetTransform(D3DTS_PROJECTION,&matProj); // Die Weltmatrix wurde vorher aus den Rotationsmatrizen , Scalematrizen und Positionsmatrizen berechnet // WorldViewProj Matriz berechnen D3DXMatrixMultiply(&mat,&matView,&matWorld); D3DXMatrixMultiply(&mat,&mat,&matProj); // Nun als Shaderkonstante setzen g_pD3DD->SetVertexShaderConstant(0,&mat,4); // Konstante benötigt größe von 4 (4* float) registern |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
vs_1_1 // version instruction dcl_position v0 // declare register data dcl_normal v4 // v0 is position, v4 is normal dcl_color0 v7 // v7 is diffuse color dcl_texcoord0 v8 // v8 is texture coordinates m4x4 oPos, v0, c4 // transform vertices using view projection transform dp3 r0, v4, c12 // perform lighting N dot L calculation in world mul oD0, r0.x , v7 // calculate final pixel color from light intensity and // interpolated diffuse vertex color mov oT0.xy , v8 // copy texture coordinates to output |
Quellcode |
|
1 2 3 4 |
dp4 r0.x, r1, c0 dp4 r0.y, r1, c1 dp4 r0.z, r1, c2 dp4 r0.w, r1, c3 |
Quellcode |
|
1 2 3 4 5 6 7 |
;c0 - c3 ....Transponierte World x View x Projection Matrix vs_1_1 dcl_position v0 m4x4 oPos, v0, c0 |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
D3DXMATRIX mat,matWorld,matView,matProj; g_pD3DD->GetTransform(D3DTS_WORLD,&matWorld); g_pD3DD->GetTransform(D3DTS_VIEW,&matView); g_pD3DD->GetTransform(D3DTS_PROJECTION,&matProj); D3DXMatrixMultiply(&mat,&matWorld,&matView); D3DXMatrixMultiplyTranspose(&mat,&mat,&matProj); g_pD3DD->SetVertexShaderConstant(0,&mat,4); |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
vs_1_1 dcl_position v0 //zuerst die w mul r0.w v0.w c0.w mad r0.w v0.w c1.w r0.w mad r0.w v0.w c2.w r0.w mad r0.w v0.w c3.w r0.w move oPos.w r0.w // jetzt hab ich mir nen bein gestellt da ich nicht weis wie teilen geht rcp r0.w r0.w //x mul r0.x v0.x c0.x mad r0.x v0.x c1.x r0.x mad r0.x v0.x c2.x r0.x mad r0.x v0.x c3.x r0.x mul oPos.x r0.x r0.w //usw |
Stimmt. Irgendwo muss ich doch einstellen können wie die Projektionsmatrix aussehen soll und irgendwo muss ich ja auch die Worldmatrix setzen können. Dies kann die Engine nicht wircklich selber berechnen. Eine Get-Methode sollte es eigentlich dann auch geben. Ansonsten must du deinem PlugIn ebenfalls ein paar Set-Methode für die Matrizen verpassen. Zwar nicht unbedingt die beste Lösung aber eineZitat
Ihrgendwo muss ja Settransform aufgerufen werden, dann müsste auch Getransform gehen.
Werbeanzeige