3

OpenGL ESv2 または OpenGL 3 Core Profile API で描画できるエンジンをコーディングしました。しかし最近、OpenGL 3 の部分が壊れてしまい、何を変更したか思い出せず、svn コミットログも確認できません。これは、現在ダウンしている bountysource でホストしていたので、Google に引き継いだためです (ただし、OGL3 ポートが壊れています)。 )。

OpenGL ESv2 ではすべて正常に動作しますが、OpenGL 3 ではすべてが水平方向に引き伸ばされてミラーリングされます。どちらも同じ行列と頂点を使用しています。

混乱しないでください。OpenGL ESv2 および OpenGL 3 レンダラーは、異なる方法でレンダリングします。

OpenGL ESv2 は VBO を使用します。OpenGL 3 は VAO と VBO を使用します。

私のエンジンはオープン ソースなので、ここで調べることができます: Source Code

これらは重要な部分です: Sprite ClassBase Window ClassGL3 Window ClassGL ESv2 Window Class

シェーダー:

GLv2:フラグメント頂点

GL3:フラグメント頂点

ここにいくつかの例の写真があります: OpenGL 3 - メニュー OpenGL 3 - ゲーム内 OpenGL ESv2 - メニュー OpenGL ESv2 - ゲーム内

誰かがこの問題の解決策を私に届けてくれたら、私は本当に、本当に嬉しく、感謝しています。

編集: 480x800 ウィンドウでは、gldebugger はこのマトリックスを表示します:
modviewmat
{1, -0, 0, 0}
{0, 1, 0, 0}
{0, 0, 1, 0}
{5, 770, 0, 1}

projmat
{2, 0, 0, 0}
{0, 2, 0, 0}
{0, 0, -1, 0}
{-1, -1, -0, 1}

4

1 に答える 1

0

私はとてもばかです..それは私が2つのクラスを持っていたからです. 1 つの基本クラスと、基本クラスから派生した 1 つのプラットフォーム固有の実装。すべての変数は、基本クラスと他のクラスで作成されました。

したがって、基本クラスと他のクラスの行列のハンドルがありました。
OpenGL ハンドルは、基本クラスで初期化されました。gl3 クラスにもハンドルがありますが、基本クラスの仕事であるため、初期化されていません。

tl;dr 疑似コード:

基本クラス: glhandle projmatrix
gl3class: glhandle projmatrix

baseclass::init(): (baseclass).promatrix.init
gl3class::update(): (gl3class).projmatrix.update

:/

于 2011-06-23T00:08:19.990 に答える