Denkanstoß 3D Objekte 2D Darstellen
-
Doch Ergbeniss ist dieses:
http://msdn.microsoft.com/en-us/library/bb205346(VS.85).aspxDas sieht ja eigentlich gut aus. Bin mir nur nicht sicher ob das wirklich tut was ich will.
Also als erstes muss ich den 3D welt Matrix kram jeweils so drehen wie ich will und auf diese Matrix Multipliziere ich dann diese D3DXMatrixOrthoLH noch drauf?
Ist das korrekt?
mfg nils
-
Hab jetzt doch noch Zeit gefunden das ganze mal zu Probiern:
void Objects::Render2DFrontSolid() { D3DXMATRIX Mat; D3DXMatrixOrthoLH(&Mat, 400, 400, 0, 1); MyDirectx->Device->SetTransform(D3DTS_WORLD, &Mat); Render3DSolid(); }
Das Ergebniss ist einfach nur Unbefridigend. Ich erhalte keine Ansicht genau auf die Front des ganzen.
http://www.imgwelt.de/show.php?code=82P43Y7HZYUOder liegt das daran was ich vorher mit der Viewmatrix mache?
Ich muss nähmlich erst nen ganzes stück reinzoomen.
void Directx::MoveCamera(float x, float y, float z) { D3DXVECTOR3 v = MatCameraMove - MatCameraRotate; v.y = 0.0f; D3DXVec3Normalize(&v, &v); D3DXVECTOR3 s = D3DXVECTOR3(-v.z, 0, v.x); D3DXVECTOR3 h = D3DXVECTOR3(0, 1, 0); D3DXVECTOR3 t = x * s + y * h + z * v; MatCameraMove += t; MatCameraRotate += t; }
Da übergeb ich dann nen z wert zum zoomen. Das mache ich vor dem D3DXMatrixOrthoLH kram.
Wo liegt jetzt mein (Denk)fehler?
mfg nils
-
von 0...1 in z-richtung ist bestimmt etwas knapp bemessen.
-
Zudem ist dieses OrthoLH für die projectonsmatrix und nicht für die weltmatrix.
vielleicht solltest du dich noch ein bischen mit denGrundlagen in diesem Gebiet beschäftigen, da gibt es auch auchreichend in der sdk doku.
-
Decimad schrieb:
von 0...1 in z-richtung ist bestimmt etwas knapp bemessen.
Was wären denn geeignetere werte deiner Meinung nach?
D3DXMATRIX ProjectionMatrix; D3DXMatrixPerspectiveFovLH(&ProjectionMatrix, D3DXToRadian(45), float(float(Width) / float(Height)), 1.0f, 150.0f); D3DXMATRIX Mat, Test; D3DXMatrixOrthoLH(&Mat, 400, 400, 0, 1); D3DXMatrixMultiply(&Test, &Mat, &ProjectionMatrix); Device->SetTransform(D3DTS_PROJECTION, &Test);
Sieht jetzt immernoch so aus wie wenn ich das auf die World anwende.... Wie kommt das?
Mit diesen 3 Matritzen und der Renderpipline das kenn ich eigentlich noch so von OpenGL -> Habe nur mit den Directx funktionen jetzt ein wenig zu kämpfen aber ich bin bester dinge das ich das mit eurer Hilfe und nach meinem kleinem Projekt dann soweit geschaft hab und mich reingefummelt habe das auch der rest kein Problem ist.
-
Ich hab nochmal ein wenig rumspielen können
Ergebniss ist jetzt folgendes:
http://f.imagehost.org/view/0741/gut
Genau so hab ich mir das gedacht!
Problem ist jetzt wenn ich das ganze verschiebe sprich die Kameraposition ändere kommt sowas:
http://f.imagehost.org/view/0875/schlecht
Das ist natürlich nicht so schön das dahinter wöde ich ja gerne nicht sehen.
Wie mache ich das?
mfg nils
-
-
Mit anderen worten, passe mit der Kamerabewegung auch die Blickrichtung an.
Ich schätze mal du verwendest zum bestimmen der Richtung die passende D3DX-Funktion. Der für die Blickrichtung bestimmte vektor gibt da keine Richtung sondern einen Punkt an.
-
Kahino schrieb:
Mit anderen worten, passe mit der Kamerabewegung auch die Blickrichtung an.
Ich schätze mal du verwendest zum bestimmen der Richtung die passende D3DX-Funktion. Der für die Blickrichtung bestimmte vektor gibt da keine Richtung sondern einen Punkt an.Das klingt sehr gut. Das klappt jetzt auch hab nur noch 2 Fragen:
Erstens:
D3DXMatrixOrthoLH(&Mat, 400, 400, 0, 1);
Welche Werte sind hier für die beiden Letzten Parameter gut?
Ich gesetehe ich versteh nicht ganz was mit znear und zfar gemeint ist.Zweitens:
http://g.imagehost.org/view/0721/WorldRotate
So sieht das immo aus. Das ist nunja augenscheinlich bei den gedrehten sachen etwas komisch. Hier der Code:void View::Render() { switch(Type) { case DreiD: case Front: break; case Top: MyDirectx->SetWorldRotation(0, 90); break; case Left: MyDirectx->SetWorldRotation(270, 0); break; case Right: MyDirectx->SetWorldRotation(90, 0); break; default: ResetTypeMessage(); ResetType(); break; } MyDirectx->SetViewport(x, y, Width, Height); if(Type != DreiD) { MyDirectx->SetOrtho(); } MyDirectx->MoveCamera(Adjustment.x, Adjustment.y, Adjustment.z); MyDirectx->RotateCamera(Rotation.x, Rotation.y); MyDirectx->SetViewMatrix(); RenderMeshs(); RenderTypeText(); MyDirectx->RotateCamera(-Rotation.x, -Rotation.y); MyDirectx->MoveCamera(-Adjustment.x, -Adjustment.y, -Adjustment.z); MyDirectx->SetViewMatrix(); if(Type != DreiD) { MyDirectx->UnSetOrtho(); } MyDirectx->SetWorldRotation(0, 0);
void Directx::SetWorldTransform(float x, float y, float z) { D3DXMatrixTranslation(&MatTranslate, x, y, z); SetWorld(); } void Directx::SetWorldRotation(float x, float y) { D3DXMATRIX MatRotx, MatRoty; D3DXMatrixRotationX(&MatRotx, x); D3DXMatrixRotationY(&MatRoty, y); D3DXMatrixMultiply(&MatRotate, &MatRotx, &MatRoty); SetWorld(); } void Directx::SetWorld() { D3DXMATRIX World; D3DXMatrixMultiply(&World, &MatRotate, &MatTranslate); Device->SetTransform(D3DTS_WORLD, &World); }
Ich hoffe ihr könnt mir verraten wo ich was falsch mache bzw. wo ich nen Denkfehler habe.
mfg nils
-
-
In der Doku steht:
zn
[in] Minimum z-value of the view volume which is referred to as z-near.
zf
[in] Maximum z-value of the view volume which is referred to as z-far.Nur weiß ich nicht was damit gemeint ist.
Und ich denke auch nicht das die Parmaeter was mit meinem immomentigen Problem zutun haben ich hab damit etwas rumgespielt und die scheinen andere auswirkungen zu haben....
mfg nils
-
Hast du Lese- oder Englischprobleme? Es ist der minimale bzw. maximale Z-Wert des Sichtvolumens, steht doch alles da! f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
-
TGGC schrieb:
Hast du Lese- oder Englischprobleme? Es ist der minimale bzw. maximale Z-Wert des Sichtvolumens, steht doch alles da! f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
Weder noch.... Also da man es mir ja nicht erklären will versuch ich mal das zu schildern was ich dahinter vermute:
Der Bereich zwischen Kamera und Object ist dieses Sichtvolumen und dann wie groß der Maximal bzw Minimal sein darf?
Naja meine Probleme lösen sich damit iwie nicht....
mfg nils
-
nilres schrieb:
Der Bereich zwischen Kamera und Object ist dieses Sichtvolumen und dann wie groß der Maximal bzw Minimal sein darf?
Nein. Schau einfach mal in die Doku. Da ist es doch erklaert. Mit Bildern, damit es der letzte Drops kapiert. f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
-
Ok damit is das thema hier beendet