【翻译】 View Frustum Culling --1 View Frustum’s Shape
这是一些列来自lighthouse3d的视锥体裁剪教程。旨在学习总结,及便于查阅。
1、视锥体的形状
在OpenGL中,透视投影是由两个函数定义的gluPerspective和
gluLookAt。我们先来回顾下这两个函数的参数
gluPerspective(fov, ratio, nearDist, farDist);
gluLookAt(px,py,pz, lx,ly,lz, ux,uy,uz);
照相机的位置在四棱锥的顶点处(px,py,pz) 记为向量p,
观察点的位置在(lx,ly,lz) 记为向量l,
这样照相机朝着观察点发出的射线的就可以记为d = l - p,
近平面和远平面都与d垂直,它们与摄像机的距离分别为nearDist和farDist。
近平面与远平面上的矩形区域的大小可以由fov(照相机垂直的视角)和ratio(近平面和远平面上的宽高比)计算出来。
计算公式如下:
- Hnear = 2 * tan(fov / 2) * nearDist
Wnear = Hnear * ratio
- Hfar = 2 * tan(fov / 2) * farDist
- Wfar = Hfar * ratio
- 为了进行视图裁剪,我们分两步走
- 在每次视锥体变化时,提取视锥体的提及信息。比如,当相机移动或者当透视的参数发生变化时;
- 根据视锥体的体积测试对象以及确定是否剔除--必须对每一帧中的每个对象执行此操作。如果每个对象的剔除状态从帧到帧保持不变,则测试本身可以仅在相机移动时进行,即当视锥体更新或透视改变时。
【翻译】 View Frustum Culling --1 View Frustum’s Shape的更多相关文章
- 简单的Viewing Frustum Culling
Viewing Frustum Culling是图形绘制流水线中,将不可见物体(即不在视锥体内的物体)提前剔除的操作. 在实践中,精确判断物体的可见性开销较大,因而通常用物体包围球或包围盒与视锥体(平 ...
- 获取View的截图-将View转换为Bitmap对象
开发中,有时候需要获取View的截图来做动画来达到动画流程的目的 原理:将View的内容画到一个Bitmap画布上,然后取出 下面封装了一个从View生成Bitmap的工具类 /** * 将View转 ...
- 创建控制器的方法、控制器加载view过程、控制器view的生命周期、多控制器组合
在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实 ...
- Presenting view controllers on detached view controllers is discouraged <CallViewController: 0x14676e240>.
今天在优化app时,发现程序出现这种警告:“ Presenting view controllers on detached view controllers is discouraged <C ...
- The method onClick(View) of type new View.OnClickListener(){} must override a superclass
最近在做一个jWebSocket Android客户端的Demo时遇到如下错误: ok —————— 最近在做一个jWebSocket Android客户端的Demo时遇到如下错误: ".. ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- onClick(View) of type new View.OnClickListener(){} must override a superclass method
原地址:http://blog.csdn.net/aeolus1019/article/details/8014798 Android开发过程中代码错误报错如下: - implements andro ...
- eclise -The method onClick(View) of type new View.OnClickListener(){} must override a superclass method
在做arcgis android开发的时候,突然遇到这种错误,The method onClick(View) of type new View.OnClickListener(){} must ov ...
- 自定义View 一 (继承VIew重写onDraw方法)
项目:具有圆形效果的自定义View 一.继承View并重写onDraw方法 public class CircleView extends View{ private static final int ...
随机推荐
- 【译】在Flask中使用Celery
为了在后台运行任务,我们可以使用线程(或者进程). 使用线程(或者进程)的好处是保持处理逻辑简洁.但是,在需要可扩展的生产环境中,我们也可以考虑使用Celery代替线程. Celery是什么? C ...
- An error was encountered while running(Domain=LaunchSerivcesError, Code=0)
今天突然遇到这样一个错误,编译可以通过,但是运行就会弹出这个错误提示: An error was encountered while running(Domain=LaunchSerivcesErro ...
- HPUX and AIX SSH 互信
HPUX side: su - orasid check file AIX side: su - sidadm double check
- windows python读取grib2数据
一.环境准备 (1).python3环境 (2).wgirb工具(用于读取grib1文件),下载地址: ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib (3).wg ...
- spark基础知识介绍(包含foreachPartition写入mysql)
数据本地性 数据计算尽可能在数据所在的节点上运行,这样可以减少数据在网络上的传输,毕竟移动计算比移动数据代价小很多.进一步看,数据如果在运行节点的内存中,就能够进一步减少磁盘的I/O的传输.在spar ...
- 5. MYSQL问题:Access denied for user 'root'@'localhost' (using password:YES)
开发Web项目时,连接MYSQL数据库,出现问题:Access denied for user 'root'@'localhost' (using password:YES). 解决方案: ...
- jsp取addFlashAttribute值深入理解即springMVC发redirect传隐藏参数
结论:两种方式 a.如果没有进行action转发,在页面中el需要${sessionScope['org.springframework.web.servlet.support.SessionFlas ...
- js window.open隐藏参数提交
1.采用form方式提交 var url = "page/public/exportExcel.jsp"; //create a form var tempForm = docum ...
- APPium-Xpath,swipe练习
写自动化测试,实现 滚动到 口碑最佳 部分,并且打印出所有 口碑最佳 部分的5个应用名称 # coding:utf-8from appium import webdriverimport time d ...
- 工作记录 rfcn网络结构 caffe time测速和实际运行中速度不相等。
现象: 用caffe time测试网络结构,前向传播是 8 ms左右, 实际集成后运行的时候,forward耗时大概4-5ms. 输入大小是一致的. 于是开始查这个问题. 最后定位到,差别在propo ...