在OpenGL中创建和实现元球皮肤系统

时间:2013-07-12 01:17:11

标签: c++ c opengl sdl voxel

我想创建或找到一个开源元球皮肤系统,它使用元球,体素化来创建网格。我有3年的C \ C ++和OpenGL经验。但我对如何处理这个系统一无所知。我想要的是一种实现方式或构建这样的系统的方法。任何想法/想法?

以下是正在使用此系统的引擎工作人员的班轮笔记链接: http://chrishecker.com/My_liner_notes_for_spore

1 个答案:

答案 0 :(得分:0)

  

我在C \ C ++和 OpenGL 方面有<3年以上经验。但我对如何处理这个系统一无所知。

我觉得很难相信。

你需要什么:

  1. Marching cubes algorithm. Or marching tetrahedra,如果您担心专利问题。
  2. Meta balls formula
  3. 元粒子系统由几个“发射”“能量”的“元球”组成。 由meteball发出的“能量”可以是正面/负面的,通常会与元球保持距离而下降。衰减有点类似于点光源,除了可以使用任何数学体(而不是点)(只要你可以计算它的距离)。

    对于空间中的任何给定点,元球系统的“能量”可以是,例如,系统中所有元体的所有能量的总和(它们与距离一致,记住?)。

    现在,考虑到这个“能量场”,您可以将metabody系统可视化,就像您可以看到iso表面(或任何其他程序表面)一样。

    对于任何空间点,如果“能量”低于某个thresold,则此点位于由meta粒子形成的“网格”之外。 如果“能量”高于该阈值,则点位于由粒子形成的“网格”内。

    两个点为您提供分段,并且知道线段,您可以计算分段穿过网格“表面”的点。

    现在,只需使用“行进立方体”算法遍历某个空间区域,您就会得到一个网格。

    法线是通过对位于网格表面上的点的小偏移(例如x / y / z + - 0.01)处的能量水平进行采样来计算的。

    如果这个解释很难,那么我认为nvidia sdk有行进立方体算法的例子。阅读示例,将相同的想法应用于元粒子。

    以下是您使用此算法可以获得的信息: enter image description here