Ich habe ein Problem bei der 3D Programmierung
-
Ich versuche gerade ein 3D Dreieck darzustellen leider bleibt der Bildschirm blau.
Falls ihr keinen Fehler entdecken könnt, könnt ihr mir dann bitte einen Funktionierenden code schreiben, fände ich nett.
[code]#define WINDOW_CLASS_NAME "freestyle-games"
#define WIN32_LEAN_AND_MEAN#include <windows.h>
#include <d3d9.h>LPDIRECT3D9 lp3D = NULL;
LPDIRECT3DDEVICE9 lp3DD = NULL;#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();LPDIRECT3DVERTEXBUFFER9 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){
........//Fenster
main_window_handle = hwnd;
Init_3D();
Init_Scene();
while(TRUE)
{...........//Spielschleife
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[]=
{
{ 400.0f, 330.0f, 0.0f, 1.0f, 0xFFFF0000 },
{ 240.0f, 330.0f, 0.0f, 1.0f, 0xFF00FF00 },
{ 320.0f, 150.0f, 0.0f, 1.0f, 0xFF0000FF }
};
if(FAILED(lp3DD->CreateVertexBuffer(sizeof(VERTEX),NULL,MY_FVF,D3DPOOL_DEFAULT,&m_pVertex,NULL)))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
void* pVerts;
if(FAILED(m_pVertex->Lock(0,sizeof(verts),(void**)&pVerts,NULL)))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
if(FAILED(memcpy(pVerts,&verts,sizeof(verts))))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
m_pVertex->Unlock();
}
void Render2()
{lp3DD->BeginScene();
if(FAILED(lp3DD->SetStreamSource(0,m_pVertex,0,3*sizeof(VERTEX))))
{SendMessage(main_window_handle,WM_CLOSE,0,0);
}
if(FAILED(lp3DD->SetFVF(MY_FVF)))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
if(FAILED(lp3DD->DrawPrimitive(D3DPT_TRIANGLELIST,0,1)))
{
SendMessage(main_window_handle,WM_CLOSE,0,0);
}
lp3DD->EndScene();}
-
Bei der DirectX-SDK snd dutzende Beispiele und Tutorials dazu dabei, les die doch mal.
rya.
-
Habs nochmal angesehen, dir fehlt scheinbar das lp3DD->Present(NULL, NULL, 0, NULL);
Undd nutze bitte die [ cpp ] -Tags!
rya.
-
Gibt's dann hier auch 20€?