Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Camera.h"
- CCamera::CCamera(void)
- {
- Position = vec3(0,0,0);
- Look = vec3(0,0,-1);
- Up = vec3(0,1,0);
- Projection = mat4_identity;
- }
- CCamera::~CCamera(void)
- {
- }
- inline void CCamera::Create(float x, float y, float z)
- {
- Position = vec3(x, y, z);
- }
- void CCamera::Perspective(float fov, float aspect, float znear, float zfar)
- {
- // Projection=GLPerspective(fov,aspect,znear,zfar);
- float f = (float) 1.0f/tanf(fov*(math_pi/90));
- Projection.set((float)f/aspect, 0, 0, 0,
- 0, f, 0, 0,
- 0, 0, (float)(zfar+znear)/(znear-zfar), -1.0,
- 0, 0, (float)(zfar*znear*2)/(znear-zfar), 0);
- }
- void CCamera::Rotate(float Yaw, float Pitch)
- {
- m_fYaw +=Yaw;
- m_fPitch +=Pitch;
- }
- void CCamera::Move(float x, float y, float z)
- {
- Position +=vec3(x,y,z);
- }
- void CCamera::Setup(GLuint shaderProgramID)
- {
- GLfloat cosYaw = cosf(3.1415*180.0/m_fYaw);
- GLfloat sinYaw = sinf(3.1415*180.0/m_fYaw);
- GLfloat cosPitch = cosf(3.1415*180.0/m_fPitch);
- GLfloat sinPitch = sinf(3.1415*180.0/m_fPitch);
- vec3 Forward(sinYaw*cosPitch, sinPitch, cosPitch*(-cosYaw));
- vec3 Look = Position + Forward;
- mat4 viewProjection =LookAt(Position,Look,Up)*Projection ;
- // mat4 asd =GLLookAt(Position,Look,Up) * Projection ;
- glUniformMatrix4fv(glGetUniformLocation(shaderProgramID,"viewProjection"),1,GL_TRUE,viewProjection.m);
- }
- mat4 CCamera::LookAt(vec3 Eye, vec3 Look, vec3 Up)
- {
- vec3 zAxis = normalize(Eye-Look);
- vec3 xAxis = normalize(cross(Up,zAxis));
- vec3 yAxis = cross(zAxis,xAxis);
- return mat4(xAxis.x, xAxis.y, xAxis.z, (-dot(xAxis,Eye)),
- xAxis.x, xAxis.y, xAxis.z, (-dot(xAxis,Eye)),
- xAxis.x, xAxis.y, xAxis.z, (-dot(xAxis,Eye)),
- 0, 0, 0, 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement