opengl 使用OpenTK绘制线立方体

0yycz8jy  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(320)

我正在尝试使用ElementBufferObject绘制一个线立方体(仅边缘)。我已经设置了立方体的八个顶点的坐标和一个索引数组。接下来,我为未来的立方体初始化了 VAO 、VBO和EBO。然后我尝试绘制它,但我看不到任何结果。
立方体顶点和索引:

private readonly float[] _cubeVertices =
    {
    //  Bottom side
        -0.5f, -0.5f,  0.0f, // [0] Front-left
         0.5f, -0.5f,  0.0f, // [1] Front-right
        -0.5f, -0.5f, -1.0f, // [2] Rear-left
         0.5f, -0.5f, -1.0f, // [3] Rear-right

    //  Upper side
        -0.5f,  0.5f,  0.0f, // [4] Front-left
         0.5f,  0.5f,  0.0f, // [5] Front-right
        -0.5f,  0.5f, -1.0f, // [6] Rear-left
         0.5f,  0.5f, -1.0f  // [7] Rear-right
    };

    //indices
    private readonly uint[] _cubeEdges =
    {
        0, 1,
        0, 2,
        0, 4,

        3, 2,
        3, 1,
        3, 7,

        5, 6,
        5, 4,
        5, 1,

        6, 7,
        6, 4,
        6, 2
    };

onLoad(加载):

_cubeShader = new Shader("../../../Shaders/cubeShader.vert", "../../../Shaders/shader.frag");
    _cubeShader.Use();

    _vboCube = GL.GenBuffer();
    GL.BindBuffer(BufferTarget.ArrayBuffer, _vboCube);
    GL.BufferData(BufferTarget.ArrayBuffer, _cubeVertices.Length * sizeof(float), _cubeVertices, BufferUsageHint.StaticDraw);

    _vaoCube = GL.GenVertexArray();
    GL.BindVertexArray(_vaoCube);

    var vertexLocation = _cubeShader.GetAttribLocation("aPosition");
    GL.VertexAttribPointer(vertexLocation, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);

    _eboCube = GL.GenBuffer();
    GL.BindBuffer(BufferTarget.ElementArrayBuffer, _eboCube);
    GL.BufferData(BufferTarget.ElementArrayBuffer, _cubeEdges.Length * sizeof(uint), _cubeEdges, BufferUsageHint.StaticDraw);

实际图纸:

_cubeShader.Use();
    GL.BindVertexArray(_vaoCube);
    //GL.LineWidth(2.0f);
    GL.DrawElements(PrimitiveType.Lines, _cubeEdges.Length, DrawElementsType.UnsignedInt, 0);

cubeShader.vert:


# version 330 core

    in vec3 aPosition;

    void main(void)
    {
        gl_Position = vec4(aPosition, 1.0);
    }

shader.frag:


# version 330 core

    out vec4 FragColor;

    void main()
    {
        FragColor = vec4(1.0);
    }

你可以在这里找到Shader.cs代码GitHub。实际上,我所有的代码都基于LearnOpenTK repo
这是我第一次介绍OpenGL,所以很可能在这个过程中我错过了一些重要的东西。使用EBO绘制直线是可能的吗?我已经尝试了三角形的同样的事情,一切都解决了。

piwo6bdm

piwo6bdm1#

我想明白了。我忘了台词

GL.EnableVertexAttribArray(vertex Location);

呼叫后

GL.vertexAttribPointer()

相关问题