0%

《深度探索 C++ 对象模型》第一章重点梳理。主要内容包括:

  • C++ 封装对象的布局成本
  • C++ 对象模型,详述 C++ 如何组织类对象及其成员
  • C++ 继承简述,简述 C++ 三种继承关系和三种继承方式,关于继承布局模型会在之后的章节详述
  • C++ 支持多态的三种方式
  • 指针类型和多态的实现原理

阅读全文 »

标准的 STL 关联式容器分为 set(集合) / map(映射表)两大类,以及这两大类的衍生体 multiset(多键集合)和 multimap(多键映射表)。这些容器的底层机制均以 RB-tree(红黑树)或hash table(哈希表)完成。

阅读全文 »

容器(Containers)是 STL 六大组件中最被人熟知和常用的一个神器,根据组织方式大概分为序列式容器和关联式容器两大类。

阅读全文 »

STL的中心思想是:将数据容器和算法分隔开,彼此独立设计,最后再用黏合剂将它们撮合在一起。容器和算法的泛型化,可以用 C++ 的 class template 和 function template 来实现,而迭代器(Iterator)就是二者的黏合剂了。

阅读全文 »

游戏引擎是一个庞大的软件系统,也是最接近操作系统的大型软件,因此会涉及非常复杂的架构设计、资源管理和和代码实现。这一节我们简要学习一个游戏引擎必备的几个重要模块及其功能,了解游戏引擎的宏观分层架构。

阅读全文 »

到此为止关于漫反射材质的全部内容就都完成了,现在只剩最后一步——用我们新的实现方式修改金属和电介质材质,使得新的光线追踪器支持镜面反射和折射。

阅读全文 »

现在我们有了光线在平面随机散射的 pdf 和直接对光源采样的 pdf,接下来我们可以混合这两种 pdf 得到混合概率密度,使用概率密度的好处之一正是 pdf 支持线性组合。

阅读全文 »

到目前为止我们实际上没有对之前的实现有什么实质性的更改,只是换了一种实现方式,所以得到的效果自然也是差不多的。但是改变实现方式是为了能够实现重要性采样,这一节我们将直接对光源进行采样。

阅读全文 »

上一节我们实现了基于蒙特卡洛积分的渲染方程并了解了重要性采样在光线追踪中的作用。这一节我们根据不同的概率密度来直接生成随机方向。经过上一节的推导,我们知道了之前实现的散射函数中的随机方向对应的概率密度是什么,但是没有显式的用概率密度去直接产生随机方向,而是用一个均匀分布(单位球面上随机取点)加上一个法线偏移达到这样的效果。这一节我们来实现直接生成给定概率密度的随机方向。

阅读全文 »

到目前为止我们已经实现了一个完整的光线追踪器,但距离真正的光线追踪其还差极为艰难的一步,也就是我们之前在渲染 Cornell Box 的时候提到的,画面噪声很大是因为光源太小,由于我们对散射光线的随机采样是使用最基本的采样方式,所以当光源很小的时候,光线打到光源的概率就很小,也就导致了噪声过大。从这一节开始我们就来解决这个问题。

阅读全文 »