OpenGLでは、OpenGL3+メソッドのみを使用してパースペクティブビューを作成する最も簡単な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/3498581

  •  29-09-2019
  •  | 
  •  

質問

これは最初は怠zyに聞こえるかもしれませんが、私は2日間研究してきました。

プリミティブを描くSDL+Glewアプリがあります。さまざまな視点でいくつかのビューポートを作りたかったのです。 4つのビューポートが表示されますが、視点を変更することはできません。

あなたが持っていると仮定します

draw();
swapbuffers();

Perspective ViewPort(または理想的には複数のもの)を作成するための最も簡単な方法 - OpenGl3+ Spec-では何がありますか?

役に立ちましたか?

解決

最も簡単なのは唯一の方法です。投影マトリックスで自分自身(いくつかのLIB、プレーン数学など)を計算し、頂点シェーダーのユニフォームにアップロードし、そこで変換を行います。

他のヒント

Gluperspectiveと同じことを行うためのGLSL 1.50コードは次のとおりです。それを選択した言語に簡単に変換し、代わりにgluniformmatrix4fv経由でアップロードできます。

mat4 CreatePerspectiveMatrix(in float fov, in float aspect,
    in float near, in float far)
{
    mat4 m = mat4(0.0);

    float angle = (fov / 180.0f) * PI;
    float f = 1.0f / tan( angle * 0.5f );

    /* Note, matrices are accessed like 2D arrays in C.
       They are column major, i.e m[y][x] */

    m[0][0] = f / aspect;
    m[1][1] = f;
    m[2][2] = (far + near) / (near - far);
    m[2][3] = -1.0f;
    m[3][2] = (2.0f * far*near) / (near - far);

    return m;
}

それからあなたはします:

mat4 worldMatrix = CreateSomeWorldMatrix();
mat4 clipMatrix = CreatePerspectiveMatrix(90.0, 4.0/3.0, 1.0, 128.0);

gl_Position = worldMatrix * clipMatrix * myvertex;
some_varying1 = worldMatrix * myvertex; 
some_varying2 = worldMatrix * vec4(mynormal.xyz, 0.0);

パースペクティブマトリックスの場合:gluPerspective, 、 それから glGetFLoatv(GL_PROJECTION_MATRIX, ...), 、 それから glUniform また glUniformMatrix4fv

ビューポートの場合: glViewportglScissor. 。または、フレームバッファオブジェクトを使用してテクスチャにレンダリングし、テクスチャをレンダリングします。

PS控除された機能を使用したくない場合は、 Gluperspection ドキュメント、自分でマトリックスを計算してから、gluniformmatrix4fvを使用します。または互換性プロファイルで作業します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top