Code:
inline CMatrix44 GetWorldMatrix()
{ return CMatrix44::Identity; }
Code:
CMatrix44 GetProjectionMatrix()
{
SCameraInfo *pCamera = GetActiveCamera();
Delegates::CGCamera__FOV_t pGetFieldOfView = reinterpret_cast<Delegates::CGCamera__FOV_t>
( Process::GetVirtualMethod( (DWORD_PTR) pCamera, Offsets::VirtualMethods::Camera_FOV ) );
float fFieldOfView = pGetFieldOfView( pCamera ) * 0.6f;
float fNearClip = Delegates::World__GetNearClip();
float fFarClip = Delegates::World__GetFarClip();
float fAspect = Process::GetMemory<float>( Offsets::General::Camera_AspectRatio );
float fYScale = 1 / tanf( fFieldOfView / 2 ); // take care of division-by-zero!
float fXScale = fYScale / fAspect;
CMatrix44 projMatrix;
projMatrix.11 = fXScale;
projMatrix.22 = fYScale;
projMatrix.33 = fFarClip / ( fNearClip - fFarClip );
projMatrix.34 = -1.0f;
projMatrix.43 = fNearClip * fFarClip / ( fNearClip - fFarClip );
return projMatrix;
}
Code:
CMatrix44 GetViewMatrix()
{
SCameraInfo *pCamera = GetActiveCamera();
Delegates::CGCamera__Forward_t pForward = reinterpret_cast<Delegates::CGCamera__Forward_t>
( Process::GetVirtualMethod( (DWORD_PTR) pCamera, Offsets::VirtualMethods::Camera_Forward ) );
CVector3 vCamLookAt;
pForward( pCamera, &vCamLookAt );
vCamLookAt += pCamera->Position;
CMatrix44 viewMatrix;
CVector3 vZAxis = CVector3( pCamera->Position - vCamLookAt ).normalize();
CVector3 vXAxis = CVector3( 0, 0, 1 ).cross( vZAxis ).normalize();
CVector3 vYAxis = vZAxis.cross( vXAxis );
viewMatrix.11 = vXAxis.X; viewMatrix.12 = vYAxis.X; viewMatrix.13 = vZAxis.X;
viewMatrix.21 = vXAxis.Y; viewMatrix.22 = vYAxis.Y; viewMatrix.23 = vZAxis.Y;
viewMatrix.31 = vXAxis.Z; viewMatrix.32 = vYAxis.Z; viewMatrix.33 = vZAxis.Z;
viewMatrix.41 = vXAxis.dot( pCamera->Position );
viewMatrix.42 = vYAxis.dot( pCamera->Position );
viewMatrix.43 = vZAxis.dot( pCamera->Position );
viewMatrix.44 = 1.0f;
return viewMatrix;
}
So as you can see only position is what I get from cam struct.