2012-08-30 10 views
1

기본적으로, 나는 레이어 계층(레이어가 하위 레이어를 가질 수 있음)을 지원해야하는 OpenGL로 레이어 시스템을 만들려고합니다. 레이어에 부모가 있으면 그릴 때 부모 레이어로 클리핑되어야합니다. 모든 레이어가 직사각형 인 경우 상당히 직선이므로 교차 부분을 찾아 경계 비트 밖으로자를 수 있습니다. 그러나 각 레이어는 변형 행렬을 가질 수도 있고 다른 레이어의 레이어를 변형하면 더 이상 직사각형이 아니 어서 그냥 교차점을 해결할 수 없습니다.OpenGLes 1.1에서 테두리 모양 설정?

아래 그림은 문제 (아이가 밝은 녹색에있는 동안 부모가 분홍색이다)를 보여줍니다 : 위의 예를 들어

Issue

을하는 glScissor 호출이 설정하기에 충분 것 직사각형 경계 상자가 있지만 부모 레이어도 변형 될 수 있으므로 (더 이상 직사각형이 아니어야 함)이 작업은 수행되지 않습니다. 또한 부모 레이어가 변형되면 자식이 렌더링되기 전에 부모의 변형 행렬에 부모의 곱 행렬이 곱해 지므로 변형 된 경우에도 부모의 내부에있는 것처럼 보이게됩니다.

답변

0

몇 가지 제안 :

  • 이 서브 레이어 자신의 형상 클립 (빨리하지만 당신은 수학을 할 필요).
  • 각 레이어를 텍스처로 렌더링합니다 (유연하지만 느린 레이어가 많은 경우).
  • 스텐실 버퍼를 사용하십시오 (많은 레이어의 채우기 비율이 높습니다).
+0

그래, # 2 사용을 고려했지만 상당히 느립니다. 두 레이어가 4x4 행렬을 사용하여 변형 될 때 클리핑 지오메트리를 처리하는 방법을 알려주는 코드 스 니펫이나 예제가 있습니까? –

+0

FBO + 바인드 된 텍스처를 사용하여 "텍스처로 각 레이어 렌더링"? 내 경험에 의하면 꽤 빠를 것입니다. 어쨌든 rasmus는 스텐실 버퍼를 사용할 수 있다고 말했습니다. 매트릭스를 사용하는 프리미티브로 그릴 수 있습니다. FBO 접근 방식이 더 빠를 것이라고는 말할 수 없지만 .. –

+0

두 레이어의 모서리를 구성하는 점을 변형하십시오. 여러분이 얻는 것은 기본적으로 두 개의 볼록 다각형입니다. 이를위한 알고리즘이 있습니다. 빠른 검색 결과 : [link] (http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA274722). FBO가 빠르다고 생각할 수도 있지만이 방법보다 느립니다. – rasmus

관련 문제