Dirextx 2d object will sich nicht bewegen lassen.

Arjitan

Grünschnabel
ich bin mitler weile bei DirectX angekommen und wollte im 2D bereich eine Transformed Space D3DPT_TRIANGLELIST verschieben.
aber egal was ich versuche sie ist immer bei 0,0

ich weiß jetzt nicht wieviel Code ich vom Programm Posten muß, will aber auch nicht alles Posten, da das dann zu unübersichtlich wird.
Ich hoffe das das so reicht:
definition des objects:
Code:
struct Vertex_TD {
	float x, y, z, rhw;
	DWORD colour;

	static const DWORD FORMAT = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;
	static const int STRIDE_SIZE = 20;
};
// --- snip ---//
Vertex_TD vertices[] = {
{ 0.0f, 0.0f, 0.0f, 1.0f, 0xffff0000 },
{ 64.0f, 0.0f, 0.0f, 1.0f, 0xff00ff00 },
{ 64.0f, 64.0f, 0.0f, 1.0f, 0xff0000ff },

{ 0.0f, 0.0f, 0.0f, 1.0f, 0xffff0000 },
{ 64.0f, 64.0f, 0.0f, 1.0f, 0xff0000ff },
{ 0.0f, 64.0f, 0.0f, 1.0f, 0xff00ff00 },

ich habe dann in meiner Renderfunktion 3 verschiedene sachen ausprobiert, alle mit dem selben Ergebniss:
erster versuch:
Code:
        D3DXMATRIX worldMatrix;
        D3DXMatrixTranslation(&worldMatrix, 100,0f, 200.0f, 0.0f);
        d3dManager->getDevice().SetTransform(D3DTS_WORLD, &worldMatrix);
        d3dManager->getDevice().DrawPrimitiveUP(
		D3DPT_TRIANGLELIST,
		2,
		vertices,
		vertices[0].STRIDE_SIZE);
danach hatte ich etwas rumgesucht und hatte es dann damit probiert:
Code:
	D3DXVECTOR2 Position;
	Position.x =x;
	Position.y =y;

	D3DXMatrixTransformation2D(&worldMatrix, NULL, 0, NULL, NULL, 0, &Position);
        d3dManager->getDevice().SetTransform(D3DTS_PROJECTION, &worldMatrix);
        d3dManager->getDevice().DrawPrimitiveUP(
		D3DPT_TRIANGLELIST,
		2,
		vertices,
		vertices[0].STRIDE_SIZE);

das wollte auch nicht wirklich, also habe ich weiter gesucht und was altes gefunden,
das aber auch nicht will:
Code:
    D3DXMATRIX Ortho2D;    
    D3DXMATRIX Identity;
    
    D3DXMatrixOrthoLH(&Ortho2D, 1920, 1080, 0.0f, 1.0f);
    D3DXMatrixIdentity(&Identity);

    d3dManager->getDevice().SetTransform(D3DTS_PROJECTION, &Ortho2D);
    d3dManager->getDevice().SetTransform(D3DTS_WORLD, &Identity);
    d3dManager->getDevice().SetTransform(D3DTS_VIEW, &Identity);
	D3DXMATRIX Position;
	D3DXMatrixTranslation(&Position, 50.0f, 0.0f, 0.0f);
        d3dManager->getDevice().SetTransform(D3DTS_WORLD, &Position);
        d3dManager->getDevice().DrawPrimitiveUP(
		D3DPT_TRIANGLELIST,
		2,
		vertices,
		vertices[0].STRIDE_SIZE);

irgendwie bin ich jetzt total verwirrt... ich denke das ich entweder was vergessen habe, oder mein Denken ist irgendwo falsch, das ich irgendetwas benutze das eigendlich untransformed coordinaten will, ich es aber mit transformed füttere, also pixeln...
kann mir irgendwer mal einen kleinen Fingerzeig geben?
 

Endurion

Erfahrenes Mitglied
Wenn du pretransformed vertices benutzt (D3DFVF_XYZRHW), dann haben Matrizen keine Auswirkung. Du sagst ja mit dem Flag, dass die Koordinaten bereits die finalen sind.

Du müsstest das auf D3DFVF_XYZ umstellen. Dann kann es ein bißchen Fummelei geben, bis du deine "Kamera" wieder sauber auf deine 3d-Objekte ausgerichtet hast :)
 

Arjitan

Grünschnabel
Oh man... Danke,
ich habe die letzten Tage an allem rumgebastelt... Aber meinste ich habe darauf geachtet das D3DFVF_XYZRHW sich nicht mehr durch Matrizen verändern läßt. Hatte das Testprogramm dazu zusammengeschustert, weil ich sehen wollte ob ich auf die Art und Weise ne Hud basteln kann.

Es ist schon seltsam das ich mit dem 3D Teil weniger Probleme habe als mit dem 2D Teil. ^^
Aber ich lerne ja noch und es macht wirklich Spaß. (komischerweise grade das fehlersuchen, da lern ich auch am meisten.)
 
Zuletzt bearbeitet:

Neue Beiträge