2010-05-11 5 views
2

제 애플리케이션에서 사용자 입력에서 취한 복잡한 3D 솔리드의 모양과 치수 (예 : Cylinder Block)가 있습니다. 나는 꼭지점과 그것을위한 인덱스 버퍼를 만들어야한다.복잡한 3D 메쉬에 대한 삼각형리스트를 동적으로 생성

크기는 사용자 입력에서 가져온 것이므로 Blender 또는 3D Max를 사용하여 수동으로 모델을 만들 수 없습니다. 그런 메쉬를 동적으로 생성하는 교과서 방법은 무엇입니까?

나는 꼭지점, 가장자리 및 구멍이 주어진 삼각형을 생성 할 무언가를 찾고 있습니다. TetGen과 같은 것이지만, TetGen은 솔리드/메쉬의 내부에있는 삼각형을 제외 할 방법이 없습니다.

답변

1

버텍스의 배열을 만들고, 각 버텍스 배열에 3 개의 표시가있는 삼각형 목록을 만들어야하는 것처럼 들립니다. 이 작업을 수행하는 쉬운 방법은 없습니다. 상자를 그리려면 8 개의 veticies와 12 개의 삼각형 (한면에 2 개)이 필요합니다. 일부 표현은 명시적인 가장자리 표현도 사용합니다. 나는 이것이 당신이 원하는 것보다 더 많은 일을한다고 생각합니다 .....

당신에게 필요한 것은 CSG (composite solid geometry)를 할 수있는 메쉬 라이브러리입니다. 이 방법으로 블록의 치수를 지정한 다음 실린더의 치수를 지정하여 CSG 차이를 잘라낼 수 있어야합니다. 모든 정점 및 삼각형 관리가 수행되어야합니다. 결국, 그러한 라이브러리는 메쉬를 몇 가지 일반적인 형식으로 내보낼 수 있어야합니다. 여기서 유일한 문제는 그러한 라이브러리의 이름을 모른다는 것입니다. 블렌더는 스크립트 작성법을 알고 있다면 실제로이 모든 것을 할 수 있다고합니다. 나는 거기에 꽤 좋은 도서관이 1 ~ 2 개 있다고 의심된다. 구글이 실제로이 함께 StackOverflow에 다시 나를 데리고

:

당신은 프로그래밍 방식으로 간단한 메쉬를 생성하고 그들이 메쉬를 만드는 기능을 제공하지 않는 경우 라이브러리를 조작해야 궁극적으로 수

A Good 3D mesh library

(그들은 메쉬 조작이나 CSG 수행에 관한 모든 이야기).

+0

리드를 보내 주셔서 감사합니다. –

0

요구 사항에 따라 조금씩 다릅니다.

당신이 생성 한 후 메쉬에 접근 할 필요가 있지만 그것을 렌더링 할 필요가없는 경우

이 가장 빠른 옵션이 glGenBuffers로 정점 버퍼를 생성 glMapBuffer와 메모리에 매핑, 버퍼에 데이터를 작성하는 것입니다, 그런 다음 glUnmapBuffer으로 매핑 해제하십시오. 모든 데이터를 비디오 카드 메모리에 업로드 할 수 있으므로 그리기가 매우 빠릅니다.

메쉬 데이터를 생성 한 후에 액세스해야하거나 정기적으로 수정하려는 경우 일반 배열로 버텍스 데이터를 작성하고 glVertexPointer 및 친구들과 버텍스 배열을 사용하는 것이 좋습니다.

다음과 같은 조합을 사용할 수도 있습니다. 메인 메모리에 메쉬 데이터를 생성 한 다음 memcpy()을 매핑 된 정점 버퍼에 넣습니다.

마지막으로, "치수"를 사용하여 전체 크기를 조정 한 경우 모든 3D 모델링 프로그램에서 오프라인으로 만들 수 있으며 OpenGL 변환 (예 : glScale)을 사용하여 렌더링 중에 치수를 메쉬에 적용 할 수 있습니다.

+0

토마스, 저는 쉬운 방법으로 치수에서 정점을 실제로 생성하는 방법을 찾고 있습니다. TetGen의 라인을 따라 뭔가. –

+0

"모양과 치수"란 꼭지점 수, 다각형 수, 구멍 수 등을 의미합니다. 전체 지오메트리가 사용자 입력에서 가져옵니다. –