Exemple #1
0
//Direct3Dデバイスの初期化
bool Application::InitD3dDevice()
{
	//ディスプレイアダプタを表すためのデバイスを作成
	//描画と頂点処理をハードウェアで行なう
	if (FAILED(direct3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &presentParam, &d3dDevice)))
		//上記の設定が失敗したら
		//描画をハードウェアで行い、頂点処理はCPUで行なう
		if (FAILED(direct3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &presentParam, &d3dDevice)))
			//上記の設定が失敗したら
			//描画と頂点処理をCPUで行なう
			if (FAILED(direct3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &presentParam, &d3dDevice)))
				return false;

	//レンダリングステータスの設定
	d3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);	//両面描画モードの設定
	d3dDevice->SetRenderState(D3DRS_ZENABLE, true);				//Z比較を行う
	d3dDevice->SetRenderState(D3DRS_DITHERENABLE, true);		//ディザリングを行う

	// ポイントスプライトの設定
	d3dDevice->SetRenderState(D3DRS_POINTSPRITEENABLE, true);

	// ポイントスケールの係数
	d3dDevice->SetRenderState(D3DRS_POINTSCALEENABLE, true);
	d3dDevice->SetRenderState(D3DRS_POINTSIZE, FloatToDWORD(1.0f));
	d3dDevice->SetRenderState(D3DRS_POINTSIZE_MIN, FloatToDWORD(0.0f));
	d3dDevice->SetRenderState(D3DRS_POINTSCALE_A, FloatToDWORD(0.0f));
	d3dDevice->SetRenderState(D3DRS_POINTSCALE_B, FloatToDWORD(0.0f));
	d3dDevice->SetRenderState(D3DRS_POINTSCALE_C, FloatToDWORD(1.0f));

	return true;
}
Exemple #2
0
	// コンストラクタ
	Render::Render(HWND hWnd, bool isFullScreen)
	{
		direct3d = Direct3DCreate9(D3D_SDK_VERSION);
		if (!direct3d)
		{
			return;
		}

		RECT rect = { 0 };
		GetClientRect(hWnd, &rect);

		D3DPRESENT_PARAMETERS pp;
		ZeroMemory(&pp, sizeof(pp));
		pp.hDeviceWindow = hWnd;
		pp.BackBufferCount = 1;
		pp.BackBufferWidth = rect.right;
		pp.BackBufferHeight = rect.bottom;
		pp.BackBufferFormat = D3DFMT_UNKNOWN;
		pp.Windowed = !isFullScreen;
		pp.MultiSampleType = D3DMULTISAMPLE_NONE;
		pp.MultiSampleQuality = 0;
		pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
		pp.EnableAutoDepthStencil = true;
		pp.AutoDepthStencilFormat = D3DFMT_D16;
		pp.Flags = 0;
		pp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
		pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;

		if (FAILED(direct3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &d3d)))
		{
			direct3d->Release();
			return;
		}

		d3d->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
		d3d->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
		d3d->SetRenderState(D3DRS_ZENABLE, true);
		d3d->SetRenderState(D3DRS_ZWRITEENABLE, true);
		d3d->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);
		d3d->SetRenderState(D3DRS_LIGHTING, true);
		d3d->SetRenderState(D3DRS_SPECULARENABLE, true);
		d3d->SetRenderState(D3DRS_AMBIENT, 0x00666666);
		d3d->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
		d3d->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
		d3d->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
		d3d->SetRenderState(D3DRS_ALPHATESTENABLE, true);
		d3d->SetRenderState(D3DRS_ALPHAREF, 0x00000000);
		d3d->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER);
		d3d->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
		d3d->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
		d3d->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
		d3d->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
		d3d->SetRenderState(D3DRS_POINTSPRITEENABLE, true);
		d3d->SetRenderState(D3DRS_POINTSCALEENABLE, true);
		d3d->SetRenderState(D3DRS_POINTSIZE, FloatToDWORD(1.0f));
		d3d->SetRenderState(D3DRS_POINTSIZE_MIN, FloatToDWORD(0.0f));
		d3d->SetRenderState(D3DRS_POINTSCALE_A, FloatToDWORD(0.0f));
		d3d->SetRenderState(D3DRS_POINTSCALE_B, FloatToDWORD(0.0f));
		d3d->SetRenderState(D3DRS_POINTSCALE_C, FloatToDWORD(1.0f));
		d3d->SetRenderState(D3DRS_FOGENABLE, true);
		d3d->SetRenderState(D3DRS_FOGCOLOR, 0x80000000);
		d3d->SetRenderState(D3DRS_FOGSTART, FloatToDWORD(6.0f));
		d3d->SetRenderState(D3DRS_FOGEND, FloatToDWORD(48.0f));
		d3d->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);


		D3DLIGHT9 light;
		ZeroMemory(&light, sizeof(D3DLIGHT9));

		light.Type = D3DLIGHT_DIRECTIONAL;
		light.Direction = D3DXVECTOR3(1, -1, 1);
		light.Diffuse.r = 2.0f;
		light.Diffuse.g = 2.0f;
		light.Diffuse.b = 2.0f;
		d3d->SetLight(0, &light);
		d3d->LightEnable(0, true);

		light.Direction = D3DXVECTOR3(-1, 1, -1);
		light.Diffuse.r = 1.5f;
		light.Diffuse.g = 1.5f;
		light.Diffuse.b = 1.5f;
		d3d->SetLight(1, &light);
		d3d->LightEnable(1, true);

		d3d->SetRenderState(D3DRS_LIGHTING, true);
	}