D3DXMatrixTranslation Will nicht
-
Hallo ich hoffe ihr könnt mir helfen.
Also ich habe eine Klasse Directx die Wolrd Transformationen und Rotationen verwaltet. Dazu hat sie 2 Private Member:
D3DXMATRIX MatTranslate; D3DXMATRIX MatRotate;
Im Konstruktor der Klasse mach ich dann das:
D3DXMatrixIdentity(&MatTranslate); D3DXMatrixIdentity(&MatRotate);
Dann gibt es eine Funktion:
void Directx::SetWorldTransform(float x, float y, float z) { D3DXMatrixTranslation(&MatTranslate, 500.f, 0.0f, 0.0f); D3DXMATRIX World; D3DXMatrixMultiply(&World, &MatRotate, &MatTranslate); Device->SetTransform(D3DTS_WORLD, &World); }
Die Rufe ich auf:
void View::Render() { MyDirectx->SetViewport(x, y, Width, Height); MyDirectx->SetWorldTransform(-500.0f, 500.0f, 3.0f); RenderMeshs(); RenderTypeText(); }
Naja da passiert jedesmal eigentlich genau was da steht.
Das Problem ist nur das einfach nichts passiert. Also meine Meshs werden immernoch in der Ursprungsposition gezeichnet...
Rotation hab ich noch garnicht drinne...
Wieso?
mfg nils
-
Du benutzt in SetWorldTransform ja garnicht die x,y,z Translationswerte.
PS: Eine Klasse Directx halte ich für.... schlecht.
-
Wie bitte?
Ich habe doch MatTranslate mit MatRotate zu der Matrix World zusammen multipliziert (Das klappt auch laut Debugger).Und das Ergebniss davon nutze ich dann zum SetTransform. Was ist daran jetzt genau falsch?
mfg nils
-
void Directx::SetWorldTransform(float x, float y, float z) { D3DXMatrixTranslation(&MatTranslate, 500.f, 0.0f, 0.0f); D3DXMATRIX World; D3DXMatrixMultiply(&World, &MatRotate, &MatTranslate); Device->SetTransform(D3DTS_WORLD, &World); }
this->that meint das hier. Du verwendest die x, y und z-Werte nicht, um die Verschiebung festzulegen, sondern immer den Verschiebungsvektor (500,0,0). Da wird sich also nicht viel bewegen, schätze ich mal.
-
Achso ja das dient immoment nur debug zwecken. Der punkt is das halt diese verschiebung um 500 garnicht stattfindet.
-
Und wie ist die View gesetzt?
Ansonsten: Mehr Code.Und... Wie gross ist Dein Mesh? xD
Vielleicht bemerkst Du die Verschiebung einfach nicht.
-
Asmodiel schrieb:
Und wie ist die View gesetzt?
Ansonsten: Mehr Code.View setze ich eigentlich garnicht.
Das einzige was ich noch mache ist das hier:
Directx::Directx(HWND Window) { D3DXMatrixIdentity(&MatTranslate); D3DXMatrixIdentity(&MatRotate); d3d = Direct3DCreate9(D3D_SDK_VERSION); if(!d3d) { MessageBox(Window, "Direct3DCreate9 failed", "Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); return; } D3DDISPLAYMODE d3ddm; if(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm) < 0) { MessageBox(Window, "GetAdapterDisplayMode failed", "Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); return; } ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.BackBufferFormat = d3ddm.Format; D3DCAPS9 Caps; D3DDEVTYPE Devtype; if(d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &Caps) < 0) { MessageBox(Window, "Setting D3DEVTYPE_REF", "Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); Devtype = D3DDEVTYPE_REF; }else{ Devtype = D3DDEVTYPE_HAL; } if(d3d->CreateDevice(D3DADAPTER_DEFAULT, Devtype, Window, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &Device) < 0) { MessageBox(Window, "Device creation failed", "Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); return; } Font = new CD3DFont("Arial", 10, 0); Font->InitDeviceObjects(Device); }
und bei ner Message WM_SIZE noch das hier:
void Directx::Adjust(unsigned int Width, unsigned int Height) { Font->InvalidateDeviceObjects(); d3dpp.BackBufferWidth = Width; d3dpp.BackBufferHeight = Height; Device->Reset(&d3dpp); Device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); Device->SetRenderState(D3DRS_AMBIENT, 0xfffff); D3DXMATRIX ProjectionMatrix; D3DXMatrixPerspectiveFovLH(&ProjectionMatrix, D3DX_PI / 4, float(float(Width) / float(Height)), 1.0f, 500.0f); Device->SetTransform(D3DTS_PROJECTION, &ProjectionMatrix); Device->SetRenderState(D3DRS_LIGHTING, FALSE); /* for transformations */ Font->RestoreDeviceObjects(); }
Asmodiel schrieb:
Und... Wie gross ist Dein Mesh? xD
100.0 * 250.0
Asmodiel schrieb:
Vielleicht bemerkst Du die Verschiebung einfach nicht.
Ich denke schon.
-
Und in RenderMeshs() wird auch nichts mehr an der World gemacht?
nilres schrieb:
View setze ich eigentlich garnicht.
Hrmm... Das läuft, wenn die View nicht gesetzt wird?
Dafür setzt Du den Viewport?
Nur für den Test... Pack das mal in die Initialisierung:D3DXMATRIX view; D3DXVECTOR3 eye(0.0f, 0.0f, -100.0f); D3DXVECTOR3 at(0.0f, 0.0f, 1.0f); D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); D3DXMatrixLookAtLH(&view, &eye, &at, &up); Device->SetTransform(D3DTS_VIEW, &view);
Und dafür lässt Du das mit dem Viewport weg:
MyDirectx->SetViewport(x, y, Width, Height);
Und dann mal ein bisschen rumverschieben... Immernoch gleich?
-
Jap immernoch gleiches Problem.
Es ist auch egal ob ich
D3DXVECTOR3 eye(0.0f, 0.0f, -100.0f);
Da mal was verändere das verändert auch garnichts.....
mfg nils
-
Na dann, Projekt zippen und hochladen, kann ich's mir
mal anschauen. Vielleicht kommt jemand noch drauf, aber
ich kann mir grad nichts mehr vorstellen. Oo
-
Ich hab mal eine Minimalversion davon gemacht aber bereits da funtkioniert es nicht:
http://rapidshare.com/files/191560221/Zip.rar.html
mfg nils
-
*bastel, bastel*
Oi, da muss ich anpassen... Firmengrafikkarte. xDAlso. Bericht:
Bei mir zeigts gar nichts an. Aber:
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
Hrmm... Kenn mich da jetzt nicht so aus, aber die sind doch
schon transformiert. Hat dann die World überhaupt noch Auswirkungen?D3DFVF_XYZRHW durch D3DFVF_XYZ ersetzen und Ergebnis posten.
-
Ja danke du hast den Fehler gefunden. Jetzt gibt es noch ein kleines weiteres Problem:
Durch den View kram (den ich nicht entfernen kann) wird das ganze nicht mehr so dargestellt wie ich mir das vorstellen.
Beispiel: Ein qudraht das ich bei den koordinaten 0.0/0.0 erstelle fängt iwo links außerhalb des monitors an ich hätte es gerne so das 0.0/0.0 wieder die linke obere ecke ist (Als default wert zum üben wenn bewegung reinkommt wird das natürlich eh variable)
Kannst du mir da noch verraten wie die werte sind? Hab da nen bisschen was zu gelesen aber bekomm das nicht so ganz hin.
aber schonmal vielen dank
mfg nils