/*********************************************************************
*	Rozsireny soubor algebraickych funkci
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 10.9.2008
*	Soubor:	algebraic_ext.cpp
*	Popis:	Obsahuje algebraicke funkce,
*			ktere ke sve funkci potrebuji doplnkove knihovny
**********************************************************************/

#include "algebraic_ext.h"
//#include "gl/gl.h"
#include "SDL/SDL_opengl.h"
#include "mathematic.h"

Vector rotateVector( Vector &axis, float angle, Vector &target )
{
	GLfloat transformationMatrix[16];

	//Pozor zmena v usporadani os
	//opengl pouziva osy Z k pozorovateli ( kladna ) a od pozorovatele ( zaporna )
	//a osu y jako nahoru (kladna ) a dolu ( zaporna )
	//ve vsech non-opengl funkcich zde, jsou osy usporadany jako Z = nahoru ( kladna ), dolu ( zaporna )
	//a Y = od pozorovatele (kladna), k pozorovateli (zaporna )
	//proto jsou zde zmeny v Z a Y parametrech
	GLfloat point[4] = { target.x, target.z, -target.y, 0 };
	GLfloat result[4] = {0};

	glMatrixMode(GL_MODELVIEW); 
		
	glPushMatrix();
	glLoadIdentity();

	//zde jsou take zmeny v Z a Y parametrech
	glRotatef( angle, axis.x, axis.z, -axis.y );
		
	glGetFloatv( GL_MODELVIEW_MATRIX, transformationMatrix);
	matrixMult<float>( transformationMatrix, point, result ); 
		
	glPopMatrix();
	//zde jsou take zmeny v Z a Y parametrech - zde je to navrat ke standardnim hodnotam
	return Vector( result[0], -result[2], result[1] );
}
