DirectX12 - Triangle Culling and Winding Order(三角形的剔除与绕序)

news2025/1/17 0:03:21

这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:

DirectX12 Spec 总目录

目录

  • 1. 什么是Triangle Culling(三角形剔除)?
  • 2. 什么是Winding Order(绕序)?
  • 3. 如何用Winding Order(绕序)做Culling(剔除)?

1. 什么是Triangle Culling(三角形剔除)?

  • 我们都知道,在现有的3D图形框架中,3D模型都是由Triangle有序排列起来的。例如一个长方体有6个面,每个面可以拆分成2个Triangle。那么我们就可以用[Tri0…Tri11]这样12个Triangle有序排列,最后还原成一个长方体的3D模型:
    Triangles
  • 同时我们也可以发现,在正对着长方体某个面的观察视角上,例如这样:
    CameraView
    在此视角下,只能观察到Tri0、Tri1两个三角形组成的平面,Tri2/3/4/5是无法看见的,因此这部分Triangle在DirectX12的Rendering Pipeline中可以预先剔除(Culling),这样做可以减少不必要的计算量,提高渲染效率。

2. 什么是Winding Order(绕序)?

  • Winding Order是几何图形学中的知识。假设一个Triangle由3个Vertex构成,且3个Vertex输入到DX12驱动的Input Layout顺序,为Ver0->Ver1->Ver2,这个Vertex的排布顺序,就是Triangle的绕序(Winding Order)
    VertexOrder
    根据左手定则,在该绕序条件下,Triangle的法向量,为传出纸向外,且垂直于该平面的单位向量。
  • 注意:DirectX12判定平面法向量用的是左手定则,OGL正好相反,用的是右手定则
  • 所以我们可以看出,每个Triangle的Vertex绕序,决定了该Triangle图形的法向量方向

3. 如何用Winding Order(绕序)做Culling(剔除)?

  • 有了绕序的概念,做剔除的原理其实很简单。
  • 我们知道DirectX12做渲染过程中,所有3D模型最后都要统一到观察空间(View Space)。每个3D模型先在局部空间建模,然后通过世界矩阵->世界空间,然后根据Camera在世界空间中摆放的参数,得到观察矩阵,再通过观察矩阵,将世界空间->观察空间(扯远了。。。)。
  • 那么观察空间也是一个三维空间:
    ViewSpace
    Camera观察方向指向+Z方向,所以我们规定,任何一个Triangle的法向量,和-Z方向的单位向量(比如(0,0,-1))做比较,2个向量夹角在[0,Pi/2)范围留下,在[Pi/2,Pi]范围剔除,因为大于Pi/2角度的平面,是背向观察方向的平面,所以是不可见的:
    Culling
    法向量如何确定呢?就是根据之前说的的绕序确定。
  • 所以剔除的整个原理就是这样简单,其中算法向量和算向量夹角都有数学公式支撑,这里不做赘述。
  • 另外剔除的整个计算和判定过程都是由GPU Hardware端做的,因为一个简单的3D模型,都可能有成千上万个Triangle组成,计算量是非常大的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chapter9.2:线性系统的状态空间分析与综合(下)

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

GJB 5000B二级-LD领导作用

概要:GJB 5000B将GJB 5000A三级中的LD领导作用划分为二级内容,将组织类目标下沉至二级 借鉴GJB 9001C中的领导作用,结合各个行业优秀的实践,将5000A中的共用目标、实践进行了提炼、总结最终形成GJB 5000B中的领导作用实践域。 目的:进一步强化上层的领导作用,由高层、中层…

DOPE修饰岩藻多糖 Fucoidan-DOPE 岩藻多糖-二油酰基磷脂酰乙醇胺

DOPE修饰岩藻多糖 Fucoidan-DOPE 岩藻多糖-二油酰基磷脂酰乙醇胺 中文名称:岩藻多糖-二油酰基磷脂酰乙醇胺 英文名称:Fucoidan-DOPE 别称:DOPE修饰岩藻多糖,DOPE-岩藻多糖 外观:固体或粘性液体,取决于分子量 PEG分…

天问一号(Tianwen-1)详细介绍

天问一号(Tianwen-1)是中国第二个火星探测项目。2020年4月24日,中国行星探测任务被命名为“天问系列”,火星探测任务被命名为天问一号,后续行星探测任务依次编号。中国首次火星探测任务标识为“揽星九天”。 火星探测任…

基于stm32的智能药盒

提示:记录2022年4月做的毕设 文章目录前言一、任务书1.1设计(研究)目标:1.2设计(研究)内容:二、框架思路三、硬件四、联系我们五、相关功能介绍六、喜欢请点赞哦!前言 基于STM32的智能药盒,主控使用STM32F103(正点原子战舰板子&a…

word 中添加图片目录、内部链接

目录1. 图片、表格添加目录1.1 插入题注1.2 添加目录2. 添加内部链接1. 图片、表格添加目录 1.1 插入题注 只有正确地插入题注,图表目录才能快速生成。 (1)两个方法调用“题注”功能(任选1个) 方法一:在菜…

【论文阅读 ICTIR‘2022】Revisiting Open Domain Query Facet Extraction and Generation

文章目录Revisiting Open Domain Query Facet Extraction and GenerationMotivationContributionsMethodFacet Extraction and GenerationFacet Extraction as Sequence LabelingAutoregressive Facet GenerationFacet Generation as Extreme Multi-Label ClassificationFacet …

【Pandas数据处理100例】(九十八):Pandas使用between_time()筛选出给定时间区间的数据

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

影响工业产品设计的主要因素

设计师对工业产品的产品外观设计主要依靠形状、图案和颜色的结合,创造出具有一定功能性质的新产品。在这个过程中,设计师需要充分利用各种因素,外观工业设计公司强调材料的机制和颜色。那么,影响产品设计的主要因素是什么呢? 一、…

IMMA~~

搬来自斯坦福的研究者提出了 IMMA, 一种利用隐空间多层图 (multiplex latent graphs) 来表征多种独立的交互类型,并使用一种新型的多层图注意力机制 (multiplex attention mechanism) 来描述个体间交互强度的行为及轨迹预测模型。该方法不仅大幅提升了预测的准确度&…

中小企业如何进行云灾备?

随着IT服务在企业运营和运维的影响权重日益增强,企业IT投入也越来越高,而随着云计算的逐步渗透,企业们逐渐将本地数据迁移到云上,以节省本地服务器的部署与运维等成本。如雨后新笋般冒出的中小企业,难以负荷高成本的本…

从 select、poll、epoll 回答IO多路复用

前言 先大概了解一下这方面的知识 IO多路复用指的是单个进程或者线程能同时监听处理多个IO请求, select、epoll、poll是LinuxAPI提供的复用方式。本质上是由操作系统内核缓存fd文件描述符, 使得单个进程线程能监视多个文件描述符。 select是将所有文件…

Spire.PDF 8.11.10 supports .NET 7.0 and PDF to PPTX

度娘找破解版Spire.PDF for .NET is a professional PDF API applied to creating, writing, editing, handling and reading PDF files without any external dependencies within .NET ( C#, VB.NET, ASP.NET, .NET Core, .NET 5.0, .NET 6.0, MonoAndroid and Xamarin.iOS )…

如何在表格里面添加表单,并且进行表单验证

通过el-form和el-table的组合使用,在表格里面添加表单 并且进行验证 表单中v-model绑定scope.row中表格的数据 效果如图所示: <template><div><!-- <el-form ref"ruleForm" :model"ruleForm" :rules"rules"><el-form-…

C++ 类的静态成员详解【static】

目录 前言 一、类的静态成员 1.static关键字 2.静态成员变量 3.静态成员函数 二、程序样例 1.程序演示 2.程序截图 总结 前言 本文记录C中 static 修饰类成员成为静态成员&#xff0c;其中包括静态成员类别、作用和程序演示。 嫌文字啰嗦的可直接跳到最后的总结。 一、类的静…

从爆红到被黑,游戏黑产攻防48小时

编者按&#xff1a; 数字化浪潮蓬勃兴起&#xff0c;企业面临的安全挑战亦日益严峻。 腾讯安全近期将复盘2022年典型的攻击事件&#xff0c;帮助企业深入了解攻击手法和应对措施&#xff0c;完善自身安全防御体系。 本篇聚焦某游戏公司新游戏上线后与黑产多轮攻防的48小时里…

Python遥感开发之arcpy批量重采样

Python遥感开发之arcpy批量重采样1. 重采样2. ARCGIS中的重采样3. Python_arcpy代码实现前言&#xff1a;主要介绍使用ARCGIS中自带的重采样工具&#xff0c;以及Python代码实现arcpy批量重采样&#xff0c;使用Python代码更加方便快捷。1. 重采样 作用&#xff1a;更改栅格数…

百度飞桨公布最新成果:凝聚535万开发者,服务20万家企事业单位

11月30日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT2022深度学习开发者峰会如期而至。鹏城实验室主任、中国工程院高文院士&#xff0c;深圳大学电子与信息工程学院院长、深度学习技术及应用国家工程研究中心技术委员会副主任、中国工程院丁文华院士受…

【数据结构】二叉树详解(下篇)

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《数据结构》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 二叉树&…

c#、wpf开发中页面在win10下被缩放125%引起页面错乱的解决办法。

正常情况下,我们开发的页面页面应该是100%缩放的,这样程序在win7和win10下保持一致,但是win10里面会根据显示器的情况自动调整“缩放与布局”,这使得桌面程序有时候会发生页面错乱,怎么调整就是个问题。 如图:在“缩放与布局”100%显示如下: 而在 “缩放与布局”125%显…