GLSL для Minecraft: как мне установить положение для облаков?
Я использую gl_FragCoord.xy
, но облака привязаны к глазу игрока или позиции камеры. Так что они двигаются с вами, если вы оглянетесь назад. Но я хочу, чтобы у облаков было свое статическое положение. Я попробовал это с worldposition = gbufferModelViewInverse * fragposition
но с ужасным результатом. Облака растягиваются, если я смотрю на восход или закат и получаю зеркальный эффект. Таким образом, у них был тот же самый образец как на восходе солнца, если я смотрю на закат.
Теперь мой вопрос: как я могу сделать так, чтобы, если игрок смотрел налево, чтобы облака не двигались глазом игрока? Это сложно объяснить, поэтому я попытался создать простую картинку:
Вот часть из моего кода:
float hash( float n )
{
return fract(sin(n)*43758.5453);
}
float noise( in vec2 x )
{
vec2 p = floor(x);
vec2 f = fract(x);
f = f*f*(3.0-2.0*f);
float n = p.x + p.y*57.0;
float res = mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x), mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y);
return res;
}
float fbm( vec2 p )
{
float f = 0.0;
f += 0.50000*noise( p ); p = p*2.02;
f += 0.25000*noise( p ); p = p*2.03;
f += 0.12500*noise( p ); p = p*2.01;
f += 0.06250*noise( p ); p = p*2.04;
f += 0.03125*noise( p );
return f/0.984375;
}
#define CLOUD_COVER 0.55
#define CLOUD_SHARPNESS 0.015
// Wind - Used to animate the clouds
vec2 wind_vec = vec2(0.001 + frameTimeCounter*0.005, 0.003 + frameTimeCounter * 0.005);
// Set up domain
vec2 q = (gl_FragCoord.xy / 2024);
vec2 p = -1.0 + 3.0 * q + wind_vec;
// Create noise using fBm
float f = fbm( 4.0*p );
float cover = CLOUD_COVER;
float sharpness = CLOUD_SHARPNESS;
float c = f - (1.0 - cover);
if ( c < 0.0 )
c = 0.0;
f = 1.0 - (pow(sharpness, c));
color += f/15*TimeDay;
color += vec3(0.03, 0.19, 0.99)*f/1000*TimeMidnight;