共计 13 篇文章

Java软光栅渲染器-深度缓冲

目标 深度缓冲(Depth Buffer)又称Z缓冲区,是一个与渲染目标有相同大小的缓冲,这个缓冲记录每个像素的深度。深度缓冲的目的在于正确地生成通常的深度感知效果:较近的物体遮挡较远的物体。 像素的深度值是由视矩阵和投影矩阵决定的。在近裁平面上的像素深度值为0,在远裁平面上的像素的深度值为1。假设摄像机在原点,那么深度值越小的离摄像机越近。 本文的目标就是实现深度缓冲。 参考资料: Alpha/Transparency Sorting, Your Z-buffer, and You 深度测试 深度缓冲 OpenGL中的深度缓存 ...

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图形渲染管线

目标 3D图形渲染管线,或者简称渲染管线,网上有非常非常多的资料,凡是与3D图形有关的书籍也会专门介绍。下面是一些参考资料: 《3D数学技术:图形与游戏开发》第15.1节“图形管道概述”。 《Real Time Rendering》第二章 图形渲染管线 浅谈 GPU图形固定渲染管线 3D图形渲染管线 可编程渲染管线比固定管线的优势在哪?有什么应用? “Java软光栅渲染器”开发到现在,我一边翻书恶补图形学知识,一边尝试动手实现书上的各种算法,差不多理解渲染管线各阶段在做什么了。 ...

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

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

Java软光栅渲染器-摄像机控制器

目标 为了进一步确认变换矩阵的作用,我需要一个摄像机控制器,用来操纵摄像机在场景中运动。 记录用户输入 按AD键,摄像机左右运动 按WS键,摄像机前后运动 按QZ键,摄像机上下运动 按左右方向键,摄像机绕Y轴左右旋转 按上下方向键,摄像机绕X轴上下旋转 鼠标拖拽旋转摄像机 主要源代码: Input CameraController 实现 调整摄像机姿态 rotate 在Camera类中,添加使摄像机按欧拉角旋转的方法。这个方法的主要作用是改变相机的观察方向。 /** * 使摄像机按欧拉角旋转( ...