mehrere Probleme mit Direct X

TimN

Erfahrenes Mitglied
Hi,

also ich habe jetzt schon ein paar Tutorials mehr oder weniger durchgelesen, aber jetzt hab ich ein paar Probleme:

1.
wenn ich ein Triangle anzeigen will gibt es probleme mit der Farbe. Wenn einer der Eckpunkte den Farbwert
D3DCOLOR_XRGB(255, x, y)
hat, wobei x und y egal ist (man bekommt immer das gleiche Ergebnis), ist das komplette Dreieck rot. Egal, welche Farbe die anderen Eckpunkte haben.
Doch wenn jetzt keiner der Eckpunkte bei rot einen wert von 255 hat, wird das Dreieck nicht angezeigt.
Woran kann das liegen?

2.
Ich habe aus einem Tutorial folgenden Code zum Blickwinkel setzen:
Code:
 D3DXMATRIX matView; 

D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(0.0f, 0.0f, -30.0f), //Camera Position
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), //Look At Position
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); //Up Direction

g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
das ganze wird zwischen BeginScene() und EndScene() aufgerufen.
Aber es ist egal, welche Werte ich einsetze. Das Bild am Ende sieht immer gleich aus :(

Kann mir einer bei den Problemen helfen?
 
Da fehlt leider dein kompletter Code um vernünftige Aussagen zu treffen, aber für Vermutungen reicht es:

1) Hast du evtl. ein Licht mit nur rotem Farbantei?
2) Ist dein Dreieck mit vortransformierten Vertices dargestellt oder mit normalen?
 
Hi,

also ein Licht ist nicht vorhanden. (auf die Idee bin ihc auch schon gekommen)

Das Dreieck wird vor der Hauptschleife folgendermaßen erzeugt:
Code:
HRESULT InitVertexBuffer()
{
VOID* pVertices;
 
CUSTOMVERTEX cvVertices[] =
{ 
{200.0f, 300.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0)},
{400.0f, 300.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0)},
{400.0f, 400.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255)},
};
 
//Create the vertex buffer from our device
if(FAILED(g_pD3DDevice->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVertexBuffer)))
return E_FAIL;
 
//Get a pointer to the vertex buffer vertices and lock the vertex buffer
 
 
 
if(FAILED(g_pVertexBuffer->Lock(0, sizeof(cvVertices), (BYTE**)&pVertices, 0)))
return E_FAIL;
 
//Copy our stored vertices values into the vertex buffer
memcpy(pVertices, cvVertices, sizeof(cvVertices));

//Unlock the vertex buffer
 
g_pVertexBuffer->Unlock();
return S_OK;
}

und in der Hauptschleife so gezeichnet:
Code:
g_pD3DDevice->BeginScene();
 
SetupCamera(); // der code aus meinem 1. Post
 
//Rendering our triangle
 
g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, sizeof(CUSTOMVERTEX));
g_pD3DDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
 
//End the scene
 
g_pD3DDevice->EndScene();

Folgendes sollte noch geasgt sein:
Code:
struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD colour;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
 
Aha, Problem gesichtet: Dein D3DFVF_CUSTOMVERTEX beinhaltet D3DFVF_XYZRHW, das sind vortransformierte Vertices. Wenn du die wirklich verwenden willst, muss dein CUSTOMVERTEX struct auch ein zusätzliches float nach x,y,z beinhalten:

Code:
struct CUSTOMVERTEX
{
FLOAT x, y, z;
FLOAT fRHW;
DWORD colour;
};

Wenn du DirectX auf Debug stellst (Systemsteuerung) und das Output hochdrehst, müsste im Ausgabefenster eigentlich eine dicke Meldung darüber stehen, dass deine Deklaration und Definition nicht zusammenpassen. Öfter mal anmachen, ist recht interessant!

Nachtrag: Du willst vermutlich nicht-vortransformierte Vertices benutzen, dann ändere dein D3DFVF_CUSTOMVERTEX-Define:

#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE )
 
Zuletzt bearbeitet:
Zurück