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 ...
随机推荐
- 剑指Offer——关于劳动合同,这6件事毕业生必须知道!
剑指Offer--关于劳动合同,这6件事毕业生必须知道! 求职找工作,不少人拿到劳动合同的那刻,可能连合同内容都没看清,就挥着笔杆子"签签签".别急!劳动合同包含哪些条款你清楚 ...
- ROS(indigo)RRT路径规划
源码地址:https://github.com/nalin1096/path_planning 路径规划 使用ROS实现了基于RRT路径规划算法. 发行版 - indigo 算法在有一个障碍的环境找到 ...
- 不规则递归转换为while,留底
我发现当参数并不太多时,从性能的角度来看,没必要用一个class来保存参数(虽然看起来更加生动形象),直接用最简单的元组就可以了. from hanoi import * # example tree ...
- 全文检索 Lucene(3)
看完前两篇博客之后,想必大家对于Lucene的使用都有了一个比较清晰的认识了.如果对Lucene的知识点还是有点模糊的话,个人建议还是先看看这两篇文章. 全文检索 Lucene(1) 全文检索 Luc ...
- 4.3、Android Studio突破64K方法限制
当应用代码和库代码代码超过64K限制时,早期版本的构建系统会出现如下提示: Conversion to Dalvik format failed: Unable to execute dex: met ...
- Servlet之异常处理
当一个 Servlet 抛出一个异常时,Web 容器在使用了exception-type 元素的 web.xml 中搜索与抛出异常类型相匹配的配置. 前提是必须在 web.xml 中使用 error- ...
- 保证service存活
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...
- 【OpenGL】理解一些基本问题
写在前面 啦啦啦,搞了很久的Unity Shaders,越学越觉得基础知识很重要.学Unity Shader的时候,总会想,shader到底是什么呢?shader的pipeline是什么呢?它们是怎么 ...
- iOS开发中的零碎知识点笔记 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 1.关联 objc_setAssociatedObject关联是指把两个对象相互关联起来,使得其中的一个对象作为另外 ...
- Jeff Atwood:软件工程已死?
原文作者:Jeff Atwood 2009年7月,Tom DeMarco在<IEEE Software>杂志上发表了一篇论文,题为"Software Engineering: A ...