All pastes #185725 Raw Edit

Miscellany

public text v1 · immutable
#185725 ·published 2006-09-29 07:39 UTC
rendered paste body
void player_rotate(GLfloat xangle, GLfloat yangle, GLfloat zangle)
{
	GLfloat v[4] = {	player.lx - player.x,
						player.ly - player.y,
						player.lz - player.z,
						1};
	GLfloat *c = player.matrix;
	GLint matrix_mode;
	
	glGetIntegerv(GL_MATRIX_MODE, &matrix_mode);
	
	/* load the current player transformation matrix on to the model view stack */
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	
	debug("xangle: %f yangle: %f zangle: %f", xangle, yangle,zangle);
	/* perform rotation on it */
	//glRotatef(xangle,0,1,0);
	glRotatef(yangle,1,0,0);
	//glRotatef(zangle,0,0,1);
	
	/* get the matrix back out */
	glGetFloatv(GL_MODELVIEW_MATRIX, c);
	
	/* restore the previous model view matrix */
	glPopMatrix();
	
	/* restore the previous matrix mode */
	glMatrixMode(matrix_mode);
	
	/* multiply the view vector by the transformation matrix */
	v[0] = c[0] * v[0] + c[4] * v[1] + c[8] * v[2] + c[12] * v[3];
	v[1] = c[1] * v[0] + c[5] * v[1] + c[9] * v[2] + c[13] * v[3];
	v[2] = c[2] * v[0] + c[6] * v[1] + c[10] * v[2] + c[14] * v[3];
	
	/* apply the new view vector */
	player.lx = player.x+v[0];
	player.ly = player.y+v[1];
	player.lz = player.z+v[2];
	
	debug("player @ (%f, %f, %f) looking at (%f, %f, %f)",	player.x, player.y, player.z,
		  player.lx, player.ly, player.lz);
}