当前位置:网站首页>Three. JS series (3): porting shaders in shadertoy
Three. JS series (3): porting shaders in shadertoy
2022-07-07 16:29:00 【Touch】
0、 explain
Please read carefully the following posted shadertoy And threejs The difference between shader codes , One method is applicable to all methods .
1、shadertoy Medium shader code
// Found this on GLSL sandbox. I really liked it, changed a few things and made it tileable.
// :)
// by David Hoskins.
// Original water turbulence effect by joltz0r
// Redefine below to see the tiling...
//#define SHOW_TILING
#define TAU 6.28318530718
#define MAX_ITER 5
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float time = iTime * .5+23.0;
// uv should be the 0-1 uv of texture...
vec2 uv = fragCoord.xy / iResolution.xy;
#ifdef SHOW_TILING
vec2 p = mod(uv*TAU*2.0, TAU)-250.0;
#else
vec2 p = mod(uv*TAU, TAU)-250.0;
#endif
vec2 i = vec2(p);
float c = 1.0;
float inten = .005;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 colour = vec3(pow(abs(c), 8.0));
colour = clamp(colour + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
#ifdef SHOW_TILING
// Flash tile borders...
vec2 pixel = 2.0 / iResolution.xy;
uv *= 2.0;
float f = floor(mod(iTime*.5, 2.0)); // Flash value.
vec2 first = step(pixel, uv) * f; // Rule out first screen pixels and flash.
uv = step(fract(uv), pixel); // Add one line of pixels per tile.
colour = mix(colour, vec3(1.0, 1.0, 0.0), (uv.x + uv.y) * first.x * first.y); // Yellow line
#endif
fragColor = vec4(colour, 1.0);
}
2、threejs Shader code modified in
import * as THREE from "three/build/three.module.js";
const WaterShader = {
uniforms: {
iTime: {
value: 0
},
iResolution: {
value: new THREE.Vector3(1, 1, 1)
},
},
vertexShader: `
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
`,
fragmentShader: `
#include <common>
uniform vec3 iResolution;
uniform float iTime;
// by David Hoskins.
// Original water turbulence effect by joltz0r
// Redefine below to see the tiling...
//#define SHOW_TILING
#define TAU 6.28318530718
#define MAX_ITER 5
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
float time = iTime * .5+23.0;
// uv should be the 0-1 uv of texture...
vec2 uv = fragCoord.xy / iResolution.xy;
#ifdef SHOW_TILING
vec2 p = mod(uv*TAU*2.0, TAU)-250.0;
#else
vec2 p = mod(uv*TAU, TAU)-250.0;
#endif
vec2 i = vec2(p);
float c = 1.0;
float inten = .005;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 colour = vec3(pow(abs(c), 8.0));
colour = clamp(colour + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
#ifdef SHOW_TILING
// Flash tile borders...
vec2 pixel = 2.0 / iResolution.xy;
uv *= 2.0;
float f = floor(mod(iTime*.5, 2.0)); // Flash value.
vec2 first = step(pixel, uv) * f; // Rule out first screen pixels and flash.
uv = step(fract(uv), pixel); // Add one line of pixels per tile.
colour = mix(colour, vec3(1.0, 1.0, 0.0), (uv.x + uv.y) * first.x * first.y); // Yellow line
#endif
fragColor = vec4(colour, 1.0);
}
varying vec2 vUv;
void main() {
mainImage(gl_FragColor, vUv * iResolution.xy);
}
`
};
export {
WaterShader
};
3、 Effect comparison
3.1、shadertoy
3.2、threejs
边栏推荐
- The differences between exit, exit (0), exit (1), exit ('0 '), exit ('1'), die and return in PHP
- markdown公式编辑教程
- Laravel5.1 Routing - routing packets
- ThinkPHP URL 路由简介
- Leetcode-136-只出现一次的数(用异或来解答)
- hellogolang
- 分类模型评价标准(performance measure)
- How does laravel run composer dump autoload without emptying the classmap mapping relationship?
- Laravel5.1 路由 -路由分组
- 记录Servlet学习时的一次乱码
猜你喜欢
分步式监控平台zabbix
Rongyun won the 2022 China Xinchuang digital office portal excellence product award!
Continuous creation depends on it!
Performance comparison of tidb for PostgreSQL and yugabytedb on sysbench
Description of vs common shortcut keys
Eye of depth (VI) -- inverse of matrix (attachment: some ideas of logistic model)
企业级日志分析系统ELK
TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
Power of leetcode-231-2
Odoo integrated plausible embedded code monitoring platform
随机推荐
【Vulnhub靶场】THALES:1
PHP实现执行定时任务的几种思路详解
The differences between exit, exit (0), exit (1), exit ('0 '), exit ('1'), die and return in PHP
安科瑞电网智能化发展的必然趋势电力系统采用微机保护装置是
thinkphp3.2.3中设置路由,优化url
Odoo integrated plausible embedded code monitoring platform
模仿企业微信会议室选择
Introduction to pyGame games
【Android -- 数据存储】使用 SQLite 存储数据
Notification uses full resolution
Talk about the cloud deployment of local projects created by SAP IRPA studio
How to query the data of a certain day, a certain month, and a certain year in MySQL
无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
Excessive dependence on subsidies, difficult collection of key customers, and how strong is the potential to reach the dream of "the first share of domestic databases"?
Laravel constructor and middleware execution order
How to determine whether the checkbox in JS is selected
URL和URI的关系
[hcsd celebrity live broadcast] teach the interview tips of big companies in person - brief notes
Have fun | latest progress of "spacecraft program" activities
Asyncio concept and usage