Evil_DarkMan
Гость
|
|
« Ответ #72 : 18-03-2009 17:52 » |
|
Ребят, по моему мне кажется, что не в железе дело! HRESULT hr=pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶ms, &pDevice); - это в фанке Init3D, zure второй параметр попробуй поставь D3DDEVTYPE_REF (если конечно на C++ пишешь) - может помочь, у меня лажня тож подобная была, а вааще #include <d3d9.h> #include <d3dx9.h> #pragma comment(lib, "d3d9.lib"); #pragma comment(lib, "d3dx9d.lib"); #pragma comment(lib, "winmm.lib"); #include <math.h> #include "libraries.h" float angle, n; #define D3DFVF_CUSTOMVERTEX D3DFVF_XYZ|D3DFVF_DIFFUSE LONG WINAPI WndProc (HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam);; LPDIRECT3D9 pD3D=NULL; LPDIRECT3DDEVICE9 pDevice=NULL; LPDIRECT3DVERTEXBUFFER9 pBuffVer = NULL; struct CUSTOMVERTEX{ float x,y,z; DWORD color; //float nx, ny, nz; }; HRESULT Init3D(HWND hwnd){ if(NULL==(pD3D=Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; D3DPRESENT_PARAMETERS params; ZeroMemory( ¶ms, sizeof(params)); params.Windowed=TRUE; params.SwapEffect=D3DSWAPEFFECT_DISCARD; params.BackBufferFormat=D3DFMT_UNKNOWN; HRESULT hr=pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶ms, &pDevice); if(FAILED(hr)) { pD3D->Release(); pD3D=0; return E_FAIL; } pDevice ->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); pDevice ->SetRenderState(D3DRS_LIGHTING, FALSE); pDevice ->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); } VOID Delete3D() { if(pBuffVer!=NULL) pBuffVer->Release(); if(pDevice!=NULL) pDevice->Release(); if(pD3D!=NULL) pD3D->Release(); }
HRESULT InitObj() { double pi = 3.1415926535; CUSTOMVERTEX vers[]= { //First Object; {-0.5, -0.5, 0, 0x000000ff}, {0.5, -0.5, 0, 0x00ff00ff}, {0, 0, 0, 0x0000f0ff},
{0, 0, 0, 0x000000ff}, {-0.5, -0.5, 0, 0x0000ff00}, {0, 0, -0.4, 0x000000ff},
{0, 0, 0, 0x000000ff}, {0.5, -0.5, 0, 0x0000ffff}, {0, 0, -0.4, 0x000000ff},
{0, 0, -0.4, 0x000000ff}, {0.5, -0.5, 0, 0x00f0ffff}, {-0.5, -0.5, 0, 0x000000ff},
}; if(FAILED(pDevice->CreateVertexBuffer(36*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pBuffVer, NULL))) return E_FAIL; VOID *pBV; pBuffVer -> Lock(0, sizeof(vers), (void**) &pBV, 0); memcpy(pBV, vers, sizeof(vers)); pBuffVer -> Unlock(); return S_OK; }
VOID SetupMatrices(float x, float y, float angle) { D3DXMATRIXA16 matWorld; D3DXMATRIXA16 matWorldRotation; D3DXMATRIXA16 matWorldTranslation;
D3DXMatrixRotationY( &matWorldRotation, angle); D3DXMatrixTranslation(&matWorldTranslation, x, y, 0); D3DXMatrixMultiply(&matWorld, &matWorldTranslation, &matWorldRotation);
pDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXVECTOR3 vEyePt( 0.0f, 3.0f, -5.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); pDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); pDevice->SetTransform( D3DTS_PROJECTION, &matProj );
//D3DXMATRIXA16 matWorld; //// Вращение треугольника. //UINT iTime = timeGetTime() % 1000; //FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f; //D3DXMatrixRotationY( &matWorld, fAngle ); //pDevice->SetTransform( D3DTS_WORLD, &matWorld ); //// Видовая матрица. //D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f ); //D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); //D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); //D3DXMATRIXA16 matView; //D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); //pDevice->SetTransform( D3DTS_VIEW, &matView ); //// Матрица проекции. //D3DXMATRIXA16 matProj; //D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); //pDevice->SetTransform( D3DTS_PROJECTION, &matProj ); }
VOID DrawMyMesh(float x, float y, float angle) { SetupMatrices(x, y, angle); pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12); }
void Render() { pDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(128,128,0), 0.0f, 0); if(SUCCEEDED (pDevice->BeginScene())) { // SetupMatrices(); pDevice -> SetStreamSource (0, pBuffVer, 0, sizeof(CUSTOMVERTEX)); pDevice -> SetFVF (D3DFVF_CUSTOMVERTEX); // Изменение смещения и угла поворота. n += 0.01; angle += 0.01;
// Рисование 2-х объектов. DrawMyMesh(0, 0, angle); DrawMyMesh(0.5, n, -angle*10); //pDevice -> DrawPrimitive (D3DPT_TRIANGLELIST, 0, 4); pDevice -> EndScene(); } pDevice -> Present(NULL, NULL, NULL, NULL); }
- это на тетраэдр, поменяй всё координаты на координаты куба и всё ништяк!)) ......и ещё, переменные n и angle поменяй под своё задание!
|
|
|
Записан
|
|
|
|