Hi, Ive just been setting up my first Direct3D application, basically showing a square on screen with the usual rotations and so forth. I can get the rotations working (with alittle help from the sdk docs) however the co-ordinates I give that should make a square make a rectangle, even when I modify the tutorial code it is a rectangle, Ill post my init code to see if anything is wrong with that or am I missing something or is my idea of co-ordinates for vertices in Direct3D just plain wrong? Thanks for any help.
co-ordinate init code
struct StandardVertex
{
float X,Y,Z;
DWORD Colour;
};
#define STANDARDVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
StandardVertex Vert[] =
{
{-2.5f, -2.5f, 0.0f, 0xffff0000,},
{ -2.5f, 2.5f, 0.0f, 0xffff0000,},
{ 2.5f, -2.5f, 0.0f, 0xffff0000,},
{ -2.5f, 2.5f, 0.0f, 0xffff0000,},
{ 2.5f, 2.5f, 0.0f, 0xffff0000,},
{ 2.5f, -2.5f, 0.0f, 0xffff0000
{ 0.0f, 0.0f, 0.0f, 0xffff0000,},
{ 0.0f, 1.0f, 0.0f, 0xffff0000,},
{ 1.0f, 0.0f, 0.0f, 0xffff0000,},
{ 0.0f, 1.0f, 0.0f, 0xffff0000,},
{ 1.0f, 1.0f, 0.0f, 0xffff0000,},
{ 1.0f, 0.0f, 0.0f, 0xffff0000,},
};
Direct3DDevice->CreateVertexBuffer(6*sizeof(StandardVertex),0,STANDARDVERTEX,D3DPOOL_DEFAULT,&Buffer,NULL);
VOID* pVertices;
Buffer->Lock(0,sizeof(Vert),(void**)&pVertices,0);
memcpy( pVertices,Vert,sizeof(Vert));
Buffer->Unlock();
bool CDirect3D::CreateFullScreenVersion(HWND WindowHandle, int Width, int Height)
{
Direct3DInterface = Direct3DCreate9(D3D_SDK_VERSION);
if(Direct3DInterface == NULL)
return(false);
D3DPRESENT_PARAMETERS Parameters;
ZeroMemory(&Parameters,sizeof(D3DPRESENT_PARAMETERS));
Parameters.BackBufferWidth = Width;
Parameters.BackBufferHeight = Height;
Parameters.BackBufferFormat = D3DFMT_R5G6B5;
Parameters.MultiSampleType = D3DMULTISAMPLE_NONE;
Parameters.BackBufferCount = 1;
Parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
Parameters.hDeviceWindow = WindowHandle;
Parameters.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
Parameters.Windowed = false;
Parameters.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
if(FAILED(Direct3DInterface ->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, WindowHandle,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&Parameters, &Direct3DDevice)))
return(false);
ViewPort.X = 0;
ViewPort.Y = 0;
ViewPort.Width = Width;
ViewPort.Height = Height;
ViewPort.MinZ = 0.0f;
ViewPort.MaxZ = 1.0f;
if(FAILED(Direct3DDevice->SetViewport(&ViewPort)))
return(false);
Direct3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
Direct3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
bool CDirect3D::DrawFrame()
{
if(FAILED(Direct3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0)))
return(false);
if(FAILED(Direct3DDevice->BeginScene()))
return(false);
D3DXMATRIXA16 matWorld;
UINT iTime = timeGetTime() % 1000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
D3DXMatrixRotationY( &matWorld, fAngle );
Direct3DDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-25.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
Direct3DDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
Direct3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );
Direct3DDevice->SetStreamSource( 0, Buffer, 0, sizeof(StandardVertex) );
Direct3DDevice->SetFVF(STANDARDVERTEX);
Direct3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2 );
if(FAILED(Direct3DDevice->EndScene()))
return(false);
if(FAILED(Direct3DDevice->Present( NULL, NULL, NULL, NULL )))
return(false);
return(true);
}
Ballistic Programs