gpt4 book ai didi

c++ - 向着色器添加线不会画任何东西

转载 作者:行者123 更新时间:2023-12-02 10:30:54 25 4
gpt4 key购买 nike

我有这个顶点着色器。当我删除in vec3 LVertexNorm及其相关的所有内容时。效果很好。但是,如果我将其添加进去,则不会再呈现任何内容。

 #version 140

in vec3 LVertexNorm;
in vec3 LVertexPos2D;

uniform mat4 MVP;

out vec3 norm;

void main() {
norm = LVertexNorm;
gl_Position = MVP * vec4( LVertexPos2D.x, LVertexPos2D.y, LVertexPos2D.z, 1 );
}

片段着色器
    #version 140

in vec3 norm;
out vec4 LFragment;
void main() {
LFragment = vec4( 1.0,1.0,1.0, 1.0 );
}

以及用于构建VAO的代码
    glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, verticesCount * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(program->getAttribute("LVertexPos2D"), 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, nbo);
glBufferData(GL_ARRAY_BUFFER, normalCount * sizeof(GLfloat), normals, GL_STATIC_DRAW);
glVertexAttribPointer(program->getAttribute("LVertexNorm"), 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesCount * sizeof(GLuint), indices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBindVertexArray(0);

我尝试了不同的方法。并且总是相同的结果。添加LVertexNorm后,着色器将停止工作。我不能说出为什么。有什么问题吗?

最佳答案

glEnableVertexAttribArray 的参数必须是顶点属性索引:

GLuint pos_inx = program->getAttribute("LVertexPos2D")
glVertexAttribPointer(pos_inx, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
glEnableVertexAttribArray(pos_inx);

GLuint norm_inx = program->getAttribute("LVertexNorm");
glVertexAttribPointer(norm_inx, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
glEnableVertexAttribArray(norm_inx);

当您具有顶点着色器输入变量 in vec3 LVertexNorm;in vec3 LVertexPos2D;时, LVertexNorm可能会获取属性索引0,而 LVertexPos2D会获取属性索引1。由于未启用顶点属性1,因此未指定顶点位置。
实际上,没有指定属性索引,并且可以是任意数量。但是,大多数驱动程序都使用从0开始的升序索引。

关于c++ - 向着色器添加线不会画任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62312904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com