Problem mit Punkten
-
Wenn ich den Code unten ausführen lasse bleibt das Bild schwarz.
Es tritt nirgendwo ein Fehler auf kann sich mal jemand den Code ansehen ?Danke schon mal für die Hilfe.
#include <windows.h> #include <d3d9.h> #include <d3dx9.h> #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM); LPDIRECT3D9 g_pD3D =NULL; LPDIRECT3DDEVICE9 g_pD3DDevice =NULL; bool InitD3D(HWND hWnd); bool InitGeometry(); bool Render(); void SetupMatrices(); void Cleanup(); #define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) float tempFrnd; long tempLrnd; long HelpColorValue; long AnzahlPunkte; LPDIRECT3DVERTEXBUFFER9 PunkteVB; struct POINTVERTEX { D3DXVECTOR3 position; D3DCOLOR color; }; inline float frnd(float low, float high) { tempFrnd = low + ( high - low ) * ( (FLOAT)rand() ) / RAND_MAX; if(tempFrnd < high) return tempFrnd; else return low; } inline long lrnd(long low, long high) { tempLrnd = low + ( high - low ) * ( (long)rand() ) / RAND_MAX; if(tempLrnd < high) return tempLrnd; else return low; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) { static char szClassName[]="Fensterklasse"; HBRUSH WindowBrush=CreateSolidBrush(RGB(255,255,255)); WNDCLASSEX winclass; winclass.cbClsExtra=0; winclass.cbSize=sizeof(WNDCLASSEX); winclass.cbWndExtra=0; winclass.hbrBackground=WindowBrush; winclass.hCursor=LoadCursor(NULL,IDC_ARROW); winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); winclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION); winclass.hInstance=hInstance; winclass.lpfnWndProc=WindowProc; winclass.lpszClassName=szClassName; winclass.lpszMenuName=NULL; winclass.style=CS_HREDRAW | CS_VREDRAW; RegisterClassEx(&winclass); HWND hWnd=CreateWindowEx(NULL, szClassName, "Sterne", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0,640,480, NULL, NULL, hInstance, NULL); if(InitD3D(hWnd)) { if(InitGeometry()) { ShowWindow(hWnd,iCmdShow); UpdateWindow(hWnd); MSG msg; ZeroMemory(&msg,sizeof(msg)); while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,0,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else Render(); } } else MessageBox(hWnd,"Geometrie konnte nicht initialisiert werden !",0,0); } else MessageBox(hWnd,"Direct3D konnte nicht initialisiert werden !",0,0); return 0; } LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_CREATE: { return 0; } case WM_KEYUP: { switch(LOWORD(wParam)) { case VK_ESCAPE: { SendMessage(hWnd,WM_CLOSE,0,0); return 0; } } return 0; } case WM_DESTROY: { Cleanup(); PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd,msg,wParam,lParam); } bool InitD3D(HWND hWnd) { D3DDISPLAYMODE d3ddm; D3DPRESENT_PARAMETERS d3dpp; D3DCAPS9 d3dcaps; ZeroMemory(&d3dpp,sizeof(d3dpp)); if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))) return false; if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm))) return false; if(FAILED(g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&d3dcaps))) return false; d3dpp.Windowed=TRUE; d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat=d3ddm.Format; d3dpp.BackBufferCount=1; d3dpp.BackBufferHeight=d3ddm.Height; d3dpp.BackBufferWidth=d3ddm.Width; d3dpp.EnableAutoDepthStencil=TRUE; d3dpp.AutoDepthStencilFormat=D3DFMT_D16; if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice))) return false; return true; } bool InitGeometry() { AnzahlPunkte=5000; if(FAILED(g_pD3DDevice->CreateVertexBuffer(AnzahlPunkte*sizeof(POINTVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_POINTVERTEX, D3DPOOL_MANAGED, &PunkteVB, NULL))) return false; POINTVERTEX* pPointVertices; PunkteVB->Lock(0,0,(VOID**)&pPointVertices,0); for(int i=0;i<AnzahlPunkte;i++) { pPointVertices[i].position=D3DXVECTOR3(frnd(-3.0f,3.0f), frnd(-2.5f,2.5f), 5.0f); HelpColorValue=lrnd(50,200); pPointVertices[i].color=D3DCOLOR_XRGB(HelpColorValue, HelpColorValue, HelpColorValue); } PunkteVB->Unlock(); return true; } void SetupMatrices() { D3DXMATRIXA16 matProj; D3DXVECTOR3 vEyePt (0.0f ,0.0f ,0.0f); D3DXVECTOR3 vLookatPt(0.0f,0.0f,0.0f); D3DXVECTOR3 vUpVec (0.0f,0.0f,0.0f); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH(&matView,&vEyePt,&vLookatPt,&vUpVec); g_pD3DDevice->SetTransform(D3DTS_VIEW,&matView); D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.0f,1.0f,100.0f); g_pD3DDevice->SetTransform(D3DTS_PROJECTION,&matProj); } bool Render() { HRESULT hr; g_pD3DDevice->Clear(0,0,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0); g_pD3DDevice->BeginScene(); SetupMatrices(); g_pD3DDevice->SetRenderState(D3DRS_ZENABLE,FALSE); g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); hr=g_pD3DDevice->SetFVF(D3DFVF_POINTVERTEX); hr=g_pD3DDevice->SetStreamSource(0, PunkteVB, 0, sizeof(POINTVERTEX)); hr=g_pD3DDevice->DrawPrimitive(D3DPT_POINTLIST, 0, AnzahlPunkte); g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE); g_pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE); g_pD3DDevice->EndScene(); g_pD3DDevice->Present(0,0,0,0); return true; } void Cleanup() { if(PunkteVB) PunkteVB->Release(); if(g_pD3DDevice!=NULL) g_pD3DDevice->Release(); if(g_pD3D!=NULL) g_pD3D->Release(); }
-
Du schaust von 0 nach 0.
Bye, TGGC
-
D3DXVECTOR3 vEyePt (0.0f ,0.0f ,0.0f); D3DXVECTOR3 vLookatPt(0.0f,0.0f,0.0f); D3DXVECTOR3 vUpVec (0.0f,0.0f,0.0f);
das kommt mir auch stark verdächtig vor
-
Komisch, warum steht jetzt nicht mehr da, das ich mir den Code anschaue? Bug im Board!