Menggunakan OpenGl dengan C #? [Tutup]

118

Apakah ada pustaka dukungan OpenGL gratis untuk C #? Jika ya, mana yang harus saya gunakan dan di mana saya dapat menemukan proyek sampel?

Apakah C # menyediakan kelas untuk OpenGL?

MegaByte
sumber
Saya tahu ini adalah utas yang sangat lama, tetapi Unity mungkin menarik bagi Anda
clabe45

Jawaban:

129

OpenTK adalah peningkatan dari Tao API, karena menggunakan gaya idiomatik C # dengan kelebihan beban, enum yang diketik dengan kuat, pengecualian, dan tipe standar .NET:

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

sebagai lawan dari Tao yang hanya mencerminkan C API:

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

Hal ini membuat port lebih sulit tetapi sangat bagus untuk digunakan.

Sebagai bonus, ia menyediakan rendering font, pemuatan tekstur, penanganan input, audio, matematika ...

Pembaruan 18 Januari 2016 : Hari ini pengelola OpenTK telah menjauh dari proyek , meninggalkan masa depannya yang tidak pasti. Forum dipenuhi dengan spam. Pemelihara merekomendasikan pindah ke MonoGame atau SDL2 #.

Pembaruan 30 Juni 2020 : OpenTK telah memiliki pengelola baru untuk sementara waktu sekarang dan memiliki komunitas perselisihan yang aktif. Jadi rekomendasi sebelumnya untuk menggunakan library lain belum tentu benar.

BillRob
sumber
5
Saya rasa fungsi ini tidak terlalu representatif, karena semuanya sudah usang dan dihapus dari profil inti OpenGl.
Arne
6
Benar, fungsi tersebut dihapus dari profil inti. Tapi dalilnya tetap valid. "OpenTK adalah peningkatan dari API Tao, karena menggunakan gaya C # idiomatik dengan kelebihan beban, enum yang diketik dengan kuat, pengecualian, dan jenis .NET standar"
Syaiful Nizam Yahya
1
Situs web yang ditautkan tidak valid untuk posting ini sekarang.
Sonny Childs
16

Menurut saya yang dimaksud @korona adalah karena ini hanya C API, Anda dapat mengkonsumsinya dari C # secara langsung dengan banyak mengetik seperti ini:

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

Anda sayangnya perlu melakukan ini untuk setiap fungsi OpenGL yang Anda panggil, dan pada dasarnya apa yang telah dilakukan Tao untuk Anda.

Jeff Mc
sumber
Bagaimana Anda melakukannya di Linux (dengan mono)?
deceleratedcaviar
Pada dasarnya persis sama, mono-project.com/Interop_with_Native_Libraries
Jeff Mc
15

Tao seharusnya menjadi kerangka kerja yang bagus.

Dari situs mereka:

Tao Framework for .NET adalah kumpulan binding untuk memfasilitasi pengembangan aplikasi media lintas platform yang memanfaatkan platform .NET dan Mono.

Ólafur Waage
sumber
1
Situs web baru untuk Tao adalah: Tao Framework
Thymine
9

SharpGL adalah proyek yang memungkinkan Anda menggunakan OpenGL di Windows Forms atau aplikasi WPF.

dharmatech.dll
sumber
7

Anda dapat OpenGL tanpa pembungkus dan menggunakannya secara native di C #. Seperti yang dikatakan Jeff Mc, Anda harus mengimpor semua fungsi yang Anda butuhkan dengan DllImport.

Apa yang dia tinggalkan adalah harus membuat konteks sebelum Anda dapat menggunakan salah satu fungsi OpenGL. Ini tidak sulit, tetapi ada beberapa DllImports lain yang tidak terlalu intuitif yang perlu dilakukan.

