CocosCreator之shader学习笔记

本文介绍GLSL Shader编写中的常见问题及解决方案,包括语句结尾符号、数据类型运算、未使用的变量处理、大浮点数精度问题、gl_FragCoord的理解、精度设置以及水波纹特效实现思路。

0.glsl中语句以'分;号'结尾 否则会编译错误!

 

1.glsl中整数与浮点数运算会导致编译错误

vec2 p = -1 + 2 * v_texCoord;    //错误
vec2 p = -1.0 + 2.0 * v_texCoord;  //正确
 
2.glsl中没有使用过的变量会在编译阶段被丢弃
假如声明了一个
uniform float time;
若time并没有使用,编译阶段会把这个变量去掉
因此若程序中再去找time变量会找不到
glProgram_state.setUniformFloat("time", this.time);
//cocos2d: warning: Uniform not found: time
 
3.安卓手机gpu计算遇到大浮点数精度明显降低
如time传入之后,当time大于100.0时各种计算明显精度不粗
导致纹理采样卡顿
一般传入shader中的数字最好是小数
 
4.gl_FragCoord理解
https://blog.youkuaiyun.com/jinghouxiang/article/details/50751125
 
5.精度
在部分安卓手机(小米)上
因为浮点数精度不加会产生异常显示问题
比如计算距离distance/三角函数运算等等
可以把mediump改为highp
#ifdef GL_ES
//在小米等机型mediump会导致精度不足!显示异常
//precision mediump float;
precision highp float;
#endif
 
水波纹shader相关参考
http://forum.cocos.com/t/shader-creator-cocos2dx/49505
http://gad.qq.com/article/detail/20518
http://www.cocoachina.com/bbs/read.php?tid=1693873
https://blog.youkuaiyun.com/wuyangzu01/article/details/50503676
 
https://www.shadertoy.com/view/MsBSz1
https://blog.youkuaiyun.com/chenxizhibi/article/details/51291930
https://blog.youkuaiyun.com/yuanhong2910/article/details/18766385
https://blog.youkuaiyun.com/tkokof1/article/details/40819225
https://blog.youkuaiyun.com/tkokof1/article/details/41946337
 
水波特效思路
1.获取点击位置,在fsh中获取每个像素与点击位置的距离
2.根据这个距离处理采样偏移或者构建法线,形成环形波面效果
3.推进波面移动,控制波面衰减
4.多重波面重叠效果

转载于:https://www.cnblogs.com/billyrun/articles/9131185.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值