|
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};//观察点位置,以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]);
注释掉就可以看到图形,这倒底是怎么回事啊?
如果把gluLookAt()注释掉后,我上面定义的 glOrtho(-nRange,nRange,-nRange*cy/cx,nRange*cy/cx,-nRange,nRange);视点是在原点还是在z=400(nRange)处啊?因为我没有改变坐标系啊,书上说没有变换就在原点。
|
|