在 opengl 中将多边形或立方体表示为集合粒子

to represent ploygons or cube as a collection paticles in opengl

我想将立方体或多边形表示为集合粒子,以便划分空间网格。背后的原因是我想计算流体粒子(SPH 技术)与建筑物、地形等固体物体的碰撞。如何将固体对象表示为粒子集合?

如果我做对了,你想实现这样的目标:

所以只需将您的网格划分为四边形或任何其他基元,我会这样做:

  1. 获得积分

    只是多边形内的所有全局网格点。您还可以添加网格轴与周长多段线的交点,以便遍历多边形边界矩形内的所有网格点并使用内部的点 hit test

    另一种选择是制作类似

    的东西

    convex polygon rasterizer

    但是使用网格步骤而不是单个像素进行栅格化并存储点坐标而不是将其输出到 image/screen ...

  2. quad/triangulate ...

    内部很直,但周边可能很乱。如果您忽略周边网格点,那么问题就会大大简化。根据坐标连接点并处理特殊情况或对这些区域使用任何标准三角测量算法。

    网格应该是 point/mask 的 2D 矩阵,这将大大简化编码:

    GLfloat xyz[ys][xs][3];
    bool on[ys][xs];
    


    xyz是坐标
    on 是标记是否使用该点(在多边形内)
    xs,ys 是边界框的网格分辨率...

    这样你就知道哪些点与哪些点相邻,因此绘图很简单(使用四边形条...这种表示也适用于模拟。对于体积,使用立方体网格(如体素)或仅 BR模型像立方体表面网格...

  3. 周长怎么办multi-points

    在周边每个网格位置可以有超过 1 个点,因此将它们合并在一起(或使用最接近网格位置的点)。例如,请参见右侧下半部分的图像。网格点位于创建 2 个交点的多边形之外。如果合并成一个,上面的结构就足够了