Ребят, по моему мне кажется, что не в железе дело!
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 поменяй под своё задание!