gpt4 book ai didi

c++ - glDrawElements 不渲染所有点

转载 作者:行者123 更新时间:2023-11-30 02:44:01 29 4
gpt4 key购买 nike

首先,我使用 OpenGL 渲染点云。

// The object pointCloud wraps some raw data in different buffers.

// At this point, everything has been allocated, filled and enabled.

glDrawArrays(GL_POINTS, 0, pointCloud->count());

这很好用。

但是,我需要渲染一个网格而不仅仅是点。要实现这一点,最明显的方法似乎是使用 GL_TRIANGLE_STRIP 和 glDrawElements 以及良好的索引数组。

所以我首先将我当前的代码转换为应该呈现完全相同的东西的东西。

// Creates a set of indices of all the points, in their natural order
std::vector<GLuint> indices;
indices.resize(pointCloud->count());
for (GLuint i = 0; i < pointCloud->count(); i++)
indices[i] = i;

// Populates the element array buffer with the indices
GLuint ebo = -1;
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size(), indices.data(), GL_STATIC_DRAW);

// Should draw the exact same thing as the previous example
glDrawElements(GL_POINTS, indices.size(), GL_UNSIGNED_INT, 0);

但它不能正常工作。它渲染的东西似乎只是第一季度的积分。
如果我通过将索引范围缩小 2 或 4 倍来弄乱索引范围,则会显示相同的点。如果它小 8 倍,则只有前半部分。
如果我只用偶数索引填充它,则会显示同一组点的一半。
如果我在集合的一半处开始,则不会显示任何内容。

与 glDrawArrays 相比,glDrawElement 的行为方式显然有一些我遗漏的地方。

预先感谢您的帮助。

最佳答案

作为第二个参数传递给 glBufferData() 的大小以字节为单位。发布的代码改为传递索引的数量。调用需要:

glBufferData(GL_ELEMENT_ARRAY_BUFFER,
indices.size() * sizeof(GLuint), indices.data(), GL_STATIC_DRAW);

关于c++ - glDrawElements 不渲染所有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695733/

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