[DirectX] Vertices
-
Hi,
ich habe folgendes Problem: Ich habe einige Vertices in einem Array gespeichert und möchte diese jeweiles miteinander verbinden (D3DPT_LINELIST). Allerdings startet das Programm dann nicht richtig und der Bildschirm flimmert komisch. Das einzige was geht ist die Vertices mit D3DPT_POINTLIST anzuzeigen. Ich will sie aber verbinden
Also, das sind die Vertices:
typedef struct VERTEX { float x, y, z; float rhw; D3DCOLOR color; } VERTEX, *LPVERTEX; #define VERTEXCAPS (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) #define VERTEXCOUNT 20
Dann lege ich einen Vertexbuffer an:
LPDIRECT3DVERTEXBUFFER8 lpVB = NULL;
Nachdem dann das Device etc. initialisiert ist wird der Buffer erstellt:
lpDevice->CreateVertexBuffer(sizeof(VERTEX)*VERTEXCOUNT, D3DUSAGE_WRITEONLY, VERTEXCAPS, D3DPOOL_DEFAULT, &lpVB);
Dann werden die Vertices angelegt:
VERTEX front[VERTEXCOUNT]; srand((unsigned)time(0)); for(int i=0; i<VERTEXCOUNT; ++i) { front[i].x = float(rand()%800); front[i].y = float(rand()%600); front[i].z = 1.0f; front[i].rhw = 1.0f; front[i].color = 0xFFFFFF; }
In jedem Hauptschleifendurchgang sollen sie dann angezeigt und verbunden werden:
lpDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0); lpDevice->BeginScene(); VERTEX* pVertices; lpVB->Lock(0,0,(BYTE**)&pVertices,0); memcpy(pVertices, front, sizeof(VERTEX)*VERTEXCOUNT); lpVB->Unlock(); lpDevice->SetStreamSource(0,lpVB,sizeof(VERTEX)); lpDevice->SetVertexShader(VERTEXCAPS); lpDevice->DrawPrimitive(D3DPT_LINELIST, 0, VERTEXCOUNT); lpDevice->EndScene(); lpDevice->Present(NULL,NULL,0,NULL);
So, ich hoffe, ich habe die wichtigsten Zeilen herausgefischt. Wie gesagt, wenn ich sie mit D3DPT_POINTLIST zeichne, funktioniert es. Weiß jemand, wie das auch mit LINELIST etc. hinkriege?
Was mich auch noch brennend interessieren würde: Wie kann man die Bildschirmauflösung festsetzen?
So, danke an alle, die mir helfen
[ Dieser Beitrag wurde am 07.02.2003 um 17:07 Uhr von Phobos editiert. ]
-
ich hab mit dx nicht am hut aber ich glaube es gibt sowas wie LINESTRIP, sicher bin ich mir aber nicht...
cu
freddy
-
Hm,dann tritt derselbe komische Effekt auf. Es wird nicht in den Fullscreen-Mode geschaltet und der Bildschirm fängt an zu flimmern...
-
Einstellung der Auflösung:
D3DPRESENT_PARAMETERS D3DAktuelleEinstellung; ZeroMemory(&D3DAktuelleEinstellung, sizeof(D3DAktuelleEinstellung)); D3DAktuelleEinstellung.BackBufferWidth = 1024; D3DAktuelleEinstellung.BackBufferHeight = 768; if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &D3DAktuelleEinstellung, &m_pD3DDevice))) { // Fehler }