문제

이것은 내가 찾은 것이었지만 아직 구체적인 정보 나 좋은 예를 찾지 못했습니다. 예를 들어, 연결되지 않은 물체가 많이 있습니다 (예 : 삼각형 스트립). 이것들을 렌더링하는 효율적인 방법은 무엇입니까?

OpenGL 호출을 줄이기 위해 하나의 VBO에 여러 개체를 넣는 것에 대해 들었지만이 작업을 수행하는 방법에 대한 적절한 예는 보지 못했습니다. 나는 또한이 아이디어와 모순되는 게시물을 보았습니다. 그래서 지금, 나는 대부분 혼란 스러워요.

도움이 되었습니까?

해결책

먼저, 항상 VBO를 사용해야합니다. 작고 큰 물체의 경우.

그런 다음 두 번째 문제는 "여러 개별 객체를 하나의 큰 개체에 결합하는 방법"입니다. - 따라서 이루어져야 할 OpenGL 호출 수를 줄입니다. 일반적으로 동일한 텍스처를 사용하는 물체, 재료 설정 및 셰이더를 결합 할 수 있습니다. 예를 들어, 당신이 주위에 많은 양의 상자가 누워 있다면, 그것들을 몇 개의 더 큰 "상자 더미"로 결합시키는 것이 합리적 일 수 있습니다.

객체가 삼각형 목록 인 경우 결합이 쉽습니다. 소스 목록에서 큰 삼각형 목록 만 작성하십시오. 물체가 삼각형 스트립 인 경우 스트립에 결합하기 위해 "탈퇴 삼각형"을 사용해야합니다 (단일 스트립으로 표현할 수없는 경우 단일 객체에도 매우 유용한 최적화입니다).

"퇴화 삼각형"은 2 ~ 3 개의 동일한 정점 지수를 가진 삼각형입니다. 그래픽 하드웨어는이를 인식하고 매우 빠르게 건너 뛸 수 있습니다.

따라서, 당신이 가지고 있다면, 예를 들어 총 6 개의 정점에 대해 각각 하나의 삼각형을 가진 두 개의 스트립.

스트립의 원래 삼각형 지수는 다음과 같습니다.

1) 0, 1, 2
2) 0, 1, 2

이제 모든 정점에 합류하므로 6 개의 정점으로 끝납니다.

1) 0, 1, 2 (unchanged)
2) 3, 4, 5

지금까지는 하나의 정점 배열이 있지만 여전히 두 개의 별도 스트립이 있습니다. 퇴화 삼각형을 삽입하여 참여해야합니다.

1) 0, 1, 2, 2, 2, 3, 4, 5

(위의 것이 정확하다고 생각하지만 실제로 확인되지 않았습니다)

아이디어는 이것입니다. 위의 스트립을 사용하면 그래픽 카드 가이 정점에서 삼각형을 끌어냅니다.

0, 1, 2
1, 2, 2 <- degenerate! won't be drawn
2, 2, 2 <- degenerate! won't be drawn
2, 2, 3 <- degenerate! won't be drawn
3, 4, 5

일반적으로 원래 스트립 길이에 따라 2 ~ 3 개의 퇴화 삼각형을 삽입하여 삼각형 권선이 올바르게 유지되도록해야합니다.

다른 팁

들여다보다 glDrawElements (), 그것은 당신이 원하는 것을 달성하는 좋은 방법입니다. 데이터의 관련 부분을 업데이트해야하므로 데이터가 각 프레임이 변경되면 성능이 떨어질 수 있습니다. 즉, 그래픽 카드의 메모리에 복사 할 수 있습니다. 정적 데이터의 경우 매우 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top