Skip to main content
GameDev.net gamedev.net
🔒 Locked 🎮 Unity

WEIRD RENDERS

Started by busyme Dec 25, 2005 at 3:39 AM 14 replies 2.4k views
Original Post
busyme
busyme
I am curious Why does it do this? I rendered a cube and a floor, first a cube then are floor. http://rapidshare.de/files/9789162/1.bmp.html http://rapidshare.de/files/9789207/2.bmp.html here is my code ---------------------------------------------------------------------------

#include "DXinit.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	HRESULT hr;

	position.x = 0.0f;
	position.y = 0.0f;
	position.z = 0.0f;

	forward.x = 0.0f;
	forward.y = -164.0f;
	forward.z = 0.0f;

	// call our function to init and create our window
	if (!initWindow(hInstance))
	{
		MessageBox(NULL, "Unable to create window", "ERROR", MB_OK);
		return false;
	}

	if (!initDirect3D(wndHandle))
	{
		MessageBox(NULL, "Unable to init Direct3D", "ERROR", MB_OK);
		return false;
	}

	

	if (!createCube())
	{
		MessageBox(NULL, "Cube could not be created", "ERROR", MB_OK);
		return false;
	}

	if(!createFloor())
	{
		MessageBox(NULL, "Floor could not be created", "ERROR", MB_OK);
		return false;
	}

	

	// Create the DirectInput object. 
    hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, 
                            IID_IDirectInput8, (void**)&g_lpDI, NULL); 

	if FAILED(hr) return FALSE; 

    // Retrieve a pointer to an IDirectInputDevice8 interface 
    hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL); 

	hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard); 

	if FAILED(hr) { 
		return FALSE; 
	} 

	// Set the cooperative level 
    hr = g_lpDIDevice->SetCooperativeLevel(wndHandle, 
                             DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); 
    if FAILED(hr) 
    { 
        return FALSE; 
    } 

    // Get access to the input device. 
    hr = g_lpDIDevice->Acquire(); 
    if FAILED(hr) 
    { 
        return FALSE; 
    } 

	createCamera(1.0f, 1500.0f);		// near clip plane, far clip plane
	moveCamera(D3DXVECTOR3(0.0f, 0.0f, -450.0f));
	pointCamera(D3DXVECTOR3(0.0f, 0.0f, 0.0f));
	

	// Main message loop:
	// Enter the message loop
    MSG msg; 
    ZeroMemory( &msg, sizeof(msg) );
    while( msg.message!=WM_QUIT )
    {
		// check for messages
		if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
        {
			TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
		// this is called when no messages are pending
		else
		{
			hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);	

			move();
			render();
			//renderFloor();
		}
    }

	if (g_lpDI) 
    { 
        if (g_lpDIDevice) 
        { 
        // Always unacquire device before calling Release(). 
            g_lpDIDevice->Unacquire(); 
            g_lpDIDevice->Release();
            g_lpDIDevice = NULL; 
        } 
        g_lpDI->Release();
        g_lpDI = NULL; 
    }

	// release and shutdown Direct3D
	shutdownDirect3D();

	return (int) msg.wParam;
}

