Direct3d problem bei indizierten dreieckslisten
-
Alles wrd angezeigt(bis auf meine indizierte dreiecks liste)
#include "windows.h" #include "d3dx9.h" D3DXMATRIX ViewMatrix; D3DXMATRIX ProjectionMatrix; D3DXVECTOR3 CameraPosition; D3DXVECTOR3 CameraBlickrichtung; D3DXVECTOR3 CameraVertikale; HWND main_window_handle = NULL; HINSTANCE hinstance_app; LPDIRECT3D9 lp3D = NULL; LPDIRECT3DDEVICE9 lp3DDevice = NULL; LPDIRECT3DVERTEXBUFFER9 Object = NULL; LPDIRECT3DVERTEXBUFFER9 A1 = NULL; LPDIRECT3DVERTEXBUFFER9 N1 = NULL; LPDIRECT3DVERTEXBUFFER9 E1 = NULL; LPDIRECT3DVERTEXBUFFER9 V1 = NULL; LPDIRECT3DINDEXBUFFER9 I1 = NULL; LPDIRECT3DTEXTURE9 lpTexture = NULL; LPDIRECT3DTEXTURE9 lpTexture2 = NULL; LPDIRECT3DTEXTURE9 lpTexture3 = NULL; LPDIRECT3DTEXTURE9 lpTexture4 = NULL; #define WINDOW_CLASS_NAME "NFS U2" #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) WORD* IndexArray = new WORD[3]; #define T1 "C:\\Users\\Michael\\Desktop\\Asteroidhunter3Dv3\\Graphics\\BackgroundStars.bmp" #define T2 "C:\\Users\\Michael\\Desktop\\Asteroidhunter2D\\Graphics\\Asteroid1.bmp" #define T3 "C:\\Users\\Michael\\Desktop\\Asteroidhunter3Dv3\\Graphics\\Nebula1.bmp" #define T4 "C:\\Users\\Michael\\Desktop\\Asteroidhunter2D\\Graphics\\Erde.bmp" struct CustomVertex { float x,y,z; float tu,tv; }; struct Vertex { float x,y,z; DWORD color; }; CustomVertex ObjectVertices[]= { {-7.0f,-6.0f,0.0f,0.0f,1.0f}, {-7.0f,6.0f,0.0f,0.0f,0.0f}, {7.0f,-6.0f,0.0f,1.0f,1.0f}, {7.0f,-6.0f,0.0f,1.0f,1.0f}, {-7.0f,6.0f,0.0f,0.0f,0.0f}, {7.0f,6.0f,0.0f,1.0f,0.0f}, }; CustomVertex Astereoid_1[]= { {-4.0f,2.0f,0.0f,0.0f,1.0f}, {-4.0f,4.0f,0.0f,0.0f,0.0f}, {-2.5f,2.0f,0.0f,1.0f,1.0f}, {-2.5f,2.0f,0.0f,1.0f,1.0f}, {-4.0f,4.0f,0.0f,0.0f,0.0f}, {-2.5f,4.0f,0.0f,1.0f,0.0f}, }; CustomVertex Nebel[]= { {-3.0f,-3.0f,0.0f,-0.2f,1.2f}, {-3.0f,3.0f,0.0f,0.0f,0.0f}, {3.0f,-3.0f,0.0f,1.0f,1.0f}, {3.0f,-3.0f,0.0f,1.0f,1.0f}, {-3.0f,3.0f,0.0f,0.0f,0.0f}, {3.0f,3.0f,0.0f,1.0f,0.0f}, }; CustomVertex Erde[]= { {3.0f,-1.0f,0.0f,0.0f,1.0f}, {3.0f,0.5f,0.0f,0.0f,0.0f}, {4.0f,-1.0f,0.0f,1.0f,1.0f}, {4.0f,-1.0f,0.0f,1.0f,1.0f}, {3.0f,0.5f,0.0f,0.0f,0.0f}, {4.0f,0.5f,0.0f,1.0f,0.0f}, }; void Init_3D(); void Init_Projection(); void Init_RenderOptions(); void Init_Szene(); void Render(); void Init_Textures(); 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,"NFS U2",WS_OVERLAPPED | WS_VISIBLE,0,0,1680,1050,NULL,NULL,hinstance,NULL))) return(0); main_window_handle = hwnd; Init_3D(); Init_Projection(); Init_RenderOptions(); Init_Szene(); Init_Textures(); 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); } } ShowCursor(false); Render(); } 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_Projection() { 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,100000000000.0f); lp3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix); lp3DDevice->SetTransform(D3DTS_PROJECTION,&ProjectionMatrix); } void Init_RenderOptions() { lp3DDevice->SetRenderState(D3DRS_ZENABLE,true); lp3DDevice->SetRenderState(D3DRS_LIGHTING,false); lp3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); lp3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); lp3DDevice->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_CLAMP); lp3DDevice->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_CLAMP); } void Init_Szene() { IndexArray[0]=2; IndexArray[1]=0; IndexArray[2]=1; IndexArray[3]=D3DCOLOR_XRGB(255,255,255); WORD* var; lp3DDevice->CreateIndexBuffer(3*sizeof(WORD),D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&I1,NULL); I1->Lock(0,0,(VOID**)&var,0); memcpy(var,IndexArray,3*sizeof(WORD)); I1->Unlock(); void* VBS; lp3DDevice->CreateVertexBuffer(sizeof(ObjectVertices),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&Object,NULL); Object->Lock(0,0,&VBS,0); memcpy(VBS,ObjectVertices,sizeof(ObjectVertices)); Object->Unlock(); lp3DDevice->CreateVertexBuffer(sizeof(Astereoid_1),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&A1,NULL); A1->Lock(0,0,&VBS,0); memcpy(VBS,Astereoid_1,sizeof(Astereoid_1)); A1->Unlock(); lp3DDevice->CreateVertexBuffer(sizeof(Nebel),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&N1,NULL); N1->Lock(0,0,&VBS,0); memcpy(VBS,Nebel,sizeof(Nebel)); N1->Unlock(); lp3DDevice->CreateVertexBuffer(sizeof(Erde),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&E1,NULL); E1->Lock(0,0,&VBS,0); memcpy(VBS,Erde,sizeof(Erde)); E1->Unlock(); lp3DDevice->SetFVF(D3D_CUSTOMVERTEX); } void Init_Textures() { 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|D3DX_FILTER_DITHER,D3DCOLOR_XRGB(0,0,0),0,0,&lpTexture); D3DXCreateTextureFromFileEx(lp3DDevice,T2,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|D3DX_FILTER_DITHER,D3DCOLOR_XRGB(0,0,0),0,0,&lpTexture2); D3DXCreateTextureFromFileEx(lp3DDevice,T3,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|D3DX_FILTER_DITHER,D3DCOLOR_XRGB(0,0,0),0,0,&lpTexture3); D3DXCreateTextureFromFileEx(lp3DDevice,T4,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|D3DX_FILTER_DITHER,D3DCOLOR_XRGB(0,0,0),0,0,&lpTexture4); } void Render() { lp3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0); lp3DDevice->BeginScene(); lp3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true); lp3DDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA); lp3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA); lp3DDevice->SetStreamSource(0,N1,0,sizeof(CustomVertex)); lp3DDevice->SetTexture(0,lpTexture3); lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); lp3DDevice->SetStreamSource(0,Object,0,sizeof(CustomVertex)); lp3DDevice->SetTexture(0,lpTexture); lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); lp3DDevice->SetStreamSource(0,A1,0,sizeof(CustomVertex)); lp3DDevice->SetTexture(0,lpTexture2); lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); lp3DDevice->SetStreamSource(0,E1,0,sizeof(CustomVertex)); lp3DDevice->SetTexture(0,lpTexture4); lp3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2); lp3DDevice->SetStreamSource(0,V1,0,sizeof(Vertex)); lp3DDevice->SetIndices(I1); if(FAILED(lp3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,3,0,1))) { SendMessage(main_window_handle,WM_CLOSE,0,0); } lp3DDevice->EndScene(); lp3DDevice->Present(NULL,NULL,NULL,NULL); }
-
Junge... sage uns doch einfach mal, WAS für Probleme du hast. Das wird langsam echt nervig.
-
Kóyaánasqatsi schrieb:
Junge... sage uns doch einfach mal, WAS für Probleme du hast. Das wird langsam echt nervig.
was regst du dich immer so ueber ihn auf? siehst du noch irgend jemanden der das macht?
ueberlass es der natur, entweder merkt er irgendwann dass seine "geht nicht" post keine hilfe herbeirufen und wird ordentlich posten, oder er lernt es nie und wird nie hilfe bekommen.
natural selection.und auch du hast eine chance zu evolutionieren auf das niveau der anderen.
-
c++lernerbrauch hilfe schrieb:
Alles wrd angezeigt (bis auf meine indizierte dreiecks liste)
Du befüllst in deinem code nur den index buffer I1, nicht aber den vertex buffer V1...