我有一个问题,过去几天我一直在疯狂,我不知道我在这里做错了什么。我写了一些代码,它应该为由三角形组成的平面生成索引。平面分为四边形,四边形又由两个三角形组成 - 每个四边形有6个指数。
function TaeTerrainTile.GenerateLODIndexBuffer(gbo: TaeGraphicsBufferObject; tile_size, tile_res: integer): integer;
var
neededIndices: word;
i_row, i_col: integer;
i_top_left, i_bottom_right: word;
begin
// calculate needed indices
neededIndices := (tile_size div tile_res) * (tile_size div tile_res) * 2 * 3;
gbo.PreallocateIndices(neededIndices);
i_col := 0;
i_row := 0;
while i_col < (tile_size div tile_res) -1 do
begin
while i_row < (tile_size div tile_res) -1 do
begin
// top left vertex
i_top_left := (i_col * tile_size * tile_res) + (i_row * tile_res);
gbo.addIndex(i_top_left);
// bottom right vertex
i_bottom_right := i_top_left + tile_size * tile_res + tile_res;
gbo.addIndex(i_bottom_right);
// top right vertex
gbo.addIndex(i_top_left + tile_res);
// bottom triangle
// top left vertex
gbo.addIndex(i_top_left);
// bottom left vertex
gbo.addIndex(i_top_left + tile_size * tile_res);
// bottom right vertex
gbo.addIndex(i_bottom_right);
inc(i_row);
end;
i_row := 0;
inc(i_col);
end;
end;
现在,您可能会看到每个四边形中缺少行和列 - 为此,我想在上面的代码中删除两个while循环中的两个“减1”。
我在嘲笑为什么会这样,但却找不到原因。有人看到我的问题吗?
编辑:我知道必须有一些索引超出范围,但我看不出上面的公式有什么问题。
Edit2:顶点的数据布局是基于网格的,这里是处理它的代码:
for y := 0 to AE_TERRAIN_TILE_SIZE - 1 do
begin
v[2] := ty + y;
for x := 0 to AE_TERRAIN_TILE_SIZE - 1 do
begin
v[0] := tx + x;
v[1] := Self._GetHeightCall(v[0], v[2]);
gbo_high.addVertex(v);
end;
end;