bool initWindow(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= 0;
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= NULL;
	wcex.lpszClassName	= "DirectXExample";
	wcex.hIconSm		= 0;
	RegisterClassEx(&wcex);

	wndHandle = CreateWindow("DirectXExample", 
							 "DirectXExample", 
							 WS_OVERLAPPEDWINDOW,
							 CW_USEDEFAULT, 
							 CW_USEDEFAULT, 
							 SCREEN_WIDTH, 
							 SCREEN_HEIGHT, 
							 NULL, 
							 NULL, 
							 hInstance, 
							 NULL);
   if (!wndHandle)
      return false;
   
   ShowWindow(wndHandle, SW_SHOW);
   UpdateWindow(wndHandle);

   return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) 
	{
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

bool createFloor(void)
{
	//Initialize three vertices for rendering a triangle
	CUSTOMVERTEX g_Floor[] =
	{
		// 3
		{ -100.0f, 100.0f,  100.0f, D3DCOLOR_ARGB(0,15,5,255)},
		{  100.0f, 100.0f,  100.0f, D3DCOLOR_ARGB(0,15,5,255)},
		{ -100.0f, 100.0f, -100.0f, D3DCOLOR_ARGB(0,15,5,255)},
		{  100.0f, 100.0f, -100.0f, D3DCOLOR_ARGB(0,15,5,255)},
	};

	// Create the vertex buffer.
	// Create the vertex buffer.
    HRESULT hr;
	
	hr = pd3dDevice->CreateVertexBuffer(sizeof(g_Floor) * sizeof(CUSTOMVERTEX),
		  							    0, 
										D3DFVF_CUSTOMVERTEX,
										D3DPOOL_DEFAULT, 
										&vertexBuffer2, 
										NULL );
	if FAILED (hr)
		return false;

	// prepare to copy the vertices into the vertex buffer
	VOID* pFloor;
	// lock the vertex buffer
	hr = vertexBuffer2->Lock(0, sizeof(g_Floor), (void**)&pFloor, 0);

	// check to make sure the vertex buffer can be locked
	if FAILED (hr)
		return false;

	// copy the vertices into the buffer
    memcpy( pFloor, g_Floor, sizeof(g_Floor) );

	// unlock the vertex buffer
	vertexBuffer2->Unlock();

	return true;
}

bool createCube(void)
{
	// Initialize three vertices for rendering a triangle	
	CUSTOMVERTEX g_Vertices[] =
	{
		// 1
		{ -64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ -64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},

		// 2
		{ -64.0f,  64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ -64.0f, -64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f,  64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, -64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},

		// 3
		{ -64.0f, 64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, 64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ -64.0f, 64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, 64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},

		// 4
		{ -64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ -64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{  64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},

		// 5
		{ 64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ 64.0f,  64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ 64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{ 64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},

		// 6
		{-64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{-64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{-64.0f,  64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
		{-64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},
	};

	// Create the vertex buffer.
    HRESULT hr;
	
	hr = pd3dDevice->CreateVertexBuffer(sizeof(g_Vertices) * sizeof(CUSTOMVERTEX),
		  							    0, 
										D3DFVF_CUSTOMVERTEX,
										D3DPOOL_DEFAULT, 
										&vertexBuffer, 
										NULL );
	if FAILED (hr)
		return false;

	// prepare to copy the vertices into the vertex buffer
	VOID* pVertices;
	// lock the vertex buffer
	hr = vertexBuffer->Lock(0, sizeof(g_Vertices), (void**)&pVertices, 0);

	// check to make sure the vertex buffer can be locked
	if FAILED (hr)
		return false;

	// copy the vertices into the buffer
    memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );

	// unlock the vertex buffer
	vertexBuffer->Unlock();

	return true;
}
bool initDirect3D(HWND hwnd)
{
	if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
		return false;
	
	D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
	d3dpp.BackBufferCount  = 1;
	d3dpp.BackBufferHeight = SCREEN_HEIGHT;
	d3dpp.BackBufferWidth  = SCREEN_WIDTH;
	d3dpp.hDeviceWindow    = hwnd;
	
    if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &pd3dDevice ) ) )
    return false;
    
	pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(255, 255, 255));
	pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
	pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
	
	return true;
}

void shutdownDirect3D(void)
{
    if( pd3dDevice != NULL) 
	{
        pd3dDevice->Release();
		pd3dDevice = NULL;
	}
    if( pD3D != NULL)
	{
        pD3D->Release();
		pD3D = NULL;
	}
}

/*************************************************************************
* createCamera
* creates a virtual camera
*************************************************************************/
void createCamera(float nearClip, float farClip)
{
	//Here we specify the field of view, aspect ration and near and far clipping planes.
    D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 640/480, nearClip, farClip);
    pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);

}

/*************************************************************************
* moveCamera
* moves the camera to a position specified by the vector passed as a 
* parameter
*************************************************************************/
void moveCamera(D3DXVECTOR3 vec)
{
	cameraPosition = vec;
}

/*************************************************************************
* pointCamera
* points the camera a location specified by the passed vector
*************************************************************************/
void pointCamera(D3DXVECTOR3 vec)
{
	cameraLook = vec;

	D3DXMatrixLookAtLH(&matView, &cameraPosition,		//Camera Position
                                 &cameraLook,		//Look At Position
                                 &D3DXVECTOR3(0.0f, 1.0f, 0.0f));		//Up Direction

	pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
}

