
CG
一碗风
矫情的人
展开
-
BMP图片格式解析并显示示例程序
格式原理参考http://blog.youkuaiyun.com/o_sun_o/article/details/8351037http://blog.youkuaiyun.com/lanbing510/article/details/8176231https://en.wikipedia.org/wiki/BMP_file_format关于解析以上几个网站,尤其wiki写的很好,我就原创 2017-05-27 15:51:45 · 2265 阅读 · 1 评论 -
设计自己的软渲染器2-构建3D世界到2D屏幕显示的基本变换
说明在这一节中,我们将一步步的从基础构起,完成由3D物体坐标转换为到屏幕上所看到的图像的变换流程,最终反映在程序中便是我们输入的三位点依据我们设置的观察方式投影到了屏幕上。这部分内容可以参考《计算机图形学》第四版。首先明白几个概念。1.模型坐标系,在此坐标系下构建我们的3D物体(一般以物体几何中心为坐标中心)。2.世界坐标系,拥有所有3D物体的整个3D世界。...原创 2018-01-16 20:27:56 · 1546 阅读 · 0 评论 -
设计自己的软渲染器3-渲染线框模型
在这一部分,我们将实现线框模型的显示与渲染,实际上就是把点连接起来。画线算法很多,我在这里介绍经典的画线算法:Bresenham快速画直线算法直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线。给定两个点起点P1(x1, y1), P2(x2, y2),设line(p1,p2)的斜率为k,p1.x则,从p1开始,下一个点要么在他的右邻接点要么在原创 2018-01-16 20:38:28 · 1104 阅读 · 0 评论 -
设计自己的软渲染器4-光栅化与Z-buffer
这一次我们将使用光栅化与Z-Buffer来填充我们之前所画的线框模型中的三角形面。 光栅化我们模型经过投影变换后的仍然只是几个顶点的位置信息而已,如果我们画三角形,想要的不仅仅是三个顶点,还想要确定填充三角形所需要的所有像素的信息(连续信息描述变换为离散信息描述),总结来说,光栅化就是确定一个几何图元所覆盖的所有像素及其信息。如下图所示:接下来我们将实现基于线扫描的光栅化三原创 2018-01-16 20:54:50 · 2051 阅读 · 1 评论 -
设计自己的软渲染器5-光照
之前我们为每一个面随机赋予颜色,然而在渲染场景时,为了贴合现实世界,还需要在渲染中加入明暗的对比。在这我们不仅要实现黑白变化还有每个面受到光照的影响后产生的亮度变化。平面着色现在先介绍简单的平面着色。它会计算光照的角度,使每个面有更好的光照效果,但每个面都会被指定一个单一且没有变化的颜色。这种方法虽然会产生出不真实的效果,但相比于没有明暗变化已经进步了。 计算每一个面的法线向量,由原创 2018-01-17 13:15:16 · 811 阅读 · 0 评论 -
设计自己的软渲染器6-纹理映射与背面剔除
纹理映射纹理映射说白了就是将一幅图像贴在我们所要贴的物体的表面。为每个多边形顶点附一个纹理坐标,然后再纹理素材上取样贴在一个多边形上,然后达到所要的视觉效果。如下为一个正方体箱子每个面都贴上纹理。 将上图当作一个颜色矩阵,每个颜色有一个坐标(U,V),而三维的立方体每个点都有一个三维坐标(x,y,z),我们利用坐标映射((x,y,z)-(U,V))为空白的立方体着色。原创 2018-01-17 16:18:43 · 644 阅读 · 1 评论 -
设计自己的软渲染器1-准备篇
软渲染器:简单说来就是借助软件将3D模型数据渲染成我们屏幕上的画面内容。相关知识:线性代数,基本图形学知识,基本操作系统知识。主要参考:《计算机图形学》第四版《3D游戏编程大师技巧》 Blog*N。《3D游戏编程大师技巧》是完成了一个3D游戏引擎,而这里所写的软渲染器只是其中一部分,本系列只是为了解流程,不考虑效率,没有做相关优化。系列代码:https://github原创 2018-01-16 16:25:47 · 1131 阅读 · 0 评论 -
设计自己的软渲染器-附代码相关
本系列github代码库地址https://github.com/YIWANFENG/MiniRenderer本系列可运行项目下载地址http://download.youkuaiyun.com/download/hffhjh111/10210438一些的参考资料大牛Blog:https://www.davrous.com/2013/06/13/tutorial-serie原创 2018-01-17 17:13:38 · 764 阅读 · 0 评论