www.pudn.com > OpenGLDemoshow.zip > Camera.cpp
#include "stdafx.h"
#include "Camera.h"
void MyMatrixMult(float* V1,float* V2,float* V3)
{
glPushMatrix();
glLoadMatrixf(V1);
glMultMatrixf(V2);
glGetFloatv(GL_MODELVIEW_MATRIX,V3);
glPopMatrix();
}
CTransferMatrix::CTransferMatrix()
{
MyIdentity();
}
void CTransferMatrix::MyIdentity()
{
int i;
for(i=0;i<16;i++)
Matrix[i]=0.0;
for(i=0;i<16;i+=5)
Matrix[i]=1.0;
}
void CTransferMatrix::Load(float* M)
{
for(int i=0;i<16;i++)
Matrix[i]=M[i];
}
CScene::CScene()
{
}
void CScene::RotateRoundAxis(float r,int axis)
{ glPushMatrix();
glLoadMatrixf(m_TransferMatrix.Matrix);
if(axis==AXIS_X)
glRotatef(r,1,0,0);
if(axis==AXIS_Y)
glRotatef(r,0,1,0);
if(axis==AXIS_Z)
glRotatef(r,0,0,1);
float m_newMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX,m_newMatrix);
m_TransferMatrix.Load(m_newMatrix);
glPopMatrix();
}
void CScene::Apply()
{
glMultMatrixf(m_TransferMatrix.Matrix);
}
void CCamera::RotateRoundAxis(float r,int axis)
{
glPushMatrix();
glLoadMatrixf(m_TransferMatrix.Matrix);
if(axis==AXIS_X)
glRotatef(r,1,0,0);
if(axis==AXIS_Y)
glRotatef(r,0,1,0);
if(axis==AXIS_Z)
glRotatef(r,0,0,1);
float m_newMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX,m_newMatrix);
m_TransferMatrix.Load(m_newMatrix);
glPopMatrix();
}
CCamera::CCamera()
{
}
void CCamera::Offset(float x,float y,float z)
{
glPushMatrix();
glLoadIdentity();
glTranslatef(x,y,z);
float m_tempMatrix[16];
float m_newMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX,m_newMatrix);
MyMatrixMult(m_newMatrix,m_TransferMatrix.Matrix,m_newMatrix);
m_TransferMatrix.Load(m_newMatrix);
glPopMatrix();
}
void CCamera::Apply()
{
glMultMatrixf(m_TransferMatrix.Matrix);
}