void render()
{

	// Clear the backbuffer to a black color
	pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 );

	pd3dDevice->BeginScene();

	pd3dDevice->SetStreamSource( 0, vertexBuffer, 0, sizeof(CUSTOMVERTEX) );
	
	pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

	

	//object variables
	D3DXMATRIX matObj, matScale, matRotate, matTranslate;

	D3DXMatrixTranslation(&matTranslate, position.x, position.y, position.z);

	// set the rotation
	D3DXMatrixRotationY
		(&matRotate, D3DXToRadian(45));
	// set the scaling
	///D3DXMatrixScaling(&matScale, 1.0f, 1.0f, 1.0f);
	// multiple the scaling and rotation matrices to create the meshMat matrix
	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);

	// transform the object in world space
	pd3dDevice->SetTransform(D3DTS_WORLD, &matObj);

	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  0, 2 );
	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  4, 2 );
	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  8, 2 );
	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 12, 2 );
	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 16, 2 );
	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 20, 2 );

	pd3dDevice->SetStreamSource( 0, vertexBuffer2, 0, sizeof(CUSTOMVERTEX) );

	D3DXMatrixTranslation(&matTranslate, forward.x, forward.y, forward.z);

	// set the rotation
	D3DXMatrixRotationY
		(&matRotate, D3DXToRadian(45));
	// set the scaling
	///D3DXMatrixScaling(&matScale, 1.0f, 1.0f, 1.0f);
	// multiple the scaling and rotation matrices to create the meshMat matrix
	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);

	// transform the object in world space
	pd3dDevice->SetTransform(D3DTS_WORLD, &matObj);

	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  0, 2 );

	pd3dDevice->EndScene();

	// Present the backbuffer contents to the display
	pd3dDevice->Present( NULL, NULL, NULL, NULL );

}

void move()
{
	//object variables
	D3DXMATRIX matObj, matScale, matRotate, matTranslate;
	//Translate the object away from the origin
	if(KEYDOWN(buffer, DIK_LEFT))
		D3DXMatrixTranslation(&matTranslate, position.x-= 5, position.y, position.z);
	else if (KEYDOWN(buffer, DIK_UP))
		D3DXMatrixTranslation(&matTranslate, position.x, position.y+= 5, position.z);
	else if (KEYDOWN(buffer, DIK_DOWN))
		D3DXMatrixTranslation(&matTranslate, position.x, position.y-= 5, position.z);
	else if (KEYDOWN(buffer, DIK_RIGHT))
		D3DXMatrixTranslation(&matTranslate, position.x+= 5, position.y, position.z);

	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);
}

------------------------------------------------------------------------------- Why is it doing this, why the last thing being rendered is always on top of the last even though they intersect each other? [Edited by - busyme on December 25, 2005 5:55:15 PM]
vNistelrooy
vNistelrooy
I didn't check your code (use source tags, it is impossible to read this way), however sounds like you use no depth buffer.
"C lets you shoot yourself in the foot rather easily. C++ allows you to reuse the bullet!"
busyme
busyme
source tags man I forgot I havn't been on this site for a while.

[TAG] This one?? [/TAG]

Thats what I thought, so how you would you set up depth buffer?

Merry Christmas + Happy New Year
rip-off
rip-off
click "edit" on my post to see how i do this!
busyme
busyme
ok I got it

Thank you..

Now for the depth buffer how would you turn it on???

[source="cpp"]#include "DXinit.h"int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){	HRESULT hr;	position.x = 0.0f;	position.y = 0.0f;	position.z = 0.0f;	forward.x = 0.0f;	forward.y = -164.0f;	forward.z = 0.0f;	// call our function to init and create our window	if (!initWindow(hInstance))	{		MessageBox(NULL, "Unable to create window", "ERROR", MB_OK);		return false;	}	if (!initDirect3D(wndHandle))	{		MessageBox(NULL, "Unable to init Direct3D", "ERROR", MB_OK);		return false;	}		if (!createCube())	{		MessageBox(NULL, "Cube could not be created", "ERROR", MB_OK);		return false;	}	if(!createFloor())	{		MessageBox(NULL, "Floor could not be created", "ERROR", MB_OK);		return false;	}		// Create the DirectInput object.     hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION,                             IID_IDirectInput8, (void**)&g_lpDI, NULL); 	if FAILED(hr) return FALSE;     // Retrieve a pointer to an IDirectInputDevice8 interface     hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL); 	hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard); 	if FAILED(hr) { 		return FALSE; 	} 	// Set the cooperative level     hr = g_lpDIDevice->SetCooperativeLevel(wndHandle,                              DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);     if FAILED(hr)     {         return FALSE;     }     // Get access to the input device.     hr = g_lpDIDevice->Acquire();     if FAILED(hr)     {         return FALSE;     } 	createCamera(1.0f, 1500.0f);		// near clip plane, far clip plane	moveCamera(D3DXVECTOR3(0.0f, 0.0f, -450.0f));	pointCamera(D3DXVECTOR3(0.0f, 0.0f, 0.0f));		// Main message loop:	// Enter the message loop    MSG msg;     ZeroMemory( &msg, sizeof(msg) );    while( msg.message!=WM_QUIT )    {		// check for messages		if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )        {			TranslateMessage( &msg );            DispatchMessage( &msg );        }		// this is called when no messages are pending		else		{			hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);				move();			render();			//renderFloor();		}    }	if (g_lpDI)     {         if (g_lpDIDevice)         {         // Always unacquire device before calling Release().             g_lpDIDevice->Unacquire();             g_lpDIDevice->Release();            g_lpDIDevice = NULL;         }         g_lpDI->Release();        g_lpDI = NULL;     }	// release and shutdown Direct3D	shutdownDirect3D();	return (int) msg.wParam;}bool initWindow(HINSTANCE hInstance){	WNDCLASSEX wcex;	wcex.cbSize = sizeof(WNDCLASSEX);	wcex.style			= CS_HREDRAW | CS_VREDRAW;	wcex.lpfnWndProc	= (WNDPROC)WndProc;	wcex.cbClsExtra		= 0;	wcex.cbWndExtra		= 0;	wcex.hInstance		= hInstance;	wcex.hIcon			= 0;	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);	wcex.lpszMenuName	= NULL;	wcex.lpszClassName	= "DirectXExample";	wcex.hIconSm		= 0;	RegisterClassEx(&wcex);	wndHandle = CreateWindow("DirectXExample", 							 "DirectXExample", 							 WS_OVERLAPPEDWINDOW,							 CW_USEDEFAULT, 							 CW_USEDEFAULT, 							 SCREEN_WIDTH, 							 SCREEN_HEIGHT, 							 NULL, 							 NULL, 							 hInstance, 							 NULL);   if (!wndHandle)      return false;      ShowWindow(wndHandle, SW_SHOW);   UpdateWindow(wndHandle);   return true;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){	switch (message) 	{		case WM_DESTROY:			PostQuitMessage(0);			break;	}	return DefWindowProc(hWnd, message, wParam, lParam);}bool createFloor(void){	//Initialize three vertices for rendering a triangle	CUSTOMVERTEX g_Floor[] =	{		// 3		{ -100.0f, 100.0f,  100.0f, D3DCOLOR_ARGB(0,15,5,255)},		{  100.0f, 100.0f,  100.0f, D3DCOLOR_ARGB(0,15,5,255)},		{ -100.0f, 100.0f, -100.0f, D3DCOLOR_ARGB(0,15,5,255)},		{  100.0f, 100.0f, -100.0f, D3DCOLOR_ARGB(0,15,5,255)},	};	// Create the vertex buffer.	// Create the vertex buffer.    HRESULT hr;		hr = pd3dDevice->CreateVertexBuffer(sizeof(g_Floor) * sizeof(CUSTOMVERTEX),		  							    0, 										D3DFVF_CUSTOMVERTEX,										D3DPOOL_DEFAULT, 										&vertexBuffer2, 										NULL );	if FAILED (hr)		return false;	// prepare to copy the vertices into the vertex buffer	VOID* pFloor;	// lock the vertex buffer	hr = vertexBuffer2->Lock(0, sizeof(g_Floor), (void**)&pFloor, 0);	// check to make sure the vertex buffer can be locked	if FAILED (hr)		return false;	// copy the vertices into the buffer    memcpy( pFloor, g_Floor, sizeof(g_Floor) );	// unlock the vertex buffer	vertexBuffer2->Unlock();	return true;}bool createCube(void){	// Initialize three vertices for rendering a triangle		CUSTOMVERTEX g_Vertices[] =	{		// 1		{ -64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ -64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		// 2		{ -64.0f,  64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ -64.0f, -64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f,  64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, -64.0f, 64.0f, D3DCOLOR_ARGB(0,100,100,100)},		// 3		{ -64.0f, 64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, 64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ -64.0f, 64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, 64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		// 4		{ -64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ -64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{  64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		// 5		{ 64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ 64.0f,  64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ 64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{ 64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		// 6		{-64.0f,  64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{-64.0f, -64.0f, -64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{-64.0f,  64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},		{-64.0f, -64.0f,  64.0f, D3DCOLOR_ARGB(0,100,100,100)},	};	// Create the vertex buffer.    HRESULT hr;		hr = pd3dDevice->CreateVertexBuffer(sizeof(g_Vertices) * sizeof(CUSTOMVERTEX),		  							    0, 										D3DFVF_CUSTOMVERTEX,										D3DPOOL_DEFAULT, 										&vertexBuffer, 										NULL );	if FAILED (hr)		return false;	// prepare to copy the vertices into the vertex buffer	VOID* pVertices;	// lock the vertex buffer	hr = vertexBuffer->Lock(0, sizeof(g_Vertices), (void**)&pVertices, 0);	// check to make sure the vertex buffer can be locked	if FAILED (hr)		return false;	// copy the vertices into the buffer    memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );	// unlock the vertex buffer	vertexBuffer->Unlock();	return true;}bool initDirect3D(HWND hwnd){	if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )		return false;		D3DPRESENT_PARAMETERS d3dpp;     ZeroMemory( &d3dpp, sizeof(d3dpp) );    d3dpp.Windowed = TRUE;    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;	d3dpp.BackBufferCount  = 1;	d3dpp.BackBufferHeight = SCREEN_HEIGHT;	d3dpp.BackBufferWidth  = SCREEN_WIDTH;	d3dpp.hDeviceWindow    = hwnd;	    if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,                                      &d3dpp, &pd3dDevice ) ) )    return false;    	pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(255, 255, 255));	pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);	pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);		return true;}void shutdownDirect3D(void){    if( pd3dDevice != NULL) 	{        pd3dDevice->Release();		pd3dDevice = NULL;	}    if( pD3D != NULL)	{        pD3D->Release();		pD3D = NULL;	}}/************************************************************************** createCamera* creates a virtual camera*************************************************************************/void createCamera(float nearClip, float farClip){	//Here we specify the field of view, aspect ration and near and far clipping planes.    D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 640/480, nearClip, farClip);    pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);}/************************************************************************** moveCamera* moves the camera to a position specified by the vector passed as a * parameter*************************************************************************/void moveCamera(D3DXVECTOR3 vec){	cameraPosition = vec;}/************************************************************************** pointCamera* points the camera a location specified by the passed vector*************************************************************************/void pointCamera(D3DXVECTOR3 vec){	cameraLook = vec;	D3DXMatrixLookAtLH(&matView, &cameraPosition,		//Camera Position                                 &cameraLook,		//Look At Position                                 &D3DXVECTOR3(0.0f, 1.0f, 0.0f));		//Up Direction	pd3dDevice->SetTransform(D3DTS_VIEW, &matView);}void render(){	// Clear the backbuffer to a black color	pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 );	pd3dDevice->BeginScene();	pd3dDevice->SetStreamSource( 0, vertexBuffer, 0, sizeof(CUSTOMVERTEX) );		pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );		//object variables	D3DXMATRIX matObj, matScale, matRotate, matTranslate;	D3DXMatrixTranslation(&matTranslate, position.x, position.y, position.z);	// set the rotation	D3DXMatrixRotationY		(&matRotate, D3DXToRadian(45));	// set the scaling	///D3DXMatrixScaling(&matScale, 1.0f, 1.0f, 1.0f);	// multiple the scaling and rotation matrices to create the meshMat matrix	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);	// transform the object in world space	pd3dDevice->SetTransform(D3DTS_WORLD, &matObj);	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  0, 2 );	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  4, 2 );	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  8, 2 );	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 12, 2 );	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 16, 2 );	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 20, 2 );	pd3dDevice->SetStreamSource( 0, vertexBuffer2, 0, sizeof(CUSTOMVERTEX) );	D3DXMatrixTranslation(&matTranslate, forward.x, forward.y, forward.z);	// set the rotation	D3DXMatrixRotationY		(&matRotate, D3DXToRadian(45));	// set the scaling	///D3DXMatrixScaling(&matScale, 1.0f, 1.0f, 1.0f);	// multiple the scaling and rotation matrices to create the meshMat matrix	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);	// transform the object in world space	pd3dDevice->SetTransform(D3DTS_WORLD, &matObj);	pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,  0, 2 );	pd3dDevice->EndScene();	// Present the backbuffer contents to the display	pd3dDevice->Present( NULL, NULL, NULL, NULL );}void move(){	//object variables	D3DXMATRIX matObj, matScale, matRotate, matTranslate;	//Translate the object away from the origin	if(KEYDOWN(buffer, DIK_LEFT))		D3DXMatrixTranslation(&matTranslate, position.x-= 5, position.y, position.z);	else if (KEYDOWN(buffer, DIK_UP))		D3DXMatrixTranslation(&matTranslate, position.x, position.y+= 5, position.z);	else if (KEYDOWN(buffer, DIK_DOWN))		D3DXMatrixTranslation(&matTranslate, position.x, position.y-= 5, position.z);	else if (KEYDOWN(buffer, DIK_RIGHT))		D3DXMatrixTranslation(&matTranslate, position.x+= 5, position.y, position.z);	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);}


anything wrong with my code?
vNistelrooy
vNistelrooy
Quote:
Original post by busyme
Now for the depth buffer how would you turn it on???


Depth Buffers.
"C lets you shoot yourself in the foot rather easily. C++ allows you to reuse the bullet!"
busyme
busyme
OK, so I set up the depth buffer, and it doing rendering really weird whats happening?

http://rapidshare.de/files/9825926/3.bmp.html

bool initDirect3D(HWND hwnd){	if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )		return false;		D3DPRESENT_PARAMETERS d3dpp;     ZeroMemory( &d3dpp, sizeof(d3dpp) );    d3dpp.Windowed = TRUE;    d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;	d3dpp.EnableAutoDepthStencil = TRUE;	d3dpp.AutoDepthStencilFormat =  D3DFMT_D16;    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;	d3dpp.BackBufferCount  = 1;	d3dpp.BackBufferHeight = SCREEN_HEIGHT;	d3dpp.BackBufferWidth  = SCREEN_WIDTH;	d3dpp.hDeviceWindow    = hwnd;	    if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,                                      &d3dpp, &pd3dDevice ) ) )    return false;    	pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(255, 255, 255));	pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);	pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);		return true;}



whats wrong with my code with depth buffer?
_Sigma
_Sigma
use http://imageshack.us/ for image hosting, then use to add the image to your post, its better than rapidshare :P
mdias
mdias
You are not clearing your depth buffer.
You shoud do this:
pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 );
busyme
busyme
Oh thank you so much, now why when you don't clear the Z buffer it does this?
Does it simply overwrite infinitely?
mdias
mdias
It won't overwrite unless the depth value of the current pixel is lower than the previous value.
If you don't clear the depth buffer to 1.0f (range is from 0.0 (near the camera) to 1.0 (farthest from the camera)) it means that in the next frame some pixels won't be rendered because of the previous values written.

I'm not very good at explaining this kind of stuff, so here's some reading to you, it should clarify you on how depth buffers works and why you need to clear it every frame.
mdias
mdias
Quote:
Original post by busyme
I am also trying to post image yet it's not showing it in forum. Why?


Click me!
busyme
busyme
thank you thank you.

How would you make box move up and left at same time?

My code on movement is this:

void move(){	//object variables	D3DXMATRIX matObj, matScale, matRotate, matTranslate;	//Translate the object away from the origin	if(KEYDOWN(buffer, DIK_LEFT))		D3DXMatrixTranslation(&matTranslate, position.x-= 5, position.y, position.z);	else if (KEYDOWN(buffer, DIK_UP))		D3DXMatrixTranslation(&matTranslate, position.x, position.y+= 5, position.z);	else if (KEYDOWN(buffer, DIK_DOWN))		D3DXMatrixTranslation(&matTranslate, position.x, position.y-= 5, position.z);	else if (KEYDOWN(buffer, DIK_RIGHT))		D3DXMatrixTranslation(&matTranslate, position.x+= 5, position.y, position.z);	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);}

mdias
mdias
Quote:
Original post by busyme
thank you thank you.

How would you make box move up and left at same time?

My code on movement is this:

*** Source Snippet Removed ***


Simple, don't use "else if" to test for movement in different axes.
here:
void move(){	//object variables	D3DXMATRIX matObj, matScale, matRotate, matTranslate;	//Translate the object away from the origin	if(KEYDOWN(buffer, DIK_LEFT))		position.x -= 5.0f;	else if (KEYDOWN(buffer, DIK_RIGHT))		position.x += 5.0f;	if (KEYDOWN(buffer, DIK_UP))		position.y += 5.0f;	else if (KEYDOWN(buffer, DIK_DOWN))		position.y -= 5.0f;	D3DXMatrixTranslation(&matTranslate, position.x, position.y, position.z);	D3DXMatrixMultiply(&matObj, &matTranslate, &matRotate);}
busyme
busyme
thank you, I don't know what gotten over me :/

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.