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 ...

Java软光栅渲染器-2D直线剪切

目标 实现2D直线的剪切算法(见Line clipping)。 实现 Cohen-Sutherland算法 wiki上列出了很多直线剪切算法,看得有些眼花。我只看了排在第一个的 Cohen-Sutherland 算法。 这种算法把2D空间分成九个区域,画布位于正中。内部(INSIDE)、上(TOP)、下(BOTTOM)、左(LEFT)、右(RIGHT)等各个区域,分别用一个4位的二进制数进行编码。 typedef ...

Java软光栅渲染器-光栅化2D直线

目标 光栅化2D直线(布雷森汉姆直线演算法、吴小林直线算法等) 实现 在前面的基础上,实现光栅化2D直线就简单多了,只需要在 ImageRaster 类中增加一个画线方法即可。具体的实现,我先选择布雷森汉姆(Bresenham )直线算法。 网上相关资料非常多,我参考的是这些文章: Bresenham快速画直线算法 从零实现3D图像引擎:(2)画2D直线不简单 Drawing Line Using Bresenham Algorithm 实现代码如下: ...