6

C または C++ で 3D プログラミングを始めようと思っています。私が抱えている問題は、Mac OS で目的の C および Cocoa フレームワークを使用するために見つけることができる唯一のチュートリアルのように思われることです。多かれ少なかれWindowsユーザーと同じ環境を手に入れたい。

テキスト エディタと g++ コンパイラを使用しようとすると、ヘッダーが失われますが、Xcode を使用しようとすると、Cocoa に取り組まざるを得なくなり、イライラします。Mac にプリインストールされている OpenGL/GLUT が Xcode の使用を強制する理由はわかりませんが、それなしではヘッダー ファイルを取得できないようです。

Apple の「開発者に優しい」インターフェイスをすべて使用して、完全なクロスプラットフォームの移植性を備えた昔ながらのコードを作成するにはどうすればよいですか?

4

3 に答える 3

5

OSX/Cocoa の最新の利点を利用したい場合、Objective-C の一部は避けられません。既存のアプリケーションを MacOS に移植する最も簡単な方法は次のとおりです。

  1. Objective-C で「最低限の」ニブレス アプリケーションを作成します。単一の AppDelegate クラスと、main() 関数での小さなセットアップのみです。
  2. AppDelegate の didFinishLaunching イベント ハンドラーで作成したカスタム NSGLView 子孫をウィンドウに追加します。
  3. NSGLView の初期化で CVDisplayLink とレンダリング コールバックをセットアップする
  4. CVDisplayLink のコールバックで既存の OpenGL レンダリング コードを使用する

ここで興味深いのは、これらすべてをどこで入手できるかということです。

驚くべきことに、優れた nibless アプリケーション サンプルは、OSX の QEMU ポート (はい、エミュレーター) の UI です。また、Apple の公式 GLEssenstialPractices デモでは、OpenGL レンダリング パイプラインを設定するために必要なすべての情報が示されています。残りはすべてあなた次第です。

システム レベルの OSX プログラミングの詳細で最新の紹介は、Mark Dalrymple による「高度な Mac OS X プログラミング」の本に記載されています。これは多くのことを説明しており、これをすべて読んだ後、OS の設計上の決定のほとんどを理解しました (パフォーマンスの観点から考えると、すべての「非標準」のものを実際に受け入れるようになります)。

「nibless」プログラミングを完了するには、次のようなブログ投稿を読むことをお勧めしますhttp://blog.kleymeyer.com/2008/05/creating-cocoa-applications-programatically-ie-nib-less/検索は大いに役立ちます。

同じトリックが CocoaTouch/iOS にも当てはまり、SO では多くの質問に答えています。たとえば、このCocoa touch/Xcode のように、NIB を使用しないグラフィックス コンテキストの生成です。

于 2012-05-22T08:31:34.970 に答える
2

クロスプラットフォーム アプリケーションを作成する場合は、コマンド ライン ツール テンプレートを使用してプロジェクトを作成できます。次に、OpenGL と GLUT フレームワークをインポートします。これにより、必要な OpenGL および GLUT ヘッダーを含む「空の」C++ プロジェクトが得られます。

Lighthouse 3D は、移植性と最初のプロジェクトの開始方法に関するヒントを提供します。 http://www.lighthouse3d.com/tutorials/glut-tutorial/initialization/

于 2012-10-10T15:23:54.080 に答える
-1

cocoglutCOCOA への基本的または必須の GLUT 呼び出しの変換を可能にするソフトウェア層 (という名前) を作成しました。このライブラリを使用すると、GLUT 呼び出しを使用するだけで、nib ファイルや XCode プロジェクト ファイルを必要とせずに (コマンド ラインからコンパイルすることもできます)、ウィンドウを作成/破棄し、C/C++ アプリケーションからコールバックを登録できます。このオプションは、完全な Retina ディスプレイ解像度を使用します。ソースはGitHubにあります。

于 2015-12-17T18:16:59.770 に答える