Dreieck einfach in der Mitte anzeigen



  • Hallo zusammen.

    Ich habe es mittlerweile anhand einiger Tuts geschafft, komplexere Körper etc. anzuzeigen, aber ich schaffe es irgendwie nie, ein einfaches Dreieck mit Farbinfos für die Verts in der Mitte anzuzeigen.
    Ich kann zwar Dreiecke "links oben" anzeigen, wenn ich den RHW-Wert mit dazu nehme, aber das will ich ja nicht.
    Ich lese überall, dass das Koordinatensystem in der Mitte plaziert ist und dann sollte doch eigentl. mein Dreieck auch dort gerendert werden, oder?!

    Habt ihr eventl. erfahrungsmäßig mögliche Erklärungen dafür? Oder einfach einen kurzen Tipp, wie ich ein farbiges Dreieck in der Mitte anzeigen kann?

    MfG, Schuri

    Nachtrag:

    Ich hab hier nochmal die entscheidenden Codepassagen zusammengestellt:

    Die FVF-Deklaration

    struct SingleVertex
    {
    	float	x, y, z;
    	DWORD	color;
    };
    #define	D3DFVF_SINGLEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
    
    LPDIRECT3DVERTEXBUFFER9	g_pVB;
    

    Die Einstellung des Vertexbuffers

    SingleVertex vertices[] =
    	{
    		{ 150.0f,  50.0f, 0.5f, 0xff0000 }, // x, y, z, rhw, color
    		{ 250.0f, 250.0f, 0.5f, 0x00ff00 },
    		{  50.0f, 250.0f, 0.5f, 0x0000ff },
    	};
    
    	g_lpD3DDevice->CreateVertexBuffer( 3*sizeof(SingleVertex),
    			 0 , D3DFVF_SINGLEVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL);
    
    	void* pVertices;
    	g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );
    
    	memcpy( pVertices, vertices, sizeof(vertices) );
    
    	g_pVB->Unlock();
    

    Die Render-Sequenz

    g_lpD3DDevice->Clear(0, NULL,   // Total löschen
    										D3DCLEAR_TARGET |         // RenderTarget leeren
    										D3DCLEAR_ZBUFFER,         // Z-Buffer leeren
    										D3DCOLOR_XRGB(171, 178, 153),  // RenderTarget Füllwert
    										1.0f, 0);                 // Z-,Stncl Füllwert
    
    				g_lpD3DDevice->BeginScene();
    
    				g_lpD3DDevice->SetStreamSource(0, g_pVB, 0, sizeof(SingleVertex));
    				g_lpD3DDevice->SetFVF(D3DFVF_SINGLEVERTEX);
    
    				g_lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
    
    				g_lpD3DDevice->EndScene();
    				g_lpD3DDevice->Present(NULL, NULL, NULL, NULL);
    


  • Du hast was falsch verstanden. RHW Vertices heißen so weil man sie schon Vortransformiert. Deshalb exisitert für diese Vertices kein Weltkoordinatensystem.

    Kurz und gut: Sie werden direkt im Screenspace angegeben.



  • Also RHW steht erstmal nur für Reciprocal of Homogeneous W.

    Bye, TGGC (Demo or Die)


Anmelden zum Antworten