![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从零开始的SoftRenderer
记录并梳理用C++编写一个软件渲染器的过程
-沧海流云-
这个作者很懒,什么都没留下…
展开
-
[从零开始的SoftRenderer]3. 渲染管线
GPU在接受了CPU的指令和数据后,所做的一系列流水线作业,被称作渲染管线。 GPU渲染管线 上图就是GPU渲染管线的图示。图中绿色表示完全可编程,黄色表示可配置,蓝色表示完全固定。下面介绍下一些主要的渲染阶段: 顶点着色器: 完全可编程,主要做的是我们在本系列第二章中所讲的坐标变换的过程,所以将输入的顶点乘以MVP矩阵输出,就是一个最简单的顶点着色器。除此之外,这一阶段还可以对一些顶点的属性(法线、纹理等等)进行处理,交给后面的阶段去用。 裁剪: 在NDC空间进行裁剪,被截取的三角形会在边界处原创 2020-06-21 15:23:54 · 367 阅读 · 0 评论 -
[从零开始的SoftRenderer]2.坐标变换
一个物体要投影到屏幕上需要依次经过 Model(世界矩阵,转换到世界空间)、View(视图矩阵,转换到观察空间/摄像机空间)、Projection(投影矩阵,转换到裁剪空间),合起来就是常见的MVP矩阵。 Model矩阵和View矩阵很好理解,只是单纯的坐标系变换(注:Unity里摄像机坐标系采用的是右手系,与其世界坐标系相反,算是一个小的坑点),如果有不理解的推荐一个视频课程,线性代数的本质,这里就不详细说明了。 齐次坐标 在介绍投影矩阵前,我们先来了解下齐次坐标 ...原创 2020-06-21 15:24:11 · 214 阅读 · 0 评论 -
[从零开始的SoftRenderer]1.绘制三角形
我们最终是要将三维的物体绘制到平面上,那么首先我们需要明白的是如何在屏幕上绘制二维的物体。而在二维的多边形中,三角形无疑是最特别的一种,它具有以下特性: 边数最少 所有多边形可以都可拆解成三角形 即使在三维空间中,三角形的所有顶点也必然在同一平面上 所以我们的软件渲染器的第一步,就是要在屏幕上绘制出一个三角形。绘制三角形的方式多种多样,但严格来说,我们其实是希望绘制由三角形的三个顶点所定义的三角形。 ...原创 2020-06-21 15:24:36 · 301 阅读 · 0 评论 -
[从零开始的SoftRenderer]0.前言
本人图形学萌新一个,之前有跟着LearnOpenGL进行一点学习,但是总觉得对一些基础的东西并没有真正理解。年前在github上发现一个很不错的工程,tinyrender,便开始跟着上面的介绍开始着手自己写一个软件渲染器,以模拟底层的实现。 代码链接在此。 其实我这个软件渲染器是一个最简版的,光照、阴影、后处理等等都没有,只是完成了通过摄像机把模型渲染到屏幕这一最基本的流程而已。当时我纠结了一阵该如何设计顶点着色器和片段着色器的结构和数据交互后,便直接滚去玩unity了。或许之后遇到什么我觉得原创 2020-06-21 15:28:01 · 416 阅读 · 0 评论