WPF и 3D вопрос об анимации - PullRequest
       26

WPF и 3D вопрос об анимации

0 голосов
/ 12 ноября 2009

В моем приложении WPF есть несколько трехмерных сеток, и мне нужно добавить к ним некоторые анимации, а не типичные анимации, а скорее последовательность изображений PNG для создания графической анимации. *

Думайте об этом, как будто мне нужно добавить мультипликационную анимацию на сторону куба.

Я очень хорошо знаю о Viewport2DVisual3D, но когда я заменяю свою обычную ModelVisual3D на Viewport2DVisual3D, я получаю ужасную производительность! Вокруг 5 FPS.

Как только я удаляю материал с IsVisualHostMaterial, установленным в значение true, частота кадров восстанавливается до нормального состояния.

Производительность - всегда сложная тема, но я думал о том, чтобы создать Visual Brush с источником изображения WriteableBitmap или RenderTargetBitmap, а затем нарисовать мои PNG в этой последовательности.

Это звучит нормально, или я не получаю плохую производительность, которую я получаю?

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

На самом деле, если подумать, вы пытались использовать это?

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

Я знаю, что MILCore обрабатывает VisualBrush путем рендеринга поддерживающей Visual как отдельной операции, поэтому я не удивлюсь, если она будет работать очень эффективно с 3D.

Обновление

Мне также кажется, что вы можете попробовать:

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

Это полностью исключит использование Visual и, возможно, будет работать намного быстрее, чем Viewport2DVisual3D или VisualBrush.

0 голосов
/ 12 ноября 2009

Если ваши PNG представляют видеопоток, почему бы с самого начала не преобразовать их в формат видео? Создать AVI из фреймов очень просто. Лошади на курсы, как говорится. Это может быть PNG-декодер, замедляющий вас.

0 голосов
/ 12 ноября 2009

У меня еще не было необходимости углубляться в 3D-оптимизации WPF, но я знаю, что Direct3D способен рендерить с использованием буфера для записи, поэтому, если MILCore правильно его реализует, у вашей идеи WritableBitmap или RenderTargetBitmap есть разумный шанс работать , Flip 3D в Vista позволяет выполнять эту работу с высокой производительностью, используя произвольные приложения (даже приложения GDI), а также использует буфер для записи.

Если это не сработает, другая идея для вас - преобразовать анимацию в видео традиционным способом или путем создания потока DirectShow из последовательности BitmapFrames.

Надеюсь, кто-нибудь еще может прийти и дать вам лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...