Java软光栅渲染器-渲染状态
目标 考虑一个问题:如果我想控制物体渲染的方式,例如把背面剔除改成正面剔除,把三角形的填充模式改成线框模式,应该怎么办? 请看下图: 目前我想分别渲染出这5张不同的效果图,只能先去修改源代码,然后运行,再改源码,再运行,再改源码,再运行,再改源码,再运行... 好麻烦啊。 一种比较合理的方式,是在渲染管线中增加一些状态,根据Geometry的状态值来决定如何渲染它。 ...
目标 深度缓冲(Depth Buffer)又称Z缓冲区,是一个与渲染目标有相同大小的缓冲,这个缓冲记录每个像素的深度。深度缓冲的目的在于正确地生成通常的深度感知效果:较近的物体遮挡较远的物体。 像素的深度值是由视矩阵和投影矩阵决定的。在近裁平面上的像素深度值为0,在远裁平面上的像素的深度值为1。假设摄像机在原点,那么深度值越小的离摄像机越近。 本文的目标就是实现深度缓冲。 参考资料: Alpha/Transparency Sorting, Your ...
目标 考虑一个问题:如果我想控制物体渲染的方式,例如把背面剔除改成正面剔除,把三角形的填充模式改成线框模式,应该怎么办? 请看下图: 目前我想分别渲染出这5张不同的效果图,只能先去修改源代码,然后运行,再改源码,再运行,再改源码,再运行,再改源码,再运行... 好麻烦啊。 一种比较合理的方式,是在渲染管线中增加一些状态,根据Geometry的状态值来决定如何渲染它。 ...
目标 光栅化3D顶点 光栅化3D线段 光栅化3D线框三角形 光栅化3D实心三角形 实现顶点线性插值 实现 本章主要实现SoftwareRaster中对基本形状的光栅化。 计算空间变换矩阵 Renderer中定义了诸多空间变换矩阵,在渲染之前先要把它们初始化。 private Matrix4f worldMatrix = new Matrix4f(); private Matrix4f viewMatrix = new ...
目标 3D图形渲染管线,或者简称渲染管线,网上有非常非常多的资料,凡是与3D图形有关的书籍也会专门介绍。下面是一些参考资料: 《3D数学技术:图形与游戏开发》第15.1节“图形管道概述”。 《Real Time Rendering》第二章 图形渲染管线 浅谈 GPU图形固定渲染管线 3D图形渲染管线 可编程渲染管线比固定管线的优势在哪? ...
目标 将三角网格的背面(看不见的部分)剔除掉。 参考:从零实现3D图像引擎:(14)背面消隐的三大陷阱 实现 变换到观察空间 首先,进行背面消隐时,先要使用 WorldMatrix 和 ViewMatrix 将三维向量转换到观察空间。此时摄像机的位置即是原点,三角形的顶点向量就等同于观察的方向向量。 修改一下Mesh类的render方法: ...