【问题标题】:Opengl: first vertex always drawn at originOpengl:第一个顶点总是在原点绘制
【发布时间】:2014-10-14 11:11:46
【问题描述】:

我遇到的问题是第一个顶点总是在 (0,0,0) 处绘制,无论我希望它在哪里(所有其他位置都是正确的)。我认为这是我的“init”函数中的一个错误。 以下是我使用的职位:

positions.push_back( glm::vec3(-0.5f , -0.5f , 0.0f ) );
positions.push_back( glm::vec3( 0.0f ,  0.5f , 0.0f ) );
positions.push_back( glm::vec3( 0.5f , -0.5f , 0.0f ) );

我的“初始化”函数:

// generate buffers
glGenVertexArrays(1, &this->VAO);
glGenBuffers(1, &this->VBO);
glGenBuffers(1, &this->EBO);

glBindVertexArray(this->VAO);

// fill buffers with data
glBindBuffer(GL_ARRAY_BUFFER, this->VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * this->positions.size(), &this->positions[0], GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * this->indices.size(), &this->indices[0], GL_STATIC_DRAW);

// linking vertex attributes
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);

// unbind (only) VAO
glBindVertexArray(0);

还有我的“渲染”功能(只是为了渲染 VAO,没有着色器):

glBindVertexArray(this->VAO);
glDrawElements(GL_TRIANGLES, this->numElements, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);

我还尝试在“glVertexAttribPointer”函数中调整“步幅”和“指针”值,但没有成功。

【问题讨论】:

  • 如何声明位置,可能你误推了一个0顶点?
  • 不这么认为:std::vector<:vec3> 位置;然后是三个 push_backs
  • 如何填写“this->indices”? “this->numElements”是面的数量吗?
  • "indices" 是一个向量 (所以我使用 .push_back 来填充它),而 "numElements" 是位置的大小:在我的例子中是 3!但这不应该是错误。

标签: opengl vbo vao


【解决方案1】:

好的,感谢 Anton Angelov 我发现了错误...网格的索引需要从 0 开始(而不是从 1 开始)!再次感谢您的 cmets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多