使用 JOGL 的 glDrawElementsInstanced() 的索引参数中的内容

Posted

技术标签:

【中文标题】使用 JOGL 的 glDrawElementsInstanced() 的索引参数中的内容【英文标题】:What goes in the indices parameter of glDrawElementsInstanced() using JOGL 【发布时间】:2013-01-19 02:38:34 【问题描述】:

在 JOGL 中调用 glDrawElementsInstanced() 时,我无法理解将什么用作“索引”参数。

通过查看一些 C++ 教程,似乎只要您想从索引缓冲区的开头开始渲染顶点,就可以只为索引传递 0。 JOGL 要求 indices 参数是一个 Buffer 对象。我尝试在其中创建一个包含一个元素 0 的 IntBuffer,但这不起作用。

当我用它来绘制我的顶点时,我看到了在屏幕上绘制的东西:

gl.glDrawElements(GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, 0)

但是当我改用这个时,屏幕是黑色的:

gl.glDrawElementsInstanced(
    GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, IntBuffer.wrap(Array(0)), 1
)

当我使用这个时,我得到一个类型不匹配的错误:

gl.glDrawElementsInstanced(
    GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, 0, 1
)

我正在使用 OpenGL 4 和 Scala。我还将我的程序设置为使用 DebugGL4,并且没有收到任何错误消息。

【问题讨论】:

【参考方案1】:

在 LWJGL 中,它的工作方式几乎相同,当我需要在索引槽中传递零时,我是这样做的: (IntBuffer) 空。只需将 null 转换为缓冲区类型。

【讨论】:

谢谢!它也可以在不强制转换的情况下传入 null。

以上是关于使用 JOGL 的 glDrawElementsInstanced() 的索引参数中的内容的主要内容,如果未能解决你的问题,请参考以下文章

您可以使用 JOGL 创建 3D 组件吗?

glGetUniformLocation() 不在 JOGL 中?

JOGL 阴影映射

使用 JOGL 的 glDrawElementsInstanced() 的索引参数中的内容

使用 OpenGL (JOGL) 的良好 3D 爆炸和粒子效果?

JOGL:在指定位置绘制球体会导致问题