示例#1
0
void CubeMapApp::initApp()
{
	D3DApp::initApp();

	fx::InitAll(md3dDevice);
	InputLayout::InitAll(md3dDevice);
	GetTextureMgr().init(md3dDevice);


	mTech                = fx::CubeMapFX->GetTechniqueByName("CubeMapTech");
	mfxLightVar          = fx::CubeMapFX->GetVariableByName("gLight");
	mfxEyePosVar         = fx::CubeMapFX->GetVariableByName("gEyePosW");
	mfxWVPVar            = fx::CubeMapFX->GetVariableByName("gWVP")->AsMatrix();
	mfxWorldVar          = fx::CubeMapFX->GetVariableByName("gWorld")->AsMatrix();
	mfxTexMtxVar         = fx::CubeMapFX->GetVariableByName("gTexMtx")->AsMatrix();
	mfxReflectMtrlVar    = fx::CubeMapFX->GetVariableByName("gReflectMtrl")->AsVector();
	mfxCubeMapEnabledVar = fx::CubeMapFX->GetVariableByName("gCubeMapEnabled")->AsScalar();
	mfxDiffuseMapVar     = fx::CubeMapFX->GetVariableByName("gDiffuseMap")->AsShaderResource();
	mfxSpecMapVar        = fx::CubeMapFX->GetVariableByName("gSpecMap")->AsShaderResource();
	mfxCubeMapVar        = fx::CubeMapFX->GetVariableByName("gCubeMap")->AsShaderResource();

 
	//mClearColor = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);

	GetCamera().position() = D3DXVECTOR3(0.0f, 1.8f, -10.0f);

	mBallMapRV        = GetTextureMgr().createTex(L"blackdiffuse.dds");
	//mSpecMapRV        = GetTextureMgr().createTex(L"spec.dds");
	mDefaultSpecMapRV = GetTextureMgr().createTex(L"defaultspec.dds");
	mEnvMapRV         = GetTextureMgr().createCubeTex(L"grassenvmap1024.dds");

	mFloor.init(md3dDevice, 41, 21, 1.0f);
	mBase.init(md3dDevice, 2.0f);
	mBall.init(md3dDevice, 0.5f, 30, 30);
	mColumn.init(md3dDevice, 0.25f, 1.0f, 3.0f, 30, 30);
	mSky.init(md3dDevice, mEnvMapRV, 5000.0f);

 
	mParallelLight.dir      = D3DXVECTOR3(0.57735f, -0.57735f, 0.57735f);
	mParallelLight.ambient  = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);
	mParallelLight.diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
	mParallelLight.specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);
}
示例#2
0
void Terrain::init(ID3D10Device* device, const InitInfo& initInfo)
{
	md3dDevice = device;

	mTech          = fx::TerrainFX->GetTechniqueByName("TerrainTech");
	mfxWVPVar      = fx::TerrainFX->GetVariableByName("gWVP")->AsMatrix();
	mfxWorldVar    = fx::TerrainFX->GetVariableByName("gWorld")->AsMatrix();
	mfxDirToSunVar = fx::TerrainFX->GetVariableByName("gDirToSunW")->AsVector();
	mfxLayer0Var   = fx::TerrainFX->GetVariableByName("gLayer0")->AsShaderResource();
	mfxLayer1Var   = fx::TerrainFX->GetVariableByName("gLayer1")->AsShaderResource();
	mfxLayer2Var   = fx::TerrainFX->GetVariableByName("gLayer2")->AsShaderResource();
	mfxLayer3Var   = fx::TerrainFX->GetVariableByName("gLayer3")->AsShaderResource();
	mfxLayer4Var   = fx::TerrainFX->GetVariableByName("gLayer4")->AsShaderResource();
	mfxBlendMapVar = fx::TerrainFX->GetVariableByName("gBlendMap")->AsShaderResource();

	mInfo = initInfo;

	mNumVertices = mInfo.NumRows*mInfo.NumCols;
	mNumFaces    = (mInfo.NumRows-1)*(mInfo.NumCols-1)*2;

	loadHeightmap();
	smooth();

	buildVB();
	buildIB();

	mLayer0   = GetTextureMgr().createTex(initInfo.LayerMapFilename0);
	mLayer1   = GetTextureMgr().createTex(initInfo.LayerMapFilename1);
	mLayer2   = GetTextureMgr().createTex(initInfo.LayerMapFilename2);
	mLayer3   = GetTextureMgr().createTex(initInfo.LayerMapFilename3);
	mLayer4   = GetTextureMgr().createTex(initInfo.LayerMapFilename4);
	mBlendMap = GetTextureMgr().createTex(initInfo.BlendMapFilename);
}
示例#3
0
void TerrainApp::initApp()
{
	D3DApp::initApp();

	fx::InitAll(md3dDevice);
	InputLayout::InitAll(md3dDevice);
	GetTextureMgr().init(md3dDevice);

	mClearColor = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);

	GetCamera().position() = D3DXVECTOR3(0.0f, 10.0f, -10.0f);

	mEnvMapRV = GetTextureMgr().createCubeTex(L"grassenvmap1024.dds");
	mSky.init(md3dDevice, mEnvMapRV, 5000.0f);

	Terrain::InitInfo tii;
	tii.HeightmapFilename = L"coastMountain513.raw";
	tii.LayerMapFilename0 = L"grass.dds";
	tii.LayerMapFilename1 = L"lightdirt.dds";
	tii.LayerMapFilename2 = L"darkdirt.dds";
	tii.LayerMapFilename3 = L"stone.dds";
	tii.LayerMapFilename4 = L"snow.dds";
	tii.BlendMapFilename  = L"blend.dds";
	tii.HeightScale  = 0.35f;
	tii.HeightOffset = -20.0f;
	tii.NumRows      = 513;
	tii.NumCols      = 513;
	tii.CellSpacing  = 1.0f;

	mLand.init(md3dDevice, tii);
 
	mParallelLight.dir      = D3DXVECTOR3(0.707f, -0.707f, 0.0f);
	mParallelLight.ambient  = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);
	mParallelLight.diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
	mParallelLight.specular = D3DXCOLOR(0.5f, 0.4843f, 0.3f, 1.0f);

	mLand.setDirectionToSun(-mParallelLight.dir);
}
示例#4
0
文件: OutBuilding.cpp 项目: jcrm/DX
void OutBuilding::init (ID3D10Device* device, const InitInfo& initInfo, float w, float h, float d){
	md3dDevice=		device;
	mTech			= fx::OutBuildingFX->GetTechniqueByName("MultiTexTech");
	mfxWVPVar		= fx::OutBuildingFX->GetVariableByName("gWVP")->AsMatrix();
	mfxWorldVar		= fx::OutBuildingFX->GetVariableByName("gWorld")->AsMatrix();
	mfxLayer0Var	= fx::OutBuildingFX->GetVariableByName("gLayer0")->AsShaderResource();
	mfxLayer1Var	= fx::OutBuildingFX->GetVariableByName("gLayer1")->AsShaderResource();
	mfxLayer2Var	= fx::OutBuildingFX->GetVariableByName("gLayer2")->AsShaderResource();
	mfxBlendMapVar	= fx::OutBuildingFX->GetVariableByName("gBlendMap")->AsShaderResource();
	mfxSpecMapVar	= fx::OutBuildingFX->GetVariableByName("gSpecMap")->AsShaderResource();
	mfxEyePosVar	= fx::OutBuildingFX->GetVariableByName("gEyePosW");
	mfxLightVar		= fx::OutBuildingFX->GetVariableByName("gLight");
	mfxLightType	= fx::OutBuildingFX->GetVariableByName("gLightType")->AsScalar();

	mInfo = initInfo;

	build(w, h, d);

	mLayer0   = GetTextureMgr().createTex(initInfo.LayerMapFilename0);
	mLayer1   = GetTextureMgr().createTex(initInfo.LayerMapFilename1);
	mLayer2   = GetTextureMgr().createTex(initInfo.LayerMapFilename2);
	mBlendMap = GetTextureMgr().createTex(initInfo.BlendMapFilename);
	mSpecMap  = GetTextureMgr().createTex(initInfo.SpecMapFilename);
}
示例#5
0
bool CRenderSystem::prepareMaterial(/*const */CMaterial& material, float fOpacity) // 由于使用了自动注册纹理的机制,很遗憾的导致不能用“const”
{
	CTextureMgr& TM = GetTextureMgr();
	for (size_t i=0;i<8;++i)
	{
		if (material.uTexture[i]==-1)
		{
			material.uTexture[i] = TM.RegisterTexture(material.getTexture(i));
		}
		// ----
		SetTexture(i, material.uTexture[i]);
		// ----
		if (material.uTexture[i]==0)
		{
			break;
		}
	}
	if (material.uShader==-1)
	{
		material.uShader = GetShaderMgr().registerItem(material.getShader());
	}
	// ----
	SetLightingEnabled(material.bLightingEnabled);
	SetCullingMode((CullingMode)material.uCull);
	// ----
	SetAlphaTestFunc(material.bAlphaTest, (CompareFunction)material.nAlphaTestCompare, material.uAlphaTestValue);
	SetBlendFunc(material.bBlend, (SceneBlendOperation)material.nBlendOP, (SceneBlendFactor)material.nBlendSrc, (SceneBlendFactor)material.nBlendDest);
	SetDepthBufferFunc(material.bDepthTest,material.bDepthWrite);
	// ----
	if (0==material.uShader)
	{
		for (size_t i=0;i<8;++i)
		{
			CMaterial::TextureOP& texOP = material.textureOP[i];
			SetTextureColorOP(i, (TextureBlendOperation)texOP.nColorOP, (TextureBlendSource)texOP.nColorSrc1, (TextureBlendSource)texOP.nColorSrc2);
			SetTextureColorOP(i, (TextureBlendOperation)texOP.nAlphaOP, (TextureBlendSource)texOP.nAlphaSrc1, (TextureBlendSource)texOP.nAlphaSrc2);
			if (TBOP_DISABLE == texOP.nColorOP)
			{
				break;
			}
		}
	}
	else
	{
		CShader* pShader = GetShaderMgr().getSharedShader();
		if (pShader)
		{
			// for Terrain
			pShader->setVec2D("g_fScaleUV",material.vUVScale);
		}
		SetShader(material.uShader);
	}
	return true;
/*	if (material.bLightingEnabled)
	{
		SetMaterial(material.vAmbient,material.vDiffuse);
	}

	if (0==material.uShader)
	{
		//SetSamplerAddressUV(0,ADDRESS_WRAP,ADDRESS_WRAP);
		if (material.vTexAnim.lengthSquared()>0.0f)
		{
			Matrix matTex=Matrix::UNIT;
			float fTime = (float)GetGlobalTimer().GetTime();
			matTex._13=fTime*material.vTexAnim.x;
			matTex._23=fTime*material.vTexAnim.y;
			setTextureMatrix(0, TTF_COUNT3, matTex);
		}

		Color32 cFactor = material.cEmissive;
		if (material.m_fOpacity<0.0f)
		{
			fOpacity = (float)(rand()%255)/255.0f;
		}
		else
		{
			fOpacity *= material.m_fOpacity;
		}

		if (material.uDiffuse)
		{
			SetTexture(0, material.uDiffuse);
			cFactor.a=(unsigned char)(cFactor.a*fOpacity);
			SetTextureFactor(cFactor);
			if (material.bLightingEnabled)
			{
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_DIFFUSE);
			}
			else
			{
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
			}
			if(material.bBlend||material.m_fOpacity<1.0f)
			{
				SetBlendFunc(true, BLENDOP_ADD, SBF_SOURCE_ALPHA, SBF_ONE_MINUS_SOURCE_ALPHA);
			}

			if (material.m_fOpacity<1.0f)
			{
				SetTextureAlphaOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
			}
			else if (material.bAlphaTest||material.bBlend)
			{
				SetTextureAlphaOP(0, TBOP_SOURCE1, TBS_TEXTURE);
			}
			else
			{
				SetTextureAlphaOP(0, TBOP_DISABLE);
			}

			//////////////////////////////////////////////////////////////////////////
			if (material.uSpecular)
			{
				SetTexture(1, material.uSpecular);
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_DIFFUSE);
				setResultARGToTemp(1,true);
				SetTextureColorOP(1, TBOP_MODULATE_X2, TBS_TEXTURE, TBS_SPECULAR);
				SetTextureColorOP(2, TBOP_ADD, TBS_CURRENT, TBS_TEMP);

				SetTexCoordIndex(0,0);
				SetTexCoordIndex(1,0);
				SetTexCoordIndex(2,0);
			}
			else if (material.uReflection)
			{
				SetTextureColorOP(1, TBOP_MODULATE_X2, TBS_CURRENT, TBS_TEXTURE);
				SetTexCoordIndex(1,TCI_CAMERASPACE_NORMAL|TCI_CAMERASPACE_POSITION);
				SetTexture(1, material.uReflection);
			}
			else if (material.uLightMap)
			{
				SetTextureColorOP(1, TBOP_MODULATE, TBS_CURRENT, TBS_TEXTURE);
				SetTexCoordIndex(1,1);
				SetTexture(1, material.uLightMap);
			}
			else if (material.uEmissive)
			{
				SetTextureColorOP(1, TBOP_ADD, TBS_CURRENT, TBS_TEXTURE);
				SetTexture(1, material.uEmissive);
			}
			else if(!material.bBlend&&material.m_fOpacity>=1.0f)
			{
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_DIFFUSE);
			}
		}
		else
		{
			SetTextureFactor(cFactor);
			if (material.uSpecular)
			{
				//SetTexture(0, material.uSpecular);
				SetTextureColorOP(0, TBOP_SOURCE1, TBS_SPECULAR);
				SetTexCoordIndex(0,0);
			}
			else if(material.uReflection)
			{
				cFactor.r=(unsigned char)(cFactor.r*fOpacity);
				cFactor.g=(unsigned char)(cFactor.g*fOpacity);
				cFactor.b=(unsigned char)(cFactor.b*fOpacity);
				SetTextureFactor(cFactor);
				if (material.bBlend)
				{
					SetBlendFunc(true, BLENDOP_ADD, SBF_DEST_COLOUR, SBF_ONE);
				}
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
				SetTextureAlphaOP(0, TBOP_DISABLE);
				SetTexCoordIndex(0,TCI_CAMERASPACE_NORMAL|TCI_CAMERASPACE_POSITION);
				SetTexture(0, material.uReflection);
			}
			else if (material.uLightMap)
			{
				if (material.bBlend)
				{
					SetBlendFunc(true, BLENDOP_ADD, SBF_DEST_COLOUR, SBF_ZERO);
				}
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
				SetTextureAlphaOP(0, TBOP_DISABLE);
				SetTexture(0, material.uLightMap);
			}
			else if (material.uEmissive)
			{
				cFactor.r=(unsigned char)(cFactor.r*fOpacity);
				cFactor.g=(unsigned char)(cFactor.g*fOpacity);
				cFactor.b=(unsigned char)(cFactor.b*fOpacity);
				SetTextureFactor(cFactor);
				if (material.bBlend)
				{
					SetBlendFunc(true, BLENDOP_ADD, SBF_ONE, SBF_ONE);
				}
				SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
				SetTextureAlphaOP(0, TBOP_DISABLE);
				SetTexture(0, material.uEmissive);
			}
			else if (material.uNormal)
			{
				CShader* pShader = GetShaderMgr().getSharedShader();
				if (pShader)
				{
					static size_t s_uShaderID = GetShaderMgr().registerItem("EngineRes\\fx\\SpaceBump.fx");
					pShader->setTexture("g_texNormal",material.uNormal);
					SetShader(s_uShaderID);
				}
				//SetBlendFunc(true, BLENDOP_ADD, SBF_DEST_COLOUR, SBF_ZERO);
				//SetTextureColorOP(0, TBOP_MODULATE, TBS_TEXTURE, TBS_TFACTOR);
				//SetTextureAlphaOP(0, TBOP_DISABLE);
				//SetTexture(0, uLightMap);
			}
			else
			{
				SetTextureColorOP(0,TBOP_SOURCE2);
				if (material.bBlend)
				{
					SetTextureAlphaOP(0,TBOP_SOURCE2);
				}
				else
				{
					SetTextureAlphaOP(0,TBOP_DISABLE);
				}
				//return false;
			}
		}
	}
	else
	{
		CShader* pShader = GetShaderMgr().getSharedShader();
		if (pShader)
		{
			pShader->setTexture("g_texDiffuse",material.uDiffuse);
			pShader->setTexture("g_texLight",material.uLightMap);
			pShader->setTexture("g_texNormal",material.uNormal);
			//pShader->setTexture("g_texEnvironment",uEmissive);
			//pShader->setTexture("g_texEmissive",uEmissive);
			pShader->setTexture("g_texSpecular",material.uSpecular);
			// for Terrain
			pShader->setVec2D("g_fScaleUV",material.vUVScale);
		}
		SetShader(material.uShader);
	}
	return true;*/
}
void DeferredDemo::initApp(void)
{
    	D3DApp::initApp();

	fx::InitAll(md3dDevice);
	InputLayout::InitAll(md3dDevice);
	GetTextureMgr().init(md3dDevice);

    m_normalRT= new RenderTexture(md3dDevice, 1024,1024, DXGI_FORMAT_R16G16B16A16_FLOAT );
    m_diffusespecRT = new RenderTexture(md3dDevice, 1024, 1024, DXGI_FORMAT_R16G16B16A16_FLOAT);
    m_lightRT = new RenderTexture(md3dDevice, 1024, 1024, DXGI_FORMAT_R16G16B16A16_FLOAT);
    m_quad = new NDCQuad(md3dDevice, D3DXVECTOR3(0.5f, -0.5f,0.0f), D3DXVECTOR3(0.5f, 0.5f,0.0f));
    m_finalQuad = new NDCQuad(md3dDevice, D3DXVECTOR3(0.0f, 0.0f,0.0f), D3DXVECTOR3(1.0f,1.0f,1.0f));

    //create solid rasterizer state
    D3D10_RASTERIZER_DESC rsDesc;
    ZeroMemory(&rsDesc, sizeof(rsDesc));
    rsDesc.CullMode = D3D10_CULL_BACK;
    rsDesc.FillMode = D3D10_FILL_SOLID ;
    rsDesc.FrontCounterClockwise = false;
    rsDesc.DepthClipEnable = true;
    
    HR(md3dDevice->CreateRasterizerState(&rsDesc, &m_solidMode));


    /*std::vector<D3DXVECTOR3> vb;
    std::vector<uint16_t>  ib;
    ::CreateConeMesh(vb,ib,0,1,2,12);*/
	mTech                = fx::ShadowFX->GetTechniqueByName("ShadowTech");
	mfxLightVar          = fx::ShadowFX->GetVariableByName("gLight");
	mfxEyePosVar         = fx::ShadowFX->GetVariableByName("gEyePosW");
	mfxLightWVPVar       = fx::ShadowFX->GetVariableByName("gLightWVP")->AsMatrix();
	mfxWVPVar            = fx::ShadowFX->GetVariableByName("gWVP")->AsMatrix();
	mfxWorldVar          = fx::ShadowFX->GetVariableByName("gWorld")->AsMatrix();
	mfxTexMtxVar         = fx::ShadowFX->GetVariableByName("gTexMtx")->AsMatrix();
	mfxReflectMtrlVar    = fx::ShadowFX->GetVariableByName("gReflectMtrl")->AsVector();
	mfxCubeMapEnabledVar = fx::ShadowFX->GetVariableByName("gCubeMapEnabled")->AsScalar();
	mfxDiffuseMapVar     = fx::ShadowFX->GetVariableByName("gDiffuseMap")->AsShaderResource();
	mfxSpecMapVar        = fx::ShadowFX->GetVariableByName("gSpecMap")->AsShaderResource();
	mfxNormalMapVar      = fx::ShadowFX->GetVariableByName("gNormalMap")->AsShaderResource();
	mfxShadowMapVar      = fx::ShadowFX->GetVariableByName("gShadowMap")->AsShaderResource();
	mfxCubeMapVar        = fx::ShadowFX->GetVariableByName("gCubeMap")->AsShaderResource();

	mBuildShadowMapTech            = fx::BuildShadowMapFX->GetTechniqueByName("BuildShadowMapTech");
	mfxBuildShadowMapLightWVPVar   = fx::BuildShadowMapFX->GetVariableByName("gLightWVP")->AsMatrix();
	mfxBuildShadowMapDiffuseMapVar = fx::BuildShadowMapFX->GetVariableByName("gDiffuseMap")->AsShaderResource();

    //GBuffer technique and technique variables
    m_genGBufferTech    =fx::GenGBufferFX->GetTechniqueByName("GBufferTech");
    m_ObjectModelVar    = fx::GenGBufferFX->GetVariableByName("gWorld")->AsMatrix();
    m_CameraViewVar     = fx::GenGBufferFX->GetVariableByName("gView")->AsMatrix();
    m_CameraProjVar     = fx::GenGBufferFX->GetVariableByName("gProject")->AsMatrix();
    m_TexMtx            = fx::GenGBufferFX->GetVariableByName("gTexMtx")->AsMatrix();
    m_Shininese         = fx::GenGBufferFX->GetVariableByName("gShininese")->AsScalar();
    m_DiffuseMapVar     = fx::GenGBufferFX->GetVariableByName("gDiffuseMap")->AsShaderResource();
    m_SpecMapVar        = fx::GenGBufferFX->GetVariableByName("gSpecMap")->AsShaderResource();
    m_NormalMapVar      = fx::GenGBufferFX->GetVariableByName("gNormalMap")->AsShaderResource();
    m_CubeMapVar        = fx::GenGBufferFX->GetVariableByName("gCubeMap")->AsShaderResource();
    m_CubeMapEnabledVar    = fx::GenGBufferFX->GetVariableByName("gCubeMapEnabled")->AsScalar();
    m_EyePosVar         = fx::GenGBufferFX->GetVariableByName("gEyePosW");

    m_depthTex.init(md3dDevice,1024,1024,false,DXGI_FORMAT_UNKNOWN);
    //lighting pass tech 
    m_pointLightTech = fx::LightingFX->GetTechniqueByName("DeferredPointTech");
    m_parallelLightTech = fx::LightingFX->GetTechniqueByName("DeferredDirectionalTech");
    m_lightSourceTech = fx::LightingFX->GetTechniqueByName("LightTech");
    m_pointLightVar  = fx::LightingFX->GetVariableByName("gLight");
    m_lightPosVVar      = fx::LightingFX->GetVariableByName("gLightPosV");
    m_pointLightWVPVar = fx::LightingFX->GetVariableByName("gWorldViewProj")->AsMatrix();
    m_pointLightWVVar           = fx::LightingFX->GetVariableByName("gWorldView")->AsMatrix();
    m_depthVar       = fx::LightingFX->GetVariableByName("gDepthMap")->AsShaderResource();
    m_gbufferVar     = fx::LightingFX->GetVariableByName("gGBufferMap")->AsShaderResource();
    m_lightDirVar    = fx::LightingFX->GetVariableByName("gLigthDirES");

    //final shading tech
    m_shadingTech  = fx::ShadingFX->GetTechniqueByName("ShadingTech");
    m_diffuseVar   = fx::ShadingFX->GetVariableByName("gDiffuseMap")->AsShaderResource();
    m_lightingVar  = fx::ShadingFX->GetVariableByName("gLightingMap")->AsShaderResource();

    //gen shadow map
	mDrawShadowMapTech     = fx::DrawShadowMapFX->GetTechniqueByName("DrawShadowMapTech");
	mfxDrawShadowMapTexVar = fx::DrawShadowMapFX->GetVariableByName("gShadowMap")->AsShaderResource();

	//buildNDCQuad();

	mShadowMap.init(md3dDevice, 2048, 2048, false, DXGI_FORMAT_UNKNOWN);
 
	mClearColor = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);

	GetCamera().position() = D3DXVECTOR3(0.0f, 1.8f, -10.0f);

	mFloorMapRV         = GetTextureMgr().createTex(L"floor_diffuse.dds");
	mFloorNormalMapRV   = GetTextureMgr().createTex(L"floor_normal.dds");
	mBaseMapRV          = GetTextureMgr().createTex(L"stone_diffuse.dds");
	mBaseNormalMapRV    = GetTextureMgr().createTex(L"stone_normal.dds");
	mBallMapRV          = GetTextureMgr().createTex(L"blackdiffuse.dds");
	mColumnMapRV        = GetTextureMgr().createTex(L"bricks_diffuse.dds");
	mColumnNormalMapRV  = GetTextureMgr().createTex(L"bricks_normal.dds");
	mSpecMapRV          = GetTextureMgr().createTex(L"spec.dds");
	mDefaultSpecMapRV   = GetTextureMgr().createTex(L"defaultspec.dds");
	mDefaultNormalMapRV = GetTextureMgr().createTex(L"default_normal.dds");
	mEnvMapRV           = GetTextureMgr().createCubeTex(L"grassenvmap1024.dds");

	mFloor.init(md3dDevice, 41, 21, 1.0f);
	mBase.init(md3dDevice, 2.0f);
	mBall.init(md3dDevice, 0.5f, 30, 30);
	mColumn.init(md3dDevice, 0.25f, 1.0f, 3.0f, 30, 30);
	mSky.init(md3dDevice, mEnvMapRV, 5000.0f);

 
	// direction updated at runtime
	mParallelLight.ambient  = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);
	mParallelLight.diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
	mParallelLight.specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);

    m_pointLight.ambient  = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);
    m_pointLight.diffuse  = D3DXCOLOR(0.3f, 1.0f, 0.6f, 1.0f);
    m_pointLight.specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);
    m_pointLight.pos       = D3DXVECTOR3(0.0f, 2.0f,3.0f);
    m_pointLight.att      =  D3DXVECTOR3(0.0f, 1.0f, 0.0f);
    m_pointLight.range    = 3.0f;
    m_pointLightMesh = new LightBoxMesh(md3dDevice, 50.0f);

    D3DXCOLOR   colors[] = {
        WHITE,
        RED,
        GREEN,
        BLUE,
        YELLOW
    };
    for(int i = 0 ; i < 5; ++i)
    {
        float x = 2.5f * cosf(i*2*PI/5 );
        float z = 2.5f * sinf(i*2*PI/5);
        m_pointLights[i].ambient  = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);
        m_pointLights[i].diffuse  = colors[i];
        m_pointLights[i].specular = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);
        m_pointLights[i].pos      = D3DXVECTOR3(x, 2.0f, z);
        m_pointLights[i].att      = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
        m_pointLights[i].range    = 3.0f;
    }


	D3DXMatrixOrthoLH(&mLightVolume, 30.0f, 30.0f, 1.0f, 100.0f);
}
示例#7
0
Scene::Scene(HWND TheWindow, unsigned int WindowWidth, unsigned int WindowHeight):
MyD3D10Code::Direct3D10Class(TheWindow, WindowWidth, WindowHeight),
m_FX(0),
m_Tech(0),
m_fxWVPVar(0),
m_VertexLayout(0),
m_Theta(0.0f),
m_Phi(PI*0.25f),
m_Box(m_Direct3DDevice),
// Delete 5 below variables later from init list
m_FxEyePosVar(0),
m_FxLightVar(0),
m_SpecMapRV(0),
m_FxSpecMapVar(0),
m_FxTexMatVar(0),
m_FxBoxWorldVar(0),
m_EnvironmentMapRV(0),
m_Roof(m_Direct3DDevice),
m_Floor(m_Direct3DDevice)
{
	// Initialise world view projection matrix
	D3DXMatrixIdentity(&m_WorldViewProjection);

	// Set the position of the camera
	GetCamera().position() = D3DXVECTOR3(0.0f, 1.8f, -10.0f);

	// Set the camera up
	float aspect = (float)m_WindowWidth/m_WindowHeight;		// Used in D3DXMatrixPerspectiveFovLH()
	GetCamera().setLens(0.25f*PI, aspect, 0.5f, 1000.0f);

	// Create effects and vertex layouts 
	BuildFX();
	BuildVertexLayouts();
	fx::InitAll(m_Direct3DDevice);
	InputLayout::InitAll(m_Direct3DDevice);

	// Initialise texture manager
	GetTextureMgr().init(m_Direct3DDevice);

	// Create crate resource view
	HR( D3DX10CreateShaderResourceViewFromFile(m_Direct3DDevice,	// The device to create the texture with
											   L"GreyBricks.jpg",	// The name of the file
											   0,					// Optional image info, specify null to use source dimensions and to creat a full chain of mipmap levels
											   0,					// Used to spawn a new thread to load resources, pPump
											   &m_DiffuseMapRV,		// The pointer that is used to interface with the new resource
											   0) );				// Used with pPump

	// Create specular map resource view
	HR( D3DX10CreateShaderResourceViewFromFile(m_Direct3DDevice,	// The device to create the texture with
											   L"defaultspec.dds",	// The name of the file to sue
											   0,					// Optional image info, specify null to use source dimensions and to creat a full chain of mipmap levels 
											   0,					// Used to spawn a new thread to load resources, pPump
											   &m_SpecMapRV,		// The pointer that is used to interface with the new resource
											   0) );				// Used with pPump

	// Create crate resource view
	HR( D3DX10CreateShaderResourceViewFromFile(m_Direct3DDevice,	// The device to create the texture with
											   L"Tiles.jpg",		// The name of the file
											   0,					// Optional image info, specify null to use source dimensions and to creat a full chain of mipmap levels
											   0,					// Used to spawn a new thread to load resources, pPump
											   &m_RoofTilesRV,		// The pointer that is used to interface with the new resource
											   0) );				// Used with pPump

	// Create crate resource view
	HR( D3DX10CreateShaderResourceViewFromFile(m_Direct3DDevice,	// The device to create the texture with
											   L"Grass.jpg",		// The name of the file
											   0,					// Optional image info, specify null to use source dimensions and to creat a full chain of mipmap levels
											   0,					// Used to spawn a new thread to load resources, pPump
											   &m_GrassRV,			// The pointer that is used to interface with the new resource
											   0) );				// Used with pPump

	// Set the sky texture up
	m_EnvironmentMapRV	= GetTextureMgr().createCubeTex(L"grassenvmap1024.dds");

	// Set up parallel light
	m_ParallelLight.dir		 = D3DXVECTOR3(0.57735f, -0.57735f, -0.25f);	// Reveresed
	m_ParallelLight.ambient	 = D3DXCOLOR(0.4f, 0.4f, 0.4f, 1.0f);
	m_ParallelLight.diffuse	 = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
	m_ParallelLight.specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);

	// Set box position
	m_Box.SetPosition(0.0f, 1.0f, 0.0f);

	m_Floor.ScaleXZ(10, 10);
	// Initialise sky
	m_Sky.init(m_Direct3DDevice, m_EnvironmentMapRV, 5000.0f);
}