3D引擎为什么使用三角形绘制曲面

简介: 这个问题是我第一次接触3D开发就有的疑问,最近在看《游戏引擎架构》(Game Engine Architecture),在书中找到了答案。   三角网格(Triangle Mesh),游戏开发者会使用三角形网格来建模。

这个问题是我第一次接触3D开发就有的疑问,最近在看《游戏引擎架构》(Game Engine Architecture),在书中找到了答案。

 

三角网格(Triangle Mesh),游戏开发者会使用三角形网格来建模。三角形是表面的分段线性逼近,如果用多条相连的线段分段逼近一个函数或曲线。

实时渲染之所以选用三角形,是因为三角形有以下的优点:

  • 三角形是最简单的多边形,少于3个顶点就不能成为一个表面;
  • 三角形必然是平坦的,含4个或以上的顶点的多边形,不一定平坦,三个点确定一个平面,多余的点可能在这个面之上或者之下;
  • 三角形经多种转换之后,仍然是三角形,这对于仿射转换和透视转换也成立。最坏的情况下,从三角形的边去看,三角形会退化为线段。在其它角度观察,仍能维持是三角形;
  • 几乎所有商用图形加速硬件都是为三角形光栅化而设计的。

 

三个点才能构成一个平面,而且仅有三个面才能保证面是平的,多一个点不能保证面是平的,少一个点不能构成一个平面,所以不多不少正好是三个。

 

通常会使用“三角形/秒”作为CPU性能的一项重要指标。如果你有兴趣,不妨读一读知乎专栏上的这篇文章《GPU原理解密(一)画个三角形居然这么难》

https://zhuanlan.zhihu.com/p/20918974

 

在3D模型中,通常面数越多(也就是三角形的数量),模型越精细,反之则越粗糙(根据面数多少也就有了高模与低模之分)  ——(如下图所示)

image

(图片来源:http://www.atangeo.com/examples/horse

 

所以从视觉和美术的角度来看,面数当然是多多益善,但是从程序和性能的角度来看,面数是越少越好,少即意味着运算量变小,渲染速度会更快、耗电量都降低不少,所以需要平衡。

目录
相关文章
|
图形学
浅谈Unity之ShaderGraph-等高线和高程渐变设色
ShaderGraph实现等高线和高程渐变设色
|
4月前
ThreeJs绘制贝塞尔曲线
这篇文章介绍了如何利用Three.js绘制贝塞尔曲线,并提供了实现的代码示例与说明。
70 2
ThreeJs绘制贝塞尔曲线
|
8月前
cavans图形绘制(直线、矩形、原型、贝塞尔曲线、渐变背景) 2
cavans图形绘制(直线、矩形、原型、贝塞尔曲线、渐变背景) 2
|
4月前
ThreeJs绘制圆柱体
这篇文章介绍了在Three.js中绘制圆柱体的方法,包括创建圆柱体几何体、设置材质以及将其正确放置在三维场景中的技巧。
82 0
ThreeJs绘制圆柱体
|
6月前
|
缓存 图形学 C++
Unreal学习笔记2-绘制简单三角形
Unreal学习笔记2-绘制简单三角形
58 0
|
计算机视觉
五、OpenCV绘制线、矩形、圆等基本几何形状
通过javaOpenCV中的Imgproc函数进行简单几何图形的绘制
146 0
五、OpenCV绘制线、矩形、圆等基本几何形状
|
前端开发
Delphi绘图功能[1] —— 入门(绘制直线和矩形)
Delphi绘图功能[1] —— 入门(绘制直线和矩形)
520 0
Delphi绘图功能[1] —— 入门(绘制直线和矩形)
|
存储 开发者
案例 03:金字塔、六边形、圆环的绘制
该案例主要是对常见的图元连接方式的运用
216 0
案例 03:金字塔、六边形、圆环的绘制

热门文章

最新文章