• Advertisement
Sign in to follow this  

gluLookAt()

This topic is 4602 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, i am tring to make gluLookAt function to use it in my class but i face some problem like when i use gluLookAt(...) it give me a result and when i use my own test.LookAt(...) same value diffrent result
template <class T> view<T> &view<T>::LookAt(T eX,T eY,T eZ,
					    T cX,T cY,T cZ,
					    T uX,T uY,T uZ){
	Unit();
	V3D F,UP,s,u;	
	UP.set(uX,uY,uZ);
	F.set(eX-cX,eY-cY,eZ-cZ);
	F.normal();
	
	s.CrossProduct(UP,F);
	u.CrossProduct(F,s);
	s.normalize();
	u.normalize();

	this->arrMat[0]=s.x;
	this->arrMat[1]=s.y;
	this->arrMat[2]=s.z;
	this->arrMat[4]=u.x;
	this->arrMat[5]=u.y;
	this->arrMat[6]=u.z;
	this->arrMat[8]=F.x;
	this->arrMat[9]=F.y;
	this->arrMat[10]=F.z;
	this->MultMatrix();
	this->Translate(-eX,-eY,-eZ);

	return *this;
}

i use the same gluLookAt's code . bye

Share this post


Link to post
Share on other sites
Advertisement
hi,
when i use
gluLookAt(0,0,0,0,0,-1,0,1,0);
it works and i can see my triangle
and this is the modelview matrix after gluLookAt
0.894427 0 -0.447214 0
0 1 0 0
0.447214 0 0.894427 0
0.894427 0 -0.447214 1

but when i use
test.LookAt(0,0,0,0,0,-1,0,1,0);
empty scene the triangle dosen't show up :(
and this is the modelview matrix after test.LookAt
0 0 0 0
0 0 0 0
-0.4 0 0.8 0
0 0 0 1


[Edited by - ff8 on June 18, 2005 10:19:22 AM]

Share this post


Link to post
Share on other sites
I wrote this code to replace gluLookAt() ages ago. Virtually the same thing, 'cept it uses trigonometry instead of matrix operations, and you can get the rotations on the x and y axiis for sprites. ;)


//THIS IS A REPLACEMENT FOR gluLookAt.
//It requires 1 less argument (the 'up' vector), because the positive Y axis is
//always 'up', unless you rotate it on the Z axis, which you can do on your own.
//It will also fill the array with the rotation angles, that way you can counter-
//rotate things like sprites.
GLvoid doLookAtR(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble* rs){
GLdouble x = eyeX - centerX;
GLdouble y = eyeY - centerY;
GLdouble z = eyeZ - centerZ;

//lengths = 0, no difference = no rotation
if ((x == y) && (y == z) && (z == 0.0f)) return;
//if looking straight up or down (fix for the gimbal lock - as found in gluLookAt)
if ((x == z) && (z == 0.0f)){
if (y < 0.0f){//if looking straight up
glRotated(-90.0f,1,0,0);
}else{//if looking straight down
glRotated(+90.0f,1,0,0);
}
glTranslated(-x,-y,-z);
return;
}

GLdouble rx = 0.0f;
GLdouble ry = 0.0f;

GLdouble hypA = (x == 0.0f) ? z : hypot(x,z);
GLdouble hypB = (y == 0.0f) ? hypA : hypot(y,hypA);
if (z == 0.0f) hypB = hypot(x,y);

rx = toDegs(asin(y / hypB));
ry = toDegs(asin(x / hypA));

//rotate and translate accordingly
glRotated(rx,1,0,0);
if (z < 0.0f){
ry += 180.0f;
}else{
ry = 360.0f - ry;
}
glRotated(ry,0,1,0);
glTranslated(-eyeX,-eyeY,-eyeZ);

if (rs){
rs[0] = rx;
rs[1] = ry;
}
}




[EDIT]
If you don't need the rotational values, you can always remove the 'rs' bit, or use this:

GLvoid doLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ){
return doLookAtR(eyeX,eyeY,eyeZ,centerX,centerY,centerZ,0);
}

Share this post


Link to post
Share on other sites
Quote:
Original post by ff8
Hi, i am tring to make gluLookAt function to use it in my class but i face some problem like when i use gluLookAt(...) it give me a result and when i use my own test.LookAt(...) same value diffrent result
*** Source Snippet Removed ***
i use the same gluLookAt's code .
bye


Your rotation matrix isn't correct, you want the inverse of that. Or, in full, including the translation:


[ Sx Sy Sz -P.S ]
[ Ux Uy Uz -P.U ]
[ Fx Fy Fz -P.F ]
[ 0 0 0 1 ]

Share this post


Link to post
Share on other sites
hi
what are P.S,P.U and P.F ??and how can i calculate them ??

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement