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

标签 c++ opengl physics physics-engine

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

最佳答案

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

polygon grid

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

  1. 获取积分

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

    另一种选择是做类似的东西

    convex polygon rasterizer

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

  2. 四边形/三角...

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

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

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


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

    通过这种方式,您可以知道哪些点与哪些点相邻,因此绘制很简单(使用四边形条...这种表示法也适用于模拟。对于体积,使用立方体网格(如体素)或只是BR模型像立方体表面网格...

  3. 周边多点怎么办

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

关于c++ - 在 opengl 中将多边形或立方体表示为集合粒子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022951/

相关文章:

c++ - 如何使用 OpenGL 在平面上投影点云?

c++ - OpenGL - 加载具有多个纹理的对象

algorithm - 多个物体之间的碰撞

java - 递归处女通过碰撞检测获得堆栈溢出错误

objective-c - applyForce(0, 400) - SpriteKit 不一致

c++ - 导致无限循环的括号

c++ - 程序运行一直失败

c++ - 函数 C++ 中的新运算符

c++ - 无法在 OpenCV 中写入输出视频,程序只写入单帧

java - 使用 JOGL 截图