Skip to main content

理解Illustrator核心

Illustrator的核心模块是其功能和性能的基石,这些核心功能负责处理从几何模块到图形硬件的所有细节,提供高效、灵活的渲染能力。以下是核心模块包括的功能:

  • 数学运算:为几何变换、图形交互计算提供高效工具。
  • 组织场景树:组织和管理场景中的对象,动态更新。
  • 渲染资源管理:高效加载和管理渲染资源,优化内存和性能。
  • 底层图形API封装:简化开发者与底层图形API的交互。
  • 渲染上下文管理:管理图形设备和渲染状态,支持多线程渲染。

Core模块功能

下面对Core模块的功能做一些简要描述,您可以后续教程中详细了解如何使用这些功能。

组织场景树

场景树模块用于组织和管理3D场景中的所有对象。它通过树状结构表示场景中的各种渲染要素及其父子关系,包括几何数据、空间变换、材质信息或相机信息。场景树支持动态操作,例如添加、删除或修改对象,并提供高效的遍历功能,用于更新和渲染整个场景。

更多信息请参考:

底层图形API封装

核心模块中实现了对OpenGL(在后续开发中会陆续实现Vulkan、DirectX等)图形API的封装,提供统一的接口,简化开发者与底层图形API的交互。

  • 封装底层的渲染操作,如绘制、状态设置、纹理绑定等。
  • 提供抽象的渲染对象,包括缓冲区、着色器、纹理、材质、相机等。
  • 支持跨平台,提供统一的渲染接口,屏蔽不同图形API的差异。

渲染上下文管理

核心模块管理图形设备和渲染状态,包括窗口初始化、上下文创建、状态设置和多线程渲染支持。

数学运算

数学运算是3D渲染引擎的基础,用于处理几何变换、射线投射、相交测试等。核心模块中提供了高效的数学工具,用于支持3D空间中的各种计算。主要功能包括:

  • 数据类型:提供了3D空间渲染元素的数学表达,比如缓冲区数组、空间包围盒、旋转四元数、平面等。
  • 向量运算:提供向量的加减、点积、叉积、归一化等操作,用于计算顶点位置、光照方向、视角等。
  • 矩阵运算:提供矩阵的乘法、转置、逆矩阵计算等,实现模型变换(缩放、旋转、平移)、视图变换和投影变换。

渲染资源管理

声明式API

Illustrator通过将复杂的OpenGL指令封装成面向对象的声明式API,使用户能够以更高层次的抽象来进行图形编程。用户可以轻松地定义和管理顶点数据、构建几何形状、设置颜色和光照效果,以及配置渲染状态,从而专注于业务逻辑,而无需深入了解底层的OpenGL实现细节。

比如下面的例子中用到了Illustrator接口_vertices来创建和管理顶点缓冲区,用户只需定义顶点数据,将它组织到geometry中,最终进入渲染上下文中。

    // 定义几何
auto geometry = _geometry(
{
// 几何的顶点数据
{"positions", _vertices({-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0})},
},
// 几何的拓扑
_triangles(3)
);

在后面的教程中您可以看到很多这类接口,声明式地定义渲染所需要的对象信息。

    // 定义材质
auto material = _phong(color);
// 利用上面的材质、几何构成一个绘制单元
auto primitive = _primitive(geometry, material);
// 声明渲染节点
auto node = _node({ primitive });
// 声明相机
auto camera = _camera();
// 声明渲染通道
auto pass = _pass(node, background, camera);
// 声明渲染场景
auto scene = _scene({ pass });

接下来的教程中,我们会逐一介绍核心模块中的一些重要概念,让您掌握如何使用核心模块构建自己的渲染场景,体会渲染引擎的编程特点和高效性能。