-3

そこで、特定の(3.2)で新しい OpenGL バージョンを使用してゲームに取り組み始めました。シェーダーと VBO を使用しています。

ローテーションを実装するにはどうすればよいですか? (以前はglRotatefを使用していました)シェーダーコーディングをまったく理解していないため、シェーダーではなくプログラムを介して実行したいと思います..回転をどこから始めればよいかさえわかりません。仕事..

注: 2Dゲームの簡単な方法が必要です.三角形 (クワッドを構成する) を自分の周りで回転させたい..

例を挙げて詳しく説明します..

編集:私の頂点シェーダー

#version 150 core

in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
in float in_angle;

out vec4 pass_Color;
out vec2 pass_TextureCoord;

void main(void) {
    mat4x4 roll=mat4x4(1.0);
    roll[0][0]=cos(in_angle);
    roll[0][1]=sin(in_angle);
    roll[1][0]=-(sin(in_angle));
    roll[1][1]=cos(in_angle);


    gl_Position = in_Position*roll;

    pass_Color = in_Color;
    pass_TextureCoord = in_TextureCoord;
}
4

1 に答える 1

1

2D シーンを実装したいだけなら、個人的には libgdx をお勧めします。トピックに戻りますが、回転はシェーダーでのみ実行できます。線形代数http://en.wikipedia.org/wiki/Rotation_matrixに従って頂点を変換する必要があります。あなたがすることは、行列クラスと、平行移動、回転、スケーリングなどのすべての操作を実装し、この行列をシェーダーにフィードすることです。この行列の最も重要な部分は投影ですが、簡単な平行投影だけが必要だと思います: https://en.wikipedia.org/wiki/Parallel_projection

これは頂点シェーダーの例です。

  uniform mat4 matrix;
  void main(void) 
      {
          gl_Position = matrix * gl_Vertex;
      }

このシェーダーは、マトリックスを乗算してすべての頂点を変換します。次に、フラグメント シェーダーが必要です。

void main(void)
    {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }

これを opengl API でコンパイルして実行する必要があります。

于 2013-07-21T21:34:36.437 に答える