문제

Direct3D를 사용하여 철강 구조에 사용되는 여러 I 섹션을 표시하고 있습니다. 내 장면 전체에 이러한 I- 섹션의 수백 가지 인스턴스가있을 수 있습니다.

이 두 가지 방법을 수행 할 수 있습니다.

I-Sections

방법 A를 사용하여 표면이 적습니다. 그러나 백 페이스 컬링이 켜지면 표면이 한쪽에서만 보입니다. Backface Culling이 꺼지면 플랜지 (수평 플레이트) 및 웹 (수직 플레이트)이 잘못된 순서로 렌더링 될 수 있습니다.

방법 B는 정확해 보입니다 (그리고 Backface Culling을 켜질 수 있습니다). 그러나 내 모델에서는 i 섹션의 플레이트의 두께가 중요하지 않으며, 각 측면에 별도의 삼각형 스트립을 만들지 않아도됩니다. 판.

더 나은 솔루션이 있습니까? DrawIndexEdprimitives의 특정 호출에 대해서만 Backface Culling을 끄는 방법이 있습니까? 나는 또한 이것에 대한 플랫폼 중립 대답을 원한다면, 나는 이것에 대한 대답을 원한다.

도움이 되었습니까?

해결책

우선, Backface Culling은 객체가 렌더링되는 순서와 관련이 없습니다. 그 외에는 아마도 더 좋아 보일 것입니다. 또한이 대상은 아마도 삼각형으로 가득 찬 손 이상의 것이 아닙니다. 장면에 수백을 갖는 것은 문제가되지 않아야합니다. 그렇다면 하드웨어 인스턴스를 살펴보십시오.

다른 팁

OpenGL에서는 당신이 그리는 각 삼각형에 대해 백 페이스 컬링을 전환 할 수 있습니다.

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Direct3d에서도 비슷한 것이 가능하다고 생각합니다

I- 섹션이 자주 변경되지 않으면 모든 섹션을 하나의 큰 정점/색인 버퍼에로드하고 단일 호출로 그립니다. 그것은 물건을 그리는 가장 성능있는 방법이며, 그래픽 카드는 50 만 개의 삼각형을 밀어 내더라도 빠른 작업을 수행합니다.

예, 모든 섹션의 정점 데이터를 복제해야하지만 D3D9를 사용하는 방법입니다.

나는 당신이 B에서 볼 수있는 거리가 모든 퇴화 삼각형을 끌어내는 처리 능력의 낭비가 될 것이기 때문에 A와 함께 갈 것입니다.

또한 나는 단순히 z- 버퍼에서 그들을 발사하고 그것을 모두 분류 할 수 있도록 할 것입니다.

너무 느리면 최적화를 시작하지만 소비자 그래픽 카드조차도 초당 수백만 개의 다각형을 그릴 수 있습니다.

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