1

OpenGLES 2.0 に切り替え、頂点シェーダーに問題があります。シェーダー内の頂点位置を修正せず、(-1) - 1 スコープで頂点を指定すると、すべて正常に動作し、三角形が表示されますが、位置を変更しようとすると空白の画面が表示されます。コードを見て、私が馬鹿かどうか教えてください。

static float[] squareVertices2 = {
        512f, 0f, 0.0f,
        1024f, 768f, 0.0f,
        0f, 768f, 0.0f
    };

平行投影

projection[0] = 2 / 1024;
projection[1] = (2 / 768);
projection[2] = 1;
projection[3] = -1;

ハンドルを取得する

int m_a_positionHandle = GL.GetAttribLocation(CurrentShaderProgram, "a_position");
int m_a_colorHandle = GL.GetAttribLocation(CurrentShaderProgram, "a_color");
int m_u_mvpHandle = GL.GetUniformLocation(CurrentShaderProgram, "uv_Projection");

使用して

GL.UseProgram(CurrentShaderProgram);
GL.VertexAttribPointer(m_a_positionHandle, 3, VertexAttribPointerType.Float , false, 0, squareVertices2);
GL.EnableVertexAttribArray(m_a_positionHandle);
GL.VertexAttribPointer(m_a_colorHandle, 4, VertexAttribPointerType.Float, false, 0, squareColors);
GL.EnableVertexAttribArray(m_a_colorHandle);
GL.Uniform4(m_u_mvpHandle, projection[0], projection[1], projection[2], projection[3]);

GL.DrawArrays(BeginMode.Triangles, 0, 3);

シェーダー ソース:

@"uniform vec4 uv_Projection;

attribute vec4 a_position;
attribute vec4 a_color;

varying vec4 v_color;

void main()
{
gl_Position = vec4(a_position.xy * uv_Projection.xy, a_position.z, a_position.w);
v_color = a_color;
}"

Windows プラットフォームで C# と OpenTK を使用しています。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

値だけでなく、位置のフルベクトルで射影行列を乗算する必要がありxyます。

gl_Position = modelViewMatrix * a_Position;

動作している頂点シェーダーからコピー

編集

位置を乗算するためにベクトルを使用しているのを見ました。最初に行列に固執し、後ですべてが機能していることがわかったら、後でベクトルに切り替えます。すべてが正しく機能していることを確認するまでは単純にしてから、最適化してください。

私は個人的に UI 表示に完全なマトリックスを使用していますが、z と w も変更しています。

gl_Position = modelViewMatrix * vec4(position.xy, -3, 1);
于 2013-08-29T09:19:55.953 に答える