gpt4 book ai didi

android - 如何创建具有所需宽度和长度段数的网格/平面?

转载 作者:行者123 更新时间:2023-11-30 02:40:48 26 4
gpt4 key购买 nike

我有一个包含 40000 个 float 的数组,用于指定 map 上的高度级别。我想在 OpenGL ES 2.0 中创建一个网格/平面,为该网格中的每个顶点分配一个来自该数组的高度值,以便它们创建地形图。

当我需要计算出索引 - 哪个顶点连接到哪个顶点以创建三角形网格时,问题就出现了。

因为我不知道如何分配这些索引,我该怎么做?

到目前为止,我的数据看起来像这样,其中每一行代表

vertices[i*3] + ", " + vertices[i*3+1] + ", " + vertices[i*3+2]

0.0, 0.6091919, 0.0
1.0, 0.60876465, 0.0
2.0, 0.6079712, 0.0
3.0, 0.60684204, 0.0
4.0, 0.60546875, 0.0
5.0, 0.60391235, 0.0
6.0, 0.6022949, 0.0
7.0, 0.600708, 0.0
8.0, 0.5991516, 0.0
9.0, 0.59765625, 0.0
....
0.0, 0.5961914, 1.0
1.0, 0.5947571, 1.0
2.0, 0.5933533, 1.0
3.0, 0.59191895, 1.0
4.0, 0.5904541, 1.0

好的,我已经设法将它加载到 FloatBuffer 中,就像

FloatBuffer vertexBuffer = ByteBuffer.allocateDirect(vertices.length * BYTESPERFLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexBuffer.put(vertices).position(0);

但是我该如何继续(如果我到目前为止的做法是正确的)?

最佳答案

一个简单的推导方法是绘制一个顶点网格,在其上放置一些索引,然后找出使用 OpenGL 基元绘制网格所需的索引序列。

假设我们有一个 n x n 顶点网格,它描述了一个包含 (n - 1) x (n - 1) 个正方形的网格。对于 n = 4 并为每个顶点分配索引的快速草图:

12--13---14---15
| | | |
| | | |
8----9---10---11
| | | |
| | | |
4----5----6----7
| | | |
| | | |
0----1----2----3

这 9 个正方形可以用 3 个三角形 strip 绘制,每行一个三角形带。 3条的索引顺序是:

4, 0, 5, 1, 6, 2, 7, 3
8, 4, 9, 5, 10, 6, 11, 7
12, 8, 13, 9, 14, 10, 15, 11

将其概括为 n 的一般值,这将导致 n - 1 个 strip ,每个 strip 具有 2 * n 个索引。这些索引可以通过几个嵌套循环按顺序生成:

GLushort* idxA = new GLushort[(n - 1) * n * 2];
int i = 0;
for (int j = 0; j < n - 1; ++j) {
for (k = 0; j < n; ++j) {
idxA[i++] = (j + 1) * n + k;
idxA[i++] = j * n + k;
}
}

然后绘制,在所有的缓冲区都被填满,并且所有的顶点状态都设置好之后:

for (int j = 0; j < n - 1; ++j) {
glDrawElements(GL_TRIANGLE_STRIP, 2 * n, GL_UNSIGNED_SHORT, (char*)0 + j * n * 2);
}

这可以在使用原始重启时通过单个绘制调用来完成,但此功能在 ES 2.0 中不可用。如果只有一个绘图调用很重要,也可以通过重复顶点来做类似的事情。

关于android - 如何创建具有所需宽度和长度段数的网格/平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com