从零开始写软件光栅化渲染器
文章平均质量分 70
zhanghuanzj
这个作者很懒,什么都没留下…
展开
-
从零开始写光栅化渲染器1:绘制一个像素点
1.准备工作光栅化渲染器的第一步就是绘制一个像素点,然后再进行线,三角形的绘制,这里主要通过directx9(具体哪个版本不重要,主要是用来绘制,也可以通过其它方式)进行像素点的绘制。//DirectX是自己定义的一个类,主要负责DirectX设备的创建,以及图形的绘制bool DirectX::initialDirectX(HINSTANCE hInstance, HWND hWnd, int原创 2016-06-21 16:05:34 · 4970 阅读 · 0 评论 -
从零开始写光栅化渲染器2:直线绘制光栅化算法
直线绘制光栅化算法1.数值微分DDA(Digital Differential Analyzer)算法1.1原理引入增量思想,以dx≥dy(斜率[0,1])为例,考虑直线y=kx+b,当x步进为1时,y步进为k,即yi+1=yi+ky_{i+1}=y_i+k ,根据四舍五入法即可绘制直线1.2伪代码y = y1;for(x:[x1,x2]){ drawPixel(x,y); y原创 2016-11-05 15:40:55 · 3419 阅读 · 0 评论 -
从零开始写光栅化渲染器0:创建windows窗口
0.光栅化渲染器概述主要实现了以下功能:2D部分:光栅化2D点光栅化2D直线光栅化2D三角形3D部分:把顶点从三维世界空间变换至二维屏幕空间,把顶点连线(如各种三维正多面体)光栅化成wire frame模型三角形光栅化使用深度缓冲实现简单的纹理映射,先做屏幕空间的插值,然后实现简单的透视纹理校正实现简单的顶点光照,使用顶点颜色插值实现Gouraud shading具体参考以下前辈原创 2016-06-20 20:30:09 · 4591 阅读 · 0 评论 -
从零开始写光栅化渲染器3:三角形光栅化
1.平底三角形光栅化我们已经知道如何绘制一条2D直线,接下来我们开始绘制实心三角形。其实原理比较简单,如下图是一个平底三角形,V2.y==V3.y,所以我们只要沿着三角形的两条边不断画直线,就可以将三角形填满。首先我们必须确定每条直线的左右两个点,即$V_L和V_R$,我们可以通过插值法确定,例如$V_L.x$可以这样得到: VL.x=V1.x+(V2.x−V1.x)∗factorV_L.x =原创 2016-11-08 10:54:25 · 3747 阅读 · 4 评论 -
从零开始写光栅化渲染器4:三维物体的呈现
1.三维物体的呈现过程 这里主要详细介绍投影转换及屏幕映射。2.投影转换当模型转换到相机空间时,便要对顶点进行裁剪处理,剔除那些不在视锥体之内的顶点。 视锥体的空间如下,包含一个近裁剪面和一个远裁剪面,以及一个视角角度Fov,视角屏幕的宽高比Aspect。 投影转换矩阵如下: ⎡⎣⎢⎢⎢⎢Cot(fov/2)/Aspect0000Cot(fov/2)0000(Far+Near)/(Far原创 2016-11-20 11:46:48 · 2346 阅读 · 2 评论