2009-11-12 6 views
0

WPF 응용 프로그램에 몇 가지 3D 메쉬가 있으며 일반적인 애니메이션이 아닌 애니메이션을 추가해야합니다. 그래픽 애니메이션을 만들기위한 일련의 PNG 이미지가 필요합니다.애니메이션에 대한 WPF 및 3D 질문

큐브 측면에 만화 애니메이션을 추가해야하는 것처럼 생각하십시오.

저는 Viewport2DVisual3D에 대해 잘 알고 있습니다. 그러나 정상적인 ModelVisual3D를 Viewport2DVisual3D로 바꿀 때 나는 끔찍한 성능을 얻습니다! 5 FPS 마크 주변.

IsVisualHostMaterial이 true로 설정된 재료를 제거하면 바로 프레임 속도가 정상 상태로 복원됩니다.

성능은 항상 까다로운 문제이지만, 필자가 생각한 것은 WriteableBitmap 또는 RenderTargetBitmap의 이미지 소스로 비주얼 브러시를 만든 다음 해당 PNG를 해당 순서로 그립니다.

괜찮은가요? 그렇지 않으면 성능이 저하되지 않아야합니까?

답변

1

사실, 생각해 보니 사용 해보셨습니까?

<DiffuseMatrial> 
    <DiffuseMaterial.Brush> 
    <VisualBrush ...> 
     <VisualBrush.Visual> 
     ... 

나는 MILCore 별도의 작업으로 백업 비주얼을 렌더링함으로써 비주얼을 처리하는 것을 알고, 그래서 3D로 매우 효율적으로 일했다면 나는 놀라지 않을 것이다.

또한 나에게 발생

당신이 시도 할 수 있습니다 업데이트 :이 완전히 비주얼의 사용을 우회 할 가능성이 훨씬 더 빨리 Viewport2DVisual3D 또는 비주얼보다는 실행됩니다

<DiffuseMaterial> 
    <DiffuseMaterial.Brush> 
    <DrawingBrush ...> 
     <DrawingBrush.Drawing> 
     <ImageDrawing ImageSource="{Binding ...} /> 

.

+0

그래,하지만 문서에 따르면 : http://msdn.microsoft.com/en-us/library/bb613553.aspx 비주얼 브러쉬 3D 토지의 모든 브러쉬 중 가장 성능이 떨어지는 것입니다.하지만 질문하지 않으려 고합니다. 아니오. 시도해 보지 않았습니다. :) – Mark

+0

VisualBrush가 모든 브러시보다 느려야한다는 것이 확실합니다. . 그러나 어떤 Viewport2DVisual3D도 VisualBrush와 동일한 문제를 가지고있는 것으로 보입니다. 그래서 내 직감은 캐시되지 않은 VisualBrush가 캐시되지 않은 Viewport2DVisual2D만큼 빠르고 (또는 빠름) 캐싱 된 버전과 동일해야 함을 알려줍니다. –

+0

사실! 나는 그것에게 총을 줄 것이다, 지금까지 도움을 주셔서 감사합니다, 만약 당신이 더 많은 생각을 가지고 있다면 저에게 알려주세요. – Mark

0

아직 WPF의 3D 최적화를 깊이 파고 들지는 못했지만 Direct3D가 쓰기 가능한 버퍼를 사용하여 렌더링 할 수 있다는 것을 알고 있습니다. 따라서 MILCore가 WritableBitmap 또는 RenderTargetBitmap 아이디어를 올바르게 구현하면 일. Vista의 Flip 3D는 임의의 응용 프로그램 (심지어 GDI 응용 프로그램)을 사용하여 고성능으로이 작업을 수행 할 수 있으며 쓰기 가능한 버퍼를 사용합니다.

그래도 문제가 해결되지 않으면 애니메이션을 비디오로 변환하거나 기존의 방법으로 또는 BitmapFrames 시퀀스에서 DirectShow 스트림을 만들어야합니다.

누군가 다른 사람이 와서 더 나은 답변을 줄 수 있기를 바랍니다.

+0

이상하게도, 내가하고있는 일이 나쁘지 않은 것 같은 기분이 들지 않는다 ... 단지 – Mark

+0

새로운 IsVisualHostMaterial을 사용하면 키보드, 마우스 클릭 등을 사용하여 3D 개체의 2D 비주얼과 실제로 상호 작용할 수있다. 그래서 그냥 콘텐츠를 제시하는 것보다 더 많은 일을하는 것처럼 보입니다. 내 추측은 그게 너무 느려지는 이유 일거야. –

+0

나도 알아, 어쩌면 그걸 막아서 내가 필요로하는대로 새로운 자료를 추가하는 방법 일까? 아마도 – Mark

0

PNG가 비디오 스트림을 나타내는 경우 처음부터 비디오 포맷으로 변환하지 마십시오. 프레임에서 AVI를 만드는 것은 쉽습니다. 그들이 말하는 코스 용 말. PNG 디코더로 인해 속도가 느려질 수 있습니다.

+0

예, 아마도 PNG를 추가하기 전에 성능 저하 문제가 발생했습니다. 아무 것도 추가되지 않아도 viewport2dvisual3d.Visual 속성이 나를 죽입니다 ... 하지만 어쨌든 PNG의 AVI에 대한 링크를 제공 할 수 있습니까? – Mark

+0

상용 프로젝트의 링크에서 코드를 사용했습니다. 문제가있을 경우 알려 주시면 정확한 코드를 얻을 수 있습니다. http://www.adp-gmbh.ch/csharp/avi/write_avi.html – Nestor

관련 문제