2014-11-08 4 views
2

OpenGL 블렌딩에 대한 두 가지 질문이 있습니다.OpenGL 투명도에 대한 몇 가지 질문

1) 먼저 불투명 한 객체를 먼저 그린 다음 불투명하지 않은 객체를 앞뒤로 그립니다. 그래서 나는 중심 (0, 0, 0)까지의 거리에 따라 목록에 넣었습니다. 그러나 변환 (회전 및 변환)이 거리를 측정하는 "중심"에 영향을 줍니까?

2) 둘째, 내가 그린 항목이 삼각형 인 경우 어떻게 거리를 측정합니까? 그 인센터에게? 그것의 orthocenter에?

+0

정렬은 항상 관점에 달려 있습니다. 물론 변환이 정렬에 영향을줍니다. 정렬을위한 가장 일반적인 방법은 [BSP-Trees] (http://computer-graphics.se/TSBK07-files/pdf/PDF09/6b.pdf)입니다. – BDL

+0

깊이 버퍼와 블렌딩이 어떻게 작동하는지 읽을 수 있습니다. –

답변

6

확실히 정렬을 고려하여 변환을 고려해야합니다. 모든 변환을 적용한 다음 결과 깊이 (z 좌표)로 정렬하면 가장 직접적인 접근 방식입니다.

동일한 효과를 얻는 가장 효율적인 방법은 각 오브젝트 (또는 동일한 변환을 사용하는 오브젝트 세트)에 대해 한 번씩 뷰 방향에 역변환을 적용한 다음 각 정점/삼각형의 깊이를 계산하는 것입니다 이 역변환 된 뷰 벡터를 갖는 정점의 내적 (dot product)으로 정의된다. 삼각형 당 하나의 점 (dot product) 만 필요합니다. 그리고 삼각형의 수는 종종 물체의 수보다 큰 크기입니다.

사용 시점 : 실제로 모든 경우에 사용할 수있는 솔루션이 없습니다. 삼각형의 중심은 무엇이든 좋아야합니다. 이 전체 접근법은 많은 경우에 충분히 잘 작동하는 근사치이지만 일부 시나리오에서는 완전히 올바르지 않습니다.

주문에 따라 달라지는 근본적인 문제를 설명하기 위해 몇 가지 예를 살펴 보겠습니다. 다음 그림에서 뷰 방향은 왼쪽에서 오른쪽으로, 우리는 두 삼각형 A와 B의 가장자리에 보면 :

   \ 
       \ 
       B 
       \ 
       \ \ 
       \ \ 
view ----->  \ 
        A 
        \ 
        \ 

시각적으로는 B가 뒤에, 먼저 그려 질 필요가 분명하다. 그러나 :

  • B의 가장 가까운 지점 (A)의 가장 가까운 지점보다 뷰 포인트에 더 가까운
  • B의 가장 먼 지점 A. 가장 먼 지점보다 뷰 포인트에 더 가까운
  • B의 중심점이 A의 중심점보다 시점에 더 가깝습니다.

각 삼각형을 하나의 깊이 값을 비교하여 올바르게 정렬 할 수 없습니다. 이를 제대로 처리하려면 형상을 고려해야하며보다 복잡한 기준을 사용하여 형상을 올바르게 정렬해야합니다. 여기

   \ /
       \/
view ----->  \/ 
       /\ 
       B A 
      / \ 

가 유효한 것 A 및 B에 대한 정렬 순서가 없다 : 유효한 주문이없는 경우

그때 경우가있다. B의 파트는 A 뒤에 있고 A의 파트는 B 뒤에 있습니다. 이것은 교차하는 삼각형이있을 때마다 적용됩니다. 이 문제를 올바르게 해결할 수있는 유일한 방법은 삼각형을 분할하는 것입니다.

올바른 순서가없는 경우 교차하는 삼각형이없는 구성도 있습니다.이 상단에서이 시간을 찾고, 4 개 삼각형 예입니다

   ___________ 
    |\  \   | 
__|_\________\   |___ 
|    \  |__/ 
|   ______\  | 
|________/  \  | 
    |  \  \_____|__ 
    |  \_______/  | 
__|  \    | 
/__|  \______________| 
    |   \  \ | 
    |__________\  \| 

이 어려움 방법을 렌더링하기 위해 독립적 인 투명성 단지 정렬의 오버 헤드를 피할 넘어, 너무 매력적인 이유 중요한 이유입니다.

+0

아주 좋은 대답입니다. 단 한 마디입니다 : "간단한 수치 비교를 기반으로 삼각형을 제대로 정렬 할 수 없습니다"는 반쪽입니다. 삼각형 사이의 순서를 찾으려면 일반적으로 한 삼각형의 모든 꼭지점이 다른 삼각형이 잇는 평면의 같은면에 있는지 확인해야합니다. 교차하지 않는 삼각형의 경우 항상 그렇습니다. 비행기의 법선 (그리고 삼각형이 비행기와 비교되는면)은 어떤 삼각형이 앞에 있는지를 알려줍니다. – BDL

+0

크기가 삼각형의 수는 씬의 오브젝트 수보다 어떻게 더 작습니까? 객체가 적어도 하나의 삼각형으로 구성되어 있기 때문에 다른 방법이 될 것입니다. –

+0

@ AndonM.Coleman Argh. 그것은 내가 말하는 것을 말하는 것이 아니라 내 뜻입니다 ... 지적 해 주셔서 감사합니다. –