여기에서 기사를 읽었습니다 : http://paulbourke.net/geometry/polygonise/.Marching Cubes 알고리즘의 Isovalue
현재 지형과 같은 미니 크래프트는 심플 렉스 노이즈를 사용하여 생성되었으며 32x32x128 블록을 가진 16x16 청크로 나뉘어져 있습니다. 이제 큐브를 행진 할 때 Polygonise 함수에 생성 된 노이즈를 사용하고 싶습니다. 하지만 내 문제는 어떻게 isovalue을 계산할 수 있습니까? 나는 그것을 얻지 않는다.
누구나 여기 스푼 피드 기사가 더 많이 있습니다. 롤
편집 : 이봐, 난이 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;
}
isovalue를 _ 계산하지 마십시오. 당신은 등가물을 설정합니다. 볼륨은'f (x, y, z) = isovalue'에 의해 암시 적으로 정의됩니다. 여기서'f '는 스칼라 3D 필드 (노이즈)입니다. 블록이 아닌 점에 어떻게 든 값을 정의해야합니다. 덕분에 –
. 그것은 많은 도움이되었습니다. 이제, http://paulbourke.net/geometry/polygonise/marchingsource.cpp의 코드를 이해하려고합니다. 포인트를주는 fSample1을 찾았습니다. 그러나 나는 그것을 완전히 이해하지 못합니다. 그는 어떻게 단지 float 만 반환하여 3 개의 객체를 만들 수 있었습니까? – Dark
'fSample *'함수는 스칼라 3D 필드를 정의합니다. 왜 3 개의 물체가 있을까요? 'sSourcePoints'는 필드를 동적으로 만듭니다 ('vSetTime'을보세요). isovalue는'fTargetValue'라고 불립니다 ('l. 518'을보세요). –