D3DXMatrixTranslation Will nicht



  • 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. xD

    Also. 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


Anmelden zum Antworten