¿Utiliza OpenGl con C #? [cerrado]

118

¿Hay bibliotecas gratuitas de soporte de OpenGL para C #? Si es así, ¿cuál uso y dónde encuentro proyectos de muestra?

¿C # proporciona clases para OpenGL?

Megabyte
fuente
Sé que este es un hilo extremadamente antiguo, pero Unity podría ser de su interés
Clabe45

Respuestas:

129

OpenTK es una mejora sobre la API de Tao, ya que utiliza el estilo idiomático de C # con sobrecarga, enumeraciones fuertemente tipadas, excepciones y tipos de .NET estándar:

GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);

a diferencia de Tao, que simplemente refleja la API de C:

Gl.glBegin(Gl.GL_POINTS);   // double "gl" prefix
Gl.glColor3ub(255, 255, 0); // have to pass RGB values as separate args
Gl.glVertex3f(0, 1, 0);     // explicit "f" qualifier

Esto hace que la migración sea más difícil, pero es increíblemente agradable de usar.

Como beneficio adicional, proporciona renderizado de fuentes, carga de texturas, manejo de entradas, audio, matemáticas ...

Actualización 18 de enero de 2016 : Hoy, el mantenedor de OpenTK se ha alejado del proyecto , dejando su futuro incierto. Los foros están llenos de spam. El mantenedor recomienda pasar a MonoGame o SDL2 #.

Actualización 30 de junio de 2020 : OpenTK ha tenido nuevos mantenedores por un tiempo y tiene una comunidad de discordia activa. Entonces, la recomendación anterior de usar otra biblioteca no es necesariamente cierta.

BillRob
fuente
5
No creo que estas funciones sean muy representativas, porque todas están en desuso y se eliminaron del perfil principal de OpenGl.
Arne
6
Es cierto que esas funciones se eliminan del perfil principal. Pero los argumentos siguen siendo válidos. "OpenTK es una mejora con respecto a la API Tao, ya que utiliza el estilo idiomático de C # con sobrecarga, enumeraciones fuertemente tipadas, excepciones y tipos .NET estándar"
Syaiful Nizam Yahya
1
El sitio web vinculado no es válido para esta publicación ahora.
Sonny Childs
16

Creo que lo que @korona quiso decir es que, dado que es solo una API de C, puedes consumirla desde C # directamente con una gran cantidad de escritura como esta:

[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);

Desafortunadamente, necesitaría hacer esto para cada función OpenGL que llame, y es básicamente lo que Tao ha hecho por usted.

Jeff Mc
fuente
¿Cómo harías eso en Linux (con mono)?
caviar desacelerado
Básicamente exactamente lo mismo, mono-project.com/Interop_with_Native_Libraries
Jeff Mc
15

Se supone que Tao es un buen marco.

Desde su sitio:

Tao Framework para .NET es una colección de enlaces para facilitar el desarrollo de aplicaciones de medios multiplataforma utilizando las plataformas .NET y Mono.

Ólafur Waage
fuente
1
El nuevo sitio web de Tao es: Tao Framework
Thymine
9

SharpGL es un proyecto que le permite usar OpenGL en sus aplicaciones Windows Forms o WPF.

dharmatech
fuente
7

Puede OpenGL sin un contenedor y usarlo de forma nativa en C #. Tal como dijo Jeff Mc, tendría que importar todas las funciones que necesita con DllImport.

Lo que dejó fuera es tener que crear contexto antes de poder usar cualquiera de las funciones de OpenGL. No es difícil, pero hay algunas otras importaciones DllImports no tan intuitivas que deben hacerse.

He creado un proyecto C # de ejemplo en VS2012 con casi el mínimo necesario para que OpenGL se ejecute en Windows. Solo pinta la ventana de azul, pero debería ser suficiente para comenzar. El ejemplo se puede encontrar en http://www.glinos-labs.org/?q=programming-opengl-csharp . Busque el ejemplo No Wrapper en la parte inferior.

Harry Glinos
fuente
5
su enlace está muerto, por favor puede compartir su proyecto. Gracias.
dangerousdave el
7

También recomendaría el Tao Framework . Pero una nota adicional:

Eche un vistazo a estos tutoriales: http://www.taumuon.co.uk/jabuka/

Oliver
fuente
No tengo idea de lo que le pasó a Tao ya que la página bajó hace bastante tiempo.
Dominic K
El nuevo sitio web de Tao es: Tao Framework
Thymine
1
Tao parece ser un objetivo en movimiento. Actualicé el enlace, porque ahora también se ha movido de mono a sourceforge.
Oliver
Vaya, noviembre de 2005 ... ¿OpenGL no cambia mucho?
jocull
1
@JonHarrop sí parece que no han establecido una redirección allí usando una página de github
Dreamwalker
4

¿Qué le gustaría que hicieran estas bibliotecas de soporte? Usar OpenGL desde C # es bastante simple y no requiere bibliotecas adicionales afaik.

corona
fuente
¿En qué espacio de nombres se pueden encontrar estas clases?
MegaByte
4
OpenGL no es parte de .NET, a partir de la versión 4.0
mafu
3
@MegaByte Se debe acceder a ellos mediante la invocación de plataforma.
Expiación limitada
2

Con respecto a la opción (algo fuera de tema, lo sé, pero ya que se mencionó anteriormente) XNA vs OpenGL, podría ser beneficioso en varios casos optar por OpenGL en lugar de XNA (y en otros XNA en lugar de OpenGL ...).

Si va a ejecutar las aplicaciones en Linux o Mac usando Mono, podría ser una buena opción ir con OpenGL. Además, lo que creo que no es tan conocido, si tiene clientes que van a ejecutar sus aplicaciones en un entorno Citrix, DirectX / Direct3D / XNA no será una opción tan económica como OpenGL. La razón de esto es que las aplicaciones OpenGL pueden co-hospedarse en una menor cantidad de servidores (debido a problemas de rendimiento, un solo servidor no puede albergar un número infinito de instancias de aplicaciones) que las aplicaciones DirectX / XNA que requieren servidores virtuales dedicados para ejecutarse en hardware. modo acelerado. Existen otros requisitos, como tarjetas gráficas compatibles, etc., pero me mantendré en el problema de XNA vs OpenGL. Como arquitecto de TI, desarrollador de software, etc., esto deberá tenerse en cuenta antes de elegir entre OpenGL y DirectX / XNA ...

Una nota al margen es que WebGL se basa en OpenGL ES3 afaik ...

Como nota adicional, estas no son las únicas consideraciones, pero podrían facilitar la elección para algunos ...

Aycox
fuente
1

XNA 2.0 requiere como mínimo una tarjeta shader 1.1. Si bien es una tecnología antigua, no todos tienen una. Algunas computadoras portátiles más nuevas (en nuestra experiencia, las tabletas Toshiba con gráficos Intel) no tienen soporte para shader 1.1. XNA simplemente no se ejecutará en estas máquinas.

Este es un problema importante para nosotros y hemos cambiado a Tao y OpenGL. Además, con Tao tenemos enlaces para audio y soporte Lua.

Chris Masterton
fuente