Saya telah membuat contoh proyek C # di VS2012 dengan hampir minimal yang diperlukan untuk menjalankan OpenGL di kotak Windows. Ini hanya mengecat jendela dengan warna biru, tetapi seharusnya cukup untuk membantu Anda memulai. Contohnya dapat ditemukan di http://www.glinos-labs.org/?q=programming-opengl-csharp . Cari contoh Tanpa Pembungkus di bagian bawah.

Harry Glinos
sumber
5
tautan Anda mati, bisakah Anda membagikan proyek Anda. Terima kasih.
dangerousdave
7

Saya juga akan merekomendasikan Kerangka Tao . Tapi satu catatan tambahan:

Lihatlah tutorial ini: http://www.taumuon.co.uk/jabuka/

Oliver
sumber
Saya tidak tahu apa yang terjadi pada Tao karena halamannya turun beberapa waktu yang lalu.
Dominic K
Situs web baru untuk Tao adalah: Tao Framework
Thymine
1
Tao sepertinya menjadi target yang bergerak. Saya memperbarui tautannya, karena itu juga telah dipindahkan dari mono sekarang ke sourceforge.
Oliver
Wow, November 2005 ... apakah OpenGL tidak banyak berubah?
jocull
1
@JonHarrop ya sepertinya mereka belum mengatur pengalihan ke sana menggunakan halaman github sekarang opentk.github.io
Dreamwalker
4

Apa yang Anda ingin pustaka dukungan ini lakukan? Hanya menggunakan OpenGL dari C # cukup sederhana dan tidak memerlukan pustaka tambahan afaik.

korona
sumber
Di namespace apa kelas-kelas ini dapat ditemukan?
MegaByte
4
OpenGL bukan bagian dari .NET, pada versi 4.0
mafu
3
@MegaByte Mereka harus diakses melalui pemanggilan platform.
Penebusan Terbatas
2

Mengenai pilihan (agak di luar topik yang saya tahu, tetapi karena telah dibahas sebelumnya) pilihan XNA vs OpenGL, mungkin bermanfaat dalam beberapa kasus untuk menggunakan OpenGL daripada XNA (dan di XNA lain daripada OpenGL ...).

Jika Anda akan menjalankan aplikasi di Linux atau Mac menggunakan Mono, ini mungkin pilihan yang baik untuk menggunakan OpenGL. Juga, yang menurut saya tidak begitu banyak diketahui, jika Anda memiliki pelanggan yang akan menjalankan aplikasi Anda di lingkungan Citrix, maka DirectX / Direct3D / XNA tidak akan menjadi pilihan yang ekonomis seperti OpenGL. Alasannya adalah bahwa aplikasi OpenGL dapat dihosting bersama pada jumlah server yang lebih sedikit (karena masalah kinerja, server tunggal tidak dapat menghosting jumlah instans aplikasi yang tidak terbatas) daripada aplikasi DirectX / XNA yang menuntut server virtual khusus untuk dijalankan di perangkat keras. mode akselerasi. Persyaratan lain ada seperti kartu grafis yang didukung dll, tetapi saya akan tetap membahas masalah XNA vs OpenGL. Sebagai Arsitek TI, Pengembang perangkat lunak, dll. Ini harus dipertimbangkan sebelum memilih antara OpenGL dan DirectX / XNA ...

Catatan tambahan adalah bahwa WebGL didasarkan pada OpenGL ES3 afaik ...

Sebagai catatan lebih lanjut, ini bukan satu-satunya pertimbangan, tetapi mereka mungkin membuat pilihan lebih mudah bagi beberapa ...

Aycox
sumber
1

XNA 2.0 membutuhkan minimal kartu shader 1.1. Meskipun teknologi lama, tidak semua orang memilikinya. Beberapa laptop baru (menurut pengalaman kami, tablet Toshiba dengan grafis Intel) tidak memiliki dukungan shader 1.1. XNA tidak akan berjalan di mesin ini.

Ini adalah masalah penting bagi kami dan kami telah beralih ke Tao dan OpenGL. Ditambah dengan Tao kami memiliki binding untuk dukungan audio & Lua.

Chris Masterton
sumber