opengl如何限定视点在一个矩形区域的视场

opengl如何限定视点在一个矩形区域的视场,第1张

方案1:使用OpenGL3.3,3.3在渲染之前,能反馈几何体是否被光栅化,如果没有,证明几何体全部位于视景体之外全部不可见,你直接取消本次漫游即可将观察限制在一定能看到矩形的区域。OpenGL2.1貌似也有类似功能,不过俺记得不太清楚,但3.3一定有。

(P.S 这蛋疼的版本也是OpenGL垃圾的一大原因,难怪被D3D搞得体无完肤)

方案2:如果你的OpenGL只有1.4(P.S这年头要是你OpenGL版本没1.4只有三种情况。1 你忘记安显卡驱动了,2 你在远程登录 3 你在玩虚拟机)。你可以利用OpenGL的选取机制。在绘制场景之前,将渲染模式切换到选择,在最新的观察位置绘制你的矩形,然后构造一个和屏幕大小一样的选择框传给OpenGL,然后看选取结果,如果没有命中任何几何体,说明本次漫游飞出去了,需要取消。

方案3:参考工具书,计算机图形学几何工具详解,好像叫这名字俺也记不清了,一个叫周长发的哥们翻译的,里面的算法能解决“四棱台与部分平面判交”的问题(该问题的实质与终极的解决方案,推荐使用),俺就不在这里写了,因为网页上不好写公式画草图。

方案4:是俺刚学OpenGL的时候想的“土方法”,其核心思想是“山寨”OpenGL的几何流水线。以三角形为例来说明。在渲染新的一帧之前,利用相关矩阵将三个顶点变换到观察坐标系下。首先检测深度,如过三点都在最远距离外,马上知道观测点非法,然后用投影矩阵将空间3点投影到前平面上,这样就把问题转换为三角形与矩形判交的问题。这种方案与图形流水线的方式是一样的,只不过OpenGL对你透明了。

用到eigen库

一、模型变换

平移

旋转 ;

绕任意轴旋转函数;

二、视点变换

函数原型:gluLookat()

三、投影变换:

透视投影(近大远小)

  函数:glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)

平行投影:

原型: glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top, GLdouble near,GLdouble far)

四、视口变换

原型 glViewport(GLint x,GLint y,GLsizei width, GLsizei height)

两个方法都可以, 方法一: glRotaef(x,y,z)pushMatrix()drawObject()popMatrix()在鼠标Move事件中改变x,y,z值 方法二 gllookat(x,y,z,objectx,objecy,objectz,0,1,0) 在鼠标Move事件中改变x,y,z值,要用圆周函数,以视点对象为中心。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11320300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存