【发布时间】:2022-01-05 22:16:43
【问题描述】:
我开始学习 openGL(使用 3.3 版),目的是进行小型 3d 落沙模拟,类似于:
https://www.youtube.com/watch?v=R3Ji8J2Kprw&t=41s
我在一些 Udemy 的 Unity 教程中对设置像 Minecraft 这样的体素环境有一点经验,但我想从头开始构建一些简单的东西,而不是处理已经使用 Unity 构建的所有系统。
我遇到的第一个问题来得早。我想建立一个渲染四边形的系统,因为实例化大量的立方体效率低得离谱。我还希望高效存储顶点、颜色等。到目前为止,在 opengl 教程中,我使用的方法是将每个顶点存储在具有位置和颜色数据的浮点数组中,并设置使用 glVertexAttribPointer 读取每组六个条目的缓冲区对象,三个浮点数表示位置,三个浮点数表示颜色。问题是对于每个相邻的四边形,相同的顶点会重复,因为如果它们由不同的“块”组成,它们将是不同的颜色,我想避免这种情况。
为了提高效率,我想做的是将立方体的顶点存储在一个 int 数组中(位置都将是 int),然后将地形中的每个四边形添加到索引数组中(这可能会变成稍后进入每个块的网格)。索引数组将存储每个四边形的位置,一个单独的数组将存储每个四边形的颜色。我对如何设置它有点困惑,因为我对opengl相当陌生,但我知道这应该是可行的,基于其他人对我的世界克隆所做的事情,如果不是更容易,因为我不需要纹理。
我真的很想启动并运行块、块、世界等的框架,这样我就可以得到有趣的东西,比如添加新元素。任何能够验证这是执行此操作的明智方法(大声笑)并提供有关如何在渲染中进行设置的指导的人,我将不胜感激。
【问题讨论】:
标签: c++ opengl data-structures opengl-3 voxel