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