
Опытный
 
Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск
Репутация: нет Всего: 3
|
Тут взялся за изучение DirectX соорудил такой код а он не рисует студия ошибок не даёт может кто знает. куски кода брал из примера с codesampler.com проект инициализации. По идее должен был вивестись треугольник под углом а ни чего нет. код нижеследующий | Код | #define STRICT #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <d3d9.h> #include <d3dx9.h> #include "resource.h" #include <mmsystem.h>
HWND g_hWnd = NULL; LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_quadVertices_VB = NULL; #define D3DFVF_MY_VERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE )
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void init(void); void shutDown(void); void render(void);
struct Vertex { float x, y, z; float tu, tv; }; bool g_bRenderInWireFrame = false; D3DPRIMITIVETYPE g_currentPrimitive = D3DPT_TRIANGLEFAN;
Vertex g_quadVertices[] = { { 0.0f, 100.0f, 0.0f, 1.0f,0.0f }, { 100.0f, -100.0f, 0.0f, 1.0f,1.0f }, {-100.0f,-100.0f, 0.0f, 1.0f,0.0f } };
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX winClass; MSG uMsg;
memset(&uMsg,0,sizeof(uMsg));
winClass.lpszClassName = "MY_WINDOWS_CLASS"; winClass.cbSize = sizeof(WNDCLASSEX); winClass.style = CS_HREDRAW | CS_VREDRAW; winClass.lpfnWndProc = WindowProc; winClass.hInstance = hInstance; winClass.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY); winClass.hIconSm = LoadIcon(hInstance, (LPCTSTR)IDI_SMALL); winClass.hCursor = LoadCursor(NULL, IDC_ARROW); winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winClass.lpszMenuName = NULL; winClass.cbClsExtra = 0; winClass.cbWndExtra = 0;
if( !RegisterClassEx(&winClass) ) return E_FAIL;
g_hWnd = CreateWindowEx( NULL, "MY_WINDOWS_CLASS", "Direct3D 1 практическая", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 640, 480, NULL, NULL, hInstance, NULL );
if( g_hWnd == NULL ) return E_FAIL;
ShowWindow( g_hWnd, nCmdShow ); UpdateWindow( g_hWnd );
init();
while( uMsg.message != WM_QUIT ) { if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &uMsg ); DispatchMessage( &uMsg ); } else render(); }
shutDown();
UnregisterClass( "MY_WINDOWS_CLASS", winClass.hInstance );
return uMsg.wParam; }
LRESULT CALLBACK WindowProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_KEYDOWN: { switch( wParam ) { case VK_ESCAPE: PostQuitMessage(0); break; } } break;
case WM_CLOSE: { PostQuitMessage(0); } case WM_DESTROY: { PostQuitMessage(0); } break;
default: { return DefWindowProc( hWnd, msg, wParam, lParam ); } break; }
return 0; }
void init( void ) { g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ); if( g_pD3D == NULL ) { return; }
D3DDISPLAYMODE d3ddm;
if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) ) { return; }
HRESULT hr;
if( FAILED( hr = g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16 ) ) ) { if( hr == D3DERR_NOTAVAILABLE ) return; }
D3DCAPS9 d3dCaps;
if( FAILED( g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps ) ) ) { return; }
DWORD dwBehaviorFlags = 0;
if( d3dCaps.VertexProcessingCaps != 0 ) dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; else dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3dpp; memset(&d3dpp, 0, sizeof(d3dpp));
d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) ) { return; } g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); g_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
D3DXMATRIX mProjection; D3DXMatrixPerspectiveFovLH( &mProjection, D3DXToRadian( 45.0f ), 1.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &mProjection ); Vertex *pVertices = NULL; g_pd3dDevice->CreateVertexBuffer( 5*sizeof(Vertex), 0, D3DFVF_MY_VERTEX, D3DPOOL_DEFAULT, &g_quadVertices_VB, NULL ); g_quadVertices_VB->Lock( 0, sizeof(g_quadVertices), (void**)&pVertices, 0 ); memcpy( pVertices, g_quadVertices, sizeof(g_quadVertices) ); g_quadVertices_VB->Unlock(); }
void shutDown( void ) { if( g_pd3dDevice != NULL ) g_pd3dDevice->Release();
if( g_pD3D != NULL ) g_pD3D->Release(); if( g_quadVertices_VB != NULL ) g_quadVertices_VB->Release(); }
void render( void ) { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_COLORVALUE(0.0f,0.0f,0.0f,0.0f), 1.0f, 0 );
g_pd3dDevice->BeginScene();
g_pd3dDevice->SetStreamSource( 0, g_quadVertices_VB, 0, sizeof(Vertex) ); g_pd3dDevice->SetFVF( D3DFVF_MY_VERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 2 );
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
|
--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут. 
|