【发布时间】:2016-04-30 15:13:30
【问题描述】:
我正在自学 JOGL。我刚刚从GL2切换到GL3。我发现关于GL3的教程很少。另外,我发现GL3与GL2完全不同。据我所知,许多人使用缓冲区来保存所有顶点并将它们绑定到 OpenGL。但是,当他们初始化缓冲区时,他们使用了长度固定的数组。如果顶点的数量从一开始就固定,我将如何处理不同数量的顶点或对象?有没有简单的例子?一般来说,我怎样才能让我的程序更“动态”? (即渲染用户定义的 3D 世界)
【问题讨论】:
-
这取决于您的对象的平均大小和寿命
-
那么,还有更具体的例子吗?比方说,如果我要制作一个迷你 Blender(3D 建模程序),让用户生成和修改少量对象?我应该采取什么方法?或者,如果我必须处理大量对象?(也许是一个迷你的我的世界)我应该采取什么方法?
-
如果我们谈论由用户修改的东西,这在计算机术语中意味着很长的寿命,您应该只销毁旧缓冲区并在顶点数量发生变化时创建新缓冲区。迷你Minecraft世界的方法相同。给你一些数字,我工作的一个 cad 程序,总共有超过 4k 个对象和超过 2700 万个三角形,大约需要 1 秒来传输 gpu(中等性能 pc, gtx 770)
-
你可能想关注this tutorial
-
确实很快。那么,如果生命周期很短(可能是游戏或动画或模拟器?),您是否希望我先创建一个巨大的缓冲区并及时修改缓冲区?另外,你刚才提到销毁和创建,我关心垃圾收集过程?我应该不断调用它以确保垃圾不会堆积吗?(我知道java会不时调用它,但有时我发现它很慢)