我正在学习http://www.glprogramming.com/red/chapter05.html中描述的“ light.c”示例
成功运行用C编写的示例后,我对其进行了修改,以绘制一个框而不是一个球体。之后,我还使用LWJGL将C代码转换为Java。但是,Java版本根本不起作用。
C和Java版本均粘贴在https://gist.github.com/stfairy/d2aa2f48a9a5801ae72e
下面的屏幕截图是预期的结果(由C版本生成,但是Java版本仅提供了一个黑色窗口)
最佳答案
将这个问题发布到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();
}