-3

出力3 つの頂点 ((-0.5,-0.5) (0.5,-0.5) (0,0.5)) を持つ赤い三角形を表示しようとすると、歪んだ赤い三角形が表示されます。このコードでシェーダーに渡します。

public void LoadData<T>(BufferConfig<T> config) where T : struct, IVertex
    {
        Bind();

        GL.BufferData(config.Target, config.VertexCount * config.Layout.SizeOfVertex, config.Vertices, config.Usage);

        int offset = 0;

        for (int i = 0; i < config.Layout.Attribs.Length; i++)
        {
            GL.EnableVertexAttribArray(i);
            GL.VertexAttribPointer(
                i, 
                config.Layout.Attribs[i].ElementCount, 
                config.Layout.Attribs[i].ElementType, 
                config.Layout.Attribs[i].IsNormalized, 
                config.Layout.Attribs[i].Stride,
                offset
                );

            offset += config.Layout.Attribs[i].Stride;
        }

        Unbind();
    }

頂点は、位置と色をそれぞれ表す 2 つの Vector4 で構成されています。デバッグを試みましたが、位置と色の 2 つの属性があり、ループが 2 回実行されるため、値は問題ないようです。

1 回目の反復: インデックス = 0、カウント = 4、タイプ = float、正規化 = false、ストライド = 16、ポインター = 0

2 回目の反復: インデックス = 1、カウント = 4、タイプ = float、正規化 = false、ストライド = 16、ポインター = 16

これが画像のように見えるのはなぜですか?

編集:

頂点シェーダー

#version 450 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec4 color;

out vec4 vs_color;

void main(void)
{
    gl_Position = position;
    vs_color = color;
}

フラグメントシェーダー

#version 450 core

in vec4 vs_color;
out vec4 fragColor;

void main(void)
{
    fragColor = vs_color;
}

頂点

r1.AddVertices(new CVertex[] {
            new CVertex(new Vector4(-0.5f,-0.5f,0f,1f), new Vector4(1f,0f,0f,1f)),
            new CVertex(new Vector4(0.5f,-0.5f,0f,1f), new Vector4(0f,1f,0f,1f)),
            new CVertex(new Vector4(0f,0.5f,0f,1f), new Vector4(0f,0f,1f,0f))
        });
4

1 に答える 1