Direct3D Lichtquelle funktioniert nicht



  • Ich versuche gerade mit Direct3D licht darzustellen.
    Leider Bemerke ich nichts von Licht.1!!!!!!1

    #include "windows.h"
    #include "d3d9.h"
    #include "d3dx9.h"
    #include "dinput.h"
    HWND main_window_handle = NULL;
    HINSTANCE hinstance_app = NULL;
    D3DXMATRIX ViewMatrix;
    D3DXMATRIX ProjectionMatrix;
    D3DXVECTOR3 CameraPosition;
    D3DXVECTOR3 CameraBlickrichtung;
    D3DXVECTOR3 CameraVertikale;
    D3DLIGHT9 Light;
    #define WINDOW_CLASS_NAME  "Call of Duty Modern Warfare 2"
    #define T1 "C:\\users\\michael\\pictures\\Logo.bmp"
    
    #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 
    #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    #define D3D_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1)
    struct CustomVertex
    {
    	float x,y,z;
    	float tu,tv,d;
    	DWORD color;
    	float tt,ta;
    };
    CustomVertex Object[]=
    {
    	 { -1.0f, -1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 0.0f, 1.0f },  // Vorne
       { -1.0f,  1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 0.0f, 0.0f,},
       {  1.0f,  1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 1.0f, 0.0f,},
       {  1.0f,  1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 1.0f, 0.0f,},
       {  1.0f, -1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 1.0f, 1.0f,},
       { -1.0f, -1.0f, -1.0f,  0.0f,  0.0f, -1.0f, 0xFF00FF00, 0.0f, 1.0f,},
    
       {  1.0f, -1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 0.0f, 1.0f,},  // Hinten
       {  1.0f,  1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 0.0f, 0.0f,},
       { -1.0f,  1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 1.0f, 0.0f,},
       { -1.0f,  1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 1.0f, 0.0f,},
       { -1.0f, -1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 1.0f, 1.0f,},
       {  1.0f, -1.0f,  1.0f,  0.0f,  0.0f,  1.0f, 0x000000FF, 0.0f, 1.0f,},
    
       { -1.0f,  1.0f, -1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 0.0f, 1.0f },  // Oben
       { -1.0f,  1.0f,  1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 0.0f, 0.0f },
       {  1.0f,  1.0f,  1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 1.0f, 0.0f },
       {  1.0f,  1.0f,  1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 1.0f, 0.0f },
       {  1.0f,  1.0f, -1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 1.0f, 1.0f },
       { -1.0f,  1.0f, -1.0f,  0.0f,  1.0f,  0.0f, 0xFFFF0000, 0.0f, 1.0f },
    
       {  1.0f, -1.0f, -1.0f,  0.0f, -1.0f,  0.0f, 0xFFFFFF00, 0.0f, 1.0f },  // Unten
       {  1.0f, -1.0f,  1.0f,  0.0f, -1.0f,  0.0f, 0xFFFFFF00, 0.0f, 0.0f },
       { -1.0f, -1.0f,  1.0f,  0.0f, -1.0f,  0.0f, 0xFFFFFF00, 1.0f, 0.0f },
       { -1.0f, -1.0f,  1.0f,  0.0f, -1.0f,  0.0f, 0xFFFFFF00, 1.0f, 0.0f },
       { -1.0f, -1.0f, -1.0f,  0.0f, -1.0f,  0.0f, 0xFFFFFF00, 1.0f, 1.0f },
       {  1.0f, -1.0f, -1.0f,  0.0f, -1.0f,  0.0f, 0x00FFFF00, 0.0f, 1.0f },
    
       { -1.0f, -1.0f,  1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 0.0f, 1.0f },  // Links
       { -1.0f,  1.0f,  1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 0.0f, 0.0f },
       { -1.0f,  1.0f, -1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 1.0f, 0.0f },
       { -1.0f,  1.0f, -1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 1.0f, 0.0f },
       { -1.0f, -1.0f, -1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 1.0f, 1.0f },
       { -1.0f, -1.0f,  1.0f, -1.0f,  0.0f,  0.0f, 0xFFFF00FF, 0.0f, 1.0f },
    
       {  1.0f, -1.0f, -1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 0.0f, 1.0f },  // Rechts 
       {  1.0f,  1.0f, -1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 0.0f, 0.0f },
       {  1.0f,  1.0f,  1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 1.0f, 0.0f },
       {  1.0f,  1.0f,  1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 1.0f, 0.0f },
       {  1.0f, -1.0f,  1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 1.0f, 1.0f },
       {  1.0f, -1.0f, -1.0f,  1.0f,  0.0f,  0.0f, 0xFF00FFFF, 0.0f, 1.0f },
    };
    
    LPDIRECT3D9 lp3D = NULL;
    LPDIRECT3DDEVICE9 lp3DDevice = NULL;
    LPDIRECT3DVERTEXBUFFER9 ObjectVB = NULL;
    LPDIRECT3DTEXTURE9 lpTexture = NULL;
    
    void Init_3D();
    void Init_ViewProjection();
    void Init_RenderOptions();
    void Init_Szene();
    void Render();
    
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) 
    { 
    
    PAINTSTRUCT ps; 
    HDC hdc; 
    
    switch(msg) 
    { 
        case WM_CREATE: 
        { 
            return(0); 
        } 
        break; 
    
        case WM_PAINT: 
        { 
            hdc = BeginPaint(hwnd,&ps); 
            EndPaint(hwnd,&ps); 
            return(0); 
        } 
        break; 
    
        case WM_DESTROY: 
        { 
            PostQuitMessage(0); 
            return(0); 
        } 
        break; 
    
        default: 
        break; 
    
    } 
    return (DefWindowProc(hwnd, msg, wparam, lparam)); 
    
    } 
    
    int WINAPI WinMain( HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow) 
    { 
    
    WNDCLASSEX winclass; 
    HWND hwnd; 
    MSG msg; 
    
    winclass.cbSize = sizeof(WNDCLASSEX); 
    winclass.style = CS_HREDRAW | CS_VREDRAW; 
    winclass.lpfnWndProc = WindowProc; 
    winclass.cbClsExtra = 0; 
    winclass.cbWndExtra = 0; 
    winclass.hInstance = hinstance; 
    winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    winclass.hCursor = LoadCursor(NULL, IDC_ARROW); 
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 
    winclass.lpszMenuName = NULL; 
    winclass.lpszClassName = WINDOW_CLASS_NAME; 
    winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
    
    hinstance_app = hinstance; 
    
    if (!RegisterClassEx(&winclass)) 
    return(0); 
    
    if (!(hwnd = CreateWindowEx(NULL,WINDOW_CLASS_NAME,"Call of Duty Modern Warfare 2",WS_OVERLAPPED | WS_VISIBLE,0,0,1680,1050,NULL,NULL,hinstance,NULL))) 
        return(0); 
    
    main_window_handle = hwnd; 
    
    Init_3D();
    Init_ViewProjection();
    Init_RenderOptions();
    Init_Szene();
    while(TRUE) 
        { 
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
        { 
    
        if (msg.message == WM_QUIT) 
        break; 
    
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
        if(KEYDOWN(VK_ESCAPE)) 
        { 
    
    		SendMessage(main_window_handle,WM_CLOSE,0,0);
    
        } 
    
        }
    	Render();
    	ShowCursor(false);
    
    }
    
    return(msg.wParam); 
    
    } 
    
    void Init_3D()
    {
    	lp3D = Direct3DCreate9(D3D_SDK_VERSION);
    	D3DPRESENT_PARAMETERS dpp;
    	ZeroMemory(&dpp,sizeof(dpp));
    	dpp.Windowed = true;
    	dpp.BackBufferCount = 1;
    	dpp.EnableAutoDepthStencil = true;
    	dpp.AutoDepthStencilFormat = D3DFMT_D16;
    	dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
    	dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    	lp3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,main_window_handle,D3DCREATE_HARDWARE_VERTEXPROCESSING,&dpp,&lp3DDevice);
    }
    void Init_ViewProjection()
    {
        CameraPosition = D3DXVECTOR3(0.0f,0.0f,-10.0f);
    	CameraBlickrichtung = D3DXVECTOR3(0.0f,0.0f,0.0f);
    	CameraVertikale = D3DXVECTOR3(0.0f,1.0f,0.0f);
    	D3DXMatrixLookAtLH(&ViewMatrix,&CameraPosition,&CameraBlickrichtung,&CameraVertikale);
    	D3DXMatrixPerspectiveFovLH(&ProjectionMatrix,D3DX_PI/4,1680/1050,1.0f,100000.0f);
    	lp3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);
    	lp3DDevice->SetTransform(D3DTS_PROJECTION,&ProjectionMatrix);
    }
    void Init_RenderOptions()
    {
    	lp3DDevice->SetRenderState(D3DRS_LIGHTING,true);
    	lp3DDevice->SetRenderState(D3DRS_DITHERENABLE,true);
    	lp3DDevice->SetRenderState(D3DRS_ZENABLE,true);
    	lp3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
    	lp3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
    	lp3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
    	lp3DDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
    	lp3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
    }
    void Init_Szene()
    {
    	void* VBS;
    	lp3DDevice->CreateVertexBuffer(sizeof(Object),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&ObjectVB,NULL);
    	ObjectVB->Lock(0,0,&VBS,0);
    	memcpy(VBS,&Object,sizeof(Object));
    	ObjectVB->Unlock();
    	lp3DDevice->SetFVF(D3D_CUSTOMVERTEX);
        D3DXCreateTextureFromFileEx(lp3DDevice,T1,D3DX_DEFAULT,D3DX_DEFAULT,D3DX_DEFAULT,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR|D3DX_FILTER_DITHER,D3DX_FILTER_BOX|D3DX_FILTER_MIRROR,D3DCOLOR_XRGB(0,0,0),0,0,&lpTexture);
        ZeroMemory(&Light,sizeof(Light));
    	Light.Type = D3DLIGHT_POINT;
    	Light.Diffuse.r = 100.0f;
    	Light.Diffuse.g = 20.0f;
    	Light.Diffuse.b = 100.0f;
    	Light.Specular.b = 20.0f;
    	Light.Specular.g = 1.0f;
    	Light.Specular.r = 1.0f;
    	Light.Attenuation0 = 0.0f;
    	Light.Attenuation1 = 1.0f;
    	Light.Attenuation2 = 0.0f;
    	Light.Range = 100.0f;
    	Light.Position.x = 0.0f;
    	Light.Position.y = 0.0f;
    	Light.Position.z = -10.0f;
    	lp3DDevice->SetLight(0,&Light);
    	lp3DDevice->LightEnable(0,true);
    }
    void Render()
    {
    	lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(255,0,0),1.0f,0);
    	lp3DDevice->BeginScene();
    	lp3DDevice->SetStreamSource(0,ObjectVB,0,sizeof(CustomVertex));
    	lp3DDevice->SetTexture(0,lpTexture);
    	lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,12);
    	lp3DDevice->EndScene();
    	lp3DDevice->Present(NULL,NULL,NULL,NULL);
    }
    

    ich fände es nett wenn mir jemand helfen könnte



  • Es gibt im DirectX Sample Browser (August 2009) eine Tutorialreihe, darunter ein Tutorial 4 "Lights". Vielleicht hilft es ein wenig weiter.


Anmelden zum Antworten