当前位置: 首页 > news >正文

【C++游戏引擎开发】第18篇:视锥体裁剪与光源剔除

一、视锥体裁剪的数学原理

1.1 视锥体的几何表示

1.1.1 三维空间平面方程

视锥体的六个平面由标准形式定义:
a x + b y + c z + d = 0 ax + by + cz + d = 0 ax+by+cz+d=0
其中法向量 n ⃗ = ( a , b , c ) \vec{n} = (a,b,c) n =(a,b,c),平面到原点的距离为 d / ∣ ∣ n ⃗ ∣ ∣ d/||\vec{n}|| d/∣∣n ∣∣

1.1.2 投影矩阵参数分解

透视投影矩阵由以下参数构成:
FOV = 4 5 ∘ Aspect = 16 : 9 Near = 0.1 Far = 100.0 \begin{aligned} \text{FOV} &= 45^\circ \\ \text{Aspect} &= 16:9 \\ \text{Near} &= 0.1 \\ \text{Far} &= 100.0 \end{aligned} FOVAspectNearFar=45=16:9=0.1=100.0
通过逆矩阵计算可得到视锥体8个角点的三维坐标,其齐次坐标转换公式为:
P w o r l d = ( M p r o j e c t i o n ⋅ M v i e w ) − 1 ⋅ P c l i p P_{world} = (M_{projection} \cdot M_{view})^{-1} \cdot P_{clip} Pworld=(MprojectionMview)1Pclip

1.2 平面方程生成算法

1.2.1 三点确定平面法向量

给定视锥体角点 P 0 , P 1 , P 2 P_0,P_1,P_2 P0,P1,P2,平面参数计算过程:
v 1 ⃗ = P 1 − P 0 v 2 ⃗ = P 2 − P 0 n ⃗ = v 1 ⃗ × v 2 ⃗ d = − n ⃗ ⋅ P 0 \begin{aligned} \vec{v_1} &= P_1 - P_0 \\ \vec{v_2} &= P_2 - P_0 \\ \vec{n} &= \vec{v_1} \times \vec{v_2} \\ d &= -\vec{n} \cdot P_0 \end{aligned} v1 v2 n d=P1P0=P2P0=v1 ×v2 =n P0

1.2.2 六个平面构造方法
  1. 近平面:直接使用投影矩阵的Near值
  2. 远平面:通过矩阵第四列参数计算
  3. 侧平面​(左右上下):
    n

相关文章:

  • Java并发编程-线程池
  • numpy、pandas内存优化操作整理
  • 配置nginx服务,通过多ip区分多网站
  • 4399后端一面
  • 静态点亮数码管的某几段(STC89C52单片机)
  • SwiftUI 音频播放器:AVPlayer 在线播放 + 播放进度条 + 音量调节 + 后台播放
  • Python面向对象程序设计
  • FreeRTos学习记录--1.工程创建与源码概述
  • 深度学习预训练和微调
  • WWW2025 快手最新论文 T2Diff 解读:生成式扩散模型+混合注意力打造高效推荐
  • Synopsys:printvar命令和puts/echo命令的区别
  • Vue3---(9)组件间通信
  • 【基于WSAAsyncSelec模型的通信程序设计】
  • 每天学一个 Linux 命令(29):tail
  • JavaScript 中的单例模式
  • 单例模式(线程安全)
  • Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)
  • Nginx详细使用
  • 乐家桌面安卓版2025下载-乐家桌面软件纯净版安装分享码大全
  • buildadmin 自定义单元格渲染
  • 沉浸式表演+窥探式观演,《情人》三登人艺实验剧场
  • 史蒂夫·麦奎因透露罹患前列腺癌,呼吁同胞莫受困于男性气概
  • 人民日报:各地扎实开展学习教育,一体推进学查改
  • 李家超:香港特区政府积极推进十五运会各项筹办工作
  • 错失两局领先浪费赛点,王楚钦不敌雨果无缘世界杯男单决赛
  • 人民网评:官方轻踩刹车,智能驾驶不能“蒙眼狂奔”