PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DirectX Problem


Florian222222
2011-05-19, 21:01:46
hallo.
habe das problem dass mein dreieck dass aus vertices zusammengebastelt ist sich nicht transformieren lässt.

D3DXMatrix Matrix;
D3DXMatrixTranslation(&Matrix,0.0f,0.0f,2.0f);
g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,40,100),1.0f,0);

g_pD3DDevice->BeginScene();

g_pD3DDevice->SetTransform(D3DTS_WORLD,&Matrix);


if(FAILED(g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,triangle,sizeof(Vertex))))
{
MessageBox(NULL,"Error DrawingPrimitiveUP","Error",NULL);
return 1;
}

g_pD3DDevice->EndScene();

g_pD3DDevice->Present(NULL,NULL,NULL,NULL);
return 0;

mein problem ist jetzt dass das dreieck(falls z-transform auf 2.0f gesetzt) nicht sichtbar ist. ich will jedoch das dreieck nach hinten bewegen..
hoffe jemand kann mir helfen

AlecWhite
2011-05-20, 10:11:02
Ich glaube es muss -2.0f heißen - mit 2.0f kommt das Dreieck näher zu dir ran :)

Coda
2011-05-20, 14:05:42
Du solltest evtl. noch deine View- und Projection-Matrix posten. Falls die auf Idendity sind, wird da so oder so nix rauskommen.

Florian222222
2011-05-20, 14:51:36
so habs jetzt endlich geschafft :D
es heißt 2.0f aber ich habe noch eine Projektionsmatrix angeben müssen
danke ;D

habe jetzt einen kleinen denkfehler...

bei meinem programm wird immer
while(GetMessage(&Msg,0,0,NULL))
gemacht. in dieser schleife führe ich dann die move und render methode aus
jedoch rendert es dann nur neu wenn irgendeine aktion stattfindet.
muss ich für das einen eigenen thread machen oder kann man das auch iwie anders lösen?

Coda
2011-05-20, 15:13:52
Nö. Du brauchst ne PeekMessage-Loop.

Florian222222
2011-05-20, 19:14:38
danke :D
endlich funktioniert alles..
ich meld mich wieder falls was nicht funktioniert ;D

Florian222222
2011-05-20, 19:53:54
so jetzt hab ich ne frage.
wie kann ich .3ds/.obj/.blend in directX laden? gibt es dafür eine funktion oder etwas anderes vorgefertigtes suchen?
hoffe ihr könnt mir helfen. komme ja immer näher ans spielproggn ran xD

Florian222222
2011-05-20, 19:54:31
die dateien sind in blender modelliert...falls das wichtig ist

ShadowXX
2011-05-20, 23:31:46
die dateien sind in blender modelliert...falls das wichtig ist
Im Tutorial des SDK steht drinne wie man sowas lädt.

Florian222222
2011-05-21, 09:55:26
ok danke werds mir anschaun. ist das www.directxtutorial.com oder iwo auf msdn.com??

D4ve
2011-05-21, 13:17:03
Im SDK gibts ein Beispielprogramm mit dem OBJ-Dateien geladen werden. Lädt irgendwie einen Kaffeebecher oder sowas.

Ansonsten ist das Format ziemlich straight-forward, dass kann man ggf. auch selbst laden.
Also durchparsen und alle Vertices und Indices einlesen und einen entsprechenden VertexBuffer erzeugen in dem die Vertices abgelegt werden. Dito für die Indices mit einem IndexBuffer.
Die Konfiguration der Buffer hängt von DX-Version ab, dokumentiert sind die Einstellungen in der SDK-Doku.

Gast
2011-05-24, 20:31:25
Wenn du weißt, wie du Vertex und Index Buffers befüllst, schau dir mal Assimp (http://assimp.sourceforge.net/) an - importiert über 30 Formate über ein- und dieselbe Schnittstelle. Man muss das Rad ja nicht immer neu erfinden.

Florian222222
2011-05-25, 19:23:13
was ist denn besser? die Methode D3DXMeshFromFileX() oder assimp?
zur info: ich will NUR obj dateien laden...
ich versuche mich gerade an der methode jedoch gibt die mir immer einen fehler...

LPD3DXMESH Human_Head;
LPD3DXBUFFER pD3DXMtrlBuffer;
DWORD g_dwNumMaterials;

if(FAILED(D3DXLoadMeshFromX("human_head.obj",D3DXMESH_SYSTEMMEM,g_pD3DDevice,NULL,&pD3DXMtrlBuffer,NULL,&g_dwNumMaterials,&Human_Head)))
{
MessageBox(NULL,"Error Cannot load human_head.obj","Error",NULL);
return 1;
}