最新文章

C++ 中分配器与多态内存资源

C++ 能够以非常细的粒度控制计算机上的内存,这是该语言的一大特点。 对于 C++ 标准库中的所有容器,都可以通过指定分配器来控制其内存分配的细节。 C++17 则通过引入多态内存资源(Polymorphic Memory Resource)进一步强化了这个能力。 本文中我们将讨论 C++ 标准库中多种分配器的细节。

初探 Vulkan 同步问题

我去年以来一直在给某小作坊游戏引擎的渲染部分贡献代码,并主导了其中 Vulkan API 相关的部分设计。 在 Vulkan 之中——也是任何分布式系统之中,最令人困惑的部分或许就是不同系统之间的同步问题。 Vulkan API 提供了大量的工具用来解决宿主(Host,一般就是指 CPU 和主存)和设备(Devi...

为 Vulkan 设计材质系统

这篇文章中,我将简单说明我本人在 Vulkan 中设计渲染引擎的材质系统时遭遇的问题和提出的解决方案,作为记录以供参考。 材质系统的需求 材质系统几乎是任何图形渲染引擎都不可避免的系统,而且是其中最复杂、细节最多、牵涉组件最广的系统之一,对实时渲染系统而言更是如此。 为了设计这个系统,必须先弄清楚这个系统到底...

TeX 中的宏展开

本文主要介绍 $\TeX$以及$\LaTeX{} 3$中的宏及其展开相关内容,主要参考了高德纳的 $\TeX{}book$以及$\LaTeX{} 3$手册。 TeX 编译原理 我们首先介绍一下 $\TeX$ 是如何从输入产生文章的。 作为基于宏定义的“排版”语言,和常见的指令式语言不同,其编译过程更像是 LI...

裁切空间变换

这篇文章将主要讨论计算机图形学中的裁切空间和射影空间。

格林函数与无限大电阻网格

本文将利用格林函数法求解一个臭名昭著的电学问题:无限大电阻网格问题。 格林函数法 首先介绍一下使用格林函数法(Green’s Function method)求解各种微分方程的原理。 考虑某空间$V$上的微分方程: \(Lu(x) = f(x), \; x \in V\) 其中$L$是微分算子。 若我们能够...

引用与值类型

本文主要以值类别为线索,介绍 C++11 引入的右值引用相关内容,主要关注语言规定中的内容,而非各种实现上的抽象(例如所有权等)。

拉格朗日量与广义势能

之前我们简单介绍过拉格朗日力学的中心概念,即拉格朗日量。 当时,我们说拉氏量是动能与势能之差: \(\mathcal L = T - V.\) 在许多情况下,系统的能量如此简单的处理,尤其是系统所受外力取决于速度时。 典型的例子包括线性空气阻力和磁场中的洛伦兹力。 在本文中,我们将介绍速度相关势能(Velocit...