写在前面

因为对图形学比较感兴趣,前段时间陆续看了fundamentals of computer graphics、raytracing系列,了解了一些 图形学的基础知识,也手撸了一遍光追(丐中丐版)。出来的图的效果 看着还行

1000sample per pixel

Cornell

100sample per pixel

Cornell2

如前面所写的,我之前所了解的都是图形学中离线渲染的部分。可以看到,虽然光线追踪所呈现的效果相对真实,但 如果不加一些黑魔法优化的话,效率太低。我记得渲染第一张图时好像用了5min(600x600)...。离线渲染坑太 多,不是一时半会儿可以搞定的;图形学中还有另外一个分支实时渲染,就像名字中所描述的,效率大都能做到实时,也是 游戏开发的主力,但相对于基本遵循物理定律的光追,真实度方面肯定有所差距。

之前看到过文刀秋二大大的 一篇文章 ,正好这 学期了解了数据结构,与文中的背景基本相似。虽然大作业的题目并不是文中的“池塘夜雨”,但由于学校出的题目过于无聊, 索性就尝试一下,顺便学习一些实时渲染方面的知识。

先放上结果:

池塘夜雨

完成了 …

写在前面

计算机图形学(CG),是一种使用数学算法将二维或三维图形转化为计算机 显示器的栅格形式的科学。其主要的研究内容就是研究如何在计算机中表 示图形,以及利用计算机进行图形的计算、处理和显示。

我对这个领域也有相当的兴趣。为了更好地学习图形学,我尝试写了 TOYBMP() 。 以MIT协议发布。这个函数由C语言实现,可以将数据写入24-bit RGB 或 32-bit RGBA 无压缩的BMP。代码长度为25行。

代码实现如下(toybmp.h):

Code

用法

#include <stdio.h>
#include "toybmp.h"
unsigned char rgb[256 * 256 * 3];
int main(void) {
    unsigned char* p = rgb;
    for (int y = 0; y …