Co-ordinate Problem (I think)

Started by
0 comments, last by Drazgal 21 years, 2 months ago
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
Advertisement
you have the 3rd parm of your call to D3DXMatrixPerspectiveFovLH set to 1.0. this is the aspect ratio and is normally set to 4.0f/3.0f, or more technically correct, the width of your rendering buffer(window), in pixels, divided by the height of your rendering buffer(window).

This topic is closed to new replies.

Advertisement