2011-11-22 5 views
7

OpenGLでの学習に興味を持ち始めており、学習プロセスでどの言語を使用するのが最適な方向にあるのか理解しようとしています。私はすでにC#に精通しており、私が読んだことから、Tao APIを利用してC#コードからOpenGLとインターフェースすることができます。しかし、私が読んでいるところでは、本当にプロフェッショナルなOpenGL開発者はC++プログラマだと思うようです。OpenGLで動作するC++と比較してC#のメリット

OpenGLで3Dグラフィックスを扱うときに、C++に比べてC++のメリットが何か不思議です。私はすべてこれで完全なnewbyだからどんな入力も素晴らしいだろう。

+1

投票の結果閉じるGoogleの "C#vs C++"には、多くの違いがあります。基本的には、複雑さとパフォーマンスは1番です。 C++での経験があまりないなら、C++はより良いパフォーマンスを発揮しますが、生成するコードはおそらくC#と同等以上の性能を発揮します。 – Polity

+1

[C#でOpenGlを使う?](http://stackoverflow.com/questions/536065/using-opengl-with-c) –

+1

私は通常「言語X対Y」を閉じるために投票しますが、これはもっと集中しているので実証された答えにメリットがあります。 –

答えて

5

OpenGLをC#経由で使用することにはいくつかの困難があります。

  1. 最新のSDKを入手する。 OpenTKは2010年6月から安定版をリリースしていません。OpenGLは2つのリリースを2010年6月からリリースしました。これはC#からは簡単にアクセスできない機能です。私はOpenTKのナイトリーがどれほど安定しているか分かりませんが、私は一般的にナイトリーを信頼しません。 C/C++では、ロードする関数ポインタを取得できます。 C#では、ツールキットが提供するものだけを使用できます。

  2. バッファオブジェクトを扱うことは、C#では非常に苦しいことがあります。はい、均一な値の配列をバッファオブジェクトにアップロードする方法があります。しかし、異なるコンポーネントのタイプが異なるインタリーブされた頂点データを構築することは、C#でははるかに困難です。 CおよびC++では、メモリに直接アクセスできます。したがって、3つの浮動小数点ベクトルの後ろに4バイトのバイトが続き、すべてが頂点ごとに16バイトに格納されます。 C#ではかなり難しいです。

  3. グラフィックスコードは、一般に、パフォーマンスが重要なコード領域の1つです。ゲームのような高性能レンダリングアプリケーションを作っているなら、一般にC++が提供するコントロールが必要です。 C#の優れた機能の多くはここでそれに対して働いています。

C#を使用する唯一の本当の利点は、それはC#です。その利点を感じる程度に、それは有利です。

+0

おそらく** C++/CLI **を使用することは "2つの世界の中で最高"でしょうか? –

+2

@UweKeim:どうですか?もちろん、(CLIの部分の)ガベージコレクションを取得し、CLR標準ライブラリと話すことができます。しかし、C#の優れた言語機能はありません。また、CLR標準ライブラリはレンダラにとって非常に有用ではないので、それほど大きな利点ではありません。ほとんどの場合、レンダラーとの相互運用が可能ですが、それはまっすぐなC++で書かれています。その場合、レンダラーはCLRから呼び出されていることをレンダラーが認識したり気にする必要はありません。 –

3

あなたに最も関連した利点は、C++コンパイラが喜んで受け入れる、Cで書かれたサンプルコードを使用したチュートリアルの優位性です。

最も広く適用できる利点は移植性です。C#はマイクロソフトの赤ちゃん&以外のプラットフォームでのその言語のサポートは最高です。 Wikipedia currently claims C#の最新のISO標準は2.0ですが、Microsoftは4.0をリリースしており、すでに5.0を開発中です!

+0

ちょうど更新する:MS BUILD 2014によると、C#5のISOはほんの数ヶ月先にあり、MS Roslynはコンパイラを開きます。 C#はクロスプラットフォームの面で進歩を遂げています。 – Kr0e