Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渲染照明_Java_Opengl_Lwjgl_Lighting - Fatal编程技术网

Java 渲染照明

Java 渲染照明,java,opengl,lwjgl,lighting,Java,Opengl,Lwjgl,Lighting,我有一个小型块引擎,类似于使用LWJGL的Minecraft的早期版本。我现在想实际实现照明。我理解它是如何工作的,我只是对我应该如何渲染灯光感到困惑。我是否应该更改纹理的亮度以模拟明亮的地形?我在问如何实际更改四边形的灯光值,也许有一些教程?我希望它是一块一块,没有平滑的照明。我已经计算出块需要有一个灯光值,对于它旁边的每个块,将灯光值减少一点,直到它变黑。至少有两个选项,假设使用固定的函数渲染器: 在基本纹理图集中使用单个纹理,并使用默认的GL_MODULATE texenv。并设置逐顶点灰

我有一个小型块引擎,类似于使用LWJGL的Minecraft的早期版本。我现在想实际实现照明。我理解它是如何工作的,我只是对我应该如何渲染灯光感到困惑。我是否应该更改纹理的亮度以模拟明亮的地形?我在问如何实际更改四边形的灯光值,也许有一些教程?我希望它是一块一块,没有平滑的照明。我已经计算出块需要有一个灯光值,对于它旁边的每个块,将灯光值减少一点,直到它变黑。

至少有两个选项,假设使用固定的函数渲染器:

在基本纹理图集中使用单个纹理,并使用默认的GL_MODULATE texenv。并设置逐顶点灰度颜色,使纹理与灯光级别成比例变暗。使用GL_调制,纹理RGB通道与顶点颜色RGB通道相乘。因此,RGB255255255的顶点颜色将被完全点亮,RGB0,0,0将是纯黑色,RGB128128128将位于中间。 使用两种纹理外观图集和光照贴图图集以及multitexture。通过提供选择适当光照贴图正方形的纹理坐标,为给定面设置灯光级别。如果设置光照贴图的动画,您可以免费获得一个昼夜循环,而无需在整个体积上迭代修复顶点颜色,如图1所示


预照明或后照明?最好是预照明。无论哪种方式都很好抱歉我忘了提到我实际上没有使用纹理。我只是用一个VBO,我用另一个VBO颜色数组给这些面上色。还有什么方法可以改变颜色的亮度吗?只需将RGB颜色三元组乘以一个标量,类似于1。例如RGB255,0,0*0.5=RGB128,0,0,大约是亮度的一半。这就是我所要做的吗?为什么人们说照明是如此的困难?我想还有其他更专业的方法吗?非常基本的灯光近似很容易。使用固定的功能管道进行快速动态照明和阴影等操作要困难得多。啊,我明白了。那么着色器就不会真的帮我了?我是直接修改立方体面的RGB值,还是仍然需要使用GL_调制?最后一个问题我保证!,我是否必须重新上载颜色VBO和几何体VBO的缓冲区数据,还是仅上载保存颜色数据的缓冲区数据?