c# 3d

c# - ¿Qué usar? Tao, SharpGL, OpenTK, DirectX P/Invoke, XNA, MDX, SlimDX, Paquete de códecs API de Windows



3d (4)

Alternativamente, hay otro paquete de envoltura de C # para OpenGL: OpenGL DotNet. Funciona muy bien para mí! Compruébelo en http://www.taylaninan.com/opengl-dotnet.php .

Envuelve OpenGL hasta la versión 4.4 y soporta más de 550 o más Extensiones OpenGL. También admite GLU, GLUT, FreeGLUT, DevIL (biblioteca de imágenes para desarrolladores), ILU e ILUT para DevIL.

Es una API de bajo nivel para las bibliotecas anteriores.

De vuelta en el día era fácil; Hiciste tus propias cosas en 3D, luego viniste DirectX, luego vino OpenGL. Para los desarrolladores de .Net, MDX fue agradable. Entonces XNA se hizo cargo de MDX, pero no es lo mismo. XNA parece estar muy centrado en el juego con toda la canalización y precarga de contenido de los modelos fijos y esas cosas.

Entonces, ¿dónde estamos ahora? Después de un par de días de investigación / prueba y error, siento que dondequiera que miro encuentro bibliotecas a medio desarrollar, bibliotecas con sobrecarga, limitaciones graves o bibliotecas que son demasiado complejas.

Quiero hacer cosas de "mano libre" en 3D. Por ejemplo, muestra 200k puntos en una pantalla en 3D y muévelos a 30 fps (imagen de profundidad Kinect). Quiero hacer protectores de pantalla 3D, complementos de análisis de audio, etc. Todo lo cual no es prefabs para un canal de contenido, y que requiere un alto rendimiento. Y (ehm) quiero hacerlo desde .Net.

¿Alguien tiene experiencia con bibliotecas que sean fáciles / comprensibles y que todavía den cierta libertad y velocidad?


Hace un tiempo enfrentamos un problema similar y lo siguiente representa nuestra opinión, por supuesto. Una de nuestras principales preocupaciones fue que la biblioteca debería ser versátil, producir imágenes en 3D de muy buena calidad, gratis, y no poner cargas de restricciones adicionales en el instalador, es decir, con XNA, donde debe tener instalados los archivos correctos. Esto parecía una posible fuente de dolor de cabeza. Al final nos conformamos con DirectX y escribimos la GUI en C #. Toda la interacción necesaria con el 3D se realizó con wndproc. Esto nos proporcionó tanto el poder de DirectX como la facilidad de desarrollo de GUI con C #. No hemos lamentado esto en absoluto.


Parece que he aterrizado en OpenTK . Creo que da más o menos acceso directo a la API de OpenGL y no requiere muchas dependencias.

Es comparativamente fácil de entender. Requiere pocos (y comprensibles) líneas de código para comenzar. No tengo los objetos para mí, así que puedo cambiar cualquier cosa para cada pase, lo cual es genial porque estoy trabajando principalmente con punteros inseguros en la memoria.

Por supuesto, es difícil combinar la velocidad con la facilidad de uso. La velocidad requiere hablar directamente con la API 3D, mientras que la facilidad de uso requiere abstracción. Por lo tanto, esto debe considerarse una API de nivel más bajo que algunas de las otras que he probado. Si quisiera hacer alguna animación de personajes prefabricados, entonces XNA probablemente sería una mejor opción, pero para mi uso (descrito anteriormente) hasta ahora esto parece muy prometedor (4-5 horas de pirateo).

Algún código de muestra:

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(); }


Si te gustó MDX, SlimDX debería estar a tu altura. Es básicamente un reemplazo para MDX, pero con una gran cantidad de decisiones de diseño cuestionables arregladas, y mucha más funcionalidad incluida. Todo lo que tengas con MDX, lo encontrarás presente en SlimDX de una forma u otra.