本文转自:http://sophiestone.i.sohu.com/blog/view/3915251.htm
用glOrthO()定义一个正交投影变换,gluLookAt()的最后两个参数是指眼睛离视景体的最小最大位置。要使gluLookAt()定义的观察点能够看到图形,就要把它与glOrtho()的near与far联系起来。
void
{
double
if(cy==0)
cy=1;
glViewport(0,0,cx,cy);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//define
if
{
}
else
{
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//Set
double
double
double
//一般来说,物体的朝向就是y方向了。
gluLookAt(eye[0],eye[1],eye[2],ref[0],ref[1],ref[2],up_dir[0],up_dir[1],up_dir[2]);
}
物体大小(-80<X<80,-325<Y<-70,180<Z<370)
物体的中心大概是(0,-200,275)
如果把double
改为double
我不是用了gluLookAt定义在Z=3X400=1200的地方看一个XYZ坐标范围都在(-400,400)的一个视景体中所有的图形吗,图行又在这个视景体中,怎么看不到呢?这个又是正投影变换,在那里看都不改变物体的大小的啊!
把
//Set
double
double
double
//一般来说,物体的朝向就是y方向了。
gluLookAt(eye[0],eye[1],eye[2],ref[0],ref[1],ref[2],up_dir[0],up_dir[1],up_dir[2]);
注释掉就可以看到图形,这倒底是怎么回事啊?
如果把gluLookAt()注释掉后,我上面定义的
glOrtho(left,right,bottom,top,zNear,zFar)的最后两项是指和你眼睛的距离,你现在既然眼睛在(0,0,1200)处,zNear
现在最佳的near与far应该为
glOrtho(-nRange*cx/cy,nRange*cx/cy,-nRange,nRange,800,1300);
这样Z的范围就在(1200-1300)=-100<Z<(1200-800)=400。(我还画了三个长为100坐标轴,要多留一点旋转的空间)这样也相对的确定了视景体在Z方向的范围。