OpenGl'i C # ile mi kullanıyorsunuz? [kapalı]


118

C # için ücretsiz OpenGL destek kitaplıkları var mı? Öyleyse hangisini kullanıyorum ve örnek projeleri nerede bulabilirim?

C # OpenGL için sınıflar sağlıyor mu?


Bunun son derece eski bir konu olduğunu biliyorum, ancak Unity ilginizi çekebilir
clabe45

Yanıtlar:


129

OpenTK , aşırı yükleme, kesin olarak yazılmış numaralandırmalar, istisnalar ve standart .NET türleriyle deyimsel C # stilini kullandığından, Tao API'ye göre bir gelişmedir:

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

yalnızca C API'sini yansıtan Tao'nun aksine:

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

Bu, taşımayı zorlaştırır ancak kullanımı inanılmaz derecede güzel.

Bonus olarak yazı tipi oluşturma, doku yükleme, giriş işleme, ses, matematik ...

Güncelleme 18 Ocak 2016 : Bugün OpenTK geliştiricisi projeden uzaklaştı ve geleceğini belirsiz bıraktı. Forumlar spam ile dolu. Bakımcı, MonoGame veya SDL2 # sürümüne geçmenizi önerir.

30 Haziran 2020 Güncellemesi : OpenTK bir süredir yeni bakımcılara sahip ve aktif bir uyumsuzluk topluluğuna sahip. Bu nedenle, başka bir kitaplık kullanmanın önceki önerisi mutlaka doğru değildir.


5
Bu işlevlerin pek temsilci olduğunu sanmıyorum çünkü hepsi kullanımdan kaldırıldı ve OpenGl çekirdek profilinden kaldırıldı.
Arne

6
Doğru, bu işlevler çekirdek profilden kaldırılır. Ancak argümanlar hala geçerli. "OpenTK, aşırı yükleme, güçlü yazılmış numaralandırmalar, istisnalar ve standart .NET türleriyle deyimsel C # stili kullandığı için Tao API'ye göre bir iyileştirmedir"
Syaiful Nizam Yahya

1
Bağlantı verilen web sitesi şu anda bu gönderi için geçersiz.
Sonny Childs

16

Sanırım @korona'nın kastettiği, sadece bir C API olduğu için, bunu C # 'dan, böyle bir çok yazımla doğrudan tüketebilirsiniz:

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

Ne yazık ki bunu aradığınız her bir OpenGL işlevi için yapmanız gerekecek ve temelde Tao'nun sizin için yaptığı şey bu.


Bunu Linux'ta (mono ile) nasıl yaparsınız?
deceleratedcaviar


15

Tao'nun güzel bir çerçeve olması gerekiyor.

Kendi sitelerinden:

.NET için Tao Framework, .NET ve Mono platformlarını kullanarak platformlar arası medya uygulaması geliştirmeyi kolaylaştırmak için bir bağlama koleksiyonudur.


1
Tao için yeni web sitesi: Tao Framework
Thymine


7

Bir sarmalayıcı olmadan OpenGL'yi C # ile yerel olarak kullanabilirsiniz. Jeff Mc'nin dediği gibi, ihtiyacınız olan tüm işlevleri DllImport ile içe aktarmanız gerekir.

Açıkladığı şey, OpenGL işlevlerinden herhangi birini kullanabilmeniz için önce bağlam oluşturmak zorunda kalmasıdır. Zor değil, ancak yapılması gereken sezgisel olmayan birkaç DllImports var.

VS2012'de OpenGL'nin Windows kutusunda çalıştırılması için gereken minimum minimum değere sahip bir C # projesi oluşturdum. Yalnızca pencereyi maviye boyar, ancak başlamanız için yeterli olmalıdır. Örnek, http://www.glinos-labs.org/?q=programming-opengl-csharp adresinde bulunabilir . En alttaki Sarıcı Yok örneğini arayın .


5
bağlantınız kesildi, lütfen projenizi paylaşır mısınız? Teşekkürler.
tehlikelidave

7

Tao Çerçevesini de tavsiye ederim . Ancak ek bir not:

Bu eğiticilere bir göz atın: http://www.taumuon.co.uk/jabuka/


Bir süre önce sayfa aşağı inerken Tao'ya ne olduğu hakkında hiçbir fikrim yok.
Dominic K

Tao için yeni web sitesi: Tao Framework
Thymine

1
Tao, hareketli bir hedef gibi görünüyor. Bağlantıyı güncelledim, çünkü artık mono'dan sourceforge'a taşındı.
Oliver

Vay be, Kasım 2005 ... OpenGL pek değişmiyor mu?
jocull

1
Evet @JonHarrop görünüyor, fakat artık bir github sayfasını kullanarak orada bir yönlendirme set değil gibi opentk.github.io
uyurgezer

4

Bu destek kitaplıklarının ne yapmasını istersiniz? Sadece C # 'dan OpenGL kullanmak yeterince basittir ve herhangi bir ek kitaplık gerektirmez.


Bu sınıflar hangi ad alanında bulunabilir?
MegaByte

4
OpenGL, 4.0 sürümünden itibaren .NET'in bir parçası değildir
mafu

3
@MegaByte Platform çağırma yoluyla erişilmesi gerekir.
Sınırlı Kefaret

2

(Biraz konu dışı olduğunu biliyorum ama daha önce gündeme geldiğinden beri) XNA ve OpenGL seçimi ile ilgili olarak, birçok durumda XNA yerine OpenGL ile gitmek faydalı olabilir (ve OpenGL yerine başka XNA ...).

Uygulamaları Linux veya Mac'te Mono kullanarak çalıştıracaksanız, OpenGL ile gitmek iyi bir seçim olabilir. Ayrıca, çok yaygın olarak bilinmeyen, uygulamalarınızı Citrix ortamında çalıştıracak müşterileriniz varsa, DirectX / Direct3D / XNA, OpenGL kadar ekonomik bir seçim olmayacaktır. Bunun nedeni, OpenGL uygulamalarının donanımda çalışması için özel sanal sunucular gerektiren DirectX / XNA uygulamalarına göre daha az sayıda sunucuda (performans sorunları nedeniyle tek bir sunucu sonsuz sayıda uygulama örneğini barındıramaz) birlikte barındırılabilmesidir. hızlandırılmış mod. Desteklenen grafik kartları vb. Gibi diğer gereksinimler de vardır ancak XNA ve OpenGL sorununu devam ettireceğim. Bir BT Mimarı, Yazılım geliştiricisi vb. Olarak, OpenGL ve DirectX / XNA arasında seçim yapmadan önce bunun dikkate alınması gerekecektir ...

Bir yan not, WebGL'nin OpenGL ES3 afaik'e dayandığıdır ...

Bir başka not olarak, bunlar tek husus değildir, ancak seçimi bazıları için kolaylaştırabilir ...


1

XNA 2.0, minimum bir gölgelendirici 1.1 kartı gerektirir. Eski teknolojiye rağmen, herkesin bir tane yoktur. Bazı yeni dizüstü bilgisayarlar (bizim deneyimlerimize göre Intel grafikli Toshiba tabletler) shader 1.1 desteğine sahip değildir. XNA bu makinelerde çalışmayacaktır.

Bu bizim için önemli bir konu ve biz Tao ve OpenGL'ye geçtik. Ayrıca Tao ile ses ve Lua desteği için bağlantılarımız var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.