Can somebody help me intilizarion of camera in OpenGL ES 2.0
I mean matrix calculation for Camera LookAt, Position and Up vector ?
Mahesh
Camera Intilization in OpenGL ES 2.0
Here's my lookat() implementation:
void Matrix::makeLookAt( const Vec3& aEye, const Vec3& aCenter, const Vec3& aUp, float* aMatrix )
{
assert( aMatrix );
Vec3 forward = aCenter - aEye;
forward.normalize();
Vec3 right = forward.cross( aUp );
right.normalize();
const Vec3 up = right.cross( forward );
aMatrix[ 0 ] = right.x;
aMatrix[ 4 ] = right.y;
aMatrix[ 8 ] = right.z;
aMatrix[ 12 ] = 0;
aMatrix[ 1 ] = up.x;
aMatrix[ 5 ] = up.y;
aMatrix[ 9 ] = up.z;
aMatrix[13 ] = 0;
aMatrix[ 2 ] = -forward.x;
aMatrix[ 6 ] = -forward.y;
aMatrix[10 ] = -forward.z;
aMatrix[14 ] = 0;
aMatrix[ 3 ] = aMatrix[ 7 ] = aMatrix[ 11 ] = 0.0f;
aMatrix[15 ] = 1.0f;
float translate[ 16 ];
Matrix::identity( translate );
translate[ 12 ] = -aEye.x;
translate[ 13 ] = -aEye.y;
translate[ 14 ] = -aEye.z;
multiply( translate, aMatrix, aMatrix );
}
In MathGeoLib float3x4 class, you can find an implementation of a LookAt matrix. The derivation is identical, up to translation, to the function float3x3::LookAt, and the code and documentation on how it is done is available here. This matrix will map from the local space of the object (object==camera in this case) to the world space, so for the camera, this mapping will be a View->World space mapping. To produce a World->View space mapping as is usually needed, take the inverse of the resulting matrix.
Here's my lookat() implementation:
void Matrix::makeLookAt( const Vec3& aEye, const Vec3& aCenter, const Vec3& aUp, float* aMatrix )
{
assert( aMatrix );
Vec3 forward = aCenter - aEye;
forward.normalize();
Vec3 right = forward.cross( aUp );
right.normalize();
const Vec3 up = right.cross( forward );
aMatrix[ 0 ] = right.x;
aMatrix[ 4 ] = right.y;
aMatrix[ 8 ] = right.z;
aMatrix[ 12 ] = 0;
aMatrix[ 1 ] = up.x;
aMatrix[ 5 ] = up.y;
aMatrix[ 9 ] = up.z;
aMatrix[13 ] = 0;
aMatrix[ 2 ] = -forward.x;
aMatrix[ 6 ] = -forward.y;
aMatrix[10 ] = -forward.z;
aMatrix[14 ] = 0;
aMatrix[ 3 ] = aMatrix[ 7 ] = aMatrix[ 11 ] = 0.0f;
aMatrix[15 ] = 1.0f;
float translate[ 16 ];
Matrix::identity( translate );
translate[ 12 ] = -aEye.x;
translate[ 13 ] = -aEye.y;
translate[ 14 ] = -aEye.z;
multiply( translate, aMatrix, aMatrix );
}
Thank you very much
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement