网站设计风格分析一键搭建网站
基于 Java 的软件光栅化渲染器
参考
首先,如果从学习角度出发,不必一开始完全根据现时GPU的架构及概念,来用软件复制一遍。现时的GPU主要是基于三角形光栅化及z-buffer。
如果我们从图形学的历史进程来学习,可以这样做练习:
2D部分:
光栅化2D点(就是在二维数组上画点,了解色彩的基本原理,并解决图像的输出问题)。
2D直线的剪切算法(见Line clipping)。
光栅化2D三角形(scan conversion)。避免重复光栅化相邻三角形边界的像素(edge equation)。
光栅化简单/复杂多边形
3D部分:
把顶点从三维世界空间变换至二维屏幕空间,绘制顶点(如银河星系数据),操控摄像机旋转模型。
在剪切空间进行3D直线的剪切算法,把顶点连线(如各种三维正多面体)光栅化成wire frame模型。
以多边形来定义三维模型。使用画家算法来光栅化那些多边形。
改为使用深度缓冲。
实现简单的纹理映射,先做屏幕空间插值,然后实现简单的perspective-correct texture mapping。
实现简单的顶点光照,使用顶点颜色插值实现Gouraud shading。
通过顶点法线插值,实现Phong shading。
实现其他贴图技术,如mipmapping(也可试 Summed area table)、bilinear/trilinear filtering、bumpmapping、normal mapping、environment mapping等。
实现
创建一个JFrame窗口
光栅化2d点
光栅化2d线段
2D直线裁剪
光栅化2D三角形
创建3D数学库,实现3D空间变换。
创建虚拟摄像机,实现3D观察。
接收用户输入,实现第一人称摄像机控制器。
背面剔除
3D光栅化
深度缓冲
纹理采样。实现纹理包裹(WarpMode),以及最邻近点(Nearest)和二次线性(Bilinear)滤波。
Alpha测试
颜色混合
透视校正插值
实现了材质和着色器框架。
基于Gouraud Shader的顶点光照
实现了Blinn-Phong Shader
..
相关文章