【发布时间】:2023-01-19 00:47:06
【问题描述】:
我正在尝试从 ShaderToy 破解这个 Plasma 着色器,因此它可以与 Spark AR 一起使用 ... 我非常接近,但是着色器被压缩到角落时存在一个奇怪的问题。有没有着色大师可以给我一些指导?这是它现在在 Spark 中的样子:
输入是屏幕尺寸、屏幕触摸坐标、时间和可能是罪魁祸首的directionvec2。我不完全确定这个输入在做什么。
这是我转换后的着色器代码:
precision highp float;
vec4 main( in vec2 direction, in float time, in vec2 touch, in vec2 screen )
{
vec2 uv = fragment(std::getVertexTexCoord());
float t = time/.1 + touch.x;
vec2 R = uv.xy, S = screen * 0.01,
p = ( direction+direction - R ) / R * S,
q = vec2(cos(-t / 165.), cos( t / 45.)) * S - p;
t = 1. + cos( length( vec2(cos( t / 98.), sin( t / 178.)) * S - p ) / 30.)
+ cos( length( vec2(sin(-t / 124.), cos( t / 104.)) * S - p ) / 20.)
+ sin( length(q) / 25. ) * sin(q.x / 20.) * sin(q.y / 15.);
return .5 + .5* cos( (time+touch.y) / vec4(63,78,45,1) + ( t + vec4(0,1,-.5,0) ) *3.14 );
}
这是一个 sca 文件,它是着色器的 Spark AR 格式。
这是来自ShaderToy的这段代码的转换:
void mainImage( out vec4 O, vec2 U )
{
float t = iTime/.1 + iMouse.x;
vec2 R = iResolution.xy, S = vec2(160,100),
p = ( U+U - R ) / R * S,
q = vec2(cos(-t / 165.), cos( t / 45.)) * S - p;
t = 1. + cos( length( vec2(cos( t / 98.), sin( t / 178.)) * S - p ) / 30.)
+ cos( length( vec2(sin(-t / 124.), cos( t / 104.)) * S - p ) / 20.)
+ sin( length(q) / 25. ) * sin(q.x / 20.) * sin(q.y / 15.);
O = .5 + .5* cos( (iTime+iMouse.y) / vec4(63,78,45,1) + ( t + vec4(0,1,-.5,0) ) *3.14 );
}
希望有人能帮忙。
【问题讨论】:
标签: glsl shader fragment-shader spark-ar-studio shadertoy