1 #include "..\include\raMain.h" 9 for(
int i = 0; i < numLights; i++) m_Lights[i] =
new raLight();
12 m_pShadowReceiverMaterial = NULL;
31 m_Visuals.push_back(Object);
32 if(m_bCreated) Object->
Create();
37 for(UINT i = 0; i < m_Visuals.size(); i++)
39 if(m_Visuals[i] == Object)
49 m_Visuals.erase(m_Visuals.begin() + i);
57 CreateCubeMapMatrices();
59 for(UINT i = 0; i < m_Visuals.size(); i++)
61 m_Visuals[i]->Create();
68 "raEffects\\LightMapEffect.fx",
"RenderWithLightMap",
69 D3D11_SRV_DIMENSION_TEXTURE2D, 1024, 1024, 1, DXGI_FORMAT_R32_FLOAT,
71 m_pShadowReceiverMaterial->
Create();
77 for(UINT i = 0; i < m_Visuals.size(); i++)
79 if(m_Visuals[i]) m_Visuals[i]->Destroy();
88 raEffectMap::iterator iterator;
98 raEffectMap::iterator iterator;
106 pEffect->GetVariableByName(
"g_fTime")->AsScalar()->SetFloat((
float)fRunTime);
108 for(UINT i = 0; i < m_Visuals.size(); i++)
110 m_Visuals[i]->Update(fTime, fRunTime);
114 LPCSTR techniqueName)
116 SetupEffectVariables(pView, pProj);
119 for(
int drawOrder = 0; drawOrder < 5; drawOrder++)
121 for(UINT i = 0; i < m_Visuals.size(); i++)
123 m_Visuals[i]->Render(drawOrder, pView, pProj, pLight, techniqueName);
129 if(m_pShadowReceiverMaterial)
130 m_pShadowReceiverMaterial->Setup();
132 Render(m_Camera->GetViewMatrix(),
133 m_Camera->GetProjMatrix(),
138 return m_Visuals[index];
142 for(UINT i = 0; i < m_Visuals.size(); i++)
144 m_Visuals[i]->SetVisible(show);
152 raEffectMap::iterator iterator;
159 SetupLights(pEffect, &m_Light);
162 if(pmView) pmView->SetMatrix((
float*)&pView);
165 if(pmProj) pmProj->SetMatrix((
float*)&pProj);
168 if(pmCamPos) pmView->SetMatrix((
float*)&camPos);
174 pEffect->GetVariableByName(
"g_LightPos" )->AsVector();
176 if(pLightPosVariable)
177 pLightPosVariable->SetFloatVector((
float*)&lightPos);
180 pEffect->GetVariableByName(
"g_vLightDir" )->AsVector();
182 if(pLightDirVariable)
183 pLightDirVariable->SetFloatVector((
float*)&lightDir);
186 pEffect->GetVariableByName(
"g_LightDiffuse" )->AsVector();
187 if(pLightDiffuseVariable)
188 pLightDiffuseVariable->SetFloatVector((
float*)&pLight->
m_DiffuseColor);
190 pEffect->GetVariableByName(
"g_LightAmbientColor" )->AsVector();
192 pAmbientVariable->SetFloatVector((
float*)&pLight->
m_AmbientColor);
195 pEffect->GetVariableByName(
"g_LightSpecular" )->AsVector();
196 if(pLightSpecularVariable)
199 pLightSpecularVariable->SetFloatVector((
float*)&lightSpec);
202 pEffect->GetVariableByName(
"g_SpecularPower" )->AsScalar();
203 if(pLightSpecularPowerVariable)
204 pLightSpecularPowerVariable->SetInt(64);
207 pEffect->GetVariableByName(
"g_LightPosViewSpace" )->AsVector();
209 D3DXVec4Transform((D3DXVECTOR4*)&lightPosViewSpace, (D3DXVECTOR4*)&lightPos,
210 (D3DXMATRIX*)&m_Camera->GetViewMatrix());
211 if(pLightPosViewSpaceVariable)
212 pLightPosViewSpaceVariable->SetFloatVector((
float*)&lightPosViewSpace);
215 pEffect->GetVariableByName(
"g_LightDirViewSpace" )->AsVector();
217 D3DXVec3TransformNormal((D3DXVECTOR3*)&lightDirViewSpace, (D3DXVECTOR3*)&lightDir,
218 (D3DXMATRIX*)&m_Camera->GetViewMatrix());
220 if(pLightDirViewSpaceVariable)
221 pLightDirViewSpaceVariable->SetFloatVector((
float*)&lightDirViewSpace);
224 pEffect->GetVariableByName(
"g_LightAttenuation" )->AsVector();
225 if(pLightAttenuationVariable)
226 pLightAttenuationVariable->SetFloatVector((
float*)&pLight->
m_Attenuation);
230 pEffect->GetVariableByName(
"g_cosHalfPhi" )->AsScalar();
231 if(pcosHalfPhiVariable) pcosHalfPhiVariable->SetFloat(
234 pEffect->GetVariableByName(
"g_cosHalfTheta" )->AsScalar();
235 if(pcosHalfThetaVariable) pcosHalfThetaVariable->SetFloat(
238 for(
int i = 0; i < numLights; i++)
241 GetVariableByName(
"g_Lights")->GetElement(i);
244 m_Lights[i]->m_Position.z , 1.0f);
245 pLightVariable->GetMemberByName(
"Position")->AsVector()->
246 SetFloatVector((
float*)&lightPos);
248 raVector3 lightDir = m_Lights[i]->m_Direction;
249 pLightVariable->GetMemberByName(
"Direction")->AsVector()->
250 SetFloatVector((
float*)&lightDir);
253 D3DXVec4Transform((D3DXVECTOR4*)&lightPosViewSpace, (D3DXVECTOR4*)&lightPos,
254 (D3DXMATRIX*)&m_Camera->GetViewMatrix());
255 pLightVariable->GetMemberByName(
"PosViewSpace")->AsVector()->
256 SetFloatVector((
float*)&lightPosViewSpace);
259 D3DXVec3TransformNormal((D3DXVECTOR3*)&lightDirViewSpace, (D3DXVECTOR3*)&lightDir,
260 (D3DXMATRIX*)&m_Camera->GetViewMatrix());
262 pLightVariable->GetMemberByName(
"DirViewSpace")->AsVector()->
263 SetFloatVector((
float*)&lightDirViewSpace);
265 pLightVariable->GetMemberByName(
"Attenuation")->AsVector()->
266 SetFloatVector((
float*)&m_Lights[i]->m_Attenuation);
268 pLightVariable->GetMemberByName(
"cosHalfPhi")->AsScalar()->
269 SetFloat(m_Lights[i]->m_cosHalfPhi);
270 pLightVariable->GetMemberByName(
"cosHalfTheta")->AsScalar()->
271 SetFloat(m_Lights[i]->m_cosHalfTheta);
273 pLightVariable->GetMemberByName(
"Diffuse")->AsVector()->
274 SetFloatVector((
float*)&m_Lights[i]->m_DiffuseColor);
275 pLightVariable->GetMemberByName(
"Ambient")->AsVector()->
276 SetFloatVector((
float*)&m_Lights[i]->m_AmbientColor);
281 ID3D11RenderTargetView* pOldRenderTargetViews[1] = { NULL };
282 ID3D11DepthStencilView* pOldDepthStencilView = NULL;
284 m_dx->GetImmediateContext()->OMGetRenderTargets(1, pOldRenderTargetViews,
285 &pOldDepthStencilView);
287 if(!pDSView) pDSView = pOldDepthStencilView;
290 ID3D11RenderTargetView* pRenderTargetViews[1] = { pRTView };
291 m_dx->GetImmediateContext()->OMSetRenderTargets(1, pRenderTargetViews,
294 float ClearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
295 m_dx->GetImmediateContext()->ClearRenderTargetView(pRTView, ClearColor );
296 m_dx->GetImmediateContext()->ClearDepthStencilView(pDSView, D3D11_CLEAR_DEPTH, 1.0, 0);
300 m_dx->GetImmediateContext()->OMSetRenderTargets(1, pOldRenderTargetViews,
301 pOldDepthStencilView);
314 UINT width, UINT height)
316 D3D11_VIEWPORT OldVP;
317 SetViewport(&OldVP, width, height);
319 RenderToTexture(pRTView, pDSView);
321 m_dx->GetImmediateContext()->RSSetViewports(1, &OldVP);
323 void raSceneManager::CreateCubeMapMatrices()
325 float fHeight = 0.0f;
332 vLookDir =
raVector3( 1.0f, fHeight, 0.0f );
334 D3DXMatrixLookAtLH((D3DXMATRIX*)&m_CubeMapViewAdjust[0], (D3DXVECTOR3*)&vEyePt,
335 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
336 vLookDir =
raVector3(-1.0f, fHeight, 0.0f );
338 D3DXMatrixLookAtLH( (D3DXMATRIX*)&m_CubeMapViewAdjust[1], (D3DXVECTOR3*)&vEyePt,
339 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
340 vLookDir =
raVector3( 0.0f, fHeight+1.0f, 0.0f );
342 D3DXMatrixLookAtLH( (D3DXMATRIX*)&m_CubeMapViewAdjust[2], (D3DXVECTOR3*)&vEyePt,
343 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
344 vLookDir =
raVector3( 0.0f, fHeight-1.0f, 0.0f );
346 D3DXMatrixLookAtLH( (D3DXMATRIX*)&m_CubeMapViewAdjust[3], (D3DXVECTOR3*)&vEyePt,
347 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
348 vLookDir =
raVector3( 0.0f, fHeight, 1.0f );
350 D3DXMatrixLookAtLH( (D3DXMATRIX*)&m_CubeMapViewAdjust[4], (D3DXVECTOR3*)&vEyePt,
351 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
352 vLookDir =
raVector3( 0.0f, fHeight,-1.0f );
355 D3DXMatrixLookAtLH( (D3DXMATRIX*)&m_CubeMapViewAdjust[5], (D3DXVECTOR3*)&vEyePt,
356 (D3DXVECTOR3*)&vLookDir, (D3DXVECTOR3*)&vUpDir );
358 D3DXMatrixPerspectiveFovLH( (D3DXMATRIX*)&m_ProjCM,
PI * 0.5f, 1.0f, .5f, 1000.f );
361 void raSceneManager::SetViewport(D3D11_VIEWPORT* pOldVP, UINT width, UINT height)
363 UINT numViewports = 1;
364 m_dx->GetImmediateContext()->RSGetViewports(&numViewports, pOldVP);
366 D3D11_VIEWPORT viewport;
367 viewport.Height = (float)height;
368 viewport.Width = (float)width;
369 viewport.MinDepth = 0;
370 viewport.MaxDepth = 1;
371 viewport.TopLeftX = 0;
372 viewport.TopLeftY = 0;
374 m_dx->GetImmediateContext()->RSSetViewports(1, &viewport);
385 UINT width, UINT height,
raMatrix& worldCenter)
387 D3D11_VIEWPORT OldVP;
388 SetViewport(&OldVP, width, height);
390 ID3D11RenderTargetView* pOldRenderTargetViews[1] = { NULL };
391 ID3D11DepthStencilView* pOldDepthStencilView = NULL;
392 m_dx->GetImmediateContext()->OMGetRenderTargets(1, pOldRenderTargetViews,
393 &pOldDepthStencilView);
396 ID3D11RenderTargetView* pRenderTargetViews[1] = { pRTView };
397 m_dx->GetImmediateContext()->OMSetRenderTargets(1, pRenderTargetViews,
400 float ClearColor[4] = { 0.5, 0.0, 1.0, 0.0 };
401 m_dx->GetImmediateContext()->ClearRenderTargetView(pRTView, ClearColor );
402 m_dx->GetImmediateContext()->ClearDepthStencilView(pDSView, D3D11_CLEAR_DEPTH, 1.0,
408 mViewAlignCM.
m41 = -worldCenter.
m41;
409 mViewAlignCM.
m42 = -worldCenter.
m42;
410 mViewAlignCM.
m43 = -worldCenter.
m43;
413 for(
int view = 0; view < 6; ++view )
415 ViewCM[view] = mViewAlignCM * m_CubeMapViewAdjust[view];
418 raEffectMap::iterator iterator;
425 GetVariableByName(
"g_mViewCM" )->AsMatrix();
427 pmViewCM->SetMatrixArray((
float*)ViewCM, 0, 6);
430 Render(ViewCM[0], m_ProjCM, &m_Light,
"RenderToCubeMap");
432 m_dx->GetImmediateContext()->RSSetViewports( 1, &OldVP );
433 m_dx->GetImmediateContext()->OMSetRenderTargets(1, pOldRenderTargetViews,
434 pOldDepthStencilView);
raMatrix raMatrixIdentity()
void SetupLights(ID3DX11Effect *pEffect, const raLight *pLight)
raVector3 raVector3Normalize(const raVector3 &v)
virtual bool Create(raSmartPointer< raDirectX > dx)
interface ID3DX11EffectVectorVariable ID3DX11EffectVectorVariable
ID3D11DepthStencilView * m_pDSView
static raEffectMap m_effects
virtual void Update(float fTime, float fRunTime)
interface ID3DX11Effect ID3DX11Effect
interface ID3DX11EffectScalarVariable ID3DX11EffectScalarVariable
interface ID3DX11EffectVariable ID3DX11EffectVariable
raRender * GetItem(int index)
void SetupEffectVariables(const raMatrix &pView, const raMatrix &pProj)
raSceneManager(raSmartPointer< raCamera > Camera)
bool Remove(raRender *Object)
bool Add(raRender *Object)
interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable
void RenderToCubeMap(raRenderScreen &renderScreen, raMatrix &worldCenter)
ID3D11RenderTargetView * m_pRTView
void ShowAllObjects(bool show)
void RenderToTexture(raRenderScreen &renderScreen)