gluLookAt和glOrtho要联系起来看

本文转自:http://sophiestone.i.sohu.com/blog/view/3915251.htm

用glOrthO()定义一个正交投影变换,gluLookAt()的最后两个参数是指眼睛离视景体的最小最大位置。要使gluLookAt()定义的观察点能够看到图形,就要把它与glOrtho()的near与far联系起来。


void COpenGLDemoView::GLReSize(int cx, int cy)
{
double nRange=400.0;

if(cy==0)
cy=1;
glViewport(0,0,cx,cy);
glMatrixMode(GL_PROJECTION);

glLoadIdentity();

//define 视景体(left,right,top,near,far)
if (cx<=cy)
{
   glOrtho(-nRange,nRange,-nRange*cy/cx,nRange*cy/cx,-nRange,nRange);
}
else
{
   glOrtho(-nRange*cx/cy,nRange*cx/cy,-nRange,nRange,-nRange,nRange);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

//Set the 视点和方向
double eye[]={0,0,3*nRange};//观察点位置,以Z方向代表物体的远近
double ref[]={0,0,0};//指定参考点的位置
double up_dir[]={0,1,0};//代表物体的朝向的一个矢量。OpenGL是通过z方向的值来表明物体的远近的,
//一般来说,物体的朝向就是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 ref[]={0,0,0};//指定参考点的位置
改为double ref[]={0,-200,275};还是看不到图形,
我不是用了gluLookAt定义在Z=3X400=1200的地方看一个XYZ坐标范围都在(-400,400)的一个视景体中所有的图形吗,图行又在这个视景体中,怎么看不到呢?这个又是正投影变换,在那里看都不改变物体的大小的啊!


//Set the 视点和方向
double eye[]={0,0,3*nRange};//观察点位置,也就是眼睛的位置
double ref[]={0,0,0};//指定参考点的位置
double up_dir[]={0,1,0};//代表物体的朝向的一个矢量。OpenGL是通过z方向的值来表明物体的远近的,
//一般来说,物体的朝向就是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(-nRange,nRange,-nRange*cy/cx,nRange*cy/cx,-nRange,nRange);视点是在原点还是在z=400(nRange)处啊?因为我没有改变坐标系啊,书上说没有变换就在原点。


glOrtho(left,right,bottom,top,zNear,zFar)的最后两项是指和你眼睛的距离,你现在既然眼睛在(0,0,1200)处,zNear = -nRange, zFar = nRange,nRange=400,意思就是说你的视景体现在大概是(-400,400,-400,400,1600,800)这样你的物体是绘制在Z方向上<800的地方,所以可能看不到

现在最佳的near与far应该为
glOrtho(-nRange*cx/cy,nRange*cx/cy,-nRange,nRange,800,1300);
这样Z的范围就在(1200-1300)=-100<Z<(1200-800)=400。(我还画了三个长为100坐标轴,要多留一点旋转的空间)这样也相对的确定了视景体在Z方向的范围。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值