0

私は Mac OS X での OpenGL プログラミングを研究してきました。プレーンな C、C++、さらには Python でのプログラミングについては、このトピックに関するかなりの量の情報が存在しますが、Objective-C/Cocoa 開発者向けの情報はほとんどありません。 exists は恐ろしく時代遅れです (これは 2002 年から 2006 年までのことであり、技術的にははるか昔のことです)。このため、正確で最新の情報を見つけることは困難であり、私はこの質問を提起することになりました: Obj-C/Cocoa 開発者は、最近どのような経路で OpenGL を (特に 3D レンダリングで) 利用することが最も多いのでしょうか?

また、OpenGL の多くには Objective-C/Cocoa バインディングがないと信じ込まされています。これは本当ですか?

必要に応じて別の言語を学ぶこともできますが、プログラミング言語全体ではなく、OpenGL の学習に集中できるように、可能であれば Obj-C に固執したいと考えています (C++ は特に難しそうです)。

4

3 に答える 3

3

私の知る限り、OpenGL 関数用の Obj-C ラッパーは存在しないため、C API を使用する必要があります。さらに、3D グラフィックスの作成はパフォーマンスがすべてであり、C 関数を使用する方がオブジェクトのメソッドを使用するよりもはるかに高速であるため、オブジェクトでラップしようとしても無駄です。

Objective-C は C に基づいているため、Cocoa アプリケーションで C OpenGL API を自由に使用できます。バインドに関しては、Cocoa では NSOpenGLView をサブクラス化して OpenGL にバインドできます。次のようなメソッドをオーバーライドできます。

- (void)prepareOpenGL;テクスチャの生成、描画状態の設定など。

- (void)reshape;ビューのサイズが変更されたときに投影を更新します。

そして最も重要なことは、オーバーライドできることです。

- (void)drawRect:カスタム描画を行います。

于 2012-06-26T09:28:07.647 に答える
1

現在のところ、OpenGLへの広範なObjective-Cバインディングはありません。Appleデベロッパアカウントをお持ちの場合は、今年のWWDCビデオをチェックして、これが非常に近い将来に変更されるかどうかを確認することをお勧めします。

Objective-C /CocoaからOpenGL3.2を使用する方法を確認したい場合は、少し前に作成したチュートリアルを参照してください。

于 2012-06-27T09:48:43.277 に答える
1

Objective-C は C のスーパーセットであるため、Objective-C コードに C コードを自由にインクルード/コールできます。同様に、Objective-C++ ( .mm拡張子付き) では、Onjective-C++ で C++ モジュールを使用できます。これが、Cocoa が OpenGL API のラッパーを提供しない主な理由だと思います。

MVC designを使用して、OpenGL 部分全体を Cocoa プロジェクトから分離しておきます。つまり、C/C++ で記述されたすべての OpenGL コードを含むモデル コンポーネントを記述し、Cocoa 内で Controllere および View コンポーネントを作成します。たとえば、NSOpenGLView は Controller および View コンポーネントにすることができます。

MVC の主な利点は、モデル コンポーネント (OpenGL 部分) がオペレーティング システムから完全に独立しており、変更を加えることなく他のプラットフォームで再利用できることです。欠点は、Cocoa 環境で C/C++ と Objectivie-C の両方を使用する必要があることです。

MVC デザイン(ソース コード付き)を使用した OpenGL GUI プログラムの例があります。Windows 版と Mac 版の両方で同じ OpenGL モジュールが使用されます。

于 2012-06-27T14:04:03.420 に答える