OpenGL灯示例在LWJGL中使用等效代码无效

时间:2013-10-09 06:40:11

标签: java c opengl lwjgl

我正在学习http://www.glprogramming.com/red/chapter05.html

中描述的“light.c”示例

成功运行用C编写的示例后,我将其修改为绘制一个框而不是一个球体。之后,我还使用LWJGL将C代码翻译成Java。但是,Java版本根本不起作用。

C和Java版本都粘贴在https://gist.github.com/stfairy/d2aa2f48a9a5801ae72e

下面的屏幕截图是预期的结果(由C版本生成,但Java版本仅提供黑色窗口)

expected result

1 个答案:

答案 0 :(得分:1)

在将此问题发布到LWJGL论坛后,我收到了回复,现在我已经解决了。

我发现这是因为我不明白nio.Buffer是如何运作的。在将values写入buffer后,我们还需要通过调用rewind()来重置光标位置,否则它会使用零来显示材质和光线位置。最终代码如下所列。

private FloatBuffer floatBuffer(float... values) {
    FloatBuffer buffer = BufferUtils.createFloatBuffer(Math.max(4, values.length));
    buffer.put(values);
    return (FloatBuffer) buffer.rewind();
}