请教高手关于OpenGL中的透视投影问题

moon_inwell 2005-08-05 10:09:58
具体代码如下:(节选)
//设置透视投影
glMatrixMode(GL_PROJECTION);
glLoadIdntity();
gluPerspective(0.0f,width/height,0.1f,100f);//width和height分别代表屏幕宽和高度
//图形绘制
glTranslatef(0.0f,0.0f,-1.0f);//或者glTranslatef(0.0f,0.0f,-6.0f)
glBegin(GL_QUADS)
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glVertex3f(1.0f,1.0f,0.0f);
glVertex3f(-1.0f,1.0f,0.0f);
glEnd();
glFinish();

以上代码为在Visual C++下利用Win32 Application生成空项目,添加*.cpp文件,编译后可以运行。
主要问题是集中在glTranslatef那句话,后面的或者部分就是把视点的平移从向屏幕内平移一个单位改成了向屏幕内平移六个单位,但是前者图形可以显示,而后者则不显示,应该是投影区域不在屏幕范围内而被裁剪掉了。但是我认为从前后透视面而言(分别为0.1f和100.0f),视点只要不落在其中就可以在屏幕上显示图形的。我认为可能是对透视投影设置的理解不足,请高手赐教!
...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
syy64 2005-08-10
  • 打赏
  • 举报
回复
gluPerspective(30.0f,width/height,0.1f,100f);//width和height分别代表屏幕宽和高度
//图形绘制
glTranslatef(0.0f,-10.0f,0.0f);
moon_inwell 2005-08-10
  • 打赏
  • 举报
回复
没有明白两位高手的意思,能否再详细解释一下呢?多谢!
moon_inwell 2005-08-10
  • 打赏
  • 举报
回复
谢谢几位,我好好查了查NeHe的OpenGL帮助,总算弄明白这个问题了,gluPerspective的第一个参数Fovy代表视点与投影面边界连线和OXZ平面的夹角,也就是从视点到屏幕的投影区域范围,取值从0到180不等,名义上0和180都是不正确的值,可能OpenGL对于这些临界值进行了特殊的处理,所以才有可能出现我的情况下能看到图形了。Anyway,thanks a lot。我这就把分给各位加上。
summer54 2005-08-07
  • 打赏
  • 举报
回复
首先修改gluPerspective(0.0f,width/height,0.1f,100f);第一个参数改为90,我不知道Fovy为0会有什么样的效果。
还有观察参考点没有改变过吗?会不会是QUADS太小被忽视了?
KyosukeNo1 2005-08-07
  • 打赏
  • 举报
回复
是gluPerspective(0.0f,width/height,0.1f,100f);有问题,第一个参数是fovy
The field of view angle, in degrees, in the y-direction

把Fovy设成0,就是只能看到正对着的一条缝,所以不可能有效果的

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