Ich versuche gerade mit Direct3D ein Dreieck darzustellen!!!!!!!!!11
-
Leider stürzt das Programm immer ab!!!!!!!!!!!!!!!!!!!!1
[code]#define WINDOW_CLASS_NAME "freestyle-games"
#define WIN32_LEAN_AND_MEAN#include <windows.h>
#include <d3d9.h>LPDIRECT3D9 lp3D = NULL;
LPDIRECT3DDEVICE9 lp3DD = NULL;IDirect3D9 *Szene;
IDirect3DDevice9 *Szenegraphik;#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)struct VERTEX
{
float x,y,z,rhw;
DWORD color;
};
#define MY_FVF D3DFVF_XYZRHW|D3DFVF_DIFFUSE
VERTEX verts[]=
{
{100.0f,300.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)},
{50.0f,500.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)},
{50.0f,500.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)}
};HWND main_window_handle = NULL;
HINSTANCE hinstance_app = NULL;void Init_3D();
void Render();IDirect3DVertexBuffer9 *m_pVertex;
void Init_Scene();
void Render2();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,
"freestyle-games",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,
1680,1050,
NULL,
NULL,
hinstance,
NULL)))
return(0);main_window_handle = hwnd;
Init_3D();
Init_Scene();
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(hwnd,WM_CLOSE,0,0);
}}
}
return(msg.wParam);
}
void Init_3D()
{
lp3D = Direct3DCreate9(D3D_SDK_VERSION);D3DPRESENT_PARAMETERS D3DPParams;
ZeroMemory(&D3DPParams,sizeof(D3DPParams));D3DPParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
D3DPParams.hDeviceWindow = main_window_handle;
D3DPParams.BackBufferCount = 1;D3DPParams.Windowed = FALSE;
D3DPParams.BackBufferWidth = 1680;
D3DPParams.BackBufferHeight = 1050;
D3DPParams.BackBufferFormat = D3DFMT_X8R8G8B8;lp3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
main_window_handle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&D3DPParams,
&lp3DD);}
void Render()
{lp3DD->Clear(0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255),1.0f,0);Render2();
if(FAILED(lp3DD->Present(NULL,NULL,NULL,NULL)))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
}void Init_Scene()
{
VERTEX verts[]=
{
{100.0f,300.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)},
{50.0f,500.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)},
{50.0f,500.0f,0.0f,1.0f,D3DCOLOR_XRGB(255,0,0)}
};
Szenegraphik->CreateVertexBuffer(3sizeof(VERTEX),NULL,MY_FVF,D3DPOOL_DEFAULT,&m_pVertex,NULL);
void pVerts;
m_pVertex->Lock(0,sizeof(verts),(void**)&pVerts,NULL);
memcpy(pVerts,&verts,sizeof(verts));
m_pVertex->Unlock();}
void Render2()
{
Szenegraphik->BeginScene();
Szenegraphik->SetStreamSource(0,m_pVertex,0,sizeof(VERTEX));
Szenegraphik->SetFVF(MY_FVF);
Szenegraphik->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
Szenegraphik->EndScene();
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
-
Erstmal Codetags richtig verwenden. Riecht verdächtig nach Trollversuch.
-
In der Doku ist es erklaert und es gibt auch genug Beispielcode zum SDK dazu. f'`8k
AutocogitoGruß, TGGC (Was Gamestar sagt...)