共计 15 篇文章

Java软光栅渲染器-光栅化3D三角形

目标 光栅化3D顶点 光栅化3D线段 光栅化3D线框三角形 光栅化3D实心三角形 实现顶点线性插值 实现 本章主要实现SoftwareRaster中对基本形状的光栅化。 计算空间变换矩阵 Renderer中定义了诸多空间变换矩阵,在渲染之前先要把它们初始化。 private Matrix4f worldMatrix = new Matrix4f(); private Matrix4f viewMatrix = new Matrix4f(); private Matrix4f projectionMatrix = new Matrix4f( ...

Java软光栅渲染器-背面消隐

目标 将三角网格的背面(看不见的部分)剔除掉。 参考:从零实现3D图像引擎:(14)背面消隐的三大陷阱 实现 变换到观察空间 首先,进行背面消隐时,先要使用 WorldMatrix 和 ViewMatrix 将三维向量转换到观察空间。此时摄像机的位置即是原点,三角形的顶点向量就等同于观察的方向向量。 修改一下Mesh类的render方法: /** * 渲染3D场景 * * @param imageRaster * @param camera */ public ...

Java软光栅渲染器-3D数学库

目标 把顶点从三维世界空间变换至二维屏幕空间,绘制顶点(如银河星系数据),操控摄像机旋转模型。 在渲染3D场景之前,先得做一些数学工作。上面提到的“顶点”、“空间变换”、“旋转”等术语,都需要依赖3D数学库来实现。 至少要包括: 三维向量(Vector3) 四元数(Quaternion) 矩阵(Matrix) 空间变换(Transform) 这一阶段的主要目标就是实现这些数学库。 在实现的过程中,我的主要参考资料是 jMonkeyEngine ...

Java软光栅渲染器-光栅化2D三角形

目标 光栅化2D三角形(scan conversion)。避免重复光栅化相邻三角形边界的像素(edge equation)。 光栅化空心三角形 光栅化实心三角形 避免重复光栅化相邻三角形边界的像素 实现 继续为ImageRaster增加光栅化三角形的功能。 空心三角形 这一步几乎不需要做任何多余的事情,直接调用3次 drawLine 就行。 /** * 画空心三角形 * */ public void drawTriangle(int x0, int y0, int ...