2015-01-11 15 views
1

C++ 마칭 큐브 알고리즘 :나는이 설명에 따라 C의 행진 큐브 알고리즘을 ++ 구현하기 위해 노력하고 설명

http://paulbourke.net/geometry/polygonise/

하지만 난 당신이 "GRIDCELL"값을 계산 할 방법을 이해하지 않습니다. 정확히하려면

double val[8]; 

부분이 무엇인지 명확하지 않습니다. 몇 가지 예를 살펴 보았지만 너무 복잡하기 때문에 이러한 값을 계산하는 방법을 이해하기 어렵습니다.

typedef struct { 
    XYZ p[8]; 
    double val[8]; 
} GRIDCELL; 

제가 알고 있듯이 XYZ p [8]; 큐브의 정점 좌표입니다. 그러나 val [8]; 뭐야? 또한 계산 방법을 설명해 주시겠습니까?

감사합니다.

답변

2

마칭 큐브 알고리즘은 연결된 설명에서 설명한대로 샘플링 된 데이터에서 다각형 표현을 만드는 알고리즘입니다. The

double val[8]; 

은 입방체의 8 개 꼭지점을위한 샘플입니다. 그래서 그들은 계산되지 않습니다. MRI 검사. 따라서 알고리즘은 다른 방법입니다. 측정 된 숫자 집합을 가져 와서 시각화를위한 표면 표현을 구성하십시오.

+0

미안하지만 여전히 이해가되지 않습니다. 하나의 큐브를 가지고 있다면 샘플을 주시겠습니까? – Azarus

+0

파일에서 파일을 읽거나 네트워크 연결이나 다른 소스에서 파일을 읽는 것이 가장 일반적입니다. – rpress

1

작은 연구를했는데 이제 알고리즘을 완전히 이해했습니다.

우선 모든 :

  • 복셀은 3 차원 공간에서의 정규 격자의 값을 나타낸다.

나는 이것을 알지 못했지만 지금은 그렇습니다.

이 값은 등호면을 나타냅니다. 또는 다른 말로 밀도.

double val[8]; 

단순화하려면 : -1.0에서 0.0까지 복셀은 단색 또는 고체 일 수 있습니다.

iso 값의 경우 예를 들어 perlin/simplex 노이즈를 사용할 수 있습니다.

+0

소스로서 perlin/simplex 노이즈의 경우, 행진 큐브 알고리즘과 다른 알고리즘이 있습니다. 노이즈가 2D 인 경우 높이 필드 기술을 사용하거나 펄린 노이즈에 사용 된 3 차 보간법을 사용하여 서페이스를 구성하고 시각화를 위해 삼각형으로 테셀레이션 할 수 있습니다. – rpress

1

Teval은 셀의 각 정점에 대한 "충전량"레벨이며, 원하는 모양의 tipe에 달려 있습니다. f.e .: 공을 만들고 싶으면 공식을 사용하여 값을 샘플링 할 수 있습니다.

for (int l = 0; l < 8; ++l){ 
      float distance = sqrtf(pow(cell.p[l].x - chargepos.x, 2.0) + pow(cell.p[l].y - chargepos.y, 2.0) + pow(cell.p[l].z - chargepos.z, 2.0)); 

    cell.val[l] = chargevalue /pow(distance, 2.0);} 
+0

재미있는 감사! :) – Azarus