为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

unity3d学习之温度云图(温场)实现

2018-06-08 6页 doc 40KB 121阅读

用户头像

is_963767

暂无简介

举报
unity3d学习之温度云图(温场)实现unity3d学习之温度云图(温场)实现 基本原理是给定平面上的几个点的位置和该点的温度信息,然后通过距离比的关系来算 出平面上任意点的温度数值,再通过颜色反映出来。 1. Shader "Custom/TemperatureField" { 2. Properties { 3. _MainTex ("Base (RGB)", 2D) = "white" {} 4. _Point1("Temperature1",Range(0,100)) = 50 5. _Point2("Temperature2",Range(0,100...
unity3d学习之温度云图(温场)实现
unity3d学习之温度云图(温场)实现 基本原理是给定平面上的几个点的位置和该点的温度信息,然后通过距离比的关系来算 出平面上任意点的温度数值,再通过颜色反映出来。 1. Shader "Custom/TemperatureField" { 2. Properties { 3. _MainTex ("Base (RGB)", 2D) = "white" {} 4. _Point1("Temperature1",Range(0,100)) = 50 5. _Point2("Temperature2",Range(0,100)) = 50 6. _Point3("Temperature3",Range(0,100)) = 50 7. _Point4("Temperature4",Range(0,100)) = 50 8. } 9. SubShader { 10. AlphaTest Greater 0.1 11. pass 12. { 13. CGPROGRAM 14. // Upgrade NOTE: excluded shader from DX11, Xbox360, OpenGL ES 2.0 because it uses unsized arrays 15. #pragma exclude_renderers d3d11 xbox360 gles 16. #pragma target 3.0 17. #pragma vertex vert 18. #pragma fragment frag 19. #include "UnityCG.cginc" 20. 21. 22. sampler2D _MainTex; 23. float4 _MainTex_ST; 24. float _Point1; 25. float _Point2; 26. float _Point3; 27. float _Point4; 28. bool computer = false; 29. 30. 31. struct v2f { 32. float4 pos:SV_POSITION; 33. float2 uv:TEXCOORD0; 34. }; 35. 36. v2f vert(appdata_base v) 37. { 38. v2f o; 39. o.pos=mul(UNITY_MATRIX_MVP,v.vertex); 40. o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); 41. return o; 42. } 43. 44. float computerTemperature(float2 uv) 45. { 46. int plength = 3; 47. float _midPointX[3] = {0.2,0.8,0.5}; 48. float _midPointY[3] = {0.7,0.9,0.4}; 49. float _midPointT[3] = {10,20,90}; 50. 51. float d1 = sqrt(uv.x*uv.x+uv.y*uv.y); 52. float d2 = sqrt((1-uv.x)*(1-uv.x)+(1-uv.y)*(1-uv.y)); 53. float d3 = sqrt(uv.x*uv.x+(1-uv.y)*(1-uv.y)); 54. float d4 = sqrt((1-uv.x)*(1-uv.x)+uv.y*uv.y); 55. 56. 57. float m = 1/d1+1/d2+1/d3+1/d4; 58. float n = 1/d1*_Point1+1/d2*_Point4+1/d3*_Point3+1/d4*_Point2; 59. for (int i = 0 ; i < plength ; i++) 60. { 61. float dp = sqrt((uv.x-_midPointX)*(uv.x-_midPointX)+(uv.y-_midPointY)*(uv.y-_midPointY)) ; 62. 63. m = m + 1/dp; 64. n = n + 1/dp*_midPointT; 65. } 66. 67. 68. return n/m; 69. 70. } 71. 72. float4 frag(v2f i):COLOR 73. { 74. 75. float4 outp; 76. 77. float4 texCol = tex2D(_MainTex,i.uv); 78. 79. float temp = computerTemperature(i.uv); 80. //float temp = computeArray(i.uv); 81. 82. //图像区域,判定设置为颜色的A > 0.5,输出为材质颜色+光亮值 83. if(texCol.w>0.5) 84. { 85. if(temp >= 60) 86. outp = float4(1,0,0,1)*(temp-60)/40+float4(1,1,0,1)*(1-(temp-60)/40); 87. else if(temp >= 30) 88. outp = float4(1,1,0,1)*(temp-30)/30+float4(0,1,0,1)*(1-(temp-30)/30); 89. else 90. outp = float4(0,1,0,1)*(temp)/30+float4(0,0,1,1)*(1-(temp)/30); 91. } 92. else 93. outp = float4(0,0,0,0); 94. return outp; 95. } 96. 97. ENDCG 98. } 99. } 100. FallBack "Diffuse" 101. } 复制代码 其中_Point1到4是平面4个顶点上的温度值 _midPointX,_midPointY,_midPointT 给出了平面内三个点的位置和温度值,实际应用中可以相应修改和增删 文章来着【狗刨学习网】
/
本文档为【unity3d学习之温度云图&#40;温场&#41;实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索