0

シェーダーと VBO を使用して 2 つの単純なクワッドを描画しようとしています。しかし、出力としてクワッドが 1 つしか得られません。

どこに何かが欠けていますか?

初期化コード (シェーダーとマトリックスの初期化コードはスキップされます):

  gl.GenBuffers((int) VAO_IDs.NumVAOs, VAOs);
            gl.BindVertexArray(VAOs[(int) VAO_IDs.Guads]);

            float[] vertices =
            {
               -0.095f, 0.095f, 0.695f, //first quad 
               -0.095f, 0.0475f, 0.695f,
               -0.095f, 0.00475f, 0.7455f,
               -0.095f, 0.095f,  0.7455f,

               -0.095f, 0.0475f, 0.695f, //second quad 
               -0.095f, 0f, 0.695f,
               -0.095f, 0f, 0.7455f,
               -0.095f, 0.0475f, 0.7455f
            };

            gl.GenBuffers((int) Buffer_IDs.NumBuffers, Buffers);
            gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, Buffers[(int) Buffer_IDs.ArrayBuffer]);
  unsafe
            {
                fixed (float* verts = vertices)
                {
                    var prt = new IntPtr(verts);

                    gl.BufferData(OpenGL.GL_ARRAY_BUFFER, vertices.Length*sizeof (float), prt, OpenGL.GL_STATIC_DRAW);
                }
            }


            gl.VertexAttribPointer((uint)Attrib_IDs.vPosition, 3, OpenGL.GL_FLOAT, false, 0, new IntPtr(0));
            gl.EnableVertexAttribArray((uint)Attrib_IDs.vPosition);

表示コード:

 gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);

 shaderProgram.Bind(gl);
 shaderProgram.SetUniformMatrix4(gl, "projectionMatrix", projectionMatrix.to_array());
 shaderProgram.SetUniformMatrix4(gl, "viewMatrix", viewMatrix.to_array());
 shaderProgram.SetUniformMatrix4(gl, "modelMatrix", modelMatrix.to_array());


    gl.BindVertexArray(VAOs[(int)VAO_IDs.Guads]);

    gl.DrawArrays(OpenGL.GL_QUADS, 0, 8);

    shaderProgram.Unbind(gl);
    gl.Flush();
4

1 に答える 1

1

明らかなことを指摘するリスクがあります: 2 つのクワッドの座標は、互いに隣接するように設定されています。2 つのクワッドを隣り合わせに描画すると、より大きなクワッドが得られます。2 つの四角形の間にギャップを残す座標を使用してみて、それらが別々に表示されるかどうかを確認します。

ここの座標に小さなタイプミスがあるようです:

           -0.095f, 0.0475f, 0.695f,
           -0.095f, 0.00475f, 0.7455f,

おそらく、2 つの y 座標に同じ値を使用するつもりでした。しかし、これは 2 つのクワッドを部分的にオーバーラップさせるだけで、1 つのクワッドを一緒に形成します。

于 2014-05-06T16:13:09.830 に答える