Sử dụng OpenGl với C #? [đóng cửa]


118

Có thư viện hỗ trợ OpenGL miễn phí cho C # không? Nếu vậy, tôi sử dụng cái nào và tìm các dự án mẫu ở đâu?

C # có cung cấp các lớp cho OpenGL không?


Tôi biết đây là một chủ đề rất cũ, nhưng Unity có thể quan tâm đến bạn
clabe45

Câu trả lời:


129

OpenTK là một cải tiến so với API Tao, vì nó sử dụng kiểu C # thành ngữ với tính năng nạp chồng, enum được gõ mạnh, ngoại lệ và kiểu .NET tiêu chuẩn:

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

trái ngược với Tao chỉ phản ánh 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

Điều này làm cho việc chuyển khó khăn hơn nhưng cực kỳ dễ sử dụng.

Như một phần thưởng, nó cung cấp kết xuất phông chữ, tải kết cấu, xử lý đầu vào, âm thanh, toán học ...

Cập nhật ngày 18 tháng 1 năm 2016 : Hôm nay, người bảo trì OpenTK đã rời khỏi dự án , khiến tương lai của nó không chắc chắn. Các diễn đàn chứa đầy thư rác. Người bảo trì khuyên bạn nên chuyển sang MonoGame hoặc SDL2 #.

Cập nhật ngày 30 tháng 6 năm 2020 : OpenTK đã có những người bảo trì mới được một thời gian và có một cộng đồng bất hòa đang hoạt động. Vì vậy, khuyến nghị trước đây về việc sử dụng một thư viện khác không nhất thiết phải đúng.


5
Tôi không nghĩ rằng các chức năng này rất đại diện, bởi vì tất cả chúng đều không được dùng nữa và bị xóa khỏi cấu hình cốt lõi OpenGl.
Arne

6
Đúng, những chức năng đó bị xóa khỏi cấu hình cốt lõi. Nhưng các lập luận vẫn có giá trị. "OpenTK là một sự cải tiến so với API Tao, vì nó sử dụng thành ngữ C # phong cách với quá tải, enums mạnh mẽ, đánh máy, trường hợp ngoại lệ, và các loại NET chuẩn"
Syaiful Nizam Yahya

1
Trang web được liên kết không hợp lệ cho bài đăng này bây giờ.
Sonny Childs

16

Tôi nghĩ ý nghĩa của @korona là vì nó chỉ là một API C, bạn có thể sử dụng nó trực tiếp từ C # với rất nhiều lần gõ như thế này:

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

Thật không may, bạn sẽ cần phải làm điều này cho mỗi hàm OpenGL mà bạn gọi, và về cơ bản đó là những gì Tao đã làm cho bạn.


Bạn sẽ làm thế nào về điều đó trên Linux (với mono)?
deceleratedcaviar

Về cơ bản là hoàn toàn giống nhau, mono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

Tao được cho là một khuôn khổ đẹp.

Từ trang web của họ:

Tao Framework cho .NET là một tập hợp các ràng buộc để tạo điều kiện phát triển ứng dụng đa nền tảng bằng cách sử dụng các nền tảng .NET và Mono.


1
Trang web mới cho Tao là: Tao Framework
Thymine. 27/09/11

9

SharpGL là một dự án cho phép bạn sử dụng OpenGL trong các ứng dụng Windows Forms hoặc WPF của mình.


7

Bạn có thể OpenGL mà không cần trình bao bọc và sử dụng nó nguyên bản trong C #. Như Jeff Mc đã nói, bạn sẽ phải nhập tất cả các chức năng bạn cần với DllImport.

Những gì anh ấy bỏ qua là phải tạo ngữ cảnh trước khi bạn có thể sử dụng bất kỳ hàm OpenGL nào. Nó không khó, nhưng có một số DllImports không trực quan khác cần được thực hiện.

Tôi đã tạo một dự án C # mẫu trong VS2012 với gần như mức tối thiểu cần thiết để OpenGL chạy trên hộp Windows. Nó chỉ sơn cửa sổ màu xanh lam, nhưng nó sẽ đủ để bạn bắt đầu. Ví dụ có thể được tìm thấy tại http://www.glinos-labs.org/?q=programming-opengl-csharp . Tìm ví dụ No Wrapper ở dưới cùng.


5
liên kết của bạn đã chết, vui lòng bạn có thể chia sẻ dự án của bạn. Cảm ơn.
dangerousdave

7

Tôi cũng muốn giới thiệu Khung Tao . Nhưng một lưu ý bổ sung:

Hãy xem các hướng dẫn sau: http://www.taumuon.co.uk/jabuka/


Tôi không biết chuyện gì đã xảy ra với Tao vì trang đã bị sập cách đây khá lâu.
Dominic K

Trang web mới cho Tao là: Tao Framework
Thymine. 27/09/11

1
Tao dường như là một mục tiêu di động. Tôi đã cập nhật liên kết, vì nó cũng đã chuyển từ mono bây giờ sang sourceforge.
Oliver

Wow, tháng 11 năm 2005 ... OpenGL không thay đổi nhiều sao?
jocull

1
@JonHarrop vâng trông giống như họ đã không được thiết lập một chuyển hướng có sử dụng một trang github tại opentk.github.io
Dreamwalker

4

Bạn muốn các thư viện hỗ trợ này làm gì? Chỉ cần sử dụng OpenGL từ C # là đủ đơn giản và không yêu cầu bất kỳ thư viện bổ sung nào.


Những lớp này có thể được tìm thấy trong không gian tên nào?
MegaByte

4
OpenGL không phải là một phần của .NET, kể từ phiên bản 4.0
mafu

3
@MegaByte Chúng phải được truy cập thông qua lệnh gọi nền tảng.
Sự Chuộc Tội có giới hạn vào

2

Liên quan đến (hơi lạc đề mà tôi biết nhưng vì nó đã được đưa ra trước đó) lựa chọn XNA và OpenGL, có thể có lợi trong một số trường hợp nếu sử dụng OpenGL thay vì XNA (và trong XNA khác thay vì OpenGL ...).

Nếu bạn định chạy các ứng dụng trên Linux hoặc Mac bằng Mono, thì đó có thể là một lựa chọn tốt để sử dụng OpenGL. Ngoài ra, tôi nghĩ rằng điều này không được biết đến rộng rãi, nếu bạn có khách hàng sẽ chạy các ứng dụng của bạn trong môi trường Citrix, thì DirectX / Direct3D / XNA sẽ không phải là lựa chọn kinh tế như OpenGL. Lý do cho điều này là các ứng dụng OpenGL có thể được đồng lưu trữ trên số lượng máy chủ ít hơn (do các vấn đề về hiệu suất, một máy chủ duy nhất không thể lưu trữ vô số phiên bản ứng dụng) so với các ứng dụng DirectX / XNA yêu cầu máy chủ ảo chuyên dụng chạy trong phần cứng chế độ tăng tốc. Các yêu cầu khác tồn tại như cạc đồ họa được hỗ trợ, v.v. nhưng tôi sẽ giữ nguyên vấn đề XNA vs OpenGL. Là một Kiến trúc sư CNTT, Nhà phát triển phần mềm, v.v., bạn sẽ phải cân nhắc trước khi lựa chọn giữa OpenGL và DirectX / XNA ...

Một lưu ý nhỏ là WebGL dựa trên OpenGL ES3 afaik ...

Lưu ý thêm, đây không phải là những cân nhắc duy nhất, nhưng chúng có thể giúp lựa chọn dễ dàng hơn đối với một số ...


1

XNA 2.0 yêu cầu tối thiểu một thẻ shader 1.1. Trong khi công nghệ cũ, không phải ai cũng có. Một số máy tính xách tay mới hơn (theo kinh nghiệm của chúng tôi là máy tính bảng Toshiba với đồ họa Intel) không hỗ trợ shader 1.1. XNA đơn giản là sẽ không chạy trên những máy này.

Đây là một vấn đề quan trọng đối với chúng tôi và chúng tôi đã chuyển sang Tao và OpenGL. Ngoài ra với Tao, chúng tôi có các ràng buộc để hỗ trợ âm thanh và Lua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.