Usando OpenGl com C #? [fechadas]


118

Existem bibliotecas de suporte OpenGL gratuitas para C #? Em caso afirmativo, qual devo usar e onde encontro exemplos de projetos?

C # fornece classes para OpenGL?


Eu sei que este é um tópico extremamente antigo, mas o Unity pode ser do seu interesse
clabe45

Respostas:


129

OpenTK é uma melhoria em relação à API Tao, pois usa o estilo idiomático C # com sobrecarga, enums fortemente tipados, exceções e tipos .NET padrão:

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

ao contrário do Tao, que simplesmente espelha a API 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

Isso torna a portabilidade mais difícil, mas é incrivelmente agradável de usar.

Como bônus, ele fornece renderização de fontes, carregamento de textura, tratamento de entrada, áudio, matemática ...

Atualização de 18 de janeiro de 2016 : Hoje o mantenedor do OpenTK se afastou do projeto , deixando seu futuro incerto. Os fóruns estão cheios de spam. O mantenedor recomenda mover para MonoGame ou SDL2 #.

Atualização 30 de junho de 2020 : OpenTK teve novos mantenedores por um tempo agora e tem uma comunidade de discórdia ativa. Portanto, a recomendação anterior de usar outra biblioteca não é necessariamente verdadeira.


5
Não acho que essas funções sejam muito representativas, porque todas foram descontinuadas e removidas do perfil principal do OpenGl.
Arne

6
É verdade que essas funções são removidas do perfil principal. Mas os argumentos ainda são válidos. "OpenTK é uma melhoria em relação à API Tao, pois usa o estilo C # idiomático com sobrecarga, enums fortemente tipados, exceções e tipos .NET padrão"
Syaiful Nizam Yahya

1
O site vinculado é inválido para esta postagem agora.
Sonny Childs

16

Acho que o que @korona quis dizer é que, visto que é apenas uma API C, você pode consumi-la diretamente do C # com muita digitação como esta:

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

Infelizmente, você precisaria fazer isso para cada função OpenGL que chamar, e é basicamente o que o Tao fez por você.


Como você faria isso no Linux (com mono)?
deceleratedcaviar

Basicamente exatamente o mesmo, mono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

O Tao deve ser um bom framework.

Do site deles:

O Tao Framework para .NET é uma coleção de associações para facilitar o desenvolvimento de aplicativos de mídia de plataforma cruzada utilizando as plataformas .NET e Mono.


1
O novo site do Tao é: Tao Framework
Thymine


7

Você pode OpenGL sem um wrapper e usá-lo nativamente em C #. Assim como Jeff Mc disse, você teria que importar todas as funções de que precisa com o DllImport.

O que ele deixou de fora é ter que criar um contexto antes de usar qualquer uma das funções do OpenGL. Não é difícil, mas existem algumas outras DllImports não tão intuitivas que precisam ser feitas.

Eu criei um exemplo de projeto C # no VS2012 com quase o mínimo necessário para obter o OpenGL em execução no Windows. Ele apenas pinta a janela de azul, mas deve ser o suficiente para você começar. O exemplo pode ser encontrado em http://www.glinos-labs.org/?q=programming-opengl-csharp . Procure o exemplo Sem Wrapper na parte inferior.


5
seu link está morto, por favor, você pode compartilhar seu projeto. Obrigado.
perigosodave

7

Eu também recomendaria o Tao Framework . Mas uma nota adicional:

Dê uma olhada nestes tutoriais: http://www.taumuon.co.uk/jabuka/


Eu não tenho ideia do que aconteceu com Tao quando a página caiu há um bom tempo.
Dominic K de

O novo site do Tao é: Tao Framework
Thymine

1
Tao parece ser um alvo móvel. Eu atualizei o link, porque ele também mudou de mono para o sourceforge.
Oliver

Uau, novembro de 2005 ... o OpenGL não muda muito?
jocull

1
@JonHarrop sim, parece que eles não definiram um redirecionamento lá usando uma página do github agora opentk.github.io
Dreamwalker

4

O que você gostaria que essas bibliotecas de suporte fizessem? Usar apenas OpenGL em C # é bastante simples e não requer nenhuma biblioteca adicional.


Em que namespace essas classes podem ser encontradas?
MegaByte de

4
OpenGL não faz parte do .NET, a partir da versão 4.0
mafu

3
@MegaByte Eles devem ser acessados ​​por meio da chamada da plataforma.
Expiação limitada de

2

Com relação à escolha (um pouco fora do tópico, eu sei, mas já que foi mencionada anteriormente) XNA vs OpenGL, pode ser benéfico em vários casos ir com OpenGL em vez de XNA (e em outro XNA em vez de OpenGL ...).

Se você for executar os aplicativos no Linux ou Mac usando Mono, pode ser uma boa escolha usar o OpenGL. Além disso, o que eu acho que não é tão conhecido, se você tem clientes que irão executar seus aplicativos em um ambiente Citrix, então DirectX / Direct3D / XNA não será uma escolha tão econômica quanto OpenGL. A razão para isso é que os aplicativos OpenGL podem ser co-hospedados em um número menor de servidores (devido a problemas de desempenho, um único servidor não pode hospedar um número infinito de instâncias do aplicativo) do que os aplicativos DirectX / XNA que exigem servidores virtuais dedicados para rodar em hardware modo acelerado. Existem outros requisitos, como placas de vídeo compatíveis, etc., mas irei me limitar ao problema XNA vs OpenGL. Como arquiteto de TI, desenvolvedor de software, etc., isso terá que ser considerado antes de escolher entre OpenGL e DirectX / XNA ...

Uma observação lateral é que o WebGL é baseado no OpenGL ES3 afaik ...

Como uma observação adicional, essas não são as únicas considerações, mas podem tornar a escolha mais fácil para alguns ...


1

O XNA 2.0 requer no mínimo uma placa shader 1.1. Embora seja tecnologia antiga, nem todo mundo tem uma. Alguns laptops mais novos (em nossa experiência, tablets Toshiba com gráficos Intel) não têm suporte para shader 1.1. XNA simplesmente não funciona nessas máquinas.

Este é um problema significativo para nós e mudamos para Tao e OpenGL. Além disso, com o Tao, temos ligações para suporte de áudio e Lua.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.