2.6.5 实例化绘制glDrawArraysInstanced()
来源:互联网 发布:网站迁移到阿里云 编辑:程序博客网 时间:2024/05/15 04:20
高级话题
OpenGL 3.1(尤其是GLSL 1.40)增加了对实例化绘制的支持,它提供了另一个额外的值gl_InstanceID(叫做实例ID,并且它只在顶点着色器中可用),对于指定的每一组图元,该ID相应递增。
glDrawArraysInstanced()的运行和glMultiDrawArrays()类似,只不过对于glDrawArrays()的每次调用,开始索引和顶点计数是相同的(分别由first和count指定)。
- void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
primcount次有效地调用glDrawArrays(),在每次调用前设置GLSL顶点着色器值gl_InstanceID。mode指定了图元类型。first和count指定了传递给glDrawArrays()的数组元素的范围。
glDrawArraysInstanced()和如下的连续调用具有相同的效果(只不过我们的应用程序不必手动更新gl_InstanceID):
- for (i = 0; i < primcount; i++) {
- gl_InstanceID = i;
- glDrawArrays(mode, first, count);
- }
- gl_InstanceID = 0;
同样,glDrawElementsInstanced()执行同样的操作,但是允许随机访问顶点数组中的数据。
- void glDrawElementsInstanced(GLenum mode, GLsizei count,
- GLenum type, const void *indicies,
- GLsizei primcount);
primcount次有效地调用glDrawElements(),在每次调用前设置GLSL顶点着色器值gl_InstanceID。mode指定了图元类型。type指定了数组索引的数据类型,并且必须是如下之一:GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT或GL_UNSIGNED_INT。indicies和count指定了传递给glDrawElements()的数组元素的范围。
glDrawElementsInstanced()的实现如下所示:
- for (i = 0; i < primcount; i++) {
- gl_InstanceID = i;
- glDrawElements(mode, count, type, indicies);
- }
- gl_InstanceID = 0;
0 0
- 2.6.5 实例化绘制glDrawArraysInstanced()
- glPrimitiveRestartIndex、glDrawArraysInstanced
- OpenGL 实例化 初探 之 实例化绘制行星带
- NDK绘制图片实例
- Android绘制基础及手写绘制实例
- 【PyQt4 实例5】利用QPainter绘制各种图形
- 7.5.5编程实例-Bezier曲线曲面绘制
- OpenGL绘制旋转三角形实例
- OpenGL绘制旋转立方体实例
- HTML5 Canvas 绘制路径实例
- HTML5绘制饼图实例
- OpenGL绘制旋转三角形实例
- OpenGL绘制旋转立方体实例
- 使用Python绘制图表实例
- 使用canvas绘制气球实例
- OpenGL绘制旋转立方体实例
- Android开发实例:绘制正弦波
- 【CSS】绘制各种图形实例
- 解决jquery 与其它库的冲突
- 欢迎使用CSDN-markdown编辑器
- 条码标签软件中如何在二维码输入汉字
- [这段代码很Pythonic]相见恨晚的itertools库
- 理解矩阵(三)
- 2.6.5 实例化绘制glDrawArraysInstanced()
- 设计模式-抽象工厂模式
- java模拟https请求
- Android|图形图像之ColorMatrix
- Android如何制作一个简单的登陆界面
- HDU 2553 N皇后问题 && POJ 1321 棋盘问题 (深搜)
- 资料记录-Android
- POJ 1125 Stockbroker Grapevine (Floyd算法)
- 对于在myeclipse里安装Aptana遇见的Unhandled xulrunner问题得解决