Files
bluflame/evoke-64k/trunk/ev10/Environment.cpp
2026-04-18 22:31:51 +02:00

79 lines
2.5 KiB
C++

#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));
}
}