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)的更多相关文章

  1. OpenGL Shader Key Points (2)

    1.  Uniform 1.1.  Uniform变量 不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等. Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在sh ...

  2. OpenGL Shader Key Points (3)

    Shader和Program Program Link过后,Shader就可以从Program中Detach并删掉.这样是不是可以节省一点点显存呢? 链接到同一个program的vertex和frag ...

  3. OpenGL Shader in OpenCASCADE

    OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps ...

  4. A Simple OpenGL Shader Example II

    A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...

  5. A Simple OpenGL Shader Example

    A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...

  6. OpenGL Shader源码分享

    Opengl shader程序,旗帜混合纹理加载,通过N张图片,能够组合出数百个:http://www.eyesourcecode.com/thread-39015-1-1.html 用GLSL做了一 ...

  7. 【玩转cocos2d-x之四十】怎样在Cocos2d-x 3.0中使用opengl shader?

    有小伙伴提出了这个问题.事实上GLProgramCocos2d-x引擎自带了.全然能够直接拿来用. 先上图吧. 使用opengl前后的对照: watermark/2/text/aHR0cDovL2Js ...

  8. web.xml配置web中的key points(上)

    一.定义 定义时注意:xml元素是区分大小写的. <web-app></web-app> 这些必须小写 二.url-pattern 1)url-pattern 的值必须以/或者 ...

  9. Three Key Points of Success 成功三要素

    Everyone wants to be successful. Today I would like to share three simple key points of success. Num ...

随机推荐

  1. CentOS6.7 下安装JDK

    第一步:从官网上下载rpm版本的jdk文件. 第二步:安装JDK 执行命令rpm    -ivh    jdk-8u73-linux-i586.rpm 至此,JDK安装完成,我们来看下JDK的安装目录 ...

  2. SpriteKit:检测当新场景显示以后

    Detecting When a New Scene Is Presented Sprite Kit在SKScene类中提供2个可以重载的方法用来检测当一个场景过渡出去或过渡进来的时候. 第一个方法是 ...

  3. Web服务,XFire的一个例子

    Web服务优点 互操作性:实现不同系统间的相互调用(语言无关.平台无关) Web服务是什么 Web 服务是一类应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序 Web服务的体系结构 ...

  4. 剑指Offer——全排列递归思路

    剑指Offer--全排列递归思路 前言 全排列,full permutation, 可以利用二叉树的遍历实现.二叉树的递归遍历,前中后都简洁的难以置信,但是都有一个共同特点,那就是一个函数里包含两次自 ...

  5. Dynamics CRM 2015Online Update1 new feature之表单页Tabs切换

    CRM2011的界面相对于CRM4.0进行了比较大的改动,N久没见过4.0的界面了所以忘了表单是什么样子的了,但2011的表单中若含有多个tab的话,是可以通过左侧栏进行切换,话说2013的界面相对2 ...

  6. linux service 简单易懂贴

    service用于管理Linux操作系统中服务的命令 1.不是在所有linux发行版本中都有.主要是在redhat.fedora.mandriva和centos中. 2. 命令位于/sbin目录下,用 ...

  7. (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...

  8. spark概念、编程模型和模块概述

    http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...

  9. struts2国际化全例 错误解决

    在struts2中需要做国际化的有: jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化 在之前的例子中已经做过和国际化相关的例子了,在struts.xml中 ...

  10. 如何在Cocos2D 1.0 中掩饰一个精灵(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...