2010-01-04 8 views
3

메쉬를 절반으로 자르거나 적어도 실시간으로 그 안에있는면을 삭제하려고합니다. 이 작업을 수행하는 방법은 궁금합니다.메쉬를 반으로 자름 - DirectX

선택한 정면 또는 정점을 0으로 설정하면 정점 버퍼를 잠그고 작동하지 않습니다. 누군가에게이 솔루션이나 자습서가 있습니다. 내 프로그램에서이 기능을 정말로 원합니다!

건배

답변

2

아 - 그 중 하나는 쉽습니다. 메쉬를 수정할 필요가 없습니다. D3D는 이미 이것을 할 수 있습니다!

IDirect3DDevice9::SetClipPlane을 통해 클립 평면을 설정 한 다음 D3DRS_CLIPPLANEENABLE 렌더 스테이트를 통해 해당 평면을 활성화하십시오. 당신이 원하는 경우도 .. 동시에 여러 클립 비행기를 설정할 수 있습니다 여기에

은 MSDN-항목에 대한 링크입니다 : http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/graphics/reference/d3d/interfaces/idirect3ddevice9/setclipplane.htm

그리고 당신은 당신을 "D3D의 SetClipPlane"에 대한 구글 검색을 수행하는 경우 많은 토론과 예제 코드를 사용하는 방법을 찾을 수 있습니다.

0

메쉬에서 삼각형을 동적으로 삭제해야하는 경우 제일/가장 빠른 방법은 색인 된 삼각형을 사용하는 것입니다. 인덱스 버퍼를 만들 때 'D3DUSAGE_DYNAMIC'플래그를 사용하십시오. 삼각형을 삭제하려면 'D3DLOCK_DISCARD'플래그로 잠급니다. 삭제하고자하는 삼각형을 남기지 않고 완전히 새로운 인덱스 목록을 버퍼에 씁니다.

인덱스 버퍼는 정점 버퍼보다 ​​훨씬 작으므로 인덱스 만 다시 업로드하면 정점 버퍼만큼 시스템의 끌림이되지 않습니다. 그러나 인덱싱 된 삼각형 목록으로 변환하는 것이 큰 문제가된다면 대신 정점 버퍼를 사용하여 이러한 stame 연산을 수행하는 것이 가장 좋은 방법 일 것입니다.

0

꼭지점을 0으로 설정하면 효과가 없다고 말합니다. 어떤 방법으로 작동하지 않습니까?

삼각형의 모든 꼭지점의 위치를 ​​(0.0, 0.0, 0.0)으로 설정하면 결과 삼각형의 크기는 0이며 그리지 않아야합니다. 그냥 0이 아닌 화면 밖의 위치로 설정할 수 있는지 확인하십시오.

관련 문제