설명서에서 다루는 바와 같이 삼각형 팬은 Direct3D 10 이상에서 지원되지 않습니다 .
왜? 삼각형 팬 작업에 고유 한 단점이 있습니까?
설명서에서 다루는 바와 같이 삼각형 팬은 Direct3D 10 이상에서 지원되지 않습니다 .
왜? 삼각형 팬 작업에 고유 한 단점이 있습니까?
답변:
10여 년 동안 하드웨어 공급 업체는 삼각형 스트립, 인덱스 삼각형 목록 및 인덱스 삼각형 스트립을 가장 빠른 기본 유형으로 사용하고 있습니다. 왜? 스트립은 더 나은 캐시 위치를 가지며 (첫 번째로 계속 돌아 가지 않고 제출 된 마지막 2 개의 버트를 재사용 함) 인덱싱을 통해 하드웨어 버텍스 캐시가 실제로 작동 할뿐 아니라 중복 버트를 제거하는 데 더 효과적입니다.
모든 하드웨어 공급 업체가 "이렇게하면 더 빨라질 것"이라고 말하면, 이렇게하면 실제로 더 빨라질 가능성이 매우 높습니다.
D3D10 +는 이것을 공식화합니다. 이것이 빠른 경로라면 사용하려는 경로이며 다른 경로는 존재하지 않습니다. 이것은 D3D10 +의 디자인 철학 중 하나와 관련이 있습니다. D3D10 +는 빠른 길로 가고 당신을 거기에있게합니다.
이것이 실제로 개발에 얼마나 영향을 미치는지 모르겠지만 그러한 변경과 마찬가지로 드라이버 개발자가 더 나은 드라이버를 작성할 수 있다고 들었습니다. GPU 드라이버의 복잡성은 놀랍지 만이 정확한 변경이 많은 도움이 될지 확실하지 않습니다.
두 경우 모두 볼록 다각형 렌더링과 같은 대부분의 요구에 맞는 삼각형 팬을 스트립으로 대체 할 수 있으며, 종종 더 나은 결과를 얻을 수 있습니다.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
편집 : 언급을 잊어 버렸습니다-와인딩 순서를 변경 해야하는 경우 해당 "if"(== ~! =)에서 테스트를 취소하십시오.
(이 특정 질문에는 다음과 같은 의견 답변이 필요합니다.)
주관적으로, 나는 그것의 건축 우주 비행술을 말할 것입니다. 또한 OpenGLES는 레거시 코드를 사용하여 모든 개발자에게 복잡성을 가중시키는 동시에 복잡성을 줄이기 위해 많은 것을 포기했습니다.
물론 하드웨어가 기본적으로 하드웨어를 지원하지 않더라도 삼각형 팬을 스트립이나 삼각형으로 변환하여 시퀀싱하는 사람들과의 호환성을 제공하는 것은 쉽지 않을 것입니다.
WebGL 런타임 등은 검증 된 버퍼 등을 항상 추적해야하며, 드라이버는 팬을 지원하지 않더라도 팬을 보내는 사람들을 쉽게 관리 할 수 있습니다 .