ใช้ OpenGl กับ C #? [ปิด]


118

มีไลบรารีสนับสนุน OpenGL ฟรีสำหรับ C # หรือไม่ ถ้าเป็นเช่นนั้นฉันจะใช้อันไหนและฉันจะหาโครงการตัวอย่างได้ที่ไหน

C # มีคลาสสำหรับ OpenGL หรือไม่


ฉันรู้ว่านี่เป็นกระทู้เก่ามาก แต่Unityอาจสนใจคุณ
clabe45

คำตอบ:


129

OpenTKเป็นการปรับปรุงเหนือ Tao API เนื่องจากใช้รูปแบบ C # ที่เป็นสำนวนที่มีการโอเวอร์โหลด enums ที่พิมพ์มากข้อยกเว้นและประเภท. NET มาตรฐาน:

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

ตรงข้ามกับเต่าซึ่งสะท้อนเฉพาะ 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

ทำให้การย้ายพอร์ตยากขึ้น แต่ใช้งานได้ดีอย่างไม่น่าเชื่อ

เป็นโบนัสให้การแสดงผลแบบอักษรการโหลดพื้นผิวการจัดการอินพุตเสียงคณิตศาสตร์ ...

อัปเดตเมื่อ 18 มกราคม 2559 : วันนี้ผู้ดูแลระบบ OpenTK ได้ก้าวออกไปจากโครงการทำให้อนาคตไม่แน่นอน ฟอรัมเต็มไปด้วยสแปม ผู้ดูแลแนะนำให้ย้ายไปที่ MonoGame หรือ SDL2 #

อัปเดต 30 มิถุนายน 2020 : OpenTK มีผู้ดูแลใหม่มาระยะหนึ่งแล้วและมีชุมชนที่ไม่ลงรอยกัน ดังนั้นคำแนะนำก่อนหน้านี้ในการใช้ไลบรารีอื่นจึงไม่จำเป็นต้องเป็นจริง


5
ฉันไม่คิดว่าฟังก์ชั่นเหล่านี้เป็นตัวแทนมากนักเพราะมันถูกเลิกใช้และลบออกจากโปรไฟล์หลักของ OpenGl ทั้งหมด
Arne

6
จริงฟังก์ชันเหล่านั้นจะถูกลบออกจากโปรไฟล์หลัก แต่ข้อโต้แย้งยังคงใช้ได้ "OpenTK เป็นการปรับปรุงเหนือ Tao API เนื่องจากใช้รูปแบบ C # ที่เป็นสำนวนที่มีการโอเวอร์โหลด enums ที่พิมพ์มากเกินไปข้อยกเว้นและประเภท. NET มาตรฐาน"
Syaiful Nizam Yahya

1
เว็บไซต์ที่เชื่อมโยงไม่ถูกต้องสำหรับโพสต์นี้ในขณะนี้
Sonny Childs

16

ฉันคิดว่า @korona หมายถึงอะไรเนื่องจากเป็นเพียง C API คุณสามารถใช้งานได้จาก C # โดยตรงด้วยการพิมพ์จำนวนมากเช่นนี้:

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

คุณต้องทำสิ่งนี้กับทุกฟังก์ชั่น OpenGL ที่คุณเรียกใช้และโดยพื้นฐานแล้ว Tao ได้ทำเพื่อคุณ


คุณจะทำอย่างไรกับสิ่งนั้นบน Linux (พร้อมโมโน)
deceleratedcaviar

โดยทั่วไปแล้วmono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

เต๋าควรจะเป็นกรอบที่ดี

จากไซต์ของพวกเขา:

Tao Framework สำหรับ. NET คือชุดของการผูกเพื่ออำนวยความสะดวกในการพัฒนาแอปพลิเคชันสื่อข้ามแพลตฟอร์มโดยใช้แพลตฟอร์ม. NET และ Mono


1
เว็บไซต์ใหม่ของ Tao คือ: Tao Framework
Thymine


7

คุณสามารถ OpenGL โดยไม่ต้องใช้กระดาษห่อหุ้มและใช้งานได้ใน C # เช่นเดียวกับที่ Jeff Mc กล่าวคุณจะต้องนำเข้าฟังก์ชันทั้งหมดที่คุณต้องการด้วย DllImport

สิ่งที่เขาทิ้งไว้คือต้องสร้างบริบทก่อนที่คุณจะสามารถใช้ฟังก์ชัน OpenGL ได้ ไม่ใช่เรื่องยาก แต่มี DllImports อื่น ๆ ที่ไม่ใช้งานง่ายที่ต้องทำ

ฉันได้สร้างตัวอย่างโครงการ C # ใน VS2012 โดยเกือบจะเป็นขั้นต่ำที่จำเป็นเพื่อให้ OpenGL ทำงานบนกล่อง Windows เพียงแค่ทาสีหน้าต่างเป็นสีน้ำเงิน แต่ก็น่าจะเพียงพอสำหรับคุณเริ่มต้น ตัวอย่างที่สามารถพบได้ที่http://www.glinos-labs.org/?q=programming-opengl-csharp มองหาตัวอย่างNo Wrapperที่ด้านล่าง


5
ลิงก์ของคุณหมดแล้วโปรดแบ่งปันโครงการของคุณ ขอบคุณ
อันตรายเดฟ

7

ฉันอยากจะแนะนำTao Frameworkด้วย แต่หมายเหตุเพิ่มเติม:

ดูบทเรียนเหล่านี้: http://www.taumuon.co.uk/jabuka/


ฉันไม่รู้ว่าเกิดอะไรขึ้นกับเต๋าเนื่องจากเพจดังกล่าวล่มไปเมื่อไม่นานมานี้
Dominic K

เว็บไซต์ใหม่ของ Tao คือ: Tao Framework
Thymine

1
เต๋าดูเหมือนจะเป็นเป้าหมายที่เคลื่อนไหว ฉันอัปเดตลิงก์แล้วเพราะมันได้ย้ายจากโมโนไปยัง sourceforge แล้ว
Oliver

ว้าวพฤศจิกายน 2548 ... OpenGL ไม่เปลี่ยนแปลงมากนักหรือ?
jocull

1
@JonHarrop ใช่ดูเหมือนว่าพวกเขาไม่ได้ตั้งค่าการเปลี่ยนเส้นทางที่นั่นโดยใช้หน้า github ตอนนี้opentk.github.io
Dreamwalker

4

คุณต้องการให้ไลบรารีสนับสนุนเหล่านี้ทำอะไร เพียงแค่ใช้ OpenGL จาก C # นั้นง่ายพอและไม่ต้องใช้ไลบรารีเพิ่มเติมใด ๆ อีกต่อไป


คลาสเหล่านี้สามารถพบได้ในเนมสเปซใดบ้าง
MegaByte

4
OpenGL ไม่ได้เป็นส่วนหนึ่งของ. NET ในเวอร์ชัน 4.0
mafu

3
@MegaByte พวกเขาต้องเข้าถึงผ่านทางแพลตฟอร์มที่เรียกใช้
การชดใช้อย่าง จำกัด

2

เกี่ยวกับ (ค่อนข้างไม่ตรงกับหัวข้อที่ฉันรู้ แต่เนื่องจากมันถูกนำมาก่อนหน้านี้) ตัวเลือก XNA กับ OpenGL อาจเป็นประโยชน์ในหลาย ๆ กรณีที่จะใช้ OpenGL แทน XNA (และใน XNA อื่นแทน OpenGL ... )

หากคุณจะเรียกใช้แอปพลิเคชันบน Linux หรือ Mac โดยใช้ Mono อาจเป็นทางเลือกที่ดีในการใช้ OpenGL นอกจากนี้ซึ่งไม่เป็นที่รู้จักในวงกว้างฉันคิดว่าหากคุณมีลูกค้าที่จะเรียกใช้แอปพลิเคชันของคุณในสภาพแวดล้อม Citrix DirectX / Direct3D / XNA จะไม่เป็นทางเลือกที่ประหยัดเท่า OpenGL เหตุผลก็คือแอปพลิเคชัน OpenGL สามารถโฮสต์ร่วมบนเซิร์ฟเวอร์จำนวนน้อยกว่า (เนื่องจากปัญหาด้านประสิทธิภาพเซิร์ฟเวอร์เดียวไม่สามารถโฮสต์อินสแตนซ์ของแอปพลิเคชันได้ไม่ จำกัด จำนวน) มากกว่าแอปพลิเคชัน DirectX / XNA ซึ่งต้องการเซิร์ฟเวอร์เสมือนเฉพาะเพื่อทำงานในฮาร์ดแวร์ โหมดเร่งความเร็ว ข้อกำหนดอื่น ๆ มีอยู่เช่นการ์ดแสดงผลที่รองรับเป็นต้น แต่ฉันจะรักษาปัญหา XNA เทียบกับ OpenGL ในฐานะสถาปนิกไอทีนักพัฒนาซอฟต์แวร์ ฯลฯ สิ่งนี้จะต้องพิจารณาก่อนเลือกระหว่าง OpenGL และ DirectX / XNA ...

หมายเหตุด้านข้างคือ WebGL ใช้ OpenGL ES3 afaik ...

โปรดทราบว่านี่ไม่ใช่ข้อควรพิจารณาเพียงอย่างเดียว แต่อาจทำให้ทางเลือกง่ายขึ้นสำหรับบางคน ...


1

XNA 2.0 ต้องการการ์ด shader 1.1 ขั้นต่ำ ในขณะที่เทคโนโลยีเก่าไม่ใช่ทุกคนที่มี แล็ปท็อปรุ่นใหม่บางรุ่น (จากประสบการณ์ของเราแท็บเล็ต Toshiba ที่มีกราฟิก Intel) ไม่มีการรองรับ shader 1.1 XNA จะไม่ทำงานบนเครื่องเหล่านี้

นี่เป็นปัญหาสำคัญสำหรับเราและเราได้เปลี่ยนไปใช้ Tao และ OpenGL นอกจากนี้เรายังมีการผูกสำหรับเสียงและการสนับสนุน Lua ด้วยเต่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.