我在使用glDrawRangeElements时遇到的问题
Problems I'm having with glDrawRangeElements
我的glDrawRangeElements()
有一些问题。基本上,我将给定模型中的每个网格都保存在同一个顶点/索引缓冲区中,并使用glDrawRangeElements()
选择性地绘制它们(如果必须的话,在每次绘制之间更改材质等(。
以下是我用来在模型中绘制网格的函数:
void Mesh::drawMesh(uint index)
{
if (index >= subMesh.size()) return;
va.drawRange(subMesh[index].start, subMesh[index].end);
}
其中va.drawRange()
为:
void VertexArray::drawRange(unsigned int start, unsigned int end)
{
if (ready == false)
return;
/* Bind our vertex array */
bindArray();
/* Draw it's contents */
if (ibo == 0)
glDrawArrays(prim, start, (end - start) + 1);
else
glDrawRangeElements(prim, start, end, (end - start) + 1, iformat, NULL);
unbindArray();
}
subMesh[i].start是子网格的第一个索引。subMesh[i].end是最后一个索引。这些值是在导入网格时确定的(使用assimp(:
subMesh[i].start = (uint)indices.size();
for (uint j = 0; j < mesh->mNumFaces; ++j)
{
aiFace& face = mesh->mFaces[j];
indices.push_back(face.mIndices[0] + vertexOffset);
indices.push_back(face.mIndices[1] + vertexOffset);
indices.push_back(face.mIndices[2] + vertexOffset);
}
subMesh[i].end = (uint)indices.size() -1;
vertexOffset += mesh->mNumVertices;
此代码将为场景中assimp导入的每个网格运行。
我遇到的问题是drawMesh(0(和drawMesh(1(绘制的东西是一样的,即使subMesh[0]和subMesh[1]包含不同的值(特别是,subMesh[0]的起点为0,终点为35,subMesh[1]的起点为36,终点为71(。如果我使用glDrawElements()
一次绘制整个网格,它会正确地绘制两个子网格,因此我知道顶点和索引数据是正确的。
我做错了什么?
(PS。我使用OpenGL 3.3,核心配置文件(
您没有正确使用此函数:
glDrawRangeElements(prim, start, end, (end - start) + 1, iformat, NULL);
glDrawRangeElements()
的第二个和第三个参数是而不是,用于指定索引数组的子范围。他们会提前告诉GL在绘图调用期间将使用哪些顶点索引,因此他们会在的顶点数组中指定一个子范围。您应该仅通过count
和indices
参数指定要渲染的索引数组部分。
你可以简单地使用
glDrawElements(prim, (end - start) + 1, iformat, (GLvoid*) (sizeof(yourElementType)*start) );
如果要使用glDrawRangeElements()
,则应额外跟踪每个对象使用的顶点数组的范围。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?