在OpenGL中使用带有VBO的偏移
Using an offset with VBOs in OpenGL
我想做的是用相同的vbo但不同的偏移量多次渲染网格。示例:
//Load VBO
glGenBuffers(2, &bufferObjects[0]);
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects[VERTEX_DATA]);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*size(vertices)*3, &vertices[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects[INDEX_DATA]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*size(indices), &indices[0], GL_STATIC_DRAW);
//Render VBO
glBindBuffer(GL_ARRAY_BUFFER, bufferObjects[VERTEX_DATA]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjects[INDEX_DATA]);
glDrawElements(renderFlag, nrIndices, GL_UNSIGNED_INT, 0);
如果我同时绘制孔网格,没有问题,但有可能用不同的起始索引绘制相同的网格吗,比如:
glDrawElements(renderFlag, 20, GL_UNSIGNED_INT, "WHAT TO WRITE HERE"?);
"开始索引"是什么意思?你可以指两件事之一:
从缓冲区对象中的其他位置开始
好吧,就这么做吧。CCD_ 1将偏移量带入缓冲区对象,以便从中提取索引。所以给它加一个值。
glDrawElements(renderFlag, 20, GL_UNSIGNED_INT, (void*)(ixStart * sizeof(GLuint)));
偏移从缓冲区获取的索引
这意味着您希望绘制相同范围的索引,但希望对这些索引值本身应用偏移量。因此,如果你的索引缓冲区看起来像这样:(1,4,2,0,5,…),并且你应用了20的偏移量,那么它将获取这些索引:(21,24,22,20,25,…)
这是用glDrawElementsBaseVertex
完成的。它看起来像这样:
glDrawElementsBaseVertex(renderFlag, 20, GL_UNSIGNED_INT, 0, offset);
相关文章:
- OpenGL VBO Indexing ( How to compute Index Array)
- OpenGL:第二个VBO破坏了第一个VBO
- OpenGL VAO VBO resize
- 将 OpenGL VBO 与自定义类/数据结构一起使用
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- c++ cuda opengl not rendering vbo
- 在 OpenGL 中,在保持良好帧速率的同时,VBO 中有多少个顶点的好目标是什么
- OpenGL 在与呈现线程不同的线程中创建和加载 VBO 信息
- 如何使用多个VAO和VBO在OpenGL中绘制多个对象
- Opengl VAO and VBO objects
- c++OpenGL发布用存储在对象中的vbo和vao绘制网格
- 在OpenGL中绘制VBO不起作用
- OpenGL VBO批处理最佳实践
- OpenGL VBO Troubles
- C++/OpenGL-用VBO绘制立方体
- OpenGL VBO正常/照明问题
- OpenGL VBO内存泄漏
- 用于VBO-OpenGL的顶点阵列
- 在同一个VBO OpenGL上用不同的纹理绘制不同的对象