共计 7 篇文章

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软光栅渲染器-光照、材质与着色器

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

聚光灯

今天根据第6章的介绍,实现了聚光灯的着色器。教材上有很多写错的地方,我在实现这个着色器时遇到了不少坑,好在是搞定了。 上图中,变量 uAngle 表示聚光灯的角度;uLeftRight 变量用于调整聚光灯的投射焦点,进一步改变光照的方向;uWidth 用于调整聚光灯边缘的模糊程度。当 uWidth = 0.0 时,聚光灯的边缘会显得非常锐利。 具体实现时,主要遇到的坑是光源的位置。教材上使用的坐标为 vec4(0., 0. ...

着色器和纹理

现在开始学习“第9章 片源着色器中的表面纹理”。 先粗略浏览了一下本章的内容,发现一个关键问题:我还是不太明白到底什么是Texture(纹理)。 我在学习jMonkeyEngine3时,也曾使用AssetManager加载过Texture对象,它们似乎只是普通的Image(图片)。我的疑问是:Texture与Image有什么异同点呢? 在jME3中,Texture对象有一些特别的参数,比如 WrapMode、WrapAxis、MinFilter、MagFilter。通过实际开发,我知道MagFilter.Nearest可以让纹理表现出像素风格,但是为什么会这样呢? 另外,为了让纹理获得各向异性效果, ...