2009-08-31 3 views
3

일부 확대 된 기능이 포함 된 전체 화면 3-D 응용 프로그램 (Johnny Lee's Wii head tracking app 기반)을 만드는 중입니다. WPF가 너무 느려서 합리적인 프레임 속도로 사용하는 간단한 모델. 문제는 앱의 특성으로 인해 거의 모든 프레임에서 카메라의 화면과 투영을 모두 변경해야한다는 것입니다. 웹캠을 사용하여 얼굴을 추적하고 해당 데이터를 사용하여 카메라를 이동합니다. 그 관점을 바꾼다).머리 추적 응용 프로그램 용 WPF 3-D 성능

나는 문제를 좁히기 위해 많은 시간을 보냈으며, 분명히 그래픽과 관련이 있으며 사용중인 헤드 추적 API의 속도가 아닙니다. 또한, 나는 XNA에서 애플 리케이션을 재현하고 거기에서 잘 작동하는 것 같다 (28 FPS 대 9 WPF). 마지막으로, "벽"을 제거하거나 윈도우를 훨씬 작게 만들면 (예 : 800 x 600) WPF의 성능이 크게 향상되어 병목 현상이 그래픽 계산이라고 생각하게됩니다.

결과적으로 새로운 그래픽 백엔드를 찾아야하거나이 응용 프로그램에서 WPF를 훨씬 빠르게 만들 수있는 방법을 찾아야합니다. 나는 주로 DirectX와 XNA, 그리고 아마도 OpenGL을보고있다. 이러한 API 중 .NET Framework에서이 응용 프로그램에 가장 적합한 것이 좋습니다. 또는 WPF에서 내가 뭘 잘못하고있어 어떤 생각을하고 있니?

답변

2

나는 느린 것을 일으키는 원인이 될 수있는 것을 말하기 위해 WPF에서 3D로 충분하지 못했지만 모델 데이터 구조가 매우 효율적이지 않다는 것을 알았습니다. 이것이 원인이되지는 않았지만 전체 파이프 라인에 일반적으로 느린 증상을 나타낼 수 있습니다.

마음에 봄 한 가지는 WPF가 그래픽 카드에서 하드웨어 가속을 사용하는 대신 소프트웨어로 장면을 렌더링한다는 것입니다. 작은 창을 사용하면 더 나은 성능을 얻을 수 있습니다.

모델에서 텍스처를 제거하면 성능이 향상됩니까?

Direct3D 또는 OpenGL에 상관없이 실제로 모든 현대 카드가 똑같이 잘 지원한다고 생각하지 않습니다. XNA는 Visual Studio에 통합되어있어 .NET을 사용하는 분명한 선택입니다. Express Edition도 있습니다.

+0

본질적으로 "질감"은 없습니다. 모든 모델에서 SolidColorBrush를 사용하고 있습니다. 아마도 WPF가이를 자르지 않을 것이라고 가정 할 때 XNA가 아마도 내가 선택한 첫 번째 선택 일 것입니다.내 자신의 문제는 지금까지 XNA에서 그래픽이 작동하는 방식이 나에게 이상한 것처럼 보였을 것입니다. 그러나 그 점을 극복하기 위해 필요한 학습 곡선 일 수도 있습니다. –

+0

@Jonathan - 텍스처 아이디어는 단지 제안이었습니다. 이전에는 소프트웨어 렌더링을 유발할 수있는 것들 중 하나였습니다. – ChrisF

1

그래서 최적화 된, SlimDX, 모든 프레임에 투사를 변경의 문제는 XNA/WPF와 같은 API 용의가 염두에두고 설계를 werent이다 XNA 또는 WPF

보다 훨씬 얇은 다이렉트 래퍼를 확인할 것 초기화 단계에서 한 번 프로젝션을 설정 한 다음 다시 실행하지 마십시오.

+0

왜? 문제없이 XNA의 각 프레임에 뷰/투영 행렬을 설정할 수 있습니다. 그것들은 하드웨어에서 계산을 수행하는 셰이더에 입력됩니다. 행렬 자체를 계산하고 해당 셰이더를 업데이트하는 것이 병목 현상이 아닙니다. –

0

여기서 하이브리드 선택을 제안합니다. WPF를 사용하여 (Windows UI, composition 등) 무엇에 좋은지, XNA를 사용하여 3D를 렌더링합니다. WinForms와 XNA를 결합하는 방법을 보여주는 samples out there이 있습니다. WPNA에서 XNA를 서페이스로 렌더링하는 것과 동일한 "트릭"을 수행 할 수 있어야합니다.

업데이트 : 아마도 WPNA에서 XNA를 직접 사용하는 데 문제가 있습니다. This thread은 WinForms에서 XNA를 사용한 다음 WPF에서 WinForms 컨트롤을 호스팅하면 이러한 문제를 해결할 수 있음을 나타냅니다. 나는 (아직) 나 자신을 테스트하지 않았다.

+0

현재 WPF에 XNA를 임베드 할 때 몇 가지 문제가 있습니다. 이는 내가 이해하는 것과 충돌하는 장치 속성과 관련이 있습니다. XNA 및 WPF 사람들은이 문제를 알고 있지만 아직 해결되지 않았다고 생각합니다. 같은 문제가 없어야 SlimDX와 같은 것을 사용합니다. –

+0

내 업데이트를 참조하십시오. 이것은 주위에있을 수 있지만 SlimDX로가는 것은 아마도 가장 쉬운 방법 일 것입니다. –

관련 문제