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

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

Java软光栅渲染器-光照、材质与着色器

目标 为实现顶点光照着色做准备,本章将要定义一些新东西。 定义光源 定义材质 定义着色器接口 实现着色器 实现 我越来越兴奋了。 定义光源 一般来说,3D图形引擎应该支持4种光源,分别是: 环境光 定向光(平行光) 点光源 聚光灯 我打算先创建光源的抽象类,然后再慢慢实现每一种光源。 ...

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

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

Java软光栅渲染器-透明度

目标 OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend) ...