1

単純な OpenGL 三角形だけを描きたいとします。メインファイルに三角形を描くことができることを知っています。ここでは、次の行に沿って何かを行うことで、すべての OpenGL がセットアップされます。

glBegin( GL_TRIANGLES );
    glVertex3f( 0.0f, 1.0f, 0.0f );
    glVertex3f( -1.0f,-1.0f, 0.0f );
    glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();

しかし、メイン ファイルにすべての雑然としたものを配置する代わりに、"Draw" 関数で "Triangle" という名前のクラスを使用して三角形を描画したいので、私のコードは次のようになります。

Triangle TheTriangle;
TheTriangle.draw();

要するに、関数を使用して描画できるいくつかの OpenGL 形状を持つクラスを作成するにはどうすればよいですか?

4

4 に答える 4

2

何人かが言ったように、OpenGL はオブジェクト指向プログラミングとはうまくいきませんが、それができないというわけではありません。もう少し理論的に言えば、「メッシュ」のコンテナーを作成し、その中ですべてのフレームをループして、それぞれを画面にレンダリングすることができます。Render クラスは、状態のマネージャー、およびさまざまなシーン モジュールのコンテナーと考え​​ることができます。実際には、ほとんどのシステムはこれよりもはるかに複雑で、シーン グラフなどの構造を実装しています。

開始するには、メッシュ クラスとオブジェクト クラス (描画するメッシュを指している可能性があります) を作成してみてください。コンテナからオブジェクトを追加および削除する機能を追加します。すべてのフレームをループし、各三角形 (または他の必要なもの) をレンダリングすると、非常に単純な OO アーキテクチャが得られます。これは、開始するための方法です。

非常に機能的なアーキテクチャを OOP でラップするのは奇妙だと思うのはごく普通のことですが、慣れれば慣れます。正しく行えば、コードをより保守しやすく、スケーラブルにすることができます。そうは言っても、私が示した例は非常に単純だったので、それを理解したら、次のアーキテクチャを検討してみてください。

次のリンクは、シーン グラフとは何かについての役立つ情報を提供します。第 6 章では、シーン グラフについて説明します。

これは非常に強力なアーキテクチャであり、非常に複雑で効率的な (メリットを利用する場合) 方法でシーンを分割および順序付けできます。他にも多くのテクニックがありますが、ゲーム開発者にとって全体的に最も強力なテクニックはこれだと思います。作成しようとしているアプリケーションのタイプに完全に依存する可能性があります。とはいえ、完全なオブジェクト指向レンダラーを作成することはお勧めしません。アプリケーションによっては、OO シーン グラフで十分な場合があります。とにかく、頑張ってください!

于 2013-07-13T02:13:41.350 に答える
0

OpenGL コードを Triangle::draw() 関数に入れるだけです。

void Triangle::draw() {
    glBegin( GL_TRIANGLES );
        glVertex3f( 0.0f, 1.0f, 0.0f );
        glVertex3f( -1.0f,-1.0f, 0.0f );
        glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd();
}

もちろん、これはdraw()、クラスでメソッドを正しく宣言しTriangle、OpenGL 環境を初期化していることを前提としています。

于 2013-07-12T22:26:22.037 に答える