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.