2011-01-09 11 views
8

誰かがWebGLシェーダの例に与えられたアニメーションを実装しようとしますか?私自身のようにWebGLを習得している人にとっては素晴らしいことです。WebGLでこの回転スパイラルを実装する方法は?

alt text

出典:http://dvdp.tumblr.com/post/2664387637/110109

+1

ここであなたを助けるために、この方向での一部のHTMLキャンバスの実験があります。キーは極座標で動作することです:[Spiral 1](http://phrogz.net/tmp/canvas_spiral_1.html)、[Spiral 2](http://phrogz.net/tmp/canvas_spiral_2.html)、[ Spiral 3](http://phrogz.net/tmp/canvas_spiral_3.html)、[Spiral 4](http://phrogz.net/tmp/canvas_spiral_4.html)を参照してください。 – Phrogz

+0

そして[Spiral 5](http://phrogz.net/tmp/canvas_spiral_5.html)、このデザインに少し近づきました。 – Phrogz

+2

あなたは、コミュニティにあなたのための完全な解決策を求めるように求めるのではなく、あなた自身でこの問題を解決しようと考えています。間違っていても、あなたが何らかの努力をしていることを示すいくつかのコードがあるときは、質問とフラグを更新して再オープンしてください。ありがとう。 – Kev

答えて

20

私はhttp://www.brainjam.ca/stackoverflow/webglspiral.htmlであなたのアニメーションを実装しました。ブラウザがWebGLをサポートしていない場合は、「WebGLがサポートされていません」というメッセージが表示されます。それはsandbox created by mrdoobから適合されています。基本的な考え方は、長方形のサーフェス(2つの三角形からなる)を表示し、シェーダをサーフェスに適用することです。次のように

実際のシェーダコードは次のとおりです。

uniform float time; 
uniform vec2 resolution; 
uniform vec2 aspect; 

void main(void) { 

    vec2 position = -aspect.xy + 2.0 * gl_FragCoord.xy/resolution.xy * aspect.xy; 
    float angle = 0.0 ; 
    float radius = length(position) ; 
    if (position.x != 0.0 && position.y != 0.0){ 
     angle = degrees(atan(position.y,position.x)) ; 
    } 
    float amod = mod(angle+30.0*time-120.0*log(radius), 30.0) ; 
    if (amod<15.0){ 
     gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); 
    } else{ 
     gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);      
    } 
} 

スパイラルは、ブラウザのウィンドウをリサイズしていますが、簡単に代わり、固定サイズのキャンバスを選ぶことができます。

更新:楽しみのためだけに、ここでjsfiddleでまったく同じ実装だ:http://jsfiddle.net/z9EmN/

+0

素晴らしい:ありがとう – zproxy

+0

ShaderToyのバージョン:https://www.shadertoy.com/view/4tfGD4 – Michaelangel007

+0

ああはい。私はshadertoy版を見て、思った。ちょっと前に私はそれについてstackoverflowで尋ねた。それはここにあります。 :) – zproxy

関連する問題