厉害,希望能继续更新 |
今天这个有点潦草,不过大家不用担心。 下一个帖子,我们还要学习另一种思路的更为复杂的单形噪声。 |
// 原作者的所有噪声作品: // https://www.shadertoy.com/playlist/fXlXzf&from=0&num=12 #版 450 同 粗二 外屏幕; 同 粗二 外鼠位; 同 逻二 外鼠按; 同 粗数 外时间; /*这只是一个平平无奇的散列方法,你可以用更好的代替*/ 粗二 哈希( 粗二 位置 ){ 位置 = 粗二( 点积(位置,粗二(127.1,311.7)), 点积(位置,粗二(269.5,183.3)) ); 返 -1.0 + 2.0*取小(正弦(位置)*43758.5453123); } 粗数 噪声(粗二 位置 ){ /*我说的,极致优化部分,只需要知道跟这两相关的都是为了转换的*/ 常 粗数 到钝 = 0.366025404; // (根(3)-1)/2; 常 粗数 到直 = 0.211324865; // (3-根(3))/6; //原点:所在三角形的基准顶点。 粗二 原点 = 退整(位置 + 点积(位置,粗二(到钝))); //点原:转回直角系后,所在三角形原点的坐标 粗二 点原 = 位置 - 原点 + 点积(原点,粗二(到直)); //所在:为了判断当前三角形在左还是右 //独点:当前位置所在三角形独有的顶点的相对于原点的坐标 ///被注释掉的是原码,我觉得下面的更好理解 /// 粗数 所在 = 跃阶(点原.纵,点原.横); /// 粗二 独点 = 粗二(所在,1.0-所在); 粗二 独点 =(0.0==跃阶(点原.纵,点原.横)?粗二(0,1) :粗二(1,0)); //独点是三角独有点,(1,1)是三角共有点 粗二 点独 = 点原 - 独点 + 到直; /// 点独 = 点原 - 独点 + 点积(独点,到直) 粗二 点共 = 点原 - 1.0 + 2.0*到直; /// 点共 = 点原 - 1.0 + 点积(粗二(1),到直) //0.5是全等三角形的一个顶点到对边最短的距离吧。 //此计算下的三角形最长边为1,用0.5可以把顶点对所有点的影响权重框定在[0,0.5]中 粗三 距权 = 较大(0.5-粗三(点积(点原,点原), 点积(点独,点独), 点积(点共,点共)),0.0); //上面的是衰减方法,如果不用的话,我们会得到一堆三角形 //参数一的这几个点,应该是对应点的距离权重(点积) //参数二的则是计算对应点的随机数 粗三 噪 = 距权*距权*距权*距权; 噪 *= 粗三(点积(点原,哈希(原点+0.0)), 点积(点独,哈希(原点+独点)), 点积(点共,哈希(原点+1.0))); 返 点积(噪, 粗三(70.0)); } 无 主(){ 粗二 位置 = 像位置.横纵 / 外屏幕.横纵; /*前半为了使画出的图像为正方形,后为了使图像动态移动*/ 粗二 坐标 = 位置*粗二(外屏幕.横/外屏幕.纵,1.0) + 外时间*0.25; 粗数 结果 = 0.0; 若( 位置.横<0.6 ){ // 左图:单个值噪声 结果 = 噪声( 16.0*坐标 ); }则{ // 右图:分形噪声(基于四个值噪声)//本身就可开一门的东西,以后可能讲吧 坐标 *= 5.0; 阵二 m = 阵二( 1.6, 1.2, -1.2, 1.6 ); 结果 = 0.5000*噪声( 坐标 ); 坐标 = m*坐标; 结果 += 0.2500*噪声( 坐标 ); 坐标 = m*坐标; 结果 += 0.1250*噪声( 坐标 ); 坐标 = m*坐标; 结果 += 0.0625*噪声( 坐标 ); } 结果 = 结果*0.5 + 0.5;//为了把值限制在[-0.5,0.5] 结果 *= 线阶( 0.0, 0.005, 取正(位置.横-0.6));//这里是为了画黑线 像颜色 = 粗四( 结果, 结果, 结果, 1.0 ); } |
|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )
GMT+8, 2024-11-24 01:23 , Processed in 0.085075 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.