port from perforce
This commit is contained in:
78
evoke-64k/trunk/ev10/Environment.cpp
Normal file
78
evoke-64k/trunk/ev10/Environment.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
#include "defines.h"
|
||||
|
||||
#include "Environment.h"
|
||||
|
||||
#include "shader.h"
|
||||
#include "globals.h"
|
||||
|
||||
#include "intrin.h"
|
||||
|
||||
void Environment::Init()
|
||||
{
|
||||
}
|
||||
|
||||
void Environment::Update(const D3DXMATRIX &mView /*, const D3DXMATRIX &mProj*/ )
|
||||
{
|
||||
D3DXVECTOR3 vViewPos;
|
||||
|
||||
// Extract view position
|
||||
vViewPos.x = -(mView._41 * mView._11 + mView._42 * mView._12 + mView._43 * mView._13);
|
||||
vViewPos.y = -(mView._41 * mView._21 + mView._42 * mView._22 + mView._43 * mView._23);
|
||||
vViewPos.z = -(mView._41 * mView._31 + mView._42 * mView._32 + mView._43 * mView._33);
|
||||
|
||||
// Extract orientation
|
||||
D3DXVECTOR3 vRight(1.0f, 0.0f, 0.0f); // (mView._11, mView._21, mView._31);
|
||||
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f); // (mView._12, mView._22, mView._32);
|
||||
D3DXVECTOR3 vLook(0.0f, 0.0f, 1.0f); // (mView._13, mView._23, mView._33);
|
||||
|
||||
// Cube face orientations
|
||||
const D3DXVECTOR3 aFaceOrientations[MaxFaceCount][3] = {
|
||||
{ -vLook, vUp, vRight }, { vLook, vUp, -vRight },
|
||||
{ vRight, -vLook, vUp }, { vRight, vLook, -vUp },
|
||||
{ vRight, vUp, vLook }, { -vRight, vUp, -vLook }
|
||||
};
|
||||
|
||||
// Copy projection
|
||||
for(int i = 0; i < MaxFaceCount; i++)
|
||||
{
|
||||
// Get orientation
|
||||
const D3DXVECTOR3 *pFaceOrientation = aFaceOrientations[i];
|
||||
const D3DXVECTOR3 &vFaceRight = pFaceOrientation[0];
|
||||
const D3DXVECTOR3 &vFaceUp = pFaceOrientation[1];
|
||||
const D3DXVECTOR3 &vFaceLook = pFaceOrientation[2];
|
||||
|
||||
D3DXMATRIX &mEnvLocal = m_LocalMatrix[i];
|
||||
|
||||
// Compose local matrix
|
||||
D3DXMatrixIdentity(&mEnvLocal);
|
||||
memcpy(mEnvLocal.m[0], &vFaceRight, sizeof(float) * 3);
|
||||
memcpy(mEnvLocal.m[1], &vFaceUp, sizeof(float) * 3);
|
||||
memcpy(mEnvLocal.m[2], &vFaceLook, sizeof(float) * 3);
|
||||
|
||||
D3DXMATRIX &mEnvView = m_ViewMatrix[i];
|
||||
|
||||
// Compose view matrix
|
||||
D3DXMatrixIdentity(&mEnvView);
|
||||
mEnvView._11 = vFaceRight.x; mEnvView._21 = vFaceRight.y; mEnvView._31 = vFaceRight.z;
|
||||
mEnvView._12 = vFaceUp.x; mEnvView._22 = vFaceUp.y; mEnvView._32 = vFaceUp.z;
|
||||
mEnvView._13 = vFaceLook.x; mEnvView._23 = vFaceLook.y; mEnvView._33 = vFaceLook.z;
|
||||
mEnvView._41 = -D3DXVec3Dot(&vViewPos, &vFaceRight);
|
||||
mEnvView._42 = -D3DXVec3Dot(&vViewPos, &vFaceUp);
|
||||
mEnvView._43 = -D3DXVec3Dot(&vViewPos, &vFaceLook);
|
||||
|
||||
D3DXMATRIX &mEnvProj = m_ProjMatrix[i];
|
||||
|
||||
// 90°
|
||||
D3DXMatrixPerspectiveFovLH(&mEnvProj,
|
||||
c_PI / 2.0f, 1.0f,
|
||||
0.1f, 10000.0f);
|
||||
// mEnvProj._33 = mProj._33;
|
||||
// mEnvProj._34 = mProj._34;
|
||||
// mEnvProj._43 = mProj._43;
|
||||
// mEnvProj._44 = mProj._44;
|
||||
|
||||
// Copy remaining data
|
||||
memcpy(&m_ViewPos[i], &vViewPos, sizeof(D3DXVECTOR3));
|
||||
memcpy(&m_ViewDir[i], &vFaceLook, sizeof(D3DXVECTOR3));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user