OpenGL基本图元

图元 描述
GL_POINTS 每个顶点在屏幕上都是单独点
GL_LINES 每⼀对顶点定义⼀个线段
GL_LINE_STRIP ⼀个从第⼀个顶点依次经过每一个后续顶点而绘制的线条
GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来了.
GL_TRIANGLES 每3个顶点定义⼀个新的三⻆形
GL_TRIANGLE_STRIP 共用⼀个条带(strip)上的顶点的一组三⻆形
GL_TRIANGLE_FAN 以一个圆点为中⼼呈扇形排列,共用相邻顶点的一组三角形
链接方式显示图.png

OpenGL点/线

今天我们将从更底层更基础的角度来详细学习OpenGL图元渲染。点,是最简单的图像。每个特定的顶点在屏幕上都仅仅是一个单独的点。默认的情况下,点的大小是一个像素的大小。

  • 修改点的大小
 //1.最简单也是最常用的4.0f ,表示点的大小
  glPointSize(4.0f) ;
 //2.设置点的大小范围和点与点之间的间隔
 GLfloat sizes[2] = {2.0f,4.0f};
 GLfloat step = 1.0f;
 //3.获取点大小范围和最小步长
 glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
 glGetFloatv(GL_ POINT_GRAULARITY ,&step);
 //4.通过使用程序点大小模式来设置点大小
 glEnable (GL_ PROGRAM_ POINT_SIZE) ;
 //5.这种模式下允许我们]通过编程在顶点着器或几何着色器中设置点大小。着色器内建变量: gl_ PointSize,并且可以在器源码直接写
 gl_PointSize = 5.0;
  • 设置线段宽度
//6. 设置线段宽度
glLineWidth(2.5f);

OpenGL三角形

对于OpenGL 光栅化最欢迎的是三⻆角形.3个顶点就能构成⼀一个三⻆角形. 三⻆角形类型来⾃自于顶点.并不不是所有的三⻆角形都是正 三⻆角形等.


三角形环绕方式.png
  • 在绘制第⼀一个三⻆角形时,线条是按照从V0-V1,再到V2。最后再回到V0的⼀一个闭合三⻆角形。 这个是沿着顶点顺时针⽅方向。这种 顺序与⽅方向结合来指定顶点的⽅方式称为环绕
  • 在默认情况下,OpenGL 认为具有逆时针方向环绕的多边形为正面. 这就意味着上图左边是正面,右边是反面。
  • 为什么会认为这个问题会很重要了?因为我们常常希望为一个多边形的正面和背面分别设置不同的物理特征。我们可以完全隐藏一个多边形的背面,或者给它设置一种不同的颜色和反射属性。纹理图像在背面三角形中也是相反的。在一个场景中,使所有的多边形保持环绕方向的一致,并使用正面多边形来绘制所有实心物体的表面是非常重要的。
glFrontFace(GL_CW);
GL_CW:告诉OpenGL 顺时针环绕的多边形为正⾯;
GL_CCW:告诉OpenGL 逆时针环绕的多边形为正⾯;

OpenGL 三⻆形带

对于很多表面或者形状⽽言,我们会需要绘制⼏个相连的三⻆形. 这是我们可以使用GL_TRIANGLE_STRIP 图元绘制一串相连三角形,从而节省⼤量的时间。


三角形带.png

优点:

  1. ⽤前3个顶点指定第1个三⻆形之后,对于接下来的每⼀个三⻆形,只需要再指定1个顶点。需要绘制⼤量的三⻆形时,采⽤这种⽅法可以节省⼤量 、的程序代码和数据存储空间。
  2. 提供运算性能和节省带宽。更少的顶点意味着数据从内存传输到图形卡的速度更快,并且顶点着⾊器需要处理的次数也更少了。

OpenGL 三⻆形扇

对于很多表面或者形状⽽言,我们会需要绘制几个相连的三⻆形. 这是我们可以使用GL_TRIANGLE_FAN 图元绘制一组围绕一个中⼼点相连的三⻆形。


三角形扇.png
  • 上面最左边,有v0、v1、v2三个顶点,这时候再来一个顶点V3,如果要让他变成一个扇形, 采用GL_TRIANGLE_FAN模式,我们公用v1、v2,对于新来的顶点v3,我们把它变成一个三角形,与中心点v0连接起来围绕。
  • 再来一个顶点v4,公用v0、v3,连接v4,把它变成一个三角形,就出来最右边第三个图了。
  • 增加的顶点会指向中心点,比如顶点v3、v4 指向圆点v0;

OpenGL⼯具类 GLBatch

GLTools库中包含额一个简单的容器类,叫做GLBatch。这个类可以作为7种图元的简单批次容器使用。而且它知道在使用GL_ ShaderManager 支持的任意存储着色器时如何对图元进行渲染。

1. void GLBatch::Begain(GLeunm primitive,GLuint nVerts,GLuint nTexttureUnints = 0);
参数1:图元
参数2:顶点数
参数3:⼀组或者2组纹理坐标(可选)

2. 复制顶点数据(一个由3分量x,y,z顶点组成的数组) 把顶点复制进去
void GLBatch::CopyVerterxData3f(GLfloat *vVerts);


3. 复制表面法线数据
void GLBatch::CopyNormalDataf(GLfloat *vNorms);

4. 复制颜⾊数据
void GLBatch::CopyColorData4f(GLfloat *vColors);

5. 复制纹理坐标数据
void GLBatch::CopyTexCoordData2f(GLFloat *vTextCoords, GLuint uiTextureLayer);

6. 结束数据复制
void GLBatch::End(void);

7. 绘制图形
void GLBatch::Draw(void);

以上有不正确的地方欢迎留言指出,谢谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容