【发布时间】:2012-06-24 12:54:22
【问题描述】:
我在这里阅读文章:http://paulbourke.net/geometry/polygonise/。
目前,我有一个类似我的世界的地形,使用单纯形噪声生成,我将其划分为 16x16 块,其中包含 32x32x128 块。现在,我想在行进立方体中使用我为 Polygonise 函数生成的噪声。但我的问题是如何计算等值?没看懂。
这里的任何人都知道更多的勺子文章。哈哈
编辑:
嘿,我在 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;
}
【问题讨论】:
-
你不计算等值;你设置等值。音量由
f(x,y,z) = isovalue隐式定义,其中f是一个标量3D 场(噪声)。您需要以某种方式在点而不是块上定义值。 -
谢谢。这有很大帮助。现在,我正在尝试理解paulbourke.net/geometry/polygonise/marchingsource.cpp 中的一些代码。我找到了我认为给出分数的 fSample1。但我并不完全理解。他是如何在只返回一个浮点数的情况下创建 3 个对象的?
-
fSample*函数定义标量 3D 字段;为什么会有 3 个对象?sSourcePoints只是使字段动态化(参见vSetTime)。等值被称为fTargetValue(见l. 518)。 -
我设法通过返回 fResult = (fY + noise); 来渲染地形。噪声 = scaled_octave_noise_3d( 3, 1, 0.5, 0, fTargetValue, fX, fY, fZ ) 来自单纯形柏林噪声;这是屏幕截图。 dropbox.com/s/j3rlltjjo13vo8h/mcubes.png 。老实说,我没有得到标量 3D 字段。是这个en.wikipedia.org/wiki/Vector_field吗?对不起,我对这个话题很陌生。它与向量微积分有什么关系吗?顺便说一句,你真的很有帮助。非常感谢。
-
一个 field 这里是任何 n-dim 函数,而 scalar 在这里真正意味着 single valued。咳咳,这是一个 QA 网站,没有论坛;那么您的确切问题是什么,还是我在任何地方回答过?