OpenGL Shader Key Points (1)
1. Shader起步
1.1. 可编程管线
仅考虑Vertex shader和fragment shader:
1.2. Shader Object
在编译阶段生成,把shader源代码编译成Shader 对象。
Shader对象分类
- Vertex Shader
- Fragment Shader
- Geometry Shader
- Tess EvaluationShader
- Tess ControlShader
API:
glCreateShader
glCompileShader
glDeleteShader
glGetShaderiv
glGetShaderInfoLog
1.3. Shader Program
在链接阶段,创建shader程序,链接shader对象。
API:
glCreateProgram
glAttachShader
glLinkProgram
glUseProgram
glDeleteProgram
glGetProgramiv
glGetProgramInfoLog
2. Shader编程入门
2.1. 编写Shader
Vertex Shader:
#version 400
in vec3 VertexPosition;
in vec3 VertexColor;
out vec3 Color; void main()
{
Color = VertexColor;
gl_Position = vec4(VertexPosition,1.0);
}
// Color: 输出变量,在fragment shader中使用
// gl_position: 内建的输出变量
Fragment Shader:
#version 400
in vec3 Color;
out vec4 FragColor;
void main()
{
FragColor = vec4(Color, 1.0);
}
2.2. 绑定参数
定义顶点属性索引与vertex shader输入变量之间的映射关系
glBindAttribLocation(programHandle,0, "VertexPosition");
glBindAttribLocation(programHandle,1, "VertexColor");
glBindFragDataLocation(programHandle,0, "FragColor");
2.3. 创建几何对象
Buffer对象 (VBO)
glGenBuffers // 创建buffer对象
glBindBuffer // 指定当前要绑定的VBO
glBufferData// 设置Buffer对象数据
VertexArray对象(VAO):把VBO组装成VAO
glGenVertexArrays
glBindVertexArray //指定当前要绑定的VAO
glEnableVertexAttribArray //启用渲染使用的Buffer
glBindBuffer// 指定当前要绑定的VBO
glVertexAttribPointer//设置VAO如何使用的VBO数据
2.4. 绘制几何对象
glBindVertexArray//指定当前要绑定的VAO
glDrawArrays//绘制图元格式
2.5. 技巧
2.5.1. layout qualifiers
在shader中指定输入参数对应的vertex buffer index
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexColor;
layout (location = 0) out vec4 FragColor;
2.5.2. element arrays
使用index buffer
2.5.3. Interleaved arrays
用一个buffer object存放vertex的多个属性。
不建议使用。
OpenGL Shader Key Points (1)的更多相关文章
- OpenGL Shader Key Points (2)
1. Uniform 1.1. Uniform变量 不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等. Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在sh ...
- OpenGL Shader Key Points (3)
Shader和Program Program Link过后,Shader就可以从Program中Detach并删掉.这样是不是可以节省一点点显存呢? 链接到同一个program的vertex和frag ...
- OpenGL Shader in OpenCASCADE
OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps ...
- A Simple OpenGL Shader Example II
A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...
- A Simple OpenGL Shader Example
A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...
- OpenGL Shader源码分享
Opengl shader程序,旗帜混合纹理加载,通过N张图片,能够组合出数百个:http://www.eyesourcecode.com/thread-39015-1-1.html 用GLSL做了一 ...
- 【玩转cocos2d-x之四十】怎样在Cocos2d-x 3.0中使用opengl shader?
有小伙伴提出了这个问题.事实上GLProgramCocos2d-x引擎自带了.全然能够直接拿来用. 先上图吧. 使用opengl前后的对照: watermark/2/text/aHR0cDovL2Js ...
- web.xml配置web中的key points(上)
一.定义 定义时注意:xml元素是区分大小写的. <web-app></web-app> 这些必须小写 二.url-pattern 1)url-pattern 的值必须以/或者 ...
- Three Key Points of Success 成功三要素
Everyone wants to be successful. Today I would like to share three simple key points of success. Num ...
随机推荐
- mysql字符集,insert,update,delete,select
发现有错误:数据太长了.//查看数据库的所有编码:show variables like 'character%';-----+| character_set_client | utf8 ...
- mysql进阶(二十九)常用函数
mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...
- Spring之AOP模块
AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特征 Spring推荐使用接口编程 Spring提供三种拦截器:方法前拦截器.返回后拦截器.异 ...
- GDAL库三个读取Jpeg2000格式驱动测试
0.目的 GDAL库中提供了四五种读取Jpeg2000的驱动,但是各个驱动读取数据的效率各不相同,下面就针对三种读取jpeg2000的效率进行测试. GDAL库中提供的读取Jpeg2000的驱动有下面 ...
- iOS完整预装字体清单
iOS完整预装字体清单:http://iosfonts.com/
- Linux/Unix--设备类型
在Linux以及所有的Unix系统中,设备被分为以下三种类型: 块设备 字符设备 网络设备 块设备通常写为 blkdev ,它是可以寻址的 ...
- antlr v4 使用指南连载1——简介
antlr v4简介 antlr是一个强大语言解析工具,可以用于处理结构化文本.二进制文件.说白了,其实可以这么认为,antlr是一个更强大的正则表达式工具.它可以完成更多正则表达式无法 ...
- Android开发学习之路--UI之ListView
这里再学习写android的ListView,其实我们都使用过ListView,就像手机的联系人,就是用的ListView了.下面就实现下简单的ListView吧,首先是xml文件中添加相关的代码: ...
- (NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章 ...
- listview下拉刷新上拉加载扩展(二)-仿美团外卖
经过前几篇的listview下拉刷新上拉加载讲解,相信你对其实现机制有了一个深刻的认识了吧,那么这篇文章我们来实现一个高级的listview下拉刷新上拉加载-仿新版美团外卖的袋鼠动画: 项目结构: 是 ...