algorithm - 行进立方体算法中的等值

标签 algorithm opengl cubes

我在这里阅读这篇文章:http://paulbourke.net/geometry/polygonise/

目前,我有一个类似我的世界的地形,使用单纯形噪声生成,我将其分成 16x16 block ,其中有 32x32x128 block 。现在,我想在行进立方体中使用多边形化函数生成的噪声。但我的问题是如何计算等值?我不明白。

这里的任何人都知道一篇更多的spoonfeed文章。哈哈

编辑:

嘿,我在 http://paulbourke.net/geometry/polygonise/marchingsource.cpp 上找到了这个.

sSourcePoint[] 的值为 0.5,因此它只是将对象居中,但是 fResult += 0.5/(fDx*fDx + fDy*fDy + fDz*fDz) 的作用是什么?天啊,我被这些代码吓坏了。

GLfloat fSample1(GLfloat fX, GLfloat fY, GLfloat fZ)
{
        GLdouble fResult = 0.0;
        GLdouble fDx, fDy, fDz;
        fDx = fX - sSourcePoint[0].fX;
        fDy = fY - sSourcePoint[0].fY;
        fDz = fZ - sSourcePoint[0].fZ;
        fResult += 0.5/(fDx*fDx + fDy*fDy + fDz*fDz);

        fDx = fX - sSourcePoint[1].fX;
        fDy = fY - sSourcePoint[1].fY;
        fDz = fZ - sSourcePoint[1].fZ;
        fResult += 1.0/(fDx*fDx + fDy*fDy + fDz*fDz);

        fDx = fX - sSourcePoint[2].fX;
        fDy = fY - sSourcePoint[2].fY;
        fDz = fZ - sSourcePoint[2].fZ;
        fResult += 1.5/(fDx*fDx + fDy*fDy + fDz*fDz);

        return fResult;
}

最佳答案

嗯,保罗的消息来源确实是“填鸭式”的。 fSample1 之前的评论说:

//fSample1 finds the distance of (fX, fY, fZ) from three moving points

基本上,他正在创建一个所谓的“元球”对象,因此他需要将三个距离函数(距 fSourcePoint[i] 的距离)“混合”为一个。为此,他采取了

Isovalue = 1/f[0] + 1/f[1] + 1/f[2]

哪里

f[i] = 1/DistFromCenterToSourcePoint[i].

效果很简单 - 当远离每三个点时,等值几乎为零。越接近该点 - f[i] 越小,等值越大。

该距离是通常的平方欧氏距离

dist(p1, p2) = sqrt( (p1.x - p2.x)^2 + (p1.y - p2.y)^2 + (p1.z - p2.z)^2)

要实现“类似 Minecraft”的等值面,您需要使用一些其他指标。看看出租车(又名曼哈顿)指标:

dist1(p1, p2) = abs(p1.x - p2.x) + abs(p1.y - p2.y) + abs(p1.z - p2.z)

或最大指标

distMax(p1, p2) = max( abs(p1.x - p2.x), abs(p1.y - p2.y), abs(p1.z - p2.z) )

这些度量中的“球体”(即满足球体方程“dist = R”的集合)是立方体。

反转它们,计算总和(这一切都在 fSample1 函数中完成),通过实验选择一些典型的等值并查看结果。

关于algorithm - 行进立方体算法中的等值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177604/

相关文章:

c++ - 为什么我必须显式调用我的库?

android - 将立方体形状样式添加到 Android 按钮

SQL - 查询多维数据集

algorithm - 生成具有给定体积的所有立方体

algorithm - 按此向量中映射的成员对对象向量进行排序

python - 在 Python 中优化集合理解

c++ - 在具有边界/Opengl、VC++ 的开放模型上对 Vertex Normal 进行 1 环遍历

c# - 深度优先搜索图无法正常工作

algorithm - 在有向图中查找节点数最多的路径

c++ - AABB Collision 使实际 Sprite 的大小加倍