2010-11-20 2 views
7

OpenGL의 기하 구조 셰이더를 사용한 레이어 렌더링은 일부 드라이버/하드웨어에서 조금 헷갈리는 것처럼 보입니다. 따라서이 기능을 내 솔루션으로 대체하고 싶습니다. 해상도가 300 ² 인 렌더링 텍스처로 큰 텍스처를 사용합니다. 그런 다음 질감에 1002 청크를 렌더링하여 계층 렌더링을 시뮬레이트합니다. 아래 모형에 도시 된 바와 같이, 그 해상도는 9 개 타일/층 초래 :텍스처의 일부분으로 렌더링하기

Tiles

문제이고; OpenGL을 사용하는 방법? 한 장면에서 다른 타일로 장면을 렌더링하는 기하 구조 셰이더의 도움을 받았다고 가정합니다.?

답변

2

간단한 방법은 없습니다. 기하학 쉐이더를 함께 사용하여 해킹 할 수는 있지만 대부분의 기하 구조 인스턴스화를 수행 한 다음 버텍스 쉐이딩을 위해 기하학 쉐이더를 사용해야하므로 버텍스 쉐이더가 작동하지 않기 때문에 가장 느릴 것입니다.

문제에

기본 접근 방식 :

  • 휴가 정점 셰이더 빈 그냥 지오메트리 셰이더에서
  • 변경 정점 모든 삼각형의 8 새로운 인스턴스 (함께 당신이 9 개 삼각형이있을 것이다)의 각각에
  • 을 만들 수를 반환 삼각형은 삼각형을 투영하는 함수를 실행합니다. 스크린 샷에 따르면, 기하학 쉐이더로 보내지는 9 개의 다른 뷰 행렬이 필요합니다.
  • 이제 각 삼각형이 이미지의 다른 부분을 렌더링하도록 정렬하십시오. 투영 후 좌표는 [-1; 1]이므로 각 삼각형의 좌표를 3으로 나누고 해당 삼각형을 1/3 배로 이동해야합니다.
  • 픽셀 당 퐁 쉐이딩을 계산한다면, 프래그먼트 쉐이더는 분할되는 화면에 대한 단서가 없으므로 카메라 위치가 9 가지이므로, 각 버텍스가있는 프래그먼트 쉐이더에 카메라 위치를 보내야합니다.
  • +0

    좋은 답변에 감사드립니다. 아마 나는 GPU 제작자가 그들의 드라이버를 함께 얻을 때까지 기다려야 할 것이다 (ATI). 그래서 그들은 대신'texture2Darray'에 렌더링 레이어를 지원합니다. –

    +0

    네, 맞습니다. 질문은, ATI가 드라이버를 올바르게 작동 시키면 ... –

    관련 문제