2009-04-23 4 views
6

: Marching Cube Question
마칭 큐브 알고리즘 구현? 내 마지막 질문에서

그러나, 나는 같이 여전히 불분명입니다 :

  1. 방법 정점이있는 isosurface 아래에 있는지 확인하기 위해 가상의 큐브/복셀을 만들?
  2. isosurface 아래의 정점을 어떻게 알 수 있습니까?
  3. 각 입방체/보셀은 사용할 큐브 인덱스/표면을 어떻게 결정합니까?
  4. 어떻게 triTable에서 데이터를 사용하여 표면을 그립니까?

사과의 점군 데이터를 가지고 있다고 가정 해 봅니다.
어떻게 진행하나요?

마칭 큐브에 익숙한 사람이면 누구나 나를 도와 줄 수 있습니까?
C++ 및 OpenGL 만 알면됩니다. (내 손에서 약간 벗어났습니다.)

답변

1

1) yoru 구현에 따라 다릅니다. 보셀 또는 큐브의 각 모서리 (꼭지점)에서 값을 조회 할 수있는 데이터 구조가 필요합니다. 3D 이미지 (예 : OpenGL의 3D 텍스처)이거나 사용자 정의 배열 데이터 구조 또는 원하는 다른 형식 일 수 있습니다.

2) 입방체의 꼭지점을 확인해야합니다. 이것에 대해서는 다른 최적화가 있지만 일반적으로 첫 번째 모서리부터 시작하여 큐브의 모든 8 개 모서리의 값을 확인하십시오.

3) 대부분의 (빠른) 알고리즘은 옵션의 정적 배열에 대한 조회 테이블로 사용할 비트 마스크를 만듭니다. 이에 대한 가능한 옵션은 다양합니다.

4) triTable에서 삼각형을 만들었 으면 OpenGL을 사용하여 렌더링 할 수 있습니다.

사과의 점군 데이터를 가지고 있다고 가정 해 봅니다. 어떻게해야합니까?

이것은 행진하는 큐브와 함께 작동하지 않습니다. 행진 형 큐브는 보셀 (voxel) 데이터가 필요하기 때문에 데이터의 점 구름을 입방체 볼륨에 넣으려면 알고리즘을 사용해야합니다. 가우시안 스플 렛팅이 옵션입니다.

일반적으로 점군에서 작업하면서 표면을보고 싶다면 큐브를 행진하는 대신 표면 재구성 알고리즘을 살펴보아야합니다.

자세히 알아 보려면 시각화 기술에 대한 책을 읽어 보는 것이 좋습니다. 좋은 것은 Kitware 사람들 - The Visualization Toolkit에서 온 것입니다.

VTK을 살펴볼 수 있습니다. 그것은 Marching Cubes의 C++ 구현을 가지고 있으며 완전히 오픈 소스입니다.

+0

에서 문서 복셀 수에 해당하는 6 glQuads? 그렇다면 복셀은 어떻게 만들어 지나요? 내 요점은 큐브의 중심이 되는가? – noob88

+0

@ noob88 : 아니요. 당신의 "큐브"는 8 pionts로 구성된 어떤 물체 일 필요가 있습니다. 6 개의 glQuads는 큐브/보셀의면이 될 수 있으며 사용중인 정점은 8 포인트가 될 수 있습니다. 나는 이것을 잡기 위해 다른 데이터 구조를 만들 것이다. 다차원 배열처럼 단순한 것이 작동합니다. –

+0

나는 .. 내가 그것을 시험해 볼 시간이 필요하다고 생각한다. 나는 당신의 접촉을 할 수 있을까? 나는 내가 당신의 도움을 얻을 수 있기를 희망한다. .. – noob88

2

우선 isosurface는 두 가지 방법으로 나타낼 수 있습니다. 한 가지 방법은 외부 소스로부터 데이터 집합으로 등가 및 점 별 스칼라를 갖는 것입니다. 그것이 MRI 검사가 작동하는 방식입니다. 두 번째 접근법은 포인트/버텍스를 매개 변수로 사용하여 새 스칼라를 반환하는 암시 적 함수 F()를 만드는 것입니다.이 함수를 고려해보십시오 :

float computeScalar(const Vector3<float>& v) 
{ 
    return std::sqrt(v.x*v.x + v.y*v.y + v.z*v.z); 
} 

스칼라 필드의 모든 점에 대해 점과 원점 간의 거리를 계산합니다. 등변 각이 반경 인 경우, 구를 나타낼 수있는 방법을 찾았습니다. | v | < = R은 구 안쪽의 모든 점에 대해 true이거나 내부에 있습니다. 어떤 꼭지점이 구형 내부에 있고 어떤 꼭지점이 바깥에 있는지 파악하십시오. 볼륨이 공간을 두 개로 나누기 때문에 less 또는 greater-than 연산자를 사용하려고합니다. 큐브의 어떤 점이 안쪽과 바깥 쪽인지로 분류되면 등각 곡면이 교차하는 모서리도 알 수 있습니다. 삼각형이없는 것부터 다섯 개의 삼각형까지 모든 것을 끝낼 수 있습니다. 메쉬 정점의 위치는 실제 교차점을 찾기 위해 교차 된 모서리를 보간하여 계산할 수 있습니다. 당신이 말하는 스칼라 필드 사과를 표현하려면


, 당신은 응용 프로그램에 연결하거나 꽤 복잡한 암시 적 기능을 사용하도록 설정 원본 데이터를 얻을 필요가 중. 구체와 토리와 같은 간단한 기하학적 원형을 먼저 작동시킨 다음 거기에서 확장하는 것이 좋습니다.

요청으로