关于OpenGL里使用多个缓冲区对象的问题

NUmen123 2009-02-11 11:07:56
RT~~~本人定义了两个缓冲区对象,并想将他们分别渲染出来。在OpenGL里要怎么实现呢?

写入数据时:
for (int i = 0;i < nmeshes;i++)
{
Lib3dsMesh *mesh = f3ds->meshes[i];
...;//由3ds文件中读取出需要数据
glGenBuffers(1,&m_Vertex[i]);
glGenBuffers(1,&m_Index[i]);
glBindBuffer(GL_ARRAY_BUFFER,m_Vertex[i]);
glBufferData(GL_ARRAY_BUFFER,(sizeof(float) * 9 * mesh->nfaces) + (sizeof(float) * 3 * mesh->nvertices),TotleV,GL_STATIC_DRAW);
glVertexPointer(3,GL_FLOAT,0,BUFFER_OFFSET(0));
glNormalPointer(GL_FLOAT,0,BUFFER_OFFSET(V_size));

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_Index[i]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(unsigned short) * 3 * mesh->nfaces,tempIndex,GL_STATIC_DRAW);
DrawCount[i] = mesh->nfaces * 3;
}


渲染时:

glBindBuffer(GL_ARRAY_BUFFER,m_Vertex[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_Index[0]);
glDrawElements(GL_TRIANGLES,DrawCount[0],GL_UNSIGNED_SHORT,NULL);

glBindBuffer(GL_ARRAY_BUFFER,m_Vertex[1]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,m_Index[1]);
glDrawElements(GL_TRIANGLES,DrawCount[1],GL_UNSIGNED_SHORT,NULL);

这样渲染得话,渲染出来的图形会出错……

OpenGL能像D3D那样能对不同的缓冲区对象进行渲染吗?
...全文
515 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 NUmen123 的回复:]
搞定了~~~原来还要把glVertexPointer之流的指向重设一下
[/Quote]
呵呵 恭喜!~
NUmen123 2009-02-11
  • 打赏
  • 举报
回复
搞定了~~~原来还要把glVertexPointer之流的指向重设一下
NUmen123 2009-02-11
  • 打赏
  • 举报
回复
自己顶一下~~~~

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