2011-11-22 38 views
7

Tôi bắt đầu học quan tâm trong OpenGL và tôi đang cố gắng tìm ra phương hướng tốt nhất để sử dụng trong quá trình học. Tôi đã rất quen thuộc với C# và từ những gì tôi đã đọc, tôi có thể sử dụng API Tao để giao tiếp với OpenGL từ mã C#. Tuy nhiên, nó cũng có vẻ như với tôi từ những gì tôi đọc mà những người thực sự là nhà phát triển OpenGL chuyên nghiệp là lập trình viên C++.Những lợi thế tồn tại trong C++ trên C# khi làm việc với OpenGL

Tôi tò mò về những lợi thế mà C++ có thể có trên C# khi làm việc với đồ họa 3D trong OpenGL. Bất kỳ đầu vào sẽ là tuyệt vời như tôi là một người mới hoàn thành ở tất cả điều này.

+1

Bỏ phiếu để đóng. Google tại "C# vs C++" và bạn sẽ tìm thấy nhiều sự khác biệt. Về cơ bản, độ phức tạp so với hiệu suất là số một. C++ có thể hoạt động tốt hơn nếu bạn có ít kinh nghiệm trong C++, mã bạn sản xuất có thể sẽ hoạt động kém hơn so với C# tương đương. – Polity

+1

có thể trùng lặp của [Sử dụng OpenGl với C#?] (Http://stackoverflow.com/questions/536065/using-opengl-with-c) –

+1

Mặc dù tôi thường bỏ phiếu để đóng "ngôn ngữ X so với Y", tôi nghĩ điều này có giá trị cho các câu trả lời được chứng minh bởi vì nó tập trung hơn nên ... để lại cho người khác. –

Trả lời

5

Sử dụng OpenGL qua C# có một số khó khăn.

  1. Nhận SDK cập nhật. Tao chưa được cập nhật kể từ năm 2008. OpenTK chưa có bản phát hành ổn định kể từ tháng 6 năm 2010. OpenGL đã có hai phiên bản kể từ tháng 6 năm 2010. Đó là rất nhiều chức năng mà bạn không thể truy cập từ C#. Tôi không biết đêm nhạc OpenTK ổn định như thế nào, nhưng tôi thường không tin tưởng vào đêm nhạc. Với C/C++, bạn có thể nhận được bất kỳ con trỏ hàm nào bạn muốn tải. Với C#, bạn chỉ có thể sử dụng những gì bộ công cụ của bạn cung cấp.

  2. Xử lý các đối tượng đệm có thể khá đau trong C#. Có, có nhiều cách để tải lên mảng các giá trị đồng nhất cho các đối tượng đệm. Nhưng xây dựng dữ liệu đỉnh xen kẽ, nơi các thành phần khác nhau có các loại khác nhau, khó khăn hơn nhiều trong C#. Trong C và C++, bạn có quyền truy cập trực tiếp vào bộ nhớ. Vì vậy, thật dễ dàng để có một véc tơ 3 phao, tiếp theo là 4-byte byte, tất cả được lưu trữ trong 16 byte trên mỗi đỉnh. Nó khá khó khăn trong C#.

  3. Mã đồ họa thường là một trong các lĩnh vực mã quan trọng hơn về hiệu suất. Nói chung, bạn sẽ muốn điều khiển mà C++ dành cho bạn nếu bạn đang tạo một ứng dụng dựng hình hiệu suất cao như trò chơi. Rất nhiều tính năng đẹp của C# hoạt động chống lại nó ở đây.

Ưu điểm thực duy nhất mà sử dụng C# cung cấp là ... đó là C#. Đến mức độ mà bạn cảm thấy rằng lợi thế của bạn, thì đó là một lợi thế.

+0

Có thể sử dụng ** C++/CLI ** sẽ là "tốt nhất của hai thế giới"? –

+2

@UweKeim: Làm thế nào? Chắc chắn, bạn nhận được bộ sưu tập rác (cho phần CLI), và bạn có thể nói chuyện với các thư viện chuẩn CLR. Nhưng bạn không có được những tính năng ngôn ngữ tuyệt vời của C#.Và vì các thư viện chuẩn CLR không hữu ích cho trình kết xuất đồ họa, nên nó không phải là một lợi thế. Hầu hết bạn có thể sử dụng nó cho là interop với renderer của bạn, nhưng điều đó sẽ được viết bằng C + + thẳng. Trong trường hợp đó, trình kết xuất của bạn không cần phải biết hoặc quan tâm rằng nó được gọi từ CLR. –

3

Lợi thế nhất ngay lập tức liên quan đến bạn là ưu thế của các hướng dẫn sử dụng mã ví dụ được viết bằng C, trình biên dịch C++ sẽ vui vẻ chấp nhận.

Ưu điểm áp dụng rộng rãi nhất là tính di động: C# là con của Microsoft & hỗ trợ cho ngôn ngữ đó trên nền tảng không phải của Microsoft là sơ sài nhất. Wikipedia currently claims rằng tiêu chuẩn ISO mới nhất cho C# là 2.0, trong khi Microsoft đã phát hành 4.0 và đã phát triển 5.0!

+0

Chỉ cần cập nhật: Theo MS BUILD 2014, ISO cho C# 5 chỉ còn vài tháng nữa và MS Roslyn sẽ mở trình biên dịch. C# thực sự đang tiến bộ về mặt nền tảng chéo. – Kr0e

Các vấn đề liên quan