d3dinit.cpp

来自「用directx实现的天空盒 使用纹理贴图」· C++ 代码 · 共 125 行

CPP
125
字号
#include "D3DInit.h"


CD3DInit::CD3DInit()
{
	g_pD3D			= NULL;
	g_pd3dDevice	= NULL;	
}


CD3DInit::~CD3DInit()
{
	REL(g_pD3D);
	REL(g_pd3dDevice);
}

HRESULT CD3DInit::InitD3D(HWND hWnd)
{
	if ((g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
	{
		return E_FAIL;
	}

	D3DDISPLAYMODE d3ddm;

	if (FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, & d3ddm)))
	{
		return E_FAIL;
	}

	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.Windowed			= FALSE;
	d3dpp.SwapEffect		= D3DSWAPEFFECT_DISCARD;
	d3dpp.BackBufferFormat	= d3ddm.Format;
	d3dpp.BackBufferWidth	= d3ddm.Width;
	d3dpp.BackBufferHeight	= d3ddm.Height;

	d3dpp.FullScreen_RefreshRateInHz	= D3DPRESENT_RATE_DEFAULT;
	d3dpp.PresentationInterval			= D3DPRESENT_INTERVAL_ONE;

	d3dpp.AutoDepthStencilFormat	= D3DFMT_D16;
	d3dpp.EnableAutoDepthStencil	= true;
	
	//
	D3DCAPS9 caps;
	g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);
	int vp = 0;
	if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
	else
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
	//

	if (FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
									 D3DDEVTYPE_HAL,
									 hWnd,
									 vp,
									 &d3dpp,
									 &g_pd3dDevice)))
	{
		return E_FAIL;
	}


	return S_OK;
}


void CD3DInit::Render()
{
	if (g_pd3dDevice == NULL)
		return;

	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
								 D3DCOLOR_XRGB(0,0,0),1.0f,0);
	
	g_pd3dDevice->BeginScene();
	

	g_Camera.ProcInput();
	this->SetCamera();
	g_pSkyBox->Render();

	g_pd3dDevice->EndScene();
	g_pd3dDevice->Present(NULL, NULL, NULL, NULL);

}

BOOL CD3DInit::GameInit(HWND hWnd)
{
	if (SUCCEEDED(this->InitD3D(hWnd)))
	{
		g_pSkyBox = new CSkyBox(g_pd3dDevice);
		g_pSkyBox->InitVB();
		g_pSkyBox->SetTexture("Image/Dawn_F.jpg",0);
		g_pSkyBox->SetTexture("Image/Dawn_B.jpg",1);
		g_pSkyBox->SetTexture("Image/Dawn_U.jpg",2);
		g_pSkyBox->SetTexture("Image/Dawn_D.jpg",3);
		g_pSkyBox->SetTexture("Image/Dawn_L.jpg",4);
		g_pSkyBox->SetTexture("Image/Dawn_R.jpg",5);
		g_pSkyBox->SetTexture("Image/Cloud.tga",6);


		return true;
	}
	else
	{
		return false;
	}
	return true;

}


void CD3DInit::SetCamera()
{
	D3DXMATRIX matView;
	g_Camera.getViewMatrix(&matView);
	g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);

	D3DXMATRIX matProj;
	D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 1000.0f);
	g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?