OpenGLES入门笔记三
在入门笔记一中比较详细的介绍了顶点着色器和片面着色器。
在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Shaders和Fragment Shaders。
Vertex Shaders,在你的场景中,每个顶点都需要调用的程序,成为“顶点着色器”。假如你在渲染一个简单地场景:一个长方形,每个角只有一个顶点。于是Vertex Shaders会被调用四次。她负责执行:灯光、集合变化等等的计算。得出最终的顶点位置后,为下面的Fragment Shaders提供必须的数据。
Fragment Shaders,在你的场景中,大概每个像素都会调用的程序,称为“片面着色器”。在一个简单的场景,也就是刚刚说到的长方形。这个长方形所覆盖到的每一个像素,都会调用一次Fragment Shaders。片面着色器的责任是计算灯光以及更重要的是计算每一个像素最终的颜色。
通过下面的简单例子来说明。
在project中新建一个Empty文件,命名规则随意,例如:Simple.vertsh
attribute vec4 Position; //
attribute vec4 SourceColor; // varying vec4 DestinationColor; // void main(void) { //
DestinationColor = SourceColor; //
gl_Position = Position; //
}
解析:
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
varying low verc4 DestinationColor; //
void main(void){ //
gl_FragColor = DestinationColor; // 3
}
解析:
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入门笔记三的更多相关文章
- OpenGLES入门笔记四
原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...
- OpenGLES入门笔记一
学习地址:http://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0 中文翻译:http://www.cnblogs ...
- OpenGLES入门笔记二
#import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> #import <OpenGLES/ES2/gl.h& ...
- Shader 入门笔记(三) ShaderLab 初识
Unity中,Unity Shader 都是ShaderLab 来编写的.ShaderLab 是Unity提供的编写Unity Shader 的一种说明性语言. 1)Properties :定义了着色 ...
- SpringBoot入门笔记(三)、热加载
1.配置热加载环境,在pom.xml添加如下代码 <build> <!--springloader plugin --> <plugins> <plugin& ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- System Generator入门笔记
System Generator入门笔记 [CPLD/FPGA] 发布时间:2010-04-08 23:02:09 System Generator是Xilinx公司进行数字信号处理开发的一种设计 ...
随机推荐
- 如何把自己打造成技术圈的 papi 酱
最近半年,一个叫papi酱的平胸女子连续在微博.朋友圈.创业圈刷屏,当之无愧成了中文互联网的第一大网红.呃,你以为我会巴拉巴拉说一堆网工创业的事?NO,今天想借papi酱的话题跟大家一起聊聊程序员如何 ...
- asp.net程序员初涉node.js
之前一直听说node.js在处理网站大规模并发上十分有用,所以有一定规模的公司都在使用node.我在工作中只用过jquery,属于那种边做功能边学习的那一种.甚至连原生的js都不太会写,只是知道语法差 ...
- NDK开发之javaVM
1.关于JNIEnv和JavaVM JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线 ...
- nios II--实验2——led硬件部分
Led 硬件开发 新建原理图 1.打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> ...
- VC维含义
VC维含义的个人理解 有关于VC维可以在很多机器学习的理论中见到,它是一个重要的概念.在读<神经网络原理>的时候对一个实例不是很明白,通过这段时间观看斯坦福的机器学习公开课及相关补充材料, ...
- 拼图游戏(js,C#,java三种语言)
<html> <head> <meta charset="utf-8"> <style type="text/css" ...
- 屠龙之路_坚持就是胜利_NinthDay
狭小的空间里,屠龙天团的少年们和alpha恶龙苦苦对峙了一夜!这恶龙还挺能熬的,厉害了word龙.无奈之下,五更天的时候,我们的屠龙少年只能先退出战场养精蓄锐,为了不让恶龙再次逍遥法外,机智的屠龙队长 ...
- 通过JS实现网站繁体简体互换
html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 6 this的使用方法
class Person { String name; void talk() { System.out.println("my name is "+this.name); } } ...
- 让webstorm支持avalon语法自动补全
在file菜单下选择Settings,选择Editor ——> Inspections ——> Html ——> Unknown HTML tag attibute添加以下标签ms- ...