我正在学习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();
}

10-07 12:58
查看更多