Pavel's Blog

A good picture is equivalent to a good deed.

6. 点的投影(Projecting Points)

3D Computer Graphics Programming

投影有两种一种是正交投影一个是透视投影 正交投影 vec2_t project_orthographic(vec3_t point){ vec2_t projected_point = { .x = point.x, .y = point.y }; return projected_point; } 正交投影不考虑深度对结果的影...

5. 向量和点(Vectors and Points)

3D Computer Graphics Programming

向量 typedef struct { float x; float y; } vec2_t; typedef struct { float x; float y; float z; } vec3_t; 点云 //Declare an array of vectors/points const int N_POINTS = 9 * 9 *...

4. 多个头文件(Multiple Header Files)

3D Computer Graphics Programming

目录和内容 预处理指令保证文件只被包含一次。 .h文件 头文件通常用于声明,而不是定义。相当于目录。 声明函数,变量和数据结构 包含公共依赖 避免重复定义(#ifndef和#define) .c文件 实现文件用于定义函数和实现逻辑 实现头文件中声明的内容 模块内部的逻辑实现 控制模块的编译范围 为什么离.h和.c文件 模块化设计,使代...

3. SDL设置和颜色缓冲(SDL Setup and Color Buffer)

3D Computer Graphics Programming

1.Creating an SDL Window MacOS中无法找到SDL2库文件 通过pkg-config解决 安装pkg-config brew install pkg-config 在macos使用pkg-config来获取SDL2的编译和链接选项 gcc -Wall -std=c99 $(pkg-config --cflags sdl2) -o renderer ma...

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方向上的中间点的边为底边...