OpenGL的Draw函数

OpenGL的Draw函数

前言


初学OpenGL时会发现各种各样的Draw*函数,每种Draw*的功能和适合使用场景是什么,在这里做一下整理。对于老式的Draw(OpengGL1,2的glBegin)不做讨论,其实理解OpenGL3,4的方法就够了。

1.图元类型


Draw是用于画图元的,这些图元包括的类型有:

基本图元 包含类型
Point Point list
Line Line list, Line strip, Line loop
triangle Triangle list, Triangle strip, Triangle fan

假设Draw输入了N个点结合它们的拓扑结构看,这些图元类型特点很好理解:
这里写图片描述

  • list:独立的图元
    取每k个点作为一个单独的图元(point,k=1;line k=2;triangle k=3),每个图元没有公共顶点,如N=8时,能画出8个point,4条line;N=9时,画出3个triangle。
  • strip:相连着的图元,line和triangle才有。
    1)对于line,前面2个顶点组成一条线后,后面的每个顶点都与其前一个顶点组成一条线,因此共N-1条线;
    2)对于triangle,前面3个顶点组成一个三角形后,后面的每个顶点与其前两个顶点组成一个三角形,因此共N-2个三角形
  • Line loop:类似Line strip,但首尾两个顶点也构成一条线。
  • Triangle fan:有一个公共顶点,前面三个顶点组成一个三角形后,后面的顶点于前一个顶点及公共顶点组成新的三角形。

谈谈strip的特点

  • 当模型由许多相连的三角形构成时,使用strip较于list可以显著减少带宽。
  • triangle strip或line strip相邻两个图元会有重合的顶点或线,但渲染时不会重复画像素。
  • triangle strip的所有三角形的绕向都是一致,这样保证了整个strip都被cull或都不被cull。
  • 当渲染模式为flat shading时,一个三角形内部所有像素将被渲染成同一种颜色,颜色默认来自三角形的最后一个顶点(也可通过glProvokingVertex选择第一个顶点)。因此结合上一个特点,可知strip中每个三角形分别为:(0,1,2),(2,1,3),(2,3,4),(4,3,5),(4,5,6)……flat shading的颜色分别来自顶点2,3,4,5,6……通过一个实验验证,定义6个顶点,其颜色分别为红,绿,蓝,红,绿,蓝。

    void init()
    {
        glViewport(0,0,128,128);
    
        glGenVertexArrays(NumVAOs, VAOs);//生成VAO
        glBindVertexArray(VAOs[Triangles]);//绑定VAO
        GLfloat positions[NumVertex][2]={//6个顶点的位置坐标
            {0.0f, 32.0f},
            {16.0f, 0.0f},
            {32.0f, 32.0f},
            {48.0f, 0.0f},
            {64.0f,  32.0f},
            {80.85f, 0.0f}
        };
        GLfloat colors[NumVertex][4]={//6个顶点的Color
        
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值