共计 15 篇文章

Java软光栅渲染器-渲染个球

目标 创建Sphere网格 使用UnshadedShader渲染出一个地球 实现Blinn-Phong着色器 实现 用立方体实在是很难看出光照的效果,所以我打算用一个球体来进行渲染。 渲染所使用的纹理,是这个全球地图。它在工程下的路径为res/earth.jpg。 Sphere 首先需要一个Sphere网格。 package net.jmecn.scene.shape; import net.jmecn.math.Vector2f; import net. ...

Java软光栅渲染器-顶点光照

目标 使用Gouraud着色算法实现顶点着色 实现 增加Uniform 进行顶点着色之前,需要先给Shader增加两个Uniform变量。其一是法向量变换矩阵,其二是摄像机在世界空间的坐标。 如果你不记得什么是“法向量变换”,可以回顾这篇文章 Java软光栅渲染器-空间变换 中的“法向量变换”部分。 在Renderer中添加一个法向量变换矩阵和一个摄像机位置,并在 render(List geomList, Camera camera) 方法中计算它们的值。 // 法向量变换矩阵 private Matrix3f ...

Java软光栅渲染器-透视校正插值

目标 实现纹理透视校正插值(Perspective-Correct Interpolation) 校正前 校正后 参考资料: 《3D游戏编程大师技巧》12.5 透视修正纹理映射和1/z缓存 3D 图形光栅化的透视校正问题? 【GPU技术】透视校正插值 透视校正插值 透视校正插值 纹理坐标三角形内插值问题,我搞不定了。? 顶点属性插值 重心座标插值(Barycentric Interpolation) 重心坐标 实现 ...

Java软光栅渲染器-纹理

目标 创建纹理 实现纹理采样 实现二次线性滤波 实现纹理地址包裹 实现读取图片数据作为纹理 参考资料: OpenGL ES学习笔记(三)——纹理 LearnOpenGL中文 第7章 纹理 纹理的滤波方式 纹理采样和过滤 Mipmap与纹理过滤 纹理 放大缩小过滤 【图像缩放篇之一】近邻取样插值和其速度优化 【图像缩放篇之二】二次线性插值和三次卷积插值 【图像缩放篇之三】三次线性插值和MipMap链 实现 ...

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

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