サイトで初めての質問なので、型破りなことをしていたらすみません。かなりの量のファイルを投稿することになるため、実際のコードの最小限の量を投稿し、従ったチュートリアルへのリンクを投稿することにしました。私と一緒にいる人にとっては、私がどれだけ感謝しているか分かりません.
私は現在、C++ でグラフィック レンダリング用のクロス プラットフォーム エンジンを開発しています。必要以上に楽しいプロジェクトです。私の主な開発プラットフォームは Macbook Pro です。そのため、実装したいエンジンの最初の部分は Mac への移植であると判断しました。アプリケーションをネイティブ アプリのように動作させたいので、フロント エンドに Cocoa を使用することにしました。
このチュートリアルに従ったところ、付属のデモと、lazyfoo の Web サイトの最初のチュートリアルでうまく機能しました。1 年以上前にチュートリアルを行いましたが、少し前に学んだことを実装する方法を確認して確認したかったのです。
問題が発生したのは、2 番目のチュートリアルに到達するまでではありませんでした。tut01_renderer クラスを編集して、ここまでで 1 つの変数を追加しました。これは、チュートリアルで lazyfoo が render メソッドで比較するために使用する整数の gColorMode 変数です。ヘッダー、tut01renderer init メソッド、またはその両方で gColorMode を 0 (シアン) に初期化しようとしました。最後に、tut01renderer のレンダリング メソッドに、if/else ステートメントを挿入します。
if(gColorMode == 0)
{
//Solid Cyan
glBegin( GL_QUADS );
glColor3f( 0.f, 1.f, 1.f );
glVertex2f( -0.5f, -0.5f );
glVertex2f( 0.5f, -0.5f );
glVertex2f( 0.5f, 0.5f );
glVertex2f( -0.5f, 0.5f );
glEnd();
}
else
{
//RYGB Mix
glBegin( GL_QUADS );
glColor3f( 1.f, 0.f, 0.f ); glVertex2f( -0.5f, -0.5f );
glColor3f( 1.f, 1.f, 0.f ); glVertex2f( 0.5f, -0.5f );
glColor3f( 0.f, 1.f, 0.f ); glVertex2f( 0.5f, 0.5f );
glColor3f( 0.f, 0.f, 1.f ); glVertex2f( -0.5f, 0.5f );
glEnd();
}
これにより、実行時に 3 つのシナリオが発生し、gColorMode をどのように初期化しても、3 つのそれぞれが発生します。
1) malloc エラー、解放されたオブジェクトの編集、またはアセンブリでの不正なアクセス エラーのいずれかでクラッシュします。2) シアンの四角が表示されます 3) マルチ四角が表示されます!
私は gColorMode を定数にしましたが、それでも時々マルチスクエアまたはクラッシュが表示されます!
だから私の質問は、私が間違ったことや前代未聞のことをしているのかということです。render メソッドに if/else ステートメントを含めることはできますか? 元のスケルトン コードのデモでは変数を使用していましたが、if/else ステートメントは使用していませんか? Objective C++ について、私がやろうとしていることを不可能にする何かがありますか? それとも何か他のものですか?
(最後に、十分に優れたチュートリアルを誰かが知っている場合は、これを単純な C と目的の C で喜んで再実装します。明らかに私のエンジンは C++ ですが、このアプローチを使用する方が全体的に簡単かもしれません。)