【问题标题】:Rendering lighting渲染照明
【发布时间】:2013-02-20 14:50:09
【问题描述】:

我有一个小型块引擎,类似于使用 LWJGL 的早期版本的 Minecraft。我现在想实际实现照明。我了解它如何工作我只是对我应该如何渲染照明感到困惑。我应该改变纹理的“亮度”来模拟明亮的地形吗?我在问如何实际更改四边形的光值,也许那里有一些教程?我希望它是逐块的,没有平滑的照明。我发现方块需要有一个光照值,并且对于它旁边的每个方块,你将那个光照值降低一点,直到它“变黑”。

【问题讨论】:

  • 前置或后置Beta 1.8 照明?
  • 最好是。不管怎样都很好

标签: java opengl lwjgl lighting


【解决方案1】:

(至少)两个选项,假设一个固定功能的渲染器:

  1. 使用单个纹理(您的基本纹理图集,默认为GL_MODULATE texenv。)并设置每个顶点的灰度颜色以使纹理与亮度成比例地变暗。使用GL_MODULATE,纹理 RGB 通道乘以顶点颜色 RGB 通道。所以 RGB(255,255,255) 的顶点颜色会完全亮起,RGB(0,0,0) 会是纯黑色,而 RGB(128,128,128) 会在中间的某个位置。

  2. 使用两个纹理(外观图集和光照图图集)和多纹理。通过提供选择适当光照贴图正方形的纹理坐标,为给定面设置光照级别。如果您为光照贴图设置动画,则可以“免费”获得昼/夜循环,而无需像 #1 中那样迭代整个体积来修复顶点颜色。

【讨论】:

  • 对不起,我忘了说我实际上并没有使用纹理。我只是在使用 VBO,并用另一个 VBO 颜色阵列为面孔着色。有没有办法改变颜色的亮度?
  • 只需将 RGB 颜色三元组乘以一个标量,类似于 #1。例如 RGB(255,0,0) * 0.5 = RGB(128,0,0),亮度大约是一半。
  • 这就是我所要做的?那为什么人们说照明很难呢?我想还有其他更“专业”的方法吗?
  • (非常)基本的光照近似简单。使用固定功能管道进行(快速)动态照明和阴影之类的事情要困难得多。
  • 啊,我明白了。那么着色器不会真的帮助我吗?我是直接修改立方体面的 RGB 值还是必须使用 GL_MODULATE?而且(我保证的最后一个问题!),我是否必须重新上传颜色 VBO 和几何 VBO 的缓冲区数据,还是只上传保存颜色数据的缓冲区数据?
猜你喜欢
  • 2011-02-01
  • 2021-06-15
  • 1970-01-01
  • 2015-04-19
  • 2013-07-05
  • 1970-01-01
  • 2010-11-21
  • 2018-01-27
  • 2016-08-25
相关资源
最近更新 更多