3D в WinForms? - PullRequest
       57

3D в WinForms?

6 голосов
/ 18 июля 2011

Как я могу использовать 3D вид внутри WinForms?

Должен ли я использовать XNA?

Я нашел этот урок: http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1

Но я не понимаю, как я могудобавить только ContentLibrary и Content в мой проект WinForms.

Или возможно ли использовать Scaleform GFx?для Half2D или 3D?

Ответы [ 4 ]

9 голосов
/ 19 июля 2011

Невозможно сослаться на проект контента XNA напрямую из стандартного проекта Visual C # (как вы могли бы использовать с шаблоном WinForms по умолчанию).

Что вам нужно сделать, это создать проект XNA «Библиотека игр Windows» (даже пустой), а затем использовать опцию «Добавить ссылку на контент» в этом проекте, чтобы добавить ссылку на ваш проект контента XNA. (Шаблон для этого называется «Пустой проект контента».) А затем добавьте ссылку на этот новый проект библиотеки игр в ваш проект WinForms.

Альтернативно ничто не мешает вам создать проект «Игры для Windows», а затем использовать «Добавить форму», которая добавит пустую форму и необходимые ссылки на сборки. Вам нужно поменять шаблон XNA Game1.cs и Program.cs для Program.cs из стандартного проекта WinForms (или посмотреть, что использует образец "WinForms 1").

Для динамической загрузки контента, ознакомьтесь с примером "WinForms 2".

8 голосов
/ 18 июля 2011

Я бы посоветовал использовать элемент управления OpenTK GL - Элемент управления OpenTK WinForms .Это кроссплатформенный, простой в использовании и основанный на OpenGL;который является кроссплатформенным и моно-совместимым.Никаких «взломов» не требуется, чтобы заставить это работать, и это очень простой способ встраивания 3D-контента в контейнер WinForms.OpenTK распространяется по лицензии LGPL, что означает, что вы можете встраивать его в коммерческие приложения.OpenTK / OpenGL в настоящее время работает на Linux, Mac и Windows и является самым простым из известных мне способов внедрения 3D-контента в приложения .NET или Mono.Я попробовал XNA в методе WinForms, и он оказался несколько запутанным, а не кросс-платформенным.Затем они выпустили XNA 4, и мои предыдущие приложения XNA были не совместимы с новой версией.Вы не найдете такой проблемы в OpenGL так часто, как в DirectX.

5 голосов
/ 19 июля 2011

Используйте WPF.Вы можете смешивать и сочетать формы.В WPF есть контейнер winforms, который вы можете поместить в окно и заполнить его.Но вы можете использовать WPF из коробки без особых усилий - tip = сделайте размер окна фиксированным, или изменение размера приведет к потере контроля.Делать это правильно сложно.

Затем поместите панель wpf для изображения, где вы хотите 3d.Вырежьте и вставьте 3d wpf код из интернета.

1 голос
/ 19 июля 2011

Есть несколько библиотек, которые вы можете использовать.IDWMaster упомянул OpenTK, который является одним из вариантов (OpenGL, поэтому ваш пробег может отличаться; я не большой поклонник).

Если вы хотите использовать DirectX, так как вы отметили вопрос, естьеще несколько вариантов.Microsoft раньше предлагала Управляемый DirectX , который устарел в пользу XNA. SlimDX - более современная оболочка для библиотек DirectX, раскрывающая большую часть их функциональности (но имеющая некоторые затраты на производительность). SharpDX также доступен, который, я полагаю, должен быть несколько быстрее, чем SlimDX, но я не использовал.

Вы также можете использовать некоторые API DirectX напрямую,используя COM-взаимодействие.C # и .Net поддерживают довольно неплохое взаимодействие с COM-компонентами, в том числе нативными.Вам придется обработать значительное количество IntPtr с и, возможно, придется выполнить некоторое ручное маршалинг, но IDirect3DDevice не имеет слишком много методов, которые могут вызвать проблемы (IIRC).

...