【翻译】 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

为了进行视图裁剪,我们分两步走
  1. 在每次视锥体变化时,提取视锥体的提及信息。比如,当相机移动或者当透视的参数发生变化时;
  2. 根据视锥体的体积测试对象以及确定是否剔除--必须对每一帧中的每个对象执行此操作。如果每个对象的剔除状态从帧到帧保持不变,则测试本身可以仅在相机移动时进行,即当视锥体更新或透视改变时。
时间: 2024-11-07 18:01:55

【翻译】 View Frustum Culling --1 View Frustum’s Shape的相关文章

View Frustum Culling

作者:i_dovelemon 来源:CSDN 日期:2014 / 10 / 28 主题:View Frustum, Culling 引言 在前面的一篇文章获取View Frustum的6个面中讲述了如何根据View-Proj矩阵来获取View Frustum在世界坐标系中的6个平面.研究过场景管理的同学就会知道,在将图元数据传入到流水线之前,我们需要对数据进行组织.而场景管理通常就是进行这样的工作,通过场景管理,我们剔除(Culling)那些不在View Frustum中的物体,也就是在显示器中

Libgdx New 3D API 教程之 -- Libgdx中的3D frustum culling

This blog is a chinese version of xoppa's Libgdx new 3D api tutorial. For English version, please refer to >>LINK<< 我要偷懒了,好久没看LibGDX,也很久没看3D,新教程的题目我就不懂了.不过看了课程的内容,相信你们都会理解. 正文: 当渲染一个3d场景时,其中真正可见的对象通常都比总对象数少很多.因此渲染全部的物体,包括那些根本看不到的,即浪费了富贵的GPU时间,

创建控制器、控制器加载view过程、控制器view的生命周期、多控制器

在介绍四大对象的那篇博客中,可以基本了解到程序启动的过程: main-->UIApplicationMain-->创建UIApplication的实例和app代理AppDelegate的实例并设置好代理--->在程序启动后,也就是启动画面显示之后, AppDelegate创建UIWindow(可以是自动创建的,也可以手动创建) 现在讨论的问题是,如何创建控制器并设置为UIWindow的根控制器,然后加载出控制器中的view并显示出来. 本文目录 1.创建控制器的三种方式 2.控制器的vi

在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法

本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View Model添加扩展方法. □ 使用ko.computed(fn)计算成员 有时候,我们希望把View Model中的几个成员组合起来成为一个新成员,使用ko.computed(fn)可实现. 接着上一篇,为productViewModel这个json对象增加一个计算成员. <div data-bi

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 override a superclass method. 这看起来确实很奇怪,网上搜了一下,解决方案是将 eclipse制定版本从1.7改为1.6即可. 在 eclipse中,windows->references->java->java compiler中设置.

Android View系统分析之二View与ViewGroup

目录 在Android View系统分析之从setContentView说开来(一)一文中,我们从setContentView开始阐述了Android中的视图层次,从设置内容布局到整个视图层次的建立的过程.并且对View和ViewGroup的关系进行了简单的介绍,今天我们继续来深入的了解Android中的View和ViewGroup. ViewGroup与View的关系 我们在定义一个布局时,在它的顶层通常都是使用LinearLayout或者RelativeLayout等组件来包装一些子控件,例

onClick(View) of type new View.OnClickListener(){} must override a superclass method

原地址:http://blog.csdn.net/aeolus1019/article/details/8014798 Android开发过程中代码错误报错如下: - implements android.view.View.OnClickListener.onClick- The method onClick(View) of type new View.OnClickListener(){} must override a superclass 解决办法: 项目属性——javaCompile

Don’t Put View Code Into Your View Controller别把View创建的代码放在VC中(swift)

Don't Put Into Your View Controller别把View创建的代码放在VC中html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { overflow-y: hidden; overflow-x: auto; } .CodeMirror-lines { padding: 4px 0px; } .CodeMirror pre { paddin

获取View的截图-将View转换为Bitmap对象

开发中,有时候需要获取View的截图来做动画来达到动画流程的目的,也有其他的很多用途 /** * 将View转换为Bitmap对象 */ public class ViewToBitmapUtil { private static final String TAG = "ViewToBitmapUtil"; public static Bitmap convertViewToBitmap(View view) { view.measure(MeasureSpec.makeMeasure