Yocto / gl:C ++库用于数据驱动的物理图形图形

2021-03-26 19:56:13

Yocto / gl是一系列小C ++ 17图书馆,用于在麻省理工学院执照下发布的基于模型的图形算法.YCTO / GL是以故意的数据为导向的风格编写的,以便于开发和使用。yococto / gl被分成小库制作代码导航更容易。将每个标题文件进行文档。

yocto / yocto_shape。{h,cpp}:操纵上行网格的实用程序,Quads网格和行集,正常和Tytangents的计算,线性和Catmull-Clark细分,程序形状生成,光线交叉口和最近点查询

yocto / yocto_bvh。{h,cpp}:三角形网格的ray交叉点和最接近点查询,quads网格,行集和实例场景使用ATWO级边界卷层次结构

Yocto / Yocto_Trace。{H,CPP}:表面和毛发的路径跟踪支持area和环境照明,Microfacet GGX和地下散射,多重重视采样

以下是使用路径跟踪器呈现的一些测试图像。在项目网站中仅包括更多图像。

Yocto / GL遵循A"以数据为导向的编程模型"使数据explicit.data以简单的结构存储并使用自由函数或直接存储。所有数据都是公共的,所以我们在封装中没有尝试尝试。大多数对象是yocto / gl有价值语义,而大数据结构引用语义是严格的所有权。这意味着EveryerScan被术语序列化,并且不需要内存管理。

我们这样做是这样做的,因为这使得yocto / gl更轻松地延伸和更快地学习,在编写并行代码时更加明确的数据流程.Since yocto / gl主要用于研究和教学,显式数据既可容易发布更容易理解。

在代码风格方面,我们更喜欢功能方法,而不是Anobject面向Anobject,偏好于类方法。所有功能和数据都在Yocto Namespaceso库中包含的兄弟名称空间中定义,可以调用所有其他人,但必须明确地进行。

在Yocto中使用模板是许多重构的原因,从未将模板进行重型模板使用。此时,Yocto使用一些模板来可读性。在未来,我们将增加Mathcode中模板的使用,同时保持许多API明确地键入。

我们不使用异常进行错误报告,但仅用于报告"程序员"错误。例如,IO操作使用Boolean标志和错误字符串不知道可读错误,而在功能中违反前提条件时使用异常。

经过几次重构,我们以基于价值的方法解决,因为我们的许多用户都很难使用指针和参考语义。虽然有可能引入虚假副本的缺点,但它对确保不会发生内存损坏,这对新手C ++用户来说是一个重大问题,即使在像这样的非常小的纤维状中,这是一个主要问题。

此库包括来自PCG随机数生成器的代码,Boost Hash_Combine,以及Github.com/sgorsten/linalg,GIST.Github.com/Badboy/6267743和Github.com/nothings/stb_perlin.h.其他外部库包含在自己的许可证中。

此库需要C ++ 17编译器,并且已知编译ONOSX(Xcode> = 11),Windows(MSVC 2019)和Linux(GCC> = 9,Clang> = 9)。

您可以使用mkdir构建使用cmake构建示例应用程序; CD构建; cmake ..; CMake - 博彩。

Yocto / gl取决于stb_image.h,stb_image_write.h,stb_image_resize.h和tinyexr.h用于图像加载,保存和调整大小,cgltf.h和json.hppfor gltf和json支持,以及filesystem.hpp支持C ++ 17缺少文件系统API。所有依赖项都包含在分发中。

Yocto / GL可选地支持构建OpenGL演示,该演示由包括Glad,Glfw,Imgui作为应用程序的依赖关系。 OpenGL支持可能最终部分yocto / gl库的一部分。通过定义cmake选项yocto_opengl并包含在Yocto_Gui库中的yocto_Gui库中启用OpenGL支持。

Yocto / GL可选择支持Intel' s homeee for ray casting。将如何链接到它的主要CMake文件。通过默认CMake选项Yocto_embree来启用蜂蜜支持。

Yocto / GL可选择支持Intel' S Open Opere Senoise for Denoising的使用。将主要CMake文件用于如何链接到它。通过定义CMake选项yocto_denoise来启用打开图像denoise支持。