3、使用裁剪空间的方法提取平面

上一篇中,我们讨论了通过几何的方法提取视锥体的六个片面。在这一篇中,我们继续讨论通过裁剪空间的方法来提取视锥体的平面。


假设现在在世界坐标系中有一点p=(x,yz,1),modelview矩阵记作M,projection矩阵记作P。当点p经过这两个矩阵变换后变到pc=(xc,yc,zc,wc)的位置,即

因为pc点是由齐次坐标表示的,则其正则化后为pcn:

在正则化的裁剪空间中,视锥体的中心与单位立方体的原点对齐,且它的六个平面由以下平面界定:

  • Left Plane: x’ = -1
  • Right Plane: x’ = 1
  • Top Plane: y’ = 1
  • Bottom Plane: y’ = -1
  • Near Plane: z’ = -1
  • Far Plane: z’ = 1

那么,当pcn=(x',y',z')的坐标满足以下关系时,就证明pcn在视锥体内部:

往前推一步,没有正则化的pc=(xc,yc,zc),如果想在视锥体内的话,那它的坐标范围为:

基于这样的信息,那么我们就可以用世界坐标来届定六个平面,例如,当pc点在左平面的“右”侧时,就必须满足:

继续向前推一步,考虑点p的坐标,记A=MP,如下图所示

点pc中xc和wc坐标就可以通过以下式子计算:

则p点在视锥体左平面的右侧就可以用以下不等式表示:

经过如下简单代数变换:

就可以得到左平面的一般方程:(Ax+By+Cz+D=0)

其中,col1和col4分别代表A矩阵的第一列和第四列。

如果我们只需要考虑一个点在平面左还是右,那上面的定义已经足够了,但是在后面我们还要检测球体在平面的左侧还是右侧,这需要计算球心到平面的距离。就还需要对平面进行一般化,即求出其一般方程。

右平面也可以通过同样地方式获得:

右平面方程的系数:

剩余的平面:

下平面

上平面

近平面

远平面

【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes的更多相关文章

  1. 【翻译】View Frustum Culling --2 Geometric Approach – Extracting the Planes

    在上一篇中,我们知道了视锥体的形状,并且也确定了我们进行裁剪时的步骤.那我们接下来要走的就是确定视锥体的六个平面: near, far, top, bottom, left and right 2.计 ...

  2. 【翻译】 View Frustum Culling --1 View Frustum’s Shape

    这是一些列来自lighthouse3d的视锥体裁剪教程.旨在学习总结,及便于查阅. 1.视锥体的形状 在OpenGL中,透视投影是由两个函数定义的gluPerspective和gluLookAt.我们 ...

  3. homogeneous clip space and NDC

    CVV  canonical view volume HCS homogeneous clip space NDC nomolized device coordinates pipeline 的 ge ...

  4. 简单的Viewing Frustum Culling

    Viewing Frustum Culling是图形绘制流水线中,将不可见物体(即不在视锥体内的物体)提前剔除的操作. 在实践中,精确判断物体的可见性开销较大,因而通常用物体包围球或包围盒与视锥体(平 ...

  5. 得到View Frustum的6飞机

    笔者:i_dovelemon 资源:CSDN 日期:2014 / 9 / 30 主题:View Frustum, Plane, View Matrix, Perspective Projection ...

  6. 论文翻译:2019_Deep Neural Network Based Regression Approach for A coustic Echo Cancellation

    论文地址:https://dl.acm.org/doi/abs/10.1145/3330393.3330399 基于深度神经网络的回声消除回归方法 摘要 声学回声消除器(AEC)的目的是消除近端传声器 ...

  7. (转)GPU图形绘制管线

    摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”第二章. 图形绘制管线描述GPU渲染流程, ...

  8. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...

  9. 转:关于 OGRE 与 OSG 的简单比较

    1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(manual).王锐老师等翻译的<Ope ...

随机推荐

  1. openstack provider self-service network subnet 创建

  2. Java的反射机制与泛型擦除

    实现方式 反编译:.class–>.java 通过反射机制访问java对象的属性,方法,构造方法等涉及类 java.lang.Class; java.lang.reflect.Construct ...

  3. css3-animate

    常用动画设置: effect easing duration  effect: <select name="effects" id="effectTypes&quo ...

  4. APP-3-百度地图应用

    1.百度地图开发平台 http://lbsyun.baidu.com/ 1.1申请账号 1.2Android创建应用 进入百度地图开发平台->控制台->创建应用 发布版SHA1:BA:AD ...

  5. cxGrid 颜色设置

    一.cxGrid 根据列值变色(样式) 在使用cxGrid的过程中,某一个单元格经常需要根据其他单元格的值来做相应的变色,如: 在cxGridDBTableView中,选定要变样式(如背景色.字体属性 ...

  6. Matplotlib中文乱码问题

    一.找到并修改matplotlibrc文件 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,用记事本打开matplotlibrc文件:找到f ...

  7. Linux命令:sshpass

    sshpass介绍 sshpass是一款凡是为凡是使用ssl方式访问的操作提供一个免输入密码的非交互式操作,以便于在脚本中执行ssl操作,如ssh,scp等.sshpass是一家以色列公司Lingnu ...

  8. 1test

    Tencent's outsize influence in China's online world is ballast that should steady it as it targets b ...

  9. k8s的内置DNS增加父系DNS方法

    我们都知道K8S有内置DNS,是在搭建K8S时候以容器方式起来的,那么有时候我们需要解析内部DNS地址该怎么办呢,我们可以搭建个内部DNS 但是怎么让K8S通过内部DNS解析呢? 可以尝试如下方法 在 ...

  10. 二级菜单(avalon+jquery动画)

    by 司徒正美 var vm = avalon.define({ $id: "test", array: [ { name: 111111, child: [ {name: 1.1 ...