使用四元数和变换类管理对象姿态

在之前的开发中,我们通过直接传递一个 mat4 modelMatrix 到渲染函数来表示模型的位置、旋转和缩放。虽然可行,但这种方式不够直观,难以单独修改某个变换分量(如只改变旋转),并且在处理旋转时可能遇到欧拉角的固有问题。为了更优雅、健壮地管理对...

Computer Graphics

增强真实感:为软渲染器添加 AO、高光和光泽度贴图

在上一篇文章中,我们成功地为 C++ 软渲染器添加了法线贴图支持,让低模也能展现丰富的表面几何细节。然而,要进一步提升渲染的真实感,我们还需要引入更多控制光照和材质表现的细节。本文将介绍如何继续扩展我们的渲染管线,加入环境光遮蔽 (Ambient O...

Computer Graphics

在软渲染器中实现法线贴图 (Normal Mapping)

在实时计算机图形学中,模型的细节往往受到多边形数量的限制。为了在不显著增加模型复杂度的前提下,模拟出丰富的表面细节(如凹凸、划痕、纹理),法线贴图技术应运而生。本文将详细介绍如何在基于 C++ 的软件渲染器中实现切线空间法线贴图 (Tangent S...

Computer Graphics

Blinn-Phong 着色器实现

Blinn-Phong 着色器实现概述Blinn-Phong 着色模型是经典 Phong 模型的改进版本,通过引入半角向量(Halfway Vector)优化了高光计算。我们的实现包含完整的顶点和片段着色器处理流程。 核心实现1. 顶点着色器1234...

Computer Graphics

渲染管线简介

SoftRasterizer 渲染流程解析概述本文档详细分析 SoftRasterizer 的渲染管线实现,涵盖从模型加载到最终像素输出的完整流程。渲染管线主要分为初始化阶段和每帧渲染阶段。 核心渲染流程1. 初始化阶段123456789101112...

Computer Graphics

透视投影

实现软光栅化中的透视投影:从基础渲染到深度测试优化在开发软光栅化渲染器时,透视投影是实现真实感渲染的关键一步。本文基于一次代码修改(git diff),详细讲述如何将一个基础的模型渲染系统升级为支持透视投影的渲染管线,包括矩阵变换、深度处理和透视校正...

Computer Graphics

摄像机的实现

概述本文档详细记录了在 SoftRasterizer 项目中实现 Camera 类的全过程,包括其设计、核心代码、应用方式以及验证方法。通过该类,我们实现了灵活的相机控制,支持 OpenGL 风格的视图变换。 核心实现1. Camera 类定义123...

Computer Graphics

漫反射材质

概述本文档详细记录了在 SoftRasterizer 项目中实现 diffuse 材质加载的全过程,解决了初始加载失败的问题,使得模型能够正确显示纹理效果。 核心修改1. Texture 类扩展1234567891011121314151617181...

Computer Graphics

OBJ模型加载与三角形渲染实现

OBJ模型加载与三角形渲染实现坐标系确定本渲染器使用左手坐标系,判断依据: 静态分析方法 检查顶点变换: 123// 没有Z轴反转操作,保持原始方向screen_coords[j] = vec2i((v.x+1)*fb.width/2, (v.y+...

Computer Graphics

软光栅直线绘制算法实现

直线光栅化基础算法 - Bresenham实现算法简介Bresenham算法是计算机图形学中最基础的直线光栅化算法,通过整数运算高效确定最佳逼近直线路径的像素点。 核心特点 完全整数运算,无浮点计算 避免乘除法,仅用加减和位运算 一次生成一个像素,时...

Computer Graphics