什么是背面消隐

我们使用三角网格描述物体,在物体被转换到视空间之后,下一步就将被转换到屏幕坐标。
背面消隐指的是删除背向视点(相机的观察点)的多边形。

算法原理

基本的背面消隐算法数学原理很简单:
(1)要求所有的三角形按照统一的方式(顺时针或者逆时针)排列顶点,这很重要,因为关系到平面法向量的计算。
(2)根据三角形的顶点信息计算该三角形的外法向量。
(3)使用观察向量(观察向量是指相机点到三角形某个顶点的向量)测试三角形的外法向量,如果这两个法向量的夹角严格小于90度,那么多边形对于观察者而言是可见的。

简单说明一下(1):

对于该物体,显然面OAB和OBC与ABC对于观察者来说不可见,假设观察向量为view,四个面的法向量计算结果为n1,n2,n3,n4。
(面法向量是由顶点的叉乘计算出来的)
根据我们的算法,应当只有view与n1(OAC的外法向量)严格小于90度,但是如果不规定三角形顶点的存储顺序,那么n1,n2,n3,n4的计算方式就会不统一。又面法向量是由顶点叉乘计算得来的,且叉乘是不可交换的,所以可能会出现view与n2,n3,n4的夹角小于90度的情况。

实现

 bool BackFaceCulling(Vertex p1, Vertex p2, Vertex p3)
{//其中p1 P2 p3必定严格按照逆时针或者顺时针的顺序存储Vector3D v1 = p2.point - p1.point;Vector3D v2 = p3.point - p2.point;Vector3D normal = Vector3D.Cross(v1, v2);//计算法线//由于在视空间中,所以相机点就是(0,0,0)Vector3D viewDir = p1.point - new Vector3D(0, 0, 0);if (Vector3D.Dot(normal, viewDir) > 0){//夹角小于90度_showTrisCount++;//记录一下被渲染的三角形的数量return true;}return false;
}

渲染管线——背面消隐相关推荐

  1. UGUI WorldSparce 渲染模式下UI背面消隐

    1.很多时候我们需要将Ugui当成立体模型使用,但是UGUI默认的材质球是显示背面的,有些时候我们不想看到他的背面 2.新建一个材质球命名 Transparent 3.将 Transparent 拖动 ...

  2. 从零实现3D图像引擎:(14)背面消隐的三大陷阱

    1. 为什么要背面消隐 通过之前的DEMO,能够知道如果在渲染过程中多边形越多,那么要不处理的内容就越多,就越消费计算机的处理能力.对于物体来说,一般我们只看到它面对我们的面,可能不是正对着,但是肯定 ...

  3. DirectX 3D_基础之模型表示 顶点格式 三角形 索引 虚拟摄像机 投影窗口 绘制流水线 局部坐标系 观察坐标系 世界坐标系 背面消隐 光照 裁剪 投影 视口变换 光栅化

    每日一语: 当一切都安于现状后,这个社会就无法发展,也就无法从原始社会发展到现代社会,对于人也是一样,如果我们一直安于现状,就无法有更大更好的发展,我们不要想着,一直可以过安逸的生活,程序员这个职业, ...

  4. 3d图形消隐c语言,一种3D图形背面消隐算法及其硬件加速实现

    摘要: Surface culling sets the pros and cons of triangles,and removes given surfaces as well in GPU,wh ...

  5. DX11龙书学习笔记---渲染管线

    DX11龙书学习笔记---渲染管线 1.输入装配阶段 - 顶点 - 图元拓扑 - 点列表 - 线带 - 线列表 - 三角形带 - 三角形列表 - 带有邻接信息的图元 - 控制点面片列表 - 索引 2. ...

  6. Directx11渲染管线概述

    渲染管线(rendering pipeline)是指:在给定一个3D场景的几何描述及一架已经确定位置和方向的虚拟摄像机时,根据虚拟摄像机的视角生成2D图像的一系列步骤.以下文章将会具体描述这些步骤(阶 ...

  7. 计算机图形学+简单算法实现,《计算机图形学》课程设计-简单几何体的消隐算法实现.doc...

    PAGE PAGE 18 PAGE 18 课程名称:<计算机图形学> 论文题目:简单几何体的消隐算法实现 教学部: 年 级: 班 级: 学 号: 姓 名: 简单几何体的消隐算法实现 摘 要 ...

  8. Max 模型背面边面的不显示问题解决方案

    选择模型,然后在模型上单击右键,在弹出的四联菜单中选变换联里的属性,然后把背面消隐(显示属性)取消,

  9. 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体

    本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...

最新文章

  1. ajax点击更改div,jquery ajax双击div可直接修改div中的内容
  2. 设计模式C++实现(9)——享元模式
  3. 【转】hadoop深入研究:(十一)——序列化与Writable实现
  4. linux红帽子怎么配置dhcp,LinuxDHCP的高级配置如何应用呢?
  5. (转)iReaper for wp7正式发布
  6. android标题栏消失,安卓标题栏为什么没有显示
  7. 爱荷华大学计算机科学专业,爱荷华大学计算机科学专业好不好?专业设置详情一览...
  8. FreeRTOS任务优先级说明
  9. android 浏览器 原理,android 浏览器原理原码
  10. 最新免费计算机编程视频教程
  11. 旋转矩阵中6保6_旋转矩阵公式中6保5
  12. xd文件用Creative Cloud下载与安装打开
  13. c语言编写while乘法表,用C语言的while循环,打印九九乘法表,
  14. 展望未来「编程之路起始篇」
  15. AI芯片:寒武纪PuDianNao结构分析
  16. python中 math模块下 atan 和 atan2的区别
  17. C# Serializable [转]
  18. Linux九阴真经之九阴白骨爪残卷2(SSH)
  19. 数据异常分析方法论总结
  20. lgv30屏幕参数_一加6和LG V30详细对比评测 哪个可以开创手机新风向

热门文章

  1. SQL轻松入门(2):复杂查询与综合分析
  2. 如何使用纯CSS3创建一个简单的五角星图形
  3. O2O适合哪几个行业 O2O有哪些功能?
  4. 港中文多媒体实验室招博士生!
  5. 删除文件时提示已在windows资源管理器中打开怎么办?
  6. 手机屏幕边缘的黑边到底是什么?
  7. IT男的”幸福”生活续5
  8. 硅芯思见:IC验证应读书推荐
  9. 如何解决 WinMgmt.exe 产生错误
  10. 玩战地风云2042的感想