OPengl学习(四)——顶点数组


1、 问题

1、在前面我们实现一个多彩三角形,调用三次glvertext()函数,如果在多边形,如20条边的,那么就要使用22次函数,如果还有颜色等其他要求,则会更多函数调用,多次函数调用开销比较大,能不能有其他方法,减少函数调用?

2、在正方体里,每一个顶点其实是三条边共用,每次绘制的时候都会调用三次,能不有共享顶点的冗余处理?

答案来了:那就是顶点数组。
定点数组:opengl提供一些顶点数组函数,允许只用少数数组指定大量的与顶点相关的数据,并用少量函数访问这些数据,可以解决上述问题。


2、步骤

使用顶点数组对几何图形渲染大致需要如下三个步骤:

1、激活(启用)最多可达八个数组(实际同时最多六个,有两个是相克的),每个数组有不同类型的数据:顶点坐标、表面法线、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标、多边形边界标识。我们也可以用混合顶底数组,将上述用到的数组按照规则写成一个数组。
2、把数据放入数组中,这些数组是通过他们的内存地址进行访问的。
3、用这些数据绘制几何图形。


2.1 激活数组

使用函数 :

glEnableClientState(GLenum type);

2.2 指定数组的数据

可以通过八个不同函数用于之地鞥数组,每个函数用于指定不同类型的数组,另外也可以用一个函数指定多个数组。
使用函数 :
在这里插入图片描述
这里 stride 跨距参数,一般在混合数组中用到,就是说告诉取值如何不长取值。

2.3 解引用和渲染

解引用就是 取得指针所指向的数据,解引用可以是单个数组,也可以是数组元素列表等。
主要用的函数

glArrayElement(GLint ith);    //单个数组元素
glArrayElements(GLenum mode, GLSize count, GLenum type,const GLvoid *indicas);           //数组元素列表
glDrawElements();

3、例子

主要部分如下:

 static GLint v1[] = {
            25,25,
            100,325,
            175,25,
            175,325,
            250,25,
            325,325
    };
    static GLfloat c1[] ={
        1.0,0.2,0.2,
        0.2,0.2,1.0,
        0.8,1.0,0.2,
        0.75,0.75,0.75,
        0.35,0.35,0.35,
        0.5,0.5,0.5
    };
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(3,GL_FLOAT,0,c1);
    glVertexPointer(2,GL_INT,0,v1);
    glBegin(GL_TRIANGLES);
    glArrayElement(2);
    glArrayElement(3);
    glArrayElement(5);
    glEnd();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的挖掘机

谢谢大家的厚爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值