3D-графика для .NET.
Я хотел бы научиться создавать простые 3D-приложения для Windows 7/desktop. Под этим я подразумеваю сферы, треугольники или пиксели, перемещающиеся в трехмерном пространстве. На данный момент это не должно быть очень сложным.
Для этого я хотел бы использовать язык С# с .NET(Java/С++ - мой второй приоритет).
Я знаю, что это часто спрашивали в Интернете, но я чувствую, что многие из этих вопросов устарели, многие API устарели и слишком устарели.
Я думал об обучении XNA, но потом я узнал, что Microsoft больше не планирует его разрабатывать и поддерживать. SharpDX также показался хорошим способом, но это, по-видимому, предназначено для приложений Windows Store и телефона.
Когда вы смотрели в Интернете, Managed DirectX казался именно тем, что я искал (синтаксис, сложность), но опять же, это способ слишком устаревать для меня.
Не могли бы вы посоветовать мне, чему я должен научиться создавать простые, но прочные 3D-приложения?
Ответы
Ответ 1
Взгляните на SlimDX. Это бесплатная, свободная, управляемая библиотека для DirectX (DirectX 11). Каждый релиз совпадает с выпуском DirectX, поэтому большую часть времени он довольно современен. Я использовал его, и было очень легко начать. Здесь (прокрутка вниз) - это сравнение с другими возможностями, которые вы упомянули.
Ответ 2
Простейшим, вероятно, является использование WPF 3D. Это графическая система с сохраненным режимом, поэтому, если у вас нет огромных потребностей (т.е. Специальных шейдеров для эффектов и т.д.), Ее очень легко настроить и использовать напрямую.
В противном случае более подходящая 3D-система, такая как XNA, может быть более подходящей. Это будет больше работы по настройке, но даст вам больше контроля.
Ответ 3
В мире OpenGL я использовал OpenTK. Мне пришлось строить поверх существующего кода с помощью C#
, чтобы отображать плоские геометрические объекты без затенения и реалистичных эффектов.
Вот пример:
![render]()
Сгенерировано из кода:
void InitModels()
{
Scene.CoordinateSystem cs1 = new Scene.CoordinateSystem(world.Ground)
{
DrawSize = 1,
Visible = false
};
Scene.CoordinateSystem cs2 = new Scene.CoordinateSystem(world.Ground, 0.6 * vec3.J)
{
DrawSize = 0.5,
Orientation = rot3.RotateXDegrees(-15)
};
Scene.Cube cube = new Scene.Cube(cs1)
{
CubeSize = 0.5
};
cs2.AddPoint(new point3(vec3.O,1), Color.Firebrick, 15);
var line = cs2.AddLine(new line3(-vec3.I, vec3.I), 20, Color.SlateGray, 2);
line.SetPattern(0xFF0F, GeometryTest.Scene.Stripple.Scale2);
cube.BindTexture(5, GeometryTest.Properties.Resources.julia, true);
cube.AddText(3, "OpenTK 1.0", Color.DarkMagenta, 0.5f, 0.5f, 1.0f);
}