2014-06-06 2 views
4

GL_LINE_STRIP을 사용하여 절두체를 그려야합니다. 이 절두체 꼭지점에 대한 좌표는 무엇입니까? 나는 모델 뷰와 프로젝션 매트릭스를 가지고있다. 이러한 매트릭스를 사용하여 셰이더 자체에서 좌표를 계산할 수 있습니까?OpenGL에서 절두체를 그리는 방법

+0

어떤 공간에서 절두체를 그리시겠습니까? 어떤 종류의 개요/레이더인가? – derhass

+0

@derhass 세계 공간. – debonair

답변

4

절두체 코너에 대한 월드 공간 좌표를 원하면 모든 치수에서 -1에서 1로가는 NDC 공간에서 8 개의 모서리 점을 투영하면됩니다 (코너 점은 쉽게 구할 수 있습니다). 열거) 우주 공간으로 돌아 간다. 하지만 w으로 분할해야한다는 것을 잊지 마세요 :

c_world = inverse(projection * view) * vec4(c_ncd, 1); 
c_world = c_world*1.0/c_world.w; 

내가 GLSL 구문이 쓴 있지만,이 경우에만 의사로서 의미한다. 은 셰이더에서 수행 할 수 있지만 이는 셰이더 단계에 따라 여러 번 계산되어야 함을 의미합니다. 일반적으로 CPU에서 역행렬을 미리 계산하는 것이 일반적으로 훨씬 빠릅니다.

+0

대답 해 주실 수 있습니까? – debonair

+2

@debonair : NDC 공간에서 보는 볼륨의 모서리 ('vec4 (clip_space.xyz/clip_space.w, 1.0/clip_space.w)')는 모두 ** - 1 **과 ** 1의 조합입니다 **. 3 차원의 경우 NDC의 모든 모서리를 찾는 데 필요한 ** 2 ** 1 = ** ** ** ** 2 = 3 = 8 조합이 있습니다. 일단 당신이 그것을 가지고 있다면 역 투영 행렬에 클립 공간을 얻기 위해 역행렬을 곱하고 반전 행렬을 월드 공간에 도달하도록 곱하십시오 (그것은 derhass 시연과 같이 단일 단계로 결합 될 수 있습니다). 그런데 'w'에 의한 나누기는 절두체 모양을 만드는 것입니다. –

+0

@debonair : 그 주석에서 오타를 만들었지 만 생각은 같습니다 ... 역 투영 행렬은 (클립 공간에서) 뷰 공간으로 이동합니다. 실제로 좌표 공간을 건너 뛸 것이므로 실제로는 문제가되지 않지만 그 점을 바로 잡을 수도 있습니다 : P –

관련 문제