Anfänger hat Probleme bei Transformationen mit DirectX
-
Bei diesem Programmcode tritt dieses Problem auf!!!!!!!
Problem: Wie ihr in diesem Video sehen werdet, wird wenn ich das Objekt bewege
das Objekt an der alten Position nicht mehr gelöscht!!!! http://www.youtube.com/watch?v=8x2KLeiRWPgCode:
#include <windows.h> #include <d3dx9.h> #include <dinput.h> HWND main_window_handle = NULL; HINSTANCE hinstance_app = NULL; #define WINDOW_CLASS_NAME "Game Shell Window" #define WIN32_LEAN_AND_MEAN #define T1 "C:\\Users\\Michael\\Pictures\\Car_1.bmp" LPDIRECT3D9 lp3D = NULL; LPDIRECT3DDEVICE9 lp3DDevice = NULL; LPDIRECT3DVERTEXBUFFER9 Quad = NULL; LPDIRECT3DTEXTURE9 lpTexture = NULL; LPDIRECTINPUT8 lpDI = NULL; LPDIRECTINPUTDEVICE8 lpKey = NULL; float TransX; float TransY; #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_TEX1) struct CustomVertex { float x,y,z; float tu,tv; }; CustomVertex QuadVertices[]= { {-1.0f,0.0f,0.0f,0.0f,1.0f}, {-1.0f,2.0f,0.0f,0.0f,0.0f}, {1.0f,0.0f,0.0f,1.0f,1.0f}, {1.0f,0.0f,0.0f,1.0f,1.0f}, {-1.0f,2.0f,0.0f,0.0f,0.0f}, {1.0f,2.0f,0.0f,1.0f,0.0f}, }; void Init_3D(); void Init_Szene(); void Render(); void Init_Projection(); void Init_Input(); void Get_Input(); 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,"My Game Shell",WS_POPUP | WS_VISIBLE,0,0,1680,1050,NULL,NULL,hinstance,NULL))) return(0); main_window_handle = hwnd; Init_Input(); Init_3D(); Init_Projection(); 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(); Get_Input(); } return(msg.wParam); } void Init_3D() { lp3D = Direct3DCreate9(D3D_SDK_VERSION); D3DPRESENT_PARAMETERS dpp; ZeroMemory(&dpp,sizeof(dpp)); dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; dpp.BackBufferCount = 1; dpp.BackBufferWidth = 1680; dpp.BackBufferHeight = 1050; dpp.Windowed = TRUE; dpp.BackBufferFormat = D3DFMT_UNKNOWN;//D3DFMT_X8R8G8B8; dpp.hDeviceWindow = main_window_handle; lp3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,main_window_handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&dpp,&lp3DDevice); } void Init_Szene() { void* VBS; lp3DDevice->CreateVertexBuffer(sizeof(QuadVertices),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&Quad,NULL); Quad->Lock(0,0,&VBS,0); memcpy(VBS,QuadVertices,sizeof(QuadVertices)); Quad->Unlock(); D3DXCreateTextureFromFile(lp3DDevice,T1,&lpTexture); lp3DDevice->SetFVF(D3D_CUSTOMVERTEX); } void Render() { D3DXMATRIX matrix; lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0); lp3DDevice->BeginScene(); lp3DDevice->SetStreamSource(0,Quad,0,sizeof(CustomVertex)); D3DXMatrixTranslation(&matrix,TransX,TransY,0.0f); lp3DDevice->SetTransform(D3DTS_WORLD,&matrix); lp3DDevice->SetTexture(0,lpTexture); lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); lp3DDevice->EndScene(); lp3DDevice->Present(NULL,NULL,NULL,NULL); } void Init_Projection() { D3DXMATRIX ViewMatrix; D3DXMatrixLookAtLH(&ViewMatrix, &D3DXVECTOR3( 0.0f, 0.0f,-10.0f ), &D3DXVECTOR3( 0.0f, 0.0f, 0.0f ), &D3DXVECTOR3( 0.0f, 1.0f, 0.0f )); lp3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix); D3DXMATRIX ProjMatrix; D3DXMatrixPerspectiveFovLH(&ProjMatrix, D3DX_PI/4, 1680.0f/ 1050.0f, 0.0f, 100.0f); lp3DDevice->SetTransform(D3DTS_PROJECTION,&ProjMatrix); lp3DDevice->SetRenderState(D3DRS_LIGHTING,false); } void Init_Input() { DirectInput8Create(hinstance_app,DIRECTINPUT_VERSION,IID_IDirectInput8,(LPVOID*)&lpDI,NULL); lpDI->CreateDevice(GUID_SysKeyboard,&lpKey,NULL); lpKey->SetCooperativeLevel(main_window_handle,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE); lpKey->SetDataFormat(&c_dfDIKeyboard); lpKey->Acquire(); } void Get_Input() { bool bKey[256]; if(FAILED(lpKey->GetDeviceState(sizeof(bKey),(LPVOID)&bKey))) { lpKey->Acquire(); } if(bKey[DIK_RIGHT]) { TransX = TransX + 0.3f; } if(bKey[DIK_LEFT]) { TransX = TransX - 0.3f; } }