Three.js(r79)でオブジェクトのマテリアルを動かしてみる。具体的には、平面オブジェクトのマテリアルとして画像を読み込み、その画像を左方向に移動させる。
以下のようにマテリアルを変化させる。
↓↓↓
以下は、THREE.ShaderMaterialとプログラマブルシェーダであるGLSLでマテリアルを移動させる手順。
今回は頂点シェーダを変更する必要はないが、この場合でも頂点シェーダーの記述は必要。
※座標変換をしているだけで、頂点位置が変化しているわけではない。
フラグメントシェーダで画像が左に移動する動きを記述する。画像のどの位置の色情報を参照するかUV座標で指定するが、そのUV座標を左にずらしていくことで、画像を左に移動させる。
GLSLを利用するためにTHREE.ShaderMaterialでマテリアルを作成する。
setIntervalでマテリアルの移動速度を調整。
後は、シーンやカメラなど、通常Three.jsで必要なものを追加するだけ。
以下のようにマテリアルを変化させる。
↓↓↓
以下は、THREE.ShaderMaterialとプログラマブルシェーダであるGLSLでマテリアルを移動させる手順。
1.GLSLのコーディング(頂点シェーダ)
今回は頂点シェーダを変更する必要はないが、この場合でも頂点シェーダーの記述は必要。
※座標変換をしているだけで、頂点位置が変化しているわけではない。
2.GLSLのコーディング(フラグメントシェーダ)
フラグメントシェーダで画像が左に移動する動きを記述する。画像のどの位置の色情報を参照するかUV座標で指定するが、そのUV座標を左にずらしていくことで、画像を左に移動させる。
3.オブジェクトの作成
GLSLを利用するためにTHREE.ShaderMaterialでマテリアルを作成する。
// ジオメトリの作成 var geometry = new THREE.PlaneGeometry( 4, 3); // テクスチャの作成 var texture = new THREE.TextureLoader().load( '../image/persimmon.jpg' ); // マテリアルの作成 // uniforms: シェーダーに渡す変数を指定 // vertexShader: 頂点シェーダーを指定 // fragmentShader: フラグメントシェーダーを指定 var material = new THREE.ShaderMaterial( { uniforms: { delta: { type: 'f', value: 0.0 }, texture: { type: 't', value: texture } }, vertexShader: document.getElementById( 'vshader' ).textContent, fragmentShader: document.getElementById( 'fshader' ).textContent }); // オブジェクトの作成 var plane = new THREE.Mesh( geometry, material );
4.マテリアルを移動させる
setIntervalでマテリアルの移動速度を調整。
// 画像の横サイズ var imgWidth = 1024; setInterval( function(){ if( plane.material.uniforms.delta.value > imgWidth ) { plane.material.uniforms.delta.value = 0.0; } plane.material.uniforms.delta.value += 1.0; }, 100 );
後は、シーンやカメラなど、通常Three.jsで必要なものを追加するだけ。
0 件のコメント:
コメントを投稿