OpenGL 高手请帮忙关于缩放

zhengyu_chen 2002-09-19 04:18:53
我在程序里缩放,如不停的放大到一定程度会发现物体被裁剪了,该显示的部分。
为什么?请各位说说看法。
...全文
18 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruixp 2002-09-22
  • 打赏
  • 举报
回复
根据投影矩阵以及视点的位置可以确定能够看到多少景象
shally5 2002-09-20
  • 打赏
  • 举报
回复
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,1000.0f);//可以将near设为1000就可以啦!
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
hawkhunter 2002-09-20
  • 打赏
  • 举报
回复
near, far定义的就是你的物体能看见的范围,把他们设为适当的值就可以了。 要注意的是他们的 far-near 的结果也不能过大,因为zbuffer是有精度限制的,如差别过大也会因精度问题导致物体被切。
zhengyu_chen 2002-09-20
  • 打赏
  • 举报
回复
谢谢各位,我的透视投影矩阵是自己写的。可能是near & far的距离太小的缘故。
1,我的缩放是(如放大)设置前后截面的值如ClippingRange[0] = ClippingRange[0]/zoomfactor,ClippingRange[1] = ClippingRange[1]/zoomfactor,zoomfactor> 1;
2,移动观察窗口的位置Position[2] = FocalPosition[2] + Distance/zoomfactor*ViewPlaneNormal[2]; FocalPosition就是VRP。
我现在不知near和far的距离要多大才能保证好。我假如第1步不做即保持ClippingRange不变,只改变Position发现不停放大后物体靠近我们人的部分被截去。
还是希望各位讲的再清楚点。非常感谢。

Lem0n 2002-09-19
  • 打赏
  • 举报
回复
因为OpenGL里面有一个视图体的概念,设置的相关的命令:
glFrustum()定义一个透视投影矩阵。棱台的四面及其顶和底对应于视图体的6个截剪面。在视图体外的物体和物体的一部分被裁减掉。此外,他不要求指定对称的视图体。其中的参数:left right:指定左右垂直裁剪面的坐标。bottom top:指定底和顶水平裁剪面的坐标。near far:指定近和远深度裁剪面的距离,两个距离均取正值。

gluPerspective()建立透视投影矩阵,并乘当前矩阵。其中的参数:Fovy:指定y方向中视域的角度(以度为单位)。Aspect:指定宽高比,确定x方向中的视域。ZNear:指定从观察者(视点)到近裁剪面的距离(总是正数)。ZFar:指定从观察者(视点)到远裁剪面的距离(总是正数)。其中的宽高比通常应以有关视口相匹配,视域角度在0.0--180.0范围内取值。

glOrtho( ):描述一个产生平行投影的透视矩阵。他指定的参数和glFrustum()命令相同。left right:指定左右垂直裁剪面的坐标。bottom top:指定底顶水平裁剪面的坐标。near far:指定视点到近和远深度裁剪面的距离。当这些面在视点的后面时,距离为负值。

上述的三个函数都可以,看你需要什么透视方法了。可以通过调用上面任意一个需要的函数设置视图体,任何位于视图体外的顶点都会被裁剪掉。
潘李亮 2002-09-19
  • 打赏
  • 举报
回复
你的投影矩阵的问题,near & far的距离太小了

8,301

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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