Подтвердить что ты не робот

Что использовать? Tao, SharpGL, OpenTK, DirectX P/Invoke, XNA, MDX, SlimDX, Windows API Codec Pack

В тот день это было легко; Вы создали свой собственный 3D-материал, затем появился DirectX, а затем появился OpenGL. Для .Net разработчиков MDX было приятно. Затем XNA заняла MDX, но это не то же самое. XNA, похоже, очень ориентирована на игры со всем конвейером контента и предварительной загрузкой фиксированных моделей и т.д.

Итак, где мы сейчас стоим? Через пару дней после повторного поиска/пробной ошибки я чувствую, что везде, где я смотрю, я нахожу половину разработанных библиотек, библиотек с накладными расходами, серьезных ограничений или библиотек, которые слишком сложны.

Я хочу делать "свободные" 3D-материалы. Например, отображая 200k точек на экране в 3D и перемещайте их со скоростью 30 кадров в секунду (изображение глубины Kinect). Я хочу создавать 3D-скринсейверы, плагины для анализа звука и т.д. Все они не являются сборными для конвейера контента и требуют высокой производительности. И (ehm) Я хочу сделать это из .Net.

У кого-нибудь есть опыт работы с библиотеками, которые легки/понятны и по-прежнему дают определенную свободу и скорость?

4b9b3361

Ответ 1

Кажется, я приземлился на OpenTK. Я думаю, что он дает более или менее прямой доступ к API OpenGL и не требует нагрузок зависимостей.

Сравнительно легко понять. Для начала требуется несколько (и понятных) строк кода. Он не поддерживает объекты для меня, поэтому я могу ничего менять для каждого прохода, что отлично, потому что я в основном работаю с небезопасными указателями на память.

Конечно, трудно сочетать скорость и простоту использования. Скорость требует разговора напрямую с 3D API, а простота использования требует абстракции. Поэтому это следует рассматривать как API более низкого уровня, чем некоторые из других, которые я пробовал. Если бы я хотел сделать некоторую анимацию символов prefab, тогда XNA, вероятно, был бы лучшим выбором, но для моего использования (описанного выше) это кажется очень многообещающим до сих пор (4-5 часов взлома).

Пример кода:

private void Render()
{
   // Every frame
   GL.MatrixMode(MatrixMode.Modelview);
   GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
   GL.LoadMatrix(ref cameraMatrix);

   GL.Begin(BeginMode.Points);

   // Here I can add lots of points. I add 200k without any big problem.
   // It seems these points could have been passed in as an array pointer too,
   //  but I'll look at that later.
   GL.Vertex3(x2, y2, z2);

   GL.End();
   glControl.SwapBuffers();
}

Ответ 2

Если вам понравился MDX, SlimDX должен быть прямо вверх по вашей аллее. Это в основном замена MDX, но с множеством сомнительных дизайнерских решений, которые были установлены, и гораздо больше функциональности. Все, что у вас было с MDX, вы найдете в SlimDX в той или иной форме.

Ответ 3

В качестве альтернативы существует еще один пакет оболочки С# для OpenGL: OpenGL DotNet. Отлично работает для меня! Проверьте это на http://www.taylaninan.com/opengl-dotnet.php.

Он переносит OpenGL до версии 4.4 и поддерживает более 550+ OpenGL-расширений. Он также поддерживает GLU, GLUT, FreeGLUT, DevIL (библиотека изображений для разработчиков), ILU и ILUT для DevIL.

Это API низкого уровня для вышеупомянутых библиотек.

Ответ 4

Мы столкнулись с подобной проблемой некоторое время назад, и следующее изложение представляет наше мнение только, конечно. Одна из наших основных проблем заключалась в том, что библиотека должна быть универсальной, создавать 3D-изображения очень хорошего качества, бесплатно и не устанавливать нагрузки дополнительных ограничений для установщика, т.е. С XNA, где у вас должны быть установлены правильные файлы. Это казалось возможным источником головной боли. В итоге мы решили использовать DirectX и написали графический интерфейс в С#. Все необходимое взаимодействие с 3D было выполнено с помощью wndproc. Это обеспечило нас как мощью DirectX, так и простотой разработки графического интерфейса с С#. Мы не пожалели об этом вообще.