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

这是正在使用该系统的发动机上工作的某人的班轮注释的链接:
http://chrishecker.com/My_liner_notes_for_spore

最佳答案

我有3年C \ C ++和OpenGL的经验。但是我对如何解决这个系统一无所知。


我觉得很难相信。

您需要什么:


Marching cubes algorithm. Or marching tetrahedra,如果您担心专利。
Meta balls formula


超粒子系统由几个“元球”组成,它们“散发”“能量”。
流星球发出的“能量”可以是正/负,通常会随着距子球的距离而下降。衰减有点类似于点光源,只是可以使用任何数学体代替点(只要可以计算到它的距离即可)。

对于空间中的任何给定点,例如,元球系统的“能量”可以是系统中所有元物体的所有能量的总和(它们随距离而下降,还记得吗?)。

现在,在给定这个“能量场”的情况下,您就可以像可视化iso表面(或任何其他过程表面)一样可视化超体系统。

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

两点为您提供线段,并知道线段,您可以计算该线段与网格的“表面”相交的点。

现在,使用“行进立方体”算法遍历空间的特定区域,您将获得一个网格。

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

如果这种解释很难,那么我认为nvidia sdk就有行军多维数据集算法的示例。阅读示例,将相同的想法应用于元粒子。

使用此算法可以得到以下结果:

关于c++ - 在OpenGL中创建和实现元球皮肤系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17606097/

10-17 01:36