在入门笔记一中比较详细的介绍了顶点着色器和片面着色器。

  在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Shaders和Fragment Shaders。

  Vertex Shaders,在你的场景中,每个顶点都需要调用的程序,成为“顶点着色器”。假如你在渲染一个简单地场景:一个长方形,每个角只有一个顶点。于是Vertex Shaders会被调用四次。她负责执行:灯光、集合变化等等的计算。得出最终的顶点位置后,为下面的Fragment Shaders提供必须的数据。

  Fragment Shaders,在你的场景中,大概每个像素都会调用的程序,称为“片面着色器”。在一个简单的场景,也就是刚刚说到的长方形。这个长方形所覆盖到的每一个像素,都会调用一次Fragment Shaders。片面着色器的责任是计算灯光以及更重要的是计算每一个像素最终的颜色。

  通过下面的简单例子来说明。

  在project中新建一个Empty文件,命名规则随意,例如:Simple.vertsh

  1. attribute vec4 Position; //
  2. attribute vec4 SourceColor; //
  3.  
  4. varying vec4 DestinationColor; //
  5.  
  6. void main(void) { //
  7. DestinationColor = SourceColor; //
  8. gl_Position = Position; //
  9. }

解析:

  1.“attribute”声明这个Vertsh Shaders会接受一个传入的值,这个变量名为“Position”。在后面的代码中,你会用她来传入顶点的位置数据。这个变量的类型是vec4,标示这是一个由4部分组成的矢量。

  2.于上面同理,这里面是传入顶点的颜色变量。

  3.vary表示她是一个传出变量(入门笔记一中有讲到她是易变变量,其实更针对的说她是渐变变量),她就是传入Flagment Shaders的参数。

  4.Shader语言的开始入口其实也是main函数

  5.设置目标颜色(varying变量) = 传入变量(attribute)

  6.gl_Postition是一个内置的传入变量。这是一个在Vertex Shader中必须设置的变量。这里我们直接把gl_Postiion = Position;没有做任何逻辑运算。

  一个简单的Vertex Shader就是这样了,接下来我们再创建一个简单的Fragment Shaders。

  在Project中新建一个Empty文件,命名规则随意,例如:Simple.fragsh

  1. varying low verc4 DestinationColor; //
  2.  
  3. void main(void){ //
  4. gl_FragColor = DestinationColor; // 3
  5. }

解析:

  1.这是从Vertex Shaders中传入的一个变量,这里和Vertex Shader定义必须是一致的。而额外加了一个关键修饰字:lowp。在Fragment Shaders中,必须给出一个计算的精度,出于性能考虑,总使用最低精度是一个好习惯。这里就是设置成最低的精度。如果你需要,你可以设置成medp或者highp。

  2.Fragment Shaders也是从main函数开始执行的。

  3.正如你在Vertex Shaders中必须设置gl_Position,在Fragment Shaders中必须设置gl_FragColor。

  这里也是直接从Vertex Shaders中取值,不做任何改变。

  还可以吧?接下来我们运用Vertex Shaders和Fragment Shaders来创建一些3D图形。

OpenGLES入门笔记三的更多相关文章

  1. OpenGLES入门笔记四

    原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...

  2. OpenGLES入门笔记一

    学习地址:http://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0 中文翻译:http://www.cnblogs ...

  3. OpenGLES入门笔记二

    #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> #import <OpenGLES/ES2/gl.h& ...

  4. Shader 入门笔记(三) ShaderLab 初识

    Unity中,Unity Shader 都是ShaderLab 来编写的.ShaderLab 是Unity提供的编写Unity Shader 的一种说明性语言. 1)Properties :定义了着色 ...

  5. SpringBoot入门笔记(三)、热加载

    1.配置热加载环境,在pom.xml添加如下代码 <build> <!--springloader plugin --> <plugins> <plugin& ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  7. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  8. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  9. System Generator入门笔记

    System Generator入门笔记  [CPLD/FPGA] 发布时间:2010-04-08 23:02:09  System Generator是Xilinx公司进行数字信号处理开发的一种设计 ...

随机推荐

  1. linux上课

    1. service --status-all 2. service sshd restart 3. service --status-all  | grep ssh 4. chkconfig --l ...

  2. 项目分享一:在项目中使用 IScroll 所碰到的那些坑

    最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://git ...

  3. innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法

    要理解这几个属性,首先要搞明白body,documentElement的区别 1.body是DOM对象里的body子节点,即<body>标签2.documentElement是整个节点树的 ...

  4. md5加密31位

    今天将其它服务器里的用户数据导入到新的系统数据库中 出现密码不匹配情况 查看原来数据库中密码得到结果位: 原服务器密码 明文 正确32位密闻 67b14728ad9902aecba32e22fa4f6 ...

  5. 1103简单SQL 行转列思路

    转自http://www.cnblogs.com/lhj588/p/3315876.html -- 经典行列转化DROP TABLE IF EXISTS TabName;CREATE TABLE Ta ...

  6. PHP中CURL方法curl_setopt()函数的参数

    PHP CURL curl_setopt 参数 bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL ...

  7. 【BZOJ 3531】【SDOI 2014】旅行

    因为有$10^5$个宗教,需要开$10^5$个线段树. 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似 ...

  8. .Net Core 1.0.0 RC2安装及示例教程

    前几天微软发布了.Net Core1.0.0 RC2 Preview版本,一直都想尝试下跨平台的.Net Core,一直拖到今天,也参考了下园友们的经验,闲时整理了一下安装的步骤,供大家参考. 我们要 ...

  9. 状态压缩 HDU 3091

    多组数据 n个点m条边 求有几个经过所有的点的环 最好用__int64 #include<stdio.h> #include<algorithm> #include<st ...

  10. SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)

    与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...