【问题标题】:Opengl program not recognizing second vertex inputOpengl程序无法识别第二个顶点输入
【发布时间】:2016-06-09 16:05:14
【问题描述】:

我正在阅读有关着色器和颜色的内容,如何将它们定义为顶点输入。因此,我按照教程进行操作,结果一团糟,因为程序只是向前读取,而不是进入下一行:

GLfloat vertecies[] = {
    //vertices              colors
    0.5f, -0.5f, 0.0f,      1.0f, 0.0f, 0.0f,// Bottom Right
    -0.5f, -0.5f, 0.0f,     0.0f, 1.0f, 0.0f,// Bottom Left
    0.0f,  0.5f, 0.0f,      0.0f, 0.0f, 1.0f,// Top 
};

这是以下代码,应该将第二个顶点输入设置为颜色:

glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertecies), vertecies, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);

glBindVertexArray(0);

这是我的顶点着色器代码:

const char* VertexShaderCode =
 "#version 330 core\r\n"
 ""
 "layout(location=0) in vec3 position;"
 "layout(location=1) in vec3 color;"
 ""
 "out vec3 theColor;"
 ""
 "void main()"
 "{"
 "  gl_Position = vec4(position, 1.0);"
 "  theColor = color;"
 "}";

这是片段着色器代码:

const char* FragmentShaderCode =
 "#version 330 core\r\n"
 ""
 "in vec3 theColor;"
 ""
 "out vec4 color;"
 ""
 "void main()"
 "{"
 "  color = theColor;"
 "}";

如果我做错了什么,请告诉我。

【问题讨论】:

  • 第一个指针的步幅应该是6 * sizeof(GLfloat)吧?

标签: opengl shader vertex-shader


【解决方案1】:

对于属性索引 0,您的步幅乘数是错误的。它应该是 6,因为一个顶点包含 3 个位置元素和 3 个颜色元素。替换

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多