OpenGL ES _ 着色器_ 顶点着色器详解

OpenGL ES _ 入门_01
OpenGL ES _ 入门_02
OpenGL ES _ 入门_03
OpenGL ES _ 入门_04
OpenGL ES _ 入门_05
OpenGL ES _ 入门练习_01
OpenGL ES _ 入门练习_02
OpenGL ES _ 入门练习_03
OpenGL ES _ 入门练习_04
OpenGL ES _ 入门练习_05
OpenGL ES _ 入门练习_06
OpenGL ES _ 着色器 _ 介绍
OpenGL ES _ 着色器 _ 程序
OpenGL ES _ 着色器 _ 语法
OpenGL ES_着色器_纹理图像
OpenGL ES_着色器_预处理
OpenGL ES_着色器_顶点着色器详解
OpenGL ES_着色器_片断着色器详解
OpenGL ES_着色器_实战01
OpenGL ES_着色器_实战02
OpenGL ES_着色器_实战03

学习是一件开心的额事情

提醒广大网友,当你看到这篇文章的时候,以后写的关于OpenGL 更多的便是代码实战了!

本节学习目标

  • 内置的属性输入变量
  • 用户定义的属性变量
  • 如何把顶点数据通过应用程序发送到着色器程序
  • 特殊输出变量

在讲解内容之前,先看一张图

GLSL 顶点着色器的输入和输入变量

先讲讲这个图!箭头的方向表示输入和输出

  • uniform 变量,程序中保持常量
  • attribute 变量,除了标准的顶点状态,他们还可以根据顶点进行更新
  • varying 变量,用于向片段管线传递数据,这些数据包括颜色,纹理坐标和其它基于片段的数据

内置的属性输入变量

这些变量反应了当前的OpenGL 状态

|变量|类型|指定函数|描述|
|---|
|gl_Vertex|vec4|glVertex|顶点的全局空间坐标|
|gl_Color|vec4|glColor|主颜色值|
|gl_SecondaryColor|vec4|glSecondaryColor|辅助颜色|
|gl_Normal|vec4|glNormal|光照法线|
|gl_MultiTexCoordn|vec4|glMultiTexCoord(n,...)|纹理单元n的纹理坐标,n取值为0·7|
|gl_FogCoord|float|glFogCoord|雾坐标|
|gl_VertexID|int|-|自上次渲染开始,当前的索引|
|gl_InstanceID|int|glDrawArraysInstanced,<p>glDrawElementsInstanced|相关图元的实例ID|


用户定义的属性变量

用户定义的属性变量都是全局变量,在OpenGL 应用程序将值传递给着色器程序。
用户定义的属性变量类型可以是 float、vec和mat

着色器程序和应用程序的关系图

如上图,着色器程序和应用程序是两块独立的程序,我们要在应用程序中,链接着色器程序,着色器程序执行后,对OpenGL 进行渲染。如果想要了解更多着色器程序相关的内容请点击这里

接下来,我们重点讲讲如何给着色器中的自定义变量赋值.
1.首先你要拿到这个变量的索引
GLint glGetAttribLocation(GLuint program,const char *name)
2.指定program下次执行时,那个索引应该和name相关联
void glBindAttribLocation(Glint program,GLuint index,const char *name)
3.给索引设置关联的值
void glVertexAttrib{1234}{sfd}(GLuint index,TYPE values);
void glVertexAttrib{123}{sfd}v{GLuint index,const TYPE *values};
void glVertexAttrib4{bsifd ub us ui}v{GLuint index,TYPE values};
void glVertexAttrib4Nub{GLuint index,TYPE values};
void glVertexAttrib4N{bpsi ub us ui}v{GLuint index,const Type};
void glVertexAttribI{1234}{i ui}(GLuint index,TYPE values);
void glVertexAttriI4{psi ub us ui}v{Glint index,const TYPE *values};

特殊输出变量

gl_Position 指定了着色器在推出执行之后顶点的最终位置。这个变量必须写入到着色器中.
gl_Position 输出顶点的位置计算公式:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
如果想要让顶点着色器的结果与固定功能的管线保持一致,可以使用下面的代码设置:
gl_Postition = transform()
gl_PointSize 用于控制点的输出大小,如果想要顶点着色器程序内部控制点的大小,可以调用glEnable(GL_VERTEX_PROGRAM_POINT_SIZE) 函数,它将覆盖当前可能已指定的任何点的大小值。
用户定义的裁剪平面,可以编写一个齐次坐标写入到gl_ClipVertex 变量中。为了正确的处理裁剪,被指定的平面以及写入到gl_ClipVertex 的坐标必须位于相同的坐标空间中。普通的裁剪空间是在视觉坐标坐标系中的,可以把当前的顶点变换到视觉坐标戏中便于进行裁剪:
gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex;

技能提高:
顶点着色器能够为顶点设置正面和背面颜色值,在默认情况下,不管顶点着色器内部怎么设置这些顶点,实际选择的将是正面颜色,那怎么显示背面的颜色呢?
调用 glEanable(GL_VERTEX_PROGRAM_TWO_SIDE 值为参数),就可以根据底层图元的方向来选择颜色.

顶点着色器中使用纹理贴图
1.查询是否可以使用纹理贴图
glIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS)
2.顶点着色器不能使用mipmap选择,但是可以使用texture*Load 函数手工选择mipmap

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

推荐阅读更多精彩内容