Pavel's Blog

A good picture is equivalent to a good deed.

2.5 Working with Makefiles

3D Computer Graphics Programming

build: gcc -Wall -std=c99 ./src/*.c -o renderer run: ./renderer clean: rm renderer gcc -Wall -std=c99 $(pkg-config --cflags sdl2) -o renderer main.c $(pkg-config --libs sdl2) # 使用 gcc 进行编译 C...

2.4 编程流程

3D Computer Graphics Programming

MacOS平台 安装sdl2 打开ShellCommand输入指令 brew install sdl2 SDL2 是 Simple DirectMedia Layer 2 的缩写,是一个跨平台的软件开发库,用于提供对多媒体硬件的低级访问。 创建并切换文件目录 3drenderer src main.c ...

19. 光影着色(Light and Shading)

3D Computer Graphics Programming

平面着色(Flat Shading) 平面着色指的是3D模型上每个多边形(通常是三角形)统一地着色。 平面着色编程 在light.h中新写一个类型结构体light_t内含一个三维向量表示平行光照方向。 typedef struct { vec3_t direction; }light_t; 引用light.c中的light extern light_t light; ...

17. 3D空间变换矩阵(3D Matrix Transformations)

3D Computer Graphics Programming

1. 单位矩阵(Identity Matrix) 单位矩阵特征是对角线为1,其他位置为0的矩阵。 单位矩阵相当于矩阵中的1,任何矩阵乘以单位矩阵等于这个矩阵。 2. 缩放矩阵(3DScale Matrix) mat4_t mat4_make_scale(float sx, float sy, float sz){ // | sx 0 0 0 | // |...

15. 深度排序(Sorting Faces by Depth)

3D Computer Graphics Programming

画家算法(Painter’s Algorithm) Painter’s Algorithm(画家算法)是一种计算机图形学中的隐藏面消除算法。它模拟了画家绘画的过程,按照从远到近的顺序绘制物体,使得离观察者近的物体能够覆盖远的物体。该算法尤其适用于简单场景的渲染。 原理 Painter’s Algorithm 的基本原理是: 对所有需要绘制的多边形进行排序,使得最远的多边形最先绘...

14. 三角形栅格化(Triangle Rasterzation)

3D Computer Graphics Programming

填充三角形(Triangle Fill) 上节课我们学了将数学上完美的三角形用DDA算法转化成栅格线条。 填充三角形从顶层设计看是y方向递增的线扫描,从顶部点从上向下一行行扫描,绘制出三角形的栅格。 平顶边三角形和平底边三角形填充技术(Flat-Top & Flat-Bottom Fill Technique) 在扫描线算法中,我们将三角形分成以过y方向上的中间点的边为底边...

12. OBJ文件(OBJ Files)

3D Computer Graphics Programming

1. OBJ Files Wavefront .obj file 在导出模型时需要将面转化成三角面。 顶点信息列表 三角面索引列表 2. Loading OBJ File Content void load_obj_file_data(char* filename){ FILE* file; file = fopen(filename, "r"); ...

11. 动态数组(Dynamic Arrays)

3D Computer Graphics Programming

1. 动态数组 GitHub - gustavopezzi/dynamicarray: A simple dynamic array implementation in C array_push: 用于将一个新元素添加到动态数组中。如果数组容量不足以容纳新元素,则需要扩展数组。 array_hold:用于确保数组具有足够的容量来容纳至少指定数量的新元素。如果数组容量不足,则扩展数组。 ...

10. 绘制线(Line Drawing)

3D Computer Graphics Programming

在上一章节中我们写好了立方体的顶点数据和三角面数据,在这章中将探索如何绘制线条。 绘制线条的方法 在计算机图形学中主要有两种方法绘制线条。 DDA算法(Digital Different Analyzer Algorithm) 原理:是一种增量算法,通过计算直线在x方向或y方向上的增量,逐步绘制线段上的像素。根据直线的斜率决定是以x还是y方向为增量单位。 Bres...

3D Computer Graphics Programming课程笔记专辑

3D Computer Graphics Programming

课程地址:https://pikuma.com/ 2.4 编程流程 2.5 Working with Makefiles 3. SDL设置和颜色缓冲(SDL Setup and Color Buffer) 4. 多个头文件(Multiple Header Files) 5. 向量和点(Vectors and Points) 6. 点的投影(Projecting Points) ...