1
shadertoy의이 쉐이더를 GPUImage 기반 iOS 플랫폼 용 glsl로 포팅하려고합니다.왜이 shadertoy가 glsl에서 올바르게 표시되지 않습니까?
https://www.shadertoy.com/view/4s2yW1
기술적으로, 효과적으로 장치에서 실행중인. 그러나 그것은 단지 배경을 표시하는 것이지 서클은 표시하지 않는 것이 전체 점입니다.
누군가가 나에게 이것이 제대로 표시되지 않는 이유에 대한 단서를 줄 수 있는지 궁금합니다. 어떤 이유로 든 shaderfrog를 사용할 때 동일한 결과를 얻고 있습니다. http://shaderfrog.com/app/view/1463
와 코드 자체 :이 크게 감상 할 수에 대해
#define PI 3.14159265359
NSString *const kGPUImageBokehFragmentShaderString = SHADER_STRING
(
precision highp float;
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform highp float time;
void Rotate(vec2 p, float a)
{
p = cos(a) * p + sin(a) * vec2(p.y, -p.x);
}
float Circle(vec2 p, float r)
{
return (length(p/r) - 1.0) * r;
}
float Rand(vec2 c)
{
return fract(sin(dot(c.xy, vec2(12.9898, 78.233))) * 43758.5453);
}
float saturate(float x)
{
return clamp(x, 0.0, 1.0);
}
void BokehLayer(vec3 color, vec2 p, vec3 c)
{
float wrap = 450.0;
if (mod(floor(p.y/wrap + 0.5), 2.0) == 0.0)
{
p.x += wrap * 0.5;
}
vec2 p2 = mod(p + 0.5 * wrap, wrap) - 0.5 * wrap;
vec2 cell = floor(p/wrap + 0.5);
float cellR = Rand(cell);
c *= fract(cellR * 3.33 + 3.33);
float radius = mix(30.0, 70.0, fract(cellR * 7.77 + 7.77));
p2.x *= mix(0.9, 1.1, fract(cellR * 11.13 + 11.13));
p2.y *= mix(0.9, 1.1, fract(cellR * 17.17 + 17.17));
float sdf = Circle(p2, radius);
float circle = 1.0 - smoothstep(0.0, 1.0, sdf * 0.04);
float glow = exp(-sdf * 0.025) * 0.3 * (1.0 - circle);
color += c * (circle + glow);
}
void main()
{
vec2 iResolution = vec2(1., 1.);
vec2 uv = textureCoordinate.xy/iResolution.xy;
vec2 p = (2.0 * textureCoordinate - iResolution.xy)/iResolution.x * 1000.0;
// background
vec3 color = mix(vec3(0.3, 0.1, 0.3), vec3(0.1, 0.4, 0.5), dot(uv, vec2(0.2, 0.7)));
float timeElapsed = time - 15.0;
Rotate(p, 0.2 + timeElapsed * 0.03);
BokehLayer(color, p + vec2(-50.0 * timeElapsed + 0.0, 0.0 ), 3.0 * vec3(0.4, 0.1, 0.2));
Rotate(p, 0.3 - timeElapsed * 0.05);
BokehLayer(color, p + vec2(-70.0 * timeElapsed + 33.0, -33.0), 3.5 * vec3(0.6, 0.4, 0.2));
Rotate(p, 0.5 + timeElapsed * 0.07);
BokehLayer(color, p + vec2(-60.0 * timeElapsed + 55.0, 55.0), 3.0 * vec3(0.4, 0.3, 0.2));
Rotate(p, 0.9 - timeElapsed * 0.03);
BokehLayer(color, p + vec2(-25.0 * timeElapsed + 77.0, 77.0), 3.0 * vec3(0.4, 0.2, 0.1));
Rotate(p, 0.0 + timeElapsed * 0.05);
BokehLayer(color, p + vec2(-15.0 * timeElapsed + 99.0, 99.0), 3.0 * vec3(0.2, 0.0, 0.4));
vec4 bokehColor = vec4(color, 1.0);
gl_FragColor = bokehColor;
});
아무것도 당신이 말해 줄 수
다음은 shaderfrog 링크입니다. 감사!
원본 저자의 허락을 받았습니까? –
예, 일반 라이센스. 게다가 그것이 작동하면 다른 측면에서 다른 것들을하고 있습니다. –
이것은 정확히 정확히 어떻게하는지 알아내는 것에 관한 것이지만 이미 3 가지 버전이 있습니다. –