summaryrefslogtreecommitdiff
path: root/sample/d3d11/terrain.cpp
diff options
context:
space:
mode:
authorJason Maskell <[email protected]>2016-05-19 14:56:31 +0200
committerJason Maskell <[email protected]>2016-05-19 14:56:31 +0200
commitf7023576ff2f5be202e9c8536d38daeb966fa975 (patch)
treee0df3dd4bfbab02626785d618f1147f78e803ec2 /sample/d3d11/terrain.cpp
parentD3D11 test is compiling and running with a rendering error (ocean is grey and... (diff)
downloadwaveworks_archive-f7023576ff2f5be202e9c8536d38daeb966fa975.tar.xz
waveworks_archive-f7023576ff2f5be202e9c8536d38daeb966fa975.zip
Lots more conversion work done, not quite compiling yet. Paranoia commit.
Diffstat (limited to 'sample/d3d11/terrain.cpp')
-rw-r--r--sample/d3d11/terrain.cpp244
1 files changed, 154 insertions, 90 deletions
diff --git a/sample/d3d11/terrain.cpp b/sample/d3d11/terrain.cpp
index 5e10537..d8ce061 100644
--- a/sample/d3d11/terrain.cpp
+++ b/sample/d3d11/terrain.cpp
@@ -53,7 +53,7 @@ extern float g_BaseGerstnerWavelength;
extern float g_BaseGerstnerSpeed;
extern float g_GerstnerParallelity;
extern float g_ShoreTime;
-extern XMFLOAT3 g_WindDir;
+extern XMFLOAT2 g_WindDir;
extern bool g_Wireframe;
enum { NumMarkersXY = 10, NumMarkers = NumMarkersXY*NumMarkersXY };
@@ -61,9 +61,9 @@ enum { NumMarkersXY = 10, NumMarkers = NumMarkersXY*NumMarkersXY };
extern gfsdk_float2 g_readback_marker_coords[NumMarkers];
extern gfsdk_float4 g_readback_marker_positions[NumMarkers];
-extern XMFLOAT3 g_raycast_origins[NumMarkers];
-extern XMFLOAT3 g_raycast_directions[NumMarkers];
-extern XMFLOAT3 g_raycast_hitpoints[NumMarkers];
+extern XMVECTOR g_raycast_origins[NumMarkers];
+extern XMVECTOR g_raycast_directions[NumMarkers];
+extern XMVECTOR g_raycast_hitpoints[NumMarkers];
int gp_wrap( int a)
{
@@ -975,14 +975,23 @@ void CTerrain::RenderTerrainToHeightField(ID3D11DeviceContext* const pContext, c
pEffect->GetVariableByName("g_HeightFieldSize")->AsScalar()->SetFloat(terrain_gridpoints*terrain_geometry_scale);
XMMATRIX worldToProjectionMatrix = worldToViewMatrix * viewToProjectionMatrix;
- XMMATRIX projectionToWorldMatrix = XMMatrixInverse(&XMVectorSet(0, 0, 0, 0), worldToProjectionMatrix);
+ XMMATRIX projectionToWorldMatrix = XMMatrixInverse(NULL, worldToProjectionMatrix);
// D3DXMatrixInverse(&projectionToWorldMatrix, NULL, &worldToProjectionMatrix);
- pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix( worldToViewMatrix );
- pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix( worldToProjectionMatrix );
- pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix( projectionToWorldMatrix );
- pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector( eyePositionWS );
- pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector( viewDirectionWS );
+ XMFLOAT4X4 wvMat, wtpMat, ptwMat;
+ XMFLOAT3 epWS, vdWS;
+
+ XMStoreFloat4x4(&wvMat, worldToViewMatrix);
+ XMStoreFloat4x4(&wtpMat, worldToProjectionMatrix);
+ XMStoreFloat4x4(&ptwMat, projectionToWorldMatrix);
+ XMStoreFloat3(&epWS, eyePositionWS);
+ XMStoreFloat3(&vdWS, viewDirectionWS);
+
+ pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix( (FLOAT*) &wvMat );
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&wtpMat);
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix((FLOAT*)&ptwMat);
+ pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector((FLOAT*)&epWS);
+ pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector((FLOAT*)&vdWS);
pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0);
pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*20);
@@ -1142,9 +1151,14 @@ void CTerrain::Render(CFirstPersonCamera *cam)
pEffect->GetVariableByName("g_ApplyFog")->AsScalar()->SetFloat(1.0f);
pEffect->GetVariableByName("g_FoamIntensityTexture")->AsShaderResource()->SetResource(foam_intensity_textureSRV);
pEffect->GetVariableByName("g_FoamDiffuseTexture")->AsShaderResource()->SetResource(foam_diffuse_textureSRV);
- D3DXMATRIX topDownMatrix;
+
+ XMMATRIX topDownMatrix;
g_pOceanSurf->pDistanceFieldModule->GetWorldToTopDownTextureMatrix( topDownMatrix );
- pEffect->GetVariableByName("g_WorldToTopDownTextureMatrix" )->AsMatrix()->SetMatrix(&topDownMatrix._11);
+
+ XMFLOAT4X4 tdMat;
+ XMStoreFloat4x4(&tdMat, topDownMatrix);
+
+ pEffect->GetVariableByName("g_WorldToTopDownTextureMatrix")->AsMatrix()->SetMatrix((FLOAT*)&tdMat);
pEffect->GetVariableByName("g_Time" )->AsScalar()->SetFloat( g_ShoreTime );
pEffect->GetVariableByName("g_DataTexture" )->AsShaderResource()->SetResource( g_pOceanSurf->pDistanceFieldModule->GetDataTextureSRV() );
pEffect->GetVariableByName("g_GerstnerSteepness")->AsScalar()->SetFloat( g_GerstnerSteepness );
@@ -1242,17 +1256,25 @@ void CTerrain::Render(CFirstPersonCamera *cam)
oceanFX->GetVariableByName("g_FoamIntensityTexture")->AsShaderResource()->SetResource(foam_intensity_textureSRV);
oceanFX->GetVariableByName("g_FoamDiffuseTexture")->AsShaderResource()->SetResource(foam_diffuse_textureSRV);
- const D3DXMATRIX matView = D3DXMATRIX(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1) * *cam->GetViewMatrix();
- const D3DXMATRIX matProj = *cam->GetProjMatrix();
- D3DXVECTOR3 cameraPosition = *cam->GetEyePt();
- D3DXVECTOR3 lightPosition = D3DXVECTOR3(14000.0f,6500.0f,4000.0f);
+ XMMATRIX matView = XMMatrixSet(1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1) * cam->GetViewMatrix();
+ XMMATRIX matProj = cam->GetProjMatrix();
+ XMMATRIX matMVP = matView * matProj;
+ XMVECTOR cameraPosition = cam->GetEyePt();
+ XMVECTOR lightPosition = XMVectorSet(14000.0f, 6500.0f, 4000.0f, 0);
- oceanFX->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix(matView);
- oceanFX->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(matView*matProj);
- oceanFX->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition);
- oceanFX->GetVariableByName("g_LightPosition")->AsVector()->SetFloatVector(lightPosition);
+// const D3DXMATRIX matView = D3DXMATRIX(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1) * *cam->GetViewMatrix();
+// const D3DXMATRIX matProj = *cam->GetProjMatrix();
+// D3DXVECTOR3 cameraPosition = *cam->GetEyePt();
+// D3DXVECTOR3 lightPosition = D3DXVECTOR3(14000.0f,6500.0f,4000.0f);
+//
+ oceanFX->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix((FLOAT*)&matView);
+ oceanFX->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&matMVP);
+ oceanFX->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector((FLOAT*)&cameraPosition);
+ oceanFX->GetVariableByName("g_LightPosition")->AsVector()->SetFloatVector((FLOAT*)&lightPosition);
oceanFX->GetVariableByName("g_Wireframe")->AsScalar()->SetFloat(g_Wireframe ? 1.0f : 0.0f);
- oceanFX->GetVariableByName("g_WinSize")->AsVector()->SetFloatVector(D3DXVECTOR4(main_Viewport.Width,main_Viewport.Height,0,0));
+
+ XMFLOAT4 winSize = XMFLOAT4(main_Viewport.Width, main_Viewport.Height, 0, 0);
+ oceanFX->GetVariableByName("g_WinSize")->AsVector()->SetFloatVector((FLOAT*)&winSize);
g_pOceanSurf->renderShaded(pContext, matView,matProj,g_hOceanSimulation, g_hOceanSavestate, g_WindDir, g_GerstnerSteepness, g_BaseGerstnerAmplitude, g_BaseGerstnerWavelength, g_BaseGerstnerSpeed, g_GerstnerParallelity, g_ShoreTime);
g_pOceanSurf->getQuadTreeStats(g_ocean_quadtree_stats);
@@ -1272,14 +1294,17 @@ void CTerrain::Render(CFirstPersonCamera *cam)
// drawing readback markers to main buffer
const UINT vbOffset = 0;
- const UINT vertexStride = sizeof(D3DXVECTOR4);
+ const UINT vertexStride = sizeof(XMFLOAT4);
+ XMFLOAT4 contactPos;
+
pContext->IASetInputLayout(g_pOceanSurf->m_pRayContactLayout);
pContext->IASetVertexBuffers(0, 1, &g_pOceanSurf->m_pContactVB, &vertexStride, &vbOffset);
pContext->IASetIndexBuffer(g_pOceanSurf->m_pContactIB, DXGI_FORMAT_R16_UINT, 0);
pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
for( int i = 0; i < NumMarkers; i++)
{
- g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector(D3DXVECTOR4(g_readback_marker_positions[i].x,g_readback_marker_positions[i].y,g_readback_marker_positions[i].z,0));
+ contactPos = XMFLOAT4(g_readback_marker_positions[i].x, g_readback_marker_positions[i].y, g_readback_marker_positions[i].z, 0);
+ g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector((FLOAT*)&contactPos);
g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(0)->Apply(0, pContext);
pContext->DrawIndexed(12, 0, 0);
}
@@ -1290,18 +1315,29 @@ void CTerrain::Render(CFirstPersonCamera *cam)
pContext->IASetVertexBuffers(0, 1, &g_pOceanSurf->m_pContactVB, &vertexStride, &vbOffset);
pContext->IASetIndexBuffer(g_pOceanSurf->m_pContactIB, DXGI_FORMAT_R16_UINT, 0);
pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+
for( int i = 0; i < NumMarkers; i++)
{
- g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector(D3DXVECTOR4(g_raycast_hitpoints[i].x, g_raycast_hitpoints[i].z, g_raycast_hitpoints[i].y, 0.0f));
+ XMStoreFloat4(&contactPos, g_raycast_hitpoints[i]);
+
+ g_pOceanSurf->m_pOceanFX->GetVariableByName("g_ContactPosition")->AsVector()->SetFloatVector((FLOAT*)&contactPos);
g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(0)->Apply(0, pContext);
pContext->DrawIndexed(12, 0, 0);
}
+
+ XMFLOAT4 origPos, rayDirection;
+
// drawing rays to main buffer
pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP);
for( int i = 0; i < NumMarkers; i++)
{
- g_pOceanSurf->m_pOceanFX->GetVariableByName("g_OriginPosition")->AsVector()->SetFloatVector(g_raycast_origins[i]);
- g_pOceanSurf->m_pOceanFX->GetVariableByName("g_RayDirection")->AsVector()->SetFloatVector(g_raycast_directions[i]*100.0f);
+ XMStoreFloat4(&origPos, g_raycast_origins[i]);
+ g_pOceanSurf->m_pOceanFX->GetVariableByName("g_OriginPosition")->AsVector()->SetFloatVector((FLOAT*)&origPos);
+
+ XMVECTOR vecRayDir = g_raycast_directions[i] * 100.0f;
+ XMStoreFloat4(&rayDirection, vecRayDir);
+
+ g_pOceanSurf->m_pOceanFX->GetVariableByName("g_RayDirection")->AsVector()->SetFloatVector((FLOAT*) &rayDirection);
g_pOceanSurf->m_pRenderRayContactTechnique->GetPassByIndex(1)->Apply(0, pContext);
pContext->DrawIndexed(2, 0, 0);
}
@@ -1362,41 +1398,53 @@ void CTerrain::SetupReflectionView(CFirstPersonCamera *cam)
float aspectRatio = BackbufferWidth / BackbufferHeight;
- D3DXVECTOR3 EyePoint;
- D3DXVECTOR3 LookAtPoint;
+ XMVECTOR EyePoint;
+ XMVECTOR LookAtPoint;
- EyePoint =*cam->GetEyePt();
- LookAtPoint =*cam->GetLookAtPt();
- EyePoint.y=-1.0f*EyePoint.y+1.0f;
- LookAtPoint.y=-1.0f*LookAtPoint.y+1.0f;
+ EyePoint = cam->GetEyePt();
+ LookAtPoint = cam->GetLookAtPt();
+ XMVectorSetY(EyePoint, -1.0f*XMVectorGetY(EyePoint) + 1.0f);
+ XMVectorSetY(LookAtPoint, -1.0f*XMVectorGetY(LookAtPoint) + 1.0f);
- D3DXMATRIX mView;
- D3DXMATRIX mProj;
- D3DXMATRIX mViewProj;
- D3DXMATRIX mViewProjInv;
- D3DXMATRIX mWorld;
- mView = *cam->GetViewMatrix();
- mWorld = *cam->GetWorldMatrix();
+ XMMATRIX mView = cam->GetViewMatrix();
+ XMMATRIX mProj;
+ XMMATRIX mViewProj;
+ XMMATRIX mViewProjInv;
- mWorld._42=-mWorld._42-1.0f;
+ XMMATRIX mWorld = cam->GetWorldMatrix();
+ XMFLOAT4X4 mWorldTweak;
+ XMStoreFloat4x4(&mWorldTweak, mWorld);
+
+ mWorldTweak._42 = -mWorldTweak._42 - 1.0f;
- mWorld._21*=-1.0f;
- mWorld._23*=-1.0f;
+ mWorldTweak._21 *= -1.0f;
+ mWorldTweak._23 *= -1.0f;
+
+ mWorldTweak._32 *= -1.0f;
- mWorld._32*=-1.0f;
+ mWorld = XMLoadFloat4x4(&mWorldTweak);
- D3DXMatrixInverse(&mView, NULL, &mWorld);
- D3DXMatrixPerspectiveFovLH(&mProj,camera_fov * D3DX_PI / 360.0f,aspectRatio,scene_z_near,scene_z_far);
- mViewProj=mView*mProj;
- D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj);
+ mView = XMMatrixInverse(NULL, mWorld);
+ mProj = XMMatrixPerspectiveFovLH(camera_fov * XMVectorGetY(DirectX::g_XMPi) / 360.0f, aspectRatio, scene_z_near, scene_z_far);
+ mViewProj = mView * mProj;
+ mViewProjInv = XMMatrixInverse(NULL, mViewProj);
+
+ XMFLOAT4X4 mvpStore;
+ XMFLOAT4 epStore;
+
+ XMStoreFloat4x4(&mvpStore, mViewProj);
+ XMStoreFloat4(&epStore, EyePoint);
- pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj);
- pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(EyePoint);
- D3DXVECTOR3 direction = LookAtPoint - EyePoint;
- D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction);
- pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction);
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&mvpStore);
+ pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector((FLOAT*)&epStore);
+
+ XMVECTOR normalized_direction = XMVector3Normalize(LookAtPoint - EyePoint);
+ XMFLOAT4 ndStore;
+ XMStoreFloat4(&ndStore, normalized_direction);
+
+ pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector((FLOAT*) &ndStore);
pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0f);
pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(0);
@@ -1410,31 +1458,40 @@ void CTerrain::SetupRefractionView(CFirstPersonCamera *cam)
void CTerrain::SetupLightView(CFirstPersonCamera *cam)
{
- D3DXVECTOR3 EyePoint= D3DXVECTOR3(14000.0f,6500.0f,4000.0f);
- D3DXVECTOR3 LookAtPoint = D3DXVECTOR3(terrain_far_range/2.0f,0.0f,terrain_far_range/2.0f);
- D3DXVECTOR3 lookUp = D3DXVECTOR3(0,1,0);
- D3DXVECTOR3 cameraPosition = *cam->GetEyePt();
+ XMVECTOR EyePoint = XMVectorSet(14000.0f,6500.0f,4000.0f, 0);
+ XMVECTOR LookAtPoint = XMVectorSet(terrain_far_range / 2.0f, 0.0f, terrain_far_range / 2.0f, 0);
+ XMVECTOR lookUp = XMVectorSet(0, 1, 0, 0);
+ XMVECTOR cameraPosition = cam->GetEyePt();
float nr, fr;
- nr=sqrt(EyePoint.x*EyePoint.x+EyePoint.y*EyePoint.y+EyePoint.z*EyePoint.z)-terrain_far_range*1.0f;
- fr=sqrt(EyePoint.x*EyePoint.x+EyePoint.y*EyePoint.y+EyePoint.z*EyePoint.z)+terrain_far_range*1.0f;
+ nr=sqrt(XMVectorGetX(EyePoint)*XMVectorGetX(EyePoint)+XMVectorGetY(EyePoint)*XMVectorGetY(EyePoint)+XMVectorGetZ(EyePoint)*XMVectorGetZ(EyePoint))-terrain_far_range*1.0f;
+ fr=sqrt(XMVectorGetX(EyePoint)*XMVectorGetX(EyePoint)+XMVectorGetY(EyePoint)*XMVectorGetY(EyePoint)+XMVectorGetZ(EyePoint)*XMVectorGetZ(EyePoint))+terrain_far_range*1.0f;
+
+ XMMATRIX mView = XMMatrixLookAtLH(EyePoint, LookAtPoint, lookUp); // *D3DXMatrixLookAtLH(&mView, &EyePoint, &LookAtPoint, &lookUp);
+ XMMATRIX mProjMatrix = XMMatrixOrthographicLH(terrain_far_range*1.5, terrain_far_range, nr, fr); //*D3DXMatrixOrthoLH(&mProjMatrix, terrain_far_range*1.5, terrain_far_range, nr, fr);
+ XMMATRIX mViewProj = mView * mProjMatrix;
+ XMMATRIX mViewProjInv;
- D3DXMATRIX mView = *D3DXMatrixLookAtLH(&mView,&EyePoint,&LookAtPoint,&lookUp);
- D3DXMATRIX mProjMatrix = *D3DXMatrixOrthoLH(&mProjMatrix,terrain_far_range*1.5,terrain_far_range,nr,fr);
- D3DXMATRIX mViewProj = mView * mProjMatrix;
- D3DXMATRIX mViewProjInv;
- D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj);
+ mViewProjInv = XMMatrixInverse(NULL, mViewProj);
+
+ XMFLOAT4X4 vpStore, vpiStore;
+ XMStoreFloat4x4(&vpStore, mViewProj);
+ XMStoreFloat4x4(&vpiStore, mViewProjInv);
+ XMFLOAT4 camStore, ndStore;
+ XMStoreFloat4(&camStore, cameraPosition);
ID3DX11Effect* oceanFX = g_pOceanSurf->m_pOceanFX;
- oceanFX->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj);
+ oceanFX->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&vpStore);
+
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&vpStore);
+ pEffect->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&vpStore);
+ pEffect->GetVariableByName("g_LightModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix((FLOAT*)&vpiStore);
+ pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector((FLOAT*)&camStore);
- pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj);
- pEffect->GetVariableByName("g_LightModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj);
- pEffect->GetVariableByName("g_LightModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix(mViewProjInv);
- pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition);
- D3DXVECTOR3 direction = *cam->GetLookAtPt() - *cam->GetEyePt();
- D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction);
- pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction);
+ XMVECTOR normalized_direction = XMVector3Normalize(cam->GetLookAtPt() - cam->GetEyePt());
+ XMStoreFloat4(&ndStore, normalized_direction);
+
+ pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector((FLOAT*)&ndStore);
pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0);
pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*2);
@@ -1443,25 +1500,32 @@ void CTerrain::SetupLightView(CFirstPersonCamera *cam)
void CTerrain::SetupNormalView(CFirstPersonCamera *cam)
{
- D3DXVECTOR3 EyePoint;
- D3DXVECTOR3 LookAtPoint;
-
- EyePoint =*cam->GetEyePt();
- LookAtPoint =*cam->GetLookAtPt();
- D3DXMATRIX mView = *cam->GetViewMatrix();
- D3DXMATRIX mProjMatrix = *cam->GetProjMatrix();
- D3DXMATRIX mViewProj = mView * mProjMatrix;
- D3DXMATRIX mViewProjInv;
- D3DXMatrixInverse(&mViewProjInv, NULL, &mViewProj);
- D3DXVECTOR3 cameraPosition = *cam->GetEyePt();
-
- pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix(mView);
- pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix(mViewProj);
- pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix(mViewProjInv);
- pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector(cameraPosition);
- D3DXVECTOR3 direction = LookAtPoint - EyePoint;
- D3DXVECTOR3 normalized_direction = *D3DXVec3Normalize(&normalized_direction,&direction);
- pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector(normalized_direction);
+ XMVECTOR EyePoint = cam->GetEyePt();
+ XMVECTOR LookAtPoint = cam->GetLookAtPt();
+
+ XMMATRIX mView = cam->GetViewMatrix();
+ XMMATRIX mProjMatrix = cam->GetProjMatrix();
+ XMMATRIX mViewProj = mView * mProjMatrix;
+ XMMATRIX mViewProjInv = XMMatrixInverse(NULL, mViewProj);
+ XMVECTOR cameraPosition = cam->GetEyePt();
+
+ XMFLOAT4X4 vStore, vpStore, vpiStore;
+ XMStoreFloat4x4(&vStore, mView);
+ XMStoreFloat4x4(&vpStore, mViewProj);
+ XMStoreFloat4x4(&vpiStore, mViewProjInv);
+
+ XMFLOAT4 cpStore, ndStore;
+ XMStoreFloat4(&cpStore, cameraPosition);
+
+
+ pEffect->GetVariableByName("g_ModelViewMatrix")->AsMatrix()->SetMatrix((FLOAT*)&vStore);
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrix")->AsMatrix()->SetMatrix((FLOAT*)&vpStore);
+ pEffect->GetVariableByName("g_ModelViewProjectionMatrixInv")->AsMatrix()->SetMatrix((FLOAT*)&vpiStore);
+ pEffect->GetVariableByName("g_CameraPosition")->AsVector()->SetFloatVector((FLOAT*)&cpStore);
+
+ XMVECTOR normalized_direction = XMVector3Normalize(LookAtPoint - EyePoint);
+ XMStoreFloat4(&ndStore, normalized_direction);
+ pEffect->GetVariableByName("g_CameraDirection")->AsVector()->SetFloatVector((FLOAT*)&ndStore);
pEffect->GetVariableByName("g_HalfSpaceCullSign")->AsScalar()->SetFloat(1.0);
pEffect->GetVariableByName("g_HalfSpaceCullPosition")->AsScalar()->SetFloat(terrain_minheight*20);