如何用大小不同的四边形填充程序生成的网格?

问题描述

我正在根据图像上的颜色编码区域生成网格。

在下图中,半透明图像表示颜色编码部分的外观,黑点是自然的2d顶点位置。

Representation

我当前创建网格的方法是遍历嵌套的x,y for循环并制作一个1x1的四边形。

但是,我想以一种可以指定所需四边形尺寸的方式生成网格,也许类似于下图所示。 (数字是生成的顺序)

Proposed generation with desired 3x3 quads

生成不必完全遵循此架构,甚至不必由四边形组成。唯一重要的是,我能够指定生成的三角形的所需大小,以便制作具有不同细节的网格以在LOD系统中使用。

您是否会偶然知道我应该研究哪种数学领域,以便弄清楚如何写出可以执行上述操作的算法或库的逻辑,或者更好的方法呢?

我当然计划对生成的网格进行纹理处理,所以我想另外询问一下,UV是否会与这种生成方式搞混,以及在运行时修复这些UV是否会出现问题和CPU密集的。

解决方法

这似乎并不困难,几乎可以肯定有数学分支可以解决此类问题,但我认为没有必要走这条路线(编辑:请参见下面的附录)

我将其视为递归问题,从2 ^ nx 2 ^ m大小的矩形开始,然后将这些块中的每一个进一步分析为四个大小为2 ^(n-1)x 2 ^(m的块-1)。然后逐步从那里开始,直到达到2x2或1x1的块,或者根据起始大小您认为合适的任何大小。

从本质上说,它将从例如512x256,然后分成两个256x256,然后将它们都分成四个128x128块。如果一个块已完全填充(正),则将该块作为四边形添加到此列表中,否则将未填充的块分成四个较小的64x64块。继续添加四边形或进一步分解,直到达到所需的详细程度所需的最小尺寸为止。

以下是在MS Paint中快速勾画的概念: enter image description here


附录

如果您想要一种算法-不知道为什么我以前没有想到过-有一个称为 Marching Squares 的二维算法,它是的较低维度版本行进立方体,最常与 Voxels 相关的算法。


相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...