Java软光栅渲染器-四元数
目标 定义四元数,并实现四元数的运算。 源代码: Quaternion 实现 关于四元数的意义、四元数与复数、四元数的共轭等概念,网上有太资料来学习,本文就不再多写了。我在实现四元数时,主要参考《3D数学基础:图形与游戏开发》第10章的内容。 理解四元数 如何形象地理解四元数? 四元数记法 四元数包含一个标量分量和一个3D向量分量。 ...
目标 定义四元数,并实现四元数的运算。 源代码: Quaternion 实现 关于四元数的意义、四元数与复数、四元数的共轭等概念,网上有太资料来学习,本文就不再多写了。我在实现四元数时,主要参考《3D数学基础:图形与游戏开发》第10章的内容。 理解四元数 如何形象地理解四元数? 四元数记法 四元数包含一个标量分量和一个3D向量分量。 ...
目标 定义三维向量(Vector3f)类,实现向量的常用计算方法。 扩展实现二维向量、四维向量。 源代码: Vector3f Vector2f Vector4f 实现 三维向量 三维向量类的基本定义为: public class Vector3f { public float x, ...
目标 把顶点从三维世界空间变换至二维屏幕空间,绘制顶点(如银河星系数据),操控摄像机旋转模型。 在渲染3D场景之前,先得做一些数学工作。上面提到的“顶点”、“空间变换”、“旋转”等术语,都需要依赖3D数学库来实现。 至少要包括: 三维向量(Vector3) 四元数(Quaternion) 矩阵(Matrix) ...
目标 光栅化2D三角形(scan conversion)。避免重复光栅化相邻三角形边界的像素(edge equation)。 光栅化空心三角形 光栅化实心三角形 避免重复光栅化相邻三角形边界的像素 实现 继续为ImageRaster增加光栅化三角形的功能。 空心三角形 这一步几乎不需要做任何多余的事情,直接调用3次 drawLine 就行。 /** * 画空心三角形 * */ public void ...
目标 实现2D直线的剪切算法(见Line clipping)。 实现 Cohen-Sutherland算法 wiki上列出了很多直线剪切算法,看得有些眼花。我只看了排在第一个的 Cohen-Sutherland 算法。 这种算法把2D空间分成九个区域,画布位于正中。内部(INSIDE)、上(TOP)、下(BOTTOM)、左( ...