LWJGL 2d Lighting(Java)

时间:2013-08-07 21:22:21

标签: java lwjgl lighting light

我和我的工作人员刚刚将我们的游戏从java2d移植到LWJGL,并希望现在添加照明。 我们想要添加的内容:

  • 发光且可移动的物品/实体。
  • 静态照明

我们已经搜索了很长一段时间,但有点迷失,因为我们不知道从哪里开始。 我们已经看到了alpha映射方法,但无法真正实现它。

如果有人能给我一个答案,我会很高兴。

谢谢!

1 个答案:

答案 0 :(得分:2)

创造灯光可能比人们想象的要容易!以下代码将创建灯光并启用灯光,但可以使用不同的参数,您也可以更改和使用GL_SPECULAR等内容。

FloatBuffer ambient = BufferUtils.createFloatBuffer(4);
ambient.put(new float[] { 0.05f, 0.05f, 0.05f, 1f, });
ambient.flip();    

FloatBuffer position = BufferUtils.createFloatBuffer(4);
position.put(new float[] { 0f, 0f, 0f, 1f, });
position.flip();    

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightModel(GL_LIGHT_MODEL_AMBIENT, ambient);
glLight(GL_LIGHT0, GL_POSITION, position);

请记住,您需要使用和计算法线,因为光线是使用它们计算的。

如果您不使用纹理并希望将光应用于简单的颜色,则可以在初始化OpenGL状态的位置添加以下内容。

glEnable(GL_COLOR_MATERIAL);

此外,如果某些部分您不想受到像UI这样的照明的影响,那么在渲染用户界面之前,您需要调用glDisable(GL_LIGHTING);,然后在用户界面之后再次调用glEnable(GL_LIGHTING);你希望之后启用照明。

记住

如果您没有静态导入课程,那么只是为了通知您glEnable(GL_LIGHTING);GL11.glEnable(GL11.GL_LIGHTING);像我刚刚向您展示的其他内容一样。

另请注意,OpenGL只包含从GL_LIGHT0GL_LIGHT7的0个灯光,但可以通过不同方式轻松创建更多灯光。

重要如果您认为使用OpenGL灯会产生阴影,那么此代码会让您失望,如果我没记错的话,创建阴影是OpenGL灯和一些高级FBO工作的组合。

附加

如果您想要可移动照明,则每次移动灯光时都需要更新glLight(GL_LIGHT0, GL_POSITION, position);

这是一个小型的灯光类型教程,我发现只是通过搜索" opengl lighting",该教程虽然是用C ++编写的,但无论你使用哪种语言,OpenGL函数几乎都是一样的使用,只有一些很容易发现和改变的微小变化。 http://www.swiftless.com/tutorials/opengl/lighting_types.html