//////////////////////////////////////////////////////////////////////////
// Author: Ben Vanik - noxa@nomorals.org
// File: rnd_Math.cpp
// Created: 5/7/2001 7:11:35 PM
// Class: .CPP C++ Code
//////////////////////////////////////////////////////////////////////////
/* Special notes:                                                       *\

\*                                                                      */

//========================================================================
// Includes
#include "rnd_Math.h"

//========================================================================
// Definitions

//========================================================================
// Macros

//========================================================================
// Typedefs

//========================================================================
// Globals

//========================================================================
// Prototypes

//////////////////////////////////////////////////////////////////////////
// Body
//////////////////////////////////////////////////////////////////////////

void Mat_Identify_4x4(float **fMatrix)
{
	// Set everything to 0
	memset( (void*)&fMatrix[0][0], 0, sizeof(float) * 16 );

	// Set diagonals to 1
	fMatrix[0][0] = fMatrix[1][1] = fMatrix[2][2] = fMatrix[3][3] = 1;
}

void Mat_Mul_4x4_4x4(float **fA, float **fB, float **fDest)
{
	fDest[0][0]	= fA[0][0] * fB[0][0] + fA[0][1] * fB[1][0] + fA[0][2] * fB[2][0];
	fDest[0][1]	= fA[0][0] * fB[0][1] + fA[0][1] * fB[1][1] + fA[0][2] * fB[2][1];
	fDest[0][2]	= fA[0][0] * fB[0][2] + fA[0][1] * fB[1][2] + fA[0][2] * fB[2][2];
	fDest[0][3]	= 0;

	fDest[1][0]	= fA[1][0] * fB[0][0] + fA[1][1] * fB[1][0] + fA[1][2] * fB[2][0];
	fDest[1][1]	= fA[1][0] * fB[0][1] + fA[1][1] * fB[1][1] + fA[1][2] * fB[2][1];
	fDest[1][2]	= fA[1][0] * fB[0][2] + fA[1][1] * fB[1][2] + fA[1][2] * fB[2][2];
	fDest[1][3]	= 0;

	fDest[2][0]	= fA[2][0] * fB[0][0] + fA[2][1] * fB[1][0] + fA[2][2] * fB[2][0];
	fDest[2][1]	= fA[2][0] * fB[0][1] + fA[2][1] * fB[1][1] + fA[2][2] * fB[2][1];
	fDest[2][2]	= fA[2][0] * fB[0][2] + fA[2][1] * fB[1][2] + fA[2][2] * fB[2][2];
	fDest[2][3]	= 0;

	fDest[3][0]	= fA[3][0] * fB[0][0] + fA[3][1] * fB[1][0] + fA[3][2] * fB[2][0];
	fDest[3][1]	= fA[3][0] * fB[0][1] + fA[3][1] * fB[1][1] + fA[3][2] * fB[2][1];
	fDest[3][2]	= fA[3][0] * fB[0][2] + fA[3][1] * fB[1][2] + fA[3][2] * fB[2][2];
	fDest[3][3]	= 1;
}