OpenGL Shader Builder 使用简介
来源:互联网 发布:linux设置ftp目录权限 编辑:程序博客网 时间:2024/05/14 17:26
Getting Started
这个是mac上的一个工具,用来编写、运行、测试OpenGL shaders的,他可以
1. 高亮显示语法
2. 编译并链接源码,生成shader对象。
3. 可以修改甚至动态修改uniform的值。
4. 可以修改之后直接预览 textures
5. 可以动态启动或屏蔽某个shader,能够更有效的看到结果。
他总共有4个视图,Program View,Render View,Textures View,Symbols View。
Program view
这里是用来编程的视图。通过 File > New > Project 来建立一个项目,项目中默认带两个Shader,分别是 VertexShader 和 FragmentShader。
Render View
就是用来显示最终渲染效果的视图,
Textures View
这里是用来添加图片资源的,软件默认自带一张图片,放在位置0上
当进行多图渲染时(比如在图片之上放一层遮罩图片),可以在这里添加新的图片,直接鼠标拖动图片到1上即可
图 1-1 一张完全黑色的图片
Symbols View
调整各个参数的值。比如图片、颜色、int、float等。当在这里调整之后,可以直接在render界面看到效果,如果勾选了Animate,那么值就会从最小到最大来回变换,render界面也会动态变换。
这里添加一个实际使用的例子。
1. 首先在Textures中添加两个图片,这里一个使用默认图,放在位置0,添加一个纯黑图片,放在位置1(图 1-1 )
2. 到编程 Program View中添加程序,Vertex Shader 主要是作形变,这里不修改;调整Fragment Shader。
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
uniform int type;
uniform vec2 center;
uniform float farthestClearAreaDistance;
uniform float nearestFullBlurAreaDistance;
uniform float tiltShiftRotationAngle;
uniform float imageWidthAndHeightRatio;
void main()
{
vec4 sharpImageColor = texture2D(inputImageTexture, gl_TexCoord[0].xy);
vec4 blurredImageColor = texture2D(inputImageTexture2, gl_TexCoord[0].xy);
vec2 normalizedCoordinate = gl_TexCoord[0].xy * vec2(imageWidthAndHeightRatio, 1.0);
vec2 normalizedCenter = center * vec2(imageWidthAndHeightRatio, 1.0);
float d;
if (type == 0) {
d = 0.0;
} else if (type == 1) {
d = distance(normalizedCenter,normalizedCoordinate);
} else if (type == 2) {
float tanAngle = tan(tiltShiftRotationAngle);
d = abs(tanAngle * normalizedCoordinate.x - normalizedCoordinate.y + normalizedCenter.y - normalizedCenter.x * tanAngle ) / sqrt(tanAngle * tanAngle + 1.0);
}
vec4 mask;
if (d < farthestClearAreaDistance) {
mask = vec4(.0,.0,.0,1.0);
} else {
float b = smoothstep(farthestClearAreaDistance, nearestFullBlurAreaDistance, d);
mask = vec4(b,b,b,1.0);
}
gl_FragColor = mix(sharpImageColor, blurredImageColor, mask);
}
需要注意的是,这个程序不支持 varying ,需要通过全局变量来传递参数, 比如程序中的 gl_TextCoord[0].xy。然后就是各种精度的参数也要去掉,比如:highp、lowp等等。具体的可以看错误提示,比如特意添加一个highp:
之后向声明的各个变量中传入值,这里是在Symbols视图完成的,要比在程序中传入方便的多。当前程序对应的参数列表为:
图 1-2
这里注意的是,Shader Builder 并不是按照添加的图的顺序来表示图片的层级关系的,需要自己来指定(这个刚开始不知道,文档中也没找到相关的,费了很大力气才发现),在这里代码声明的两个图 inputImageTexture 、 inputImageTexture2,需要自行调整参数,见图 1-2,这里是调整 inputImageTexture2 , 这里图片显示的值是 0 1 1,两边的值暂不知道什么意思,中间那个1代表的是第二个图片,inputImageTexture 不用调整,默认是第一个图片。
接下来调整 center、distance、type等参数,就可以看到渲染的效果了,来一张效果图:
附上当前参数值(主要是中间那个值):
center : [ x 0 0.5 1 , y 0 0.5 1 ]
farthest…distance : [x 0 0.2 1]
imageWidthAndHeightRatio: [x 0 1 1]
inputImageTexture :[x 0 0 1]
inputImageTexture2 :[x 0 1 1]
nearest….distance: [x 0 0.3 1]
tiltShiftRotationAngle : [x 0 0.1 1]
type : [x 0 1 1]
当切换两个图的顺序之后:
可以看到,当第二个图片比较小时,会限制第一张图的显示区域,超出边界的部分会直接消失。
0 0
- OpenGL Shader Builder 使用简介
- OpenGL中shader使用
- opengl shader 使用札记
- opengl shader 使用札记
- OpenGL中使用Shader
- OpenGL中shader使用
- WebLogic Builder使用简介
- Cocos2dx Shader 使用系列之一:OpenGL Shader Language介绍
- OpenGL下多个sampler在shader中的使用
- 使用OpenGL Shader实现放大镜效果
- OpenGL中使用Shader的基本步骤
- 使用OpenGL Shader实现放大镜效果
- OpenGL Shader
- opengl shader
- opengl shader
- [Modern OpenGL系列(四)]在OpenGL中使用Shader
- <shader> 简介
- Shader简介
- strstr
- 如何在项目中查找冲突的类
- JavaScrpit 运算符
- 车牌识别系统开发记录(四) 国内车牌特点
- Android基础之 用Eclipse搭建Android开发环境和创建第一个Android项目
- OpenGL Shader Builder 使用简介
- SuSE Linux上修改主机名
- WP手机升级到WP8.1之后一些功能的吐槽和没有Cortana,改变绿色图标的问题的解决方案以及怎样调戏Cortana
- C中的 strftime , memcpy
- UITextField抖动动画
- C#中ToString格式大全
- OCP-1Z0-051 第32题 create table 建表语句
- 回忆,最断人肠
- Android源码分析之简单工厂模式