मैंने सिर्फ थ्योरी (निम्नलिखित flafla2.github.io/2014/08/09/perlinnoise.html) का उपयोग करके खुद के द्वारा पेरलिन शोर को लागू करने की कोशिश की । दुर्भाग्य से मैं "मूल" पेरलिन शोर के रूप को प्राप्त करने में असमर्थ था।
नीचे दिए गए कोड पेरलिन शोर के एक अवरुद्ध संस्करण का क्या कारण है?
मुझे कोड में क्या सुधार / परिवर्तन करना चाहिए ताकि यह कलाकृतियों के बिना पेर्लिन शोर का प्रतिपादन करे?
मुझे संदेह है कि जिस तरह से मैं प्रक्षेपित करता हूं या grads
वेक्टर में समस्या होती है। grads
सभी 4 पास के जाली अंक के लिए - वेक्टर (जाली बिंदु के लिए यादृच्छिक वेक्टर) और (आकार वेक्टर) के डॉट उत्पाद शामिल हैं। (यादृच्छिक और आकार वाले वैक्टर बहुत पहले लिंक में वर्णित हैं।)
GLSL सैंडबॉक्स: http://glslsandbox.com/e#32663.0
float fade(float t) { return t * t * t * (t * (t * 6. - 15.) + 10.); }
vec2 smooth(vec2 x) { return vec2(fade(x.x), fade(x.y)); }
vec2 hash(vec2 co) {
return fract (vec2(.5654654, -.65465) * dot (vec2(.654, 57.4), co));
}
float perlinNoise(vec2 uv) {
vec2 PT = floor(uv);
vec2 pt = fract(uv);
vec2 mmpt= smooth(pt);
vec4 grads = vec4(
dot(hash(PT + vec2(.0, 1.)), pt-vec2(.0, 1.)), dot(hash(PT + vec2(1., 1.)), pt-vec2(1., 1.)),
dot(hash(PT + vec2(.0, .0)), pt-vec2(.0, .0)), dot(hash(PT + vec2(1., .0)), pt-vec2(1., 0.))
);
return 5.*mix (mix (grads.z, grads.w, mmpt.x), mix (grads.x, grads.y, mmpt.x), mmpt.y);
}
float fbm(vec2 uv) {
float finalNoise = 0.;
finalNoise += .50000*perlinNoise(2.*uv);
finalNoise += .25000*perlinNoise(4.*uv);
finalNoise += .12500*perlinNoise(8.*uv);
finalNoise += .06250*perlinNoise(16.*uv);
finalNoise += .03125*perlinNoise(32.*uv);
return finalNoise;
}
void main() {
vec2 position = gl_FragCoord.xy / resolution.y;
gl_FragColor = vec4( vec3( fbm(3.*position) ), 1.0 );
}