【问题标题】:OpenGL - GL_LINE_STRIP acts like GL_LINE_LOOPOpenGL - GL_LINE_STRIP 就像 GL_LINE_LOOP
【发布时间】:2014-12-09 18:20:41
【问题描述】:

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

这是二维坐标数组:

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);
}

颜色属性。已禁用(线条为黑色且可见)

有什么想法吗?

【问题讨论】:

  • 如果透明颜色为黑色,线条颜色为黑色,我可以看到LINE_LOOPLINE_STRIP 给出相同的结果。也不要盲目假设sizeof(float) == 4(我看到你在vertexAttrib电话中做得很好)
  • 另外,如果行为相同,如何它们的行为完全一样? IOW 哪一个看起来坏了?
  • GLfloat 总是 4 字节 afaik,GL_LINE_STRIP 就像 GL_LINE LOOP 一样
  • GLfloat 至少 4个字节。
  • 有效!非常感谢

标签: c++ opengl


【解决方案1】:

你只有 5 对浮点数,所以 5 个顶点。数组的总大小是 4 乘以 10 个浮点数,即 40 个字节。

您的计数方程,40/4 给出 10。sizeof(array) / (sizeof(array[0]) * dimensionality) 将是正确的方程。

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多