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!


Anmelden zum Antworten