unity3d 温度云图shader
来源:互联网 发布:西安远华软件 编辑:程序博客网 时间:2024/05/04 01:54
项目中用到关于温度云图效果,但是本人对shader还没入门,在网上找的一个牛人的shader 。起初直接copy下来shader 编译报错,经过排错我把它修改编译通过了(编译版本unity 4.3),并把源码提供出来,希望可以帮助其他需要的人。
Shader "Custom/TemperatureField" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_Point1("Temperature1",Range(0,100)) = 50_Point2("Temperature2",Range(0,100)) = 50_Point3("Temperature3",Range(0,100)) = 50_Point4("Temperature4",Range(0,100)) = 50}SubShader {AlphaTest Greater 0.1Pass { CGPROGRAM#pragma exclude_renderers d3d11 xbox360 gles #pragma target 3.0 #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; float _Point1; float _Point2; float _Point3; float _Point4; bool computer = false; struct v2f { float4 pos:SV_POSITION; float2 uv:TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos=mul(UNITY_MATRIX_MVP,v.vertex); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); return o; } float computerTemperature(float2 uv) { int plength = 3; float _midPointX[3] = {0.2,0.8,0.5}; float _midPointY[3] = {0.7,0.9,0.4}; float _midPointT[3] = {10,20,90}; float d1 = sqrt(uv.x*uv.x+uv.y*uv.y); float d2 = sqrt((1-uv.x)*(1-uv.x)+(1-uv.y)*(1-uv.y)); float d3 = sqrt(uv.x*uv.x+(1-uv.y)*(1-uv.y)); float d4 = sqrt((1-uv.x)*(1-uv.x)+uv.y*uv.y); float m = 1/d1+1/d2+1/d3+1/d4; float n = 1/d1*_Point1+1/d2*_Point4+1/d3*_Point3+1/d4*_Point2; for (int i = 0 ; i < plength ; i++) { float dp = sqrt((uv.x-_midPointX[i])*(uv.x-_midPointX[i])+(uv.y-_midPointY[i])*(uv.y-_midPointY[i])); m = m + 1/dp; n = n + 1/dp*_midPointT[i]; } return n/m; } float4 frag(v2f i):COLOR { float4 outp; float4 texCol = tex2D(_MainTex,i.uv); float temp = computerTemperature(i.uv); //float temp = computeArray(i.uv); //图像区域,判定设置为颜色的A > 0.5,输出为材质颜色+光亮值 if(texCol.w>0.5) { if(temp >= 60) outp = float4(1,0,0,1)*(temp-60)/40+float4(1,1,0,1)*(1-(temp-60)/40); else if(temp >= 30) outp = float4(1,1,0,1)*(temp-30)/30+float4(0,1,0,1)*(1-(temp-30)/30); else outp = float4(0,1,0,1)*(temp)/30+float4(0,0,1,1)*(1-(temp)/30); } else outp = float4(0,0,0,0); return outp; } ENDCG}} FallBack "Diffuse"}
我的项目中利用后的效果如下:
这只是简单利用,其它复杂的效果还有待研究后提供出来;比如温度监控点坐标、监控温度等。
原址:http://game.ceeger.com/forum/read.php?tid=9392&fid=2
0 0
- unity3d 温度云图shader
- 温度云图(温场)实现
- unity的温度云图实现
- sivlerlight2D温度云图中的算法
- 【Unity Shader】案例之地球云图(二)
- Unity3d Shader
- unity3d shader
- Unity3D shader
- Unity3D Shader
- Unity3D -- Shader
- Unity3D: Shader
- Unity3D Shader
- Unity3D之Shader:Shader介绍
- Unity3d shader -- fixed function shader
- Unity3D中的shader基础知识
- Unity3D中Shader
- Unity3D shader脚本
- Shader in Unity3d
- 细说C++类型转换操作符
- IM开放平台的客户端接口设计,千牛用了JAR包形式?
- 苹果应用商店审核指南中文翻译
- HTML语言中TR、TH和TD有什么区别?
- HDU 1087 最长上升子序列
- unity3d 温度云图shader
- Hadoop调优
- 责任是相伴的,别躲
- Vision引擎中 环境地形植被
- UIPageControl基本用法
- 倒腾路由器
- 互联网创业密码试读的感想
- IE6下面,为什么不能设置height:1px的元素
- 黑帽大会2014:10个酷炫的黑客工具