- 博客(7)
- 资源 (5)
- 收藏
- 关注
原创 从零开始软渲染6-ShadowMap
这一节我们来讨论阴影。ShadowMap我们如何判断一个点是否处于阴影中呢?比如说在图中的ABCD四个点,B和C处于阴影中,A和D不处于阴影中,我们要做的事情就是能够把这两组点区分开来。这两组点有什么区别呢?我们把自己放在光源的位置,这就一目了然了:在光源的位置,沿着光源方向观察,A和D在视野内,B和C不在视野内,这就很容易判断出,B和C是处于阴影中的。ShadowMap的原理就是如此,先在光源的位置,沿着光源方向渲染一张深度图,然后在实际渲染场景时,把每个点变换到光源视角下,比较其深度
2021-02-10 21:29:30
274
原创 从零开始软渲染5-Shader
上一篇我们聊得比较偏理论,这篇我们来实际操作。渲染管线在实际动手之前,我们来看看图形API是如何做的。上图是OpenGL 2的渲染管线,和新版本略有差异,但大体流程是相似的。这里我们主要关注其中的Vertex Shader和Fragment Shader。Vertex Shader主要负责顶点变换,就是把一个顶点从模型空间变换到裁剪空间,并为后面的Fragment Shader准备相关的数据。Fragment Shader主要负责输出颜色,就是决定一个像素究竟应该输出什么样的颜色。从
2021-01-24 14:00:45
222
2
原创 从零开始软渲染4-以Unity为例的坐标变换
这一篇我们来聊一聊坐标变换。坐标变换比较偏理论,这里我们以Unity为参照,介绍一下顶点坐标变换的流程,详细的推导可以参考《Real time rendering》或者《Unity Shader入门精要》。齐次坐标(Homogeneous Coordinates)所谓齐次坐标,就是用N+1维来表示N维。那么多一个维度有什么好处呢?首先,可以通过这个维度来区分向量和点。以三维空间为例,(1,0,0,0)表示的是一个向量,而(1,0,0,1)表示的是一个点。另外,齐次坐标可以很方便地处理空间变换。依
2020-12-29 14:30:36
509
1
原创 从零开始软渲染3-深度缓冲和纹理贴图
上一回我们画出了一个茶壶的雏形,现在我们把茶壶打扮得更好看一点。之前画茶壶的时候,我们把背面的三角形都裁剪掉了,正面的三角形一股脑都画了出来,而壶盖的边缘处于壶身内部,应该被壶身遮挡,不应该被画出来。如何判断什么应该画,什么不该画呢?有一个算法称为画家算法(Painter's algorithm),含义就是一个画家在画画的时候,会先画最远的物体,再画近一点的物体,这样就可以遮住最远的物体,最后画距离最近的物体,这样就可以遮住其他所有物体。然而画家算法无法处理物体相互穿插的情况:比如说这三个.
2020-07-17 18:06:27
495
原创 从零开始软渲染2-HelloWorld
上回我们能够画出直线和三角形了,现在我们来尝试画模型。读取模型模型文件的格式繁多,这里就选择最简单常用的Obj格式,Obj格式的介绍可以参考:https://www.jianshu.com/p/f7f3e7b6ebf5Obj文件是文本格式的,所以可以自己写一个Obj的解析函数。如果不想自己造轮子,就可以直接使用tinyobjloader这个开源库:https://github.com/tinyobjloader/tinyobjloadertinyobjloader用起来也很简单,只需要两个文
2020-07-09 10:24:03
556
原创 从零开始软渲染1-直线和三角形
上回我们已经可以在屏幕上画出点了,现在我们开始画直线和三角形。基础数据结构我们先准备一些数据结构,如二维向量和三维向量,方便后面使用。template <class t> struct Vec2 { union { struct { t u, v; }; struct { t x, y; }; t raw[2]; }; Vec2() : u(0), v(0) {} Vec2(t _u, t...
2020-07-03 19:24:21
400
原创 从零开始软渲染0-从点开始
什么是软渲染?所谓软渲染,就是用软件实现的渲染,相对于GPU绘制而言,把渲染流水线在CPU上实现一遍,最终调用画点的函数,把整个渲染结果绘制出来。为什么写软渲染?入门图形学和渲染管线最硬核的方式,彻底理解光栅化的流程,写完之后再看原先懵懵懂懂的DX和OpenGL,便觉醍醐灌顶。环境搭建工欲善其事必先利其器,先把环境搭好,才能开始漫漫长征路。开发环境我用的是Windows 10 + VS2019,图形界面我用的是SDL。为了方便看渲染结果,图形界面是必要的。图形界面有很..
2020-06-28 17:35:07
1126
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人