OpenGL - GL_LINE_STRIP的行为类似于GL_LINE_LOOP

时间:2014-12-09 18:20:42

标签: c++ opengl

我使用OpenGL 3.3和GLFW。 问题是GL_LINE_STRIP和GL_LINE LOOP给出了相同的结果。

这是2D坐标数组:

GLfloat vertices[] = 
    {
     0, 0,
     1, 1,
     1, 2,
     2, 2,
     3, 1,
    };

属性指针:

// Position attribute 2D
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);

最后:

glDrawArrays(GL_LINE_STRIP, 0, sizeof(vertices)/4);

顶点着色器:

#version 330 core
layout (location = 0) in vec2 position;
layout (location = 1) in vec3 color;

out vec3 ourColor;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    gl_Position = projection * view * model * vec4(position, 0.0f, 1.0f);
    ourColor = color;
}

片段着色器:

#version 330 core
in vec3 ourColor;

out vec3 color;

void main()
{
    color = vec3(ourColor);
}

颜色属性被禁用(线条是黑色和可见的)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您只有 5 对浮点数,因此 5 顶点。数组的总大小是10个浮点数的4倍,因此是40个字节。

你的计数公式,40/4给出10. sizeof(array) / (sizeof(array[0]) * dimensionality)将是正确的公式。