2017-03-24 14 views
0

세계에서 슬라이스 평면이 주어지면 비행기의 양수면에있는 경우 삼각형을보고 싶고 은 평면과 교차하며 양의 평면에있는 부품도 볼 수 있습니다.메쉬 형상을 분할하지 않고 횡단면을 렌더링하는 방법은 무엇입니까?

평면이 변경 될 때마다 삼각형 메시를 분할하면 삼각형이 많을 때 매우 느려질 수 있으며 텍스처 좌표도 다시 생성됩니다.

카메라 (뷰)와 프로젝션을 신중하게 설정하면 비슷한 결과가 생성 될 수 있지만이 결과는 뷰에 따라 다릅니다.

GPU의 클리핑 결과를 활용하여 뷰를 독립적 인 단면으로 렌더링 할 수있는 렌더링 기술이 있습니까? 이 같은

단면 : img

답변

0

사용하여 쉐이더이 정말 쉽습니다. Opengl/GLSL에서 조각이 평면의 올바른면에 있는지 확인하고 discard()이 아니라면 조각 섀도우에 if 문을 추가하기 만하면됩니다.

컨투어를 얻을 수 있도록 컨디션에 따라 개체를 잘라냅니다. 그러나 두 번째 단계에서 스텐실 버퍼를 사용하여 깊이 버퍼에서 채우기를 처리해야하지만 두 경우 모두 전체 화면을 포함하는 단일 GL_QUAD입니다.

이 작업을 수행하는 수학은 간단하지만 반쪽 공간을 정의해야합니다. 내가 생각할 수있는 가장 간단한 일입니다


p0=(x0,y0,z0) - 3D 포인트가 비행기
n0=(nx,ny,nz) 절단에 속하는 - 그래서 어떤 조각 p=(x,y,z)가 보이는 병동 볼 측면

에 절단 평면을 가리키는 정상을

dot_product(p-p0,n0) >= 0.0 
경우

그래서

if (nx*(x-x0)+ny*(y-y0)+nz*(z-z0)<0.0f) discard(); 

GL_CULL_FACE을 비활성화하고 양면 matherials/lighting을 사용하는 것을 잊지 마십시오. 또한 모든 좌표는 동일한 좌표계에 있어야합니다!

+0

매우 간단하고 우아한 아이디어입니다. 감사 드리겠습니다. 감사합니다. GPU 쉐이더에 대한 기술을 개발해야한다고 생각합니다. –