(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值,要用圆周函数,以视点对象为中心。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)