1

現在、サンダーランド大学でゲーム コンソール プログラミング モジュールを受講しています。このモジュールで彼らが教えているのは、PS3 ゲームを開発するための OpenGL と Phyre Engine です。

PS3 SDK キットが無料で提供されていない (非常に高価である) という事実は、問題が発生したときに回避するのが非常に困難です。

PS3 フレームワークは、glGenList、glBegin、glEnd などの gl 関数呼び出しのほとんどをサポートしていないようです。

glBegin(GL_QUADS);
    glTexCoord2f(TEXTURE_SIZE, m_fTextureOffset);
    glVertex3f(-100, 0, -100);

    //some more
glEnd();

glBegin、glEnd、glTexCoord2f で PS3 デバッグ モードでデバッグするとエラーが発生します。

それを回避する方法はありますか?おそらく、オブジェクトを描画する別の方法のように?

4

3 に答える 3

4

PS3 用に開発されたほとんどのゲームは OpenGL をまったく使用しませんが、「オンザメタル」でプログラムされています。つまり、中間の抽象 API なしで GPU を直接使用します。はい、PS3 用の OpenGL 風の API がありますが、これは実際には OpenGL-ES に基づいています。

OpenGL-ES には、即時モードはありません。glBegin即時モードは、 でプリミティブを開始し、次に頂点属性の状態設定の呼び出しをチェーン化することによって OpenGL にジオメトリを渡すこの面倒な方法であり、頂点をその位置glVertexで送信し、 で終了することによって終了しglEndます。誰もこれを使いたくない!特に、リソースが限られているシステムではそうではありません。

いずれにせよ、メモリ内のジオメトリ データは利用可能です。では、既存のものを使用するよう OpenGL に単純に指示しないのはなぜでしょうか? まあ、それはまさに何をすべきかです:頂点配列。データを検索する場所への OpenGL ポインタを指定し (glVertexAttribPointer最新の OpenGL ではジェネリック、または古い固定関数では定義済みの固定属性glVertexPointer, glTexCoordPointer, ) glNormalPointer、またはglColorPointerを使用してその全体を描画させます。glDrawElementsglDrawArrays

最新の OpenGL では、描画プロセスはユーザーがプログラム可能なシェーダーによって制御されます。固定関数の OpenGL でできることは、状態変数の数をパラメタ化することだけです。

于 2013-04-20T01:04:52.113 に答える