My Blogs

Rays, a Simple Camera, and Background

4.1 The ray Class 所有的光线追踪器都有一个ray类,并且会计算沿着光线会看到的颜色。我们可以把光线理解为一个函数P(t) = A + tb,其中P是三维空间中线上的一点,A是光线原点,b是光线方向,t是一个实数参数,在程序中对应的数值类型是double。通过改变t的值,我们可以得到直线上任意位置。如果我们限定t是正数,则函数表示的概念就是我们所说的half-line或ra...

The Vec3 Class

几乎所有的图形程序都有一些类用于存储向量与颜色。在很多系统中,这些向量是4维的,对于位置向量来说,这包括三维空间中的位置以及一个齐次坐标,对于颜色向量来说,包括RGB颜色以及alpha透明值。对于我们的渲染器来说,三维向量就足够了。我们将会使用同一个Vec3类用于表示颜色、位置、方向、偏移量等。同时,我们还会声明两个别名:Point3和Color。 我们将这个类的定义放在math.hpp头...

Vulkan Tutorial 01 Overview

1 Origin of Vulkan 与早期图形API类似,Vulkan旨在为GPU提供跨平台抽象。但传统API设计时受限于当时以固定功能管线为主的图形硬件环境,开发者只能以标准格式提供顶点数据,在光照与着色功能上受制于GPU厂商。 随着显卡架构发展,可编程功能逐渐增强。这些新特性只能通过补丁式整合到现有API中,导致驱动层抽象不理想,需要大量猜测性代码将开发者意图映射到现代架构。这正是...