gpt4 book ai didi

c++ - Opengl VAO 绘制不正确

转载 作者:行者123 更新时间:2023-11-28 07:51:27 25 4
gpt4 key购买 nike

我最近在处理 Opengl VAO 时遇到了问题。目前我有使用 VBO 从 float 组绘制三角形的代码。

这是代码。

float vpp[] = { 0.75f, 0.75f, 0.0f,
0.75f, -0.75f, 0.0f,
-0.75f, -0.75f, 0.0f};

// Non Indexed
glGenBuffers(1, &m_mainVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_mainVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vpp), vpp, GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_POINTS, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);

现在当我尝试实现一个 VAO 时,程序只抽出 1 分。 (我会张贴屏幕截图,但我不能)。

还有这个的代码。

float vp[] = { 0.0f, 0.75f, -0.75f };

//VAO
unsigned short sInds[9] = { 1, 1, 0,
1, 2, 0,
2, 2, 0};

//Indexed
glGenBuffers(1, &m_mainVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_mainVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vp), vp, GL_STATIC_DRAW);

GLuint elBuf;
glGenBuffers(1, &elBuf);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elBuf);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 9 * sizeof(unsigned short), sInds, GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawElements(GL_POINTS, 3, GL_UNSIGNED_SHORT, sInds);
glDisableClientState(GL_VERTEX_ARRAY);


glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

谁能告诉我我做错了什么?

最佳答案

您的代码已损坏,这与您的“VAO”无关(或者正如 Datenwolf 指出的那样,您缺少 VAO)。

你好像没明白index buffer中的index到底是干什么的。您将属性 0 定义为一个包含 3 个浮点值的数组。在 C 术语中,您说 float attrib0[numberOfPositions][3];。当 OpenGL 看到第一个索引时,它会从数组中获取三个值。它将获取:

属性0[索引][0]; attrib0 index ; attrib0[索引][2];

您的索引是vertex 索引,而不是 GL_FLOAT 索引。数组元素每个是 3 个 float ,而不是每个 1 个 float 。

您尝试做的事情实际上不可能或没有用。正如 Datenwolf 指出的那样,它与 VAO 无关(因为您的代码不使用它们)。你说的是 indexed rendering ,这是与 VAO 不同的主题。

关于c++ - Opengl VAO 绘制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13694336/

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