OpenGL 基本图元

基本图元

截屏2020-07-13 17.55.48.png
  • 这些图元将在一个包含给定图元的所有顶点和相关属性的单个批次中进行渲染
  • 本质:在一个给定的批次中的所有定点都会用于组成这些图元中的一个

基本图元事例

2500437-13ab305aadd4e3d2.png

  • 最简单的图元,每个特定的顶点在屏幕上都仅仅是一个单独的点
  • 默认情况下,点的大小为一个像素
  • 可以调用以下方法改变默认点点大小
void glPointSize(GLfloat size)
注意:并不是所有的点的大小都能够支持的,应该先确认指定点大小是否可用(用以下函数获得点大小的范围及它们之间的最小间隔)
GLfloat sizes[2];//存储支持的点大小范围
GLfloat step;//存储支持的点大小增量

//获取支持的点大小范围和步长(增量)
glGetFloatv(GL_POINT_SIZE_RANCE,sizes);
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);

线

  • 比点更进一步的独立的线段
  • 在二个顶点之间绘制的包含偶数个顶点的一批线段且每个顶点都是线段的端点
  • 默认线段的宽度为一个像素
  • 改变线段宽度的函数(唯一方式)
void glLineWidth(GLfloat width);

注意:

  • 线带:连续地从一个顶点到下一个顶点绘制线段,以形成一个真正连接点的线条(GL_LINE_STRIP)
  • 线环:是线带的一种简单扩展,在线带的基础上额外增加了一条连接着一批次中最后一个点和第一个点的线段(GL_LINE_LOOP)

三角形

  • 可能是存在最简单的实体多边形(只有三个边)
  • 光栅化硬件最欢迎三角形(OpenGL中支持的唯一一种多边形)

单独的三角形

1.png

环绕

  • 如上图所示:连接顶点的线段上所示的箭头,无论左右三角形都是按照顶点被指定的顺序(顺时针或逆时针)
  • 环绕:即这种顺序与方向结合来指定顶点的方式(顺时针环绕或逆时针环绕)
2.png

注意:

  • 默认情况:OpenGL认为具有逆时针方向环绕的多边形为正面的(顺时针方向环绕:反面)
  • 对一个多边形的正反面需要设置不同的物理特征(颜色,反射,纹理)
  • 在一个场景中,使所有的多边形保持环绕方向的一致,并使用正面多边形来绘制所有实心物体的外表面是非常重要的
//此函数可以改变以上的默认行为
glFrontFace(GL_CW);
GL_CW(此参数告诉OpenGL顺时针环绕的多边形将被认为是正面)
GL_CCW(此参数把多边形的正面重新恢复为逆时针环绕)

三角形带

  • 对于许多表面和形状来说,我们可能需要绘制几个相连的三角形。可以使用GL_TRIANGLE_STRIP图元绘制一串相连的三家形,从而节省大量的时间
3.png

思考:为什么使用三角形带而不分别指定每个三角形?

  • 优点1:用前三个顶点指定第一个三角形之后,对于接下来的每个三角形,只需要再指定一个顶点(尤其是需要绘制大量的三角形时,采用这种方法可以节省大量的程序代码和数据存储空间)

  • 优点2:提高运算性能和节省带宽(更少的顶点意味着数据从内存传输到图形卡的速度更快,顶点着色器需要进行处理的次数也更少)

三角形扇

  • 可以使用GL_TRIANGLE_FAN创建一组围绕一个中心点点相连三角形
4.png

简单批次容器

  • GLTools库中包含一个简单的容器类,叫GLBatch
  • GLBatch以供7种基本图元简单批次的容器使用,且它知道在使用GLShaderManager支持的任意存储着色器时如何对图元进行渲染的

注意:
OpenGL内部运行机制实际上比这要复杂得多(GLBatch类只是一个便利类)

GLTools使用

1.对批次进行初始化
//包含那种类型图元,顶点数,(可选)一组或二组纹理坐标
void GLBatch::Begin(GLenum primitive, GLuint nVerts, GLuint nTextureUnits = 0);

2.至少要复制一个由3个分量(x,y,z)顶点组成的数组
void GLBatch::CopyVertexData3f(GLfloat *vVerts);
//也可以复制表面法线,颜色和纹理坐标
void GLBatch::CopyNormalDataf(GLfloat *vNorms);
void GLBatch::CopyColorData4f(GLfloat *vColors);
void GLBatch::CopyTexCoordData2f(GLfloat *vTex, GLuint uiTextureLayer);
3.最后结束
void GLBatch::Draw(void);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354