最近、私は webGl をいじっていて、すばらしい結果を得るために少し変更したいクールな小さなデモを見つけました(ソースはこちら) 。
地形の生成方法を変更することに興味があります。10 オクターブのシンプレックス ノイズをレイヤー化する代わりに (simplex3d.shader にあります):
float h = 0.0;
for(int i=0; i<10; i++){
float factor = pow(2.0, float(i));
h += snoise(vec3(uv*factor, delta*float(i+1)))/(pow(factor, 0.88)*10.0);
}
カスタムの白黒の高さマップ イメージをシーンにロードし、そこから地形を生成できるようにしたいと考えています。私は GLSL にかなり慣れていないので、オンラインで適切なリソースを見つけてここで始めるのに苦労しています。
どんな助けでも大歓迎です!
編集:
vertex:
attribute vec2 position;
void main(){
gl_Position = vec4(position, 0.0, 1.0);
}
fragment:
uniform vec2 viewport;
uniform sampler2D u_heightmap;
void main(){
float scale = 0.5;
float bias = 0.25;
vec2 texCoord;
// Get the height value and calculate the new texture coord.
float h = scale * texture2D(u_heightmap, texCoord).r - bias;
vec2 newTexCoord = h * viewport + texCoord;
vec4 texColor = texture2D(u_heightmap, newTexCoord);
gl_FragColor = texColor;
}
編集2:
vertex:
attribute vec2 position;
void main(){
gl_Position = vec4(position, 0.0, 1.0);
}
fragment:
uniform sampler2D heightmap;
uniform vec2 viewport;
void main(){
float scale = 1.0;
float bias = 0.25;
vec2 uv = gl_FragCoord.xy/viewport;
float h = 0.0;
h = scale * ((texture2D(heightmap, uv).r) - bias);
clamp(h, 0.0, 1.0);
gl_FragColor = vec4(0.0, h, 0.0, 1.0);
}