カテゴリー : papervision3D

2/15 Wonderflで見かけた良サンプルメモ

PV3Dその3というPapervision3Dを使ったかっこいいサンプルがありましたので、今日はこれを勉強していきたいと思います。

Viewport3D

Viewport3D{
viewportWidth:Number = 640,
viewportHeight:Number = 480,
autoScaleToStage:Boolean = false,
interactive:Boolean = false,
autoClipping:Boolean = true,
autoCulling:Boolean = true
)

camera.target = DisplayObject3D.ZERO; カメラのターゲットを原点に向けている

cameraについて

* X,Y,Z座標:3D空間の配置する場所を設定
* focus : 焦点距離(値が小さいほど広角)
* zoom : ズーム(値が大きいほど拡大)

Text3Dクラス

var word:Text3D = new Text3D(“文字列” , font ,material);
使い方
Letter3DMaterialを使い,matrialを作成する。var material:Letter3DMaterial = new Letter3DMaterial();
マテリアルの裏側も表示させる場合はdoubleSidedをtrueにしておきます。
interactiveは相互に作用する

extraプロパティ(動的に自由な値を入れることのできる変数)

この関数で文字をランダムな位置に配置してそれをextraプロパティにとっておくと思われ

Tweener.addTween

Tweener,addTween(対象オブジェクト、{ パラメータ:値、time:秒数 , delay:秒数} );

setInterval( timer, 1000 ); 一秒ごとにtimer関数を実行

バラバラになっている文字列をTweenerを使って整列させています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private function resetWords(words:Text3D):void
{
for each(var word:DisplayObject3D in words.letters)
{
Tweener.addTween(word,
{x:word.extra.x,
y:word.extra.y,
z:word.extra.z,
rotationX:0,
rotationY:0,
rotationZ:0,
time:1,
transition:"easeOutBounce",
delay:delayTime});

Tweener.addTween(word,
{rotationY:720,
time:1,
delay:delayTime + 2});
delayTime+=0.1;
}
}

extra.xはディフォルトの文字配列の位置を表しています。
文字列の初期位置は最初のTweenerで配置をされていますが、その配置をする前のディフォルトの値がexxtra.xになります。
yの座標は文字配列によって少し違いますが(words1.y = 50,words2.y =0 , words3.y = -50)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private function breakWords(words:Text3D):void
{
for each(var word:DisplayObject3D in words.letters)
{
Tweener.addTween(word,
{x:Math.random() * 2000 - 1000,
y:Math.random() * 2000 - 1000,
z:Math.random() * 2000 - 1000,
rotationX:Math.random() * 360,
rotationY:Math.random() * 360,
rotationZ:Math.random() * 360,
time:4,
delay:3 * Math.random()});
}
}

フィルターを利用

・ ViewportLayerを利用すれば、フィルターを利用できます。
・ cameraとsceneとの距離とdistance(cameraの位置を決めている値)を40で割った数字)カメラとsceneの距離が近ければぼかしを少なくしている。逆に遠いとぼかしも多い。

1
2
3
var vpl:ViewportLayer=word.createViewportLayer(viewport, true);
var d:Number=Math.abs(DistanceFromCamera(word) - distance) / 40;
vpl.filters=[new BlurFilter(d, d, 1)];

Math.ads () 絶対値を返します。
Math.sprt() 平方根を返します。
sceneについてはclockmakerさんのサイトを参考に。3D座標軸(x、y、z)の値を表しています。

BlurFilter(a,b,c);
a:水平方向のぼかし量
b:垂直方向のぼかし量
c:ぼかしの実行回数

1/22 papervision3D メモ

Timerクラス

Timerクラスについてよくわからなかったのでこのサイトを参考にしました。

今回のサンプルを参考にすると。
timer = new Timer(15000); 繰り返す感覚と回数を引数で指定
timer.addEventListener(TimerEvent.TIMER, onTimer); 繰り返す処理を設定
timer.start();

roll, pitch, yaw

回転を加えるroll(z軸回転), pitch(x軸回転), yaw (y軸回転)。
今回のサンプルは、_world.yaw(0.1); y軸に0.1の速さで回転するという意味です。

new ParticleMaterial(0xffffff,1,1);

ParticleMaterialの引数がイマイチわからなかったので調べて見ると、flabakaさんの記事に詳しく載っていました。
第一引数は色の指定。
残りの引数はMaterialの形を決める引数みたいです。
ParticleMaterial(0xffffff,1); だと四角形
ParticleMaterial(0xffffff,1,1) だと丸でした。

よくわからない点

なんとなくの解釈として、ひとつ前にviewportの画面をtimeで指定した時間までにalphaを0にする。(残像)
そしてremoveLayer(に引き継ぐ(
var num:int = basicBiew.viewport.containerSprite.childLayers.length – 1;
Tweener.addTween(basicBiew.viewport.containerSprite.childLayers[num],{
alpha:0, //透明度を0にしている
time:10, //透明度を0にするまでの時間
onComplete:removeLayer //Tweenが終わった際にremoveLayer関数に移動
});

Papaervision3D 入門メモ 5 マテリアル

マテリアル

光源で光の当たり具合を表現するシューティングマテリアルについて。
これを使うことで3Dの物体をよりリアルに見せることが可能になります。

シューティングマテリアルの種類

  1. フラットシューティング(FlatShadeMaterial)
  2. グローシューティング(GouraudMaterial)
  3. フォンシューティング(PhongMaterial)
  4. セルシューティング(CellMaterial)
  5. 環境マッピング(EnvMapMaterial)

まずこの光源を使うには、PointLight3Dクラスが必要となるので、マテリアルを作成する前に用意する。

  • まずパッケージをインポートする。import org.papervision3d.lights.*;
  • コンストラクタを行う。 var light:PointLight3D = new PointLight3D(true,false);

PointLigth3Dを定義した後にシューティングマテリアルを作成する。

  • まずパッケージをインポート。import org.papervision3d.materials.shadematerials;
  • コンストラクタを行う。var material:FlatShadeMaterial = new FlatShadeMaterial(light,0xffffff,0×000000,0);

サンプル 例:左(FlatMaterial) ,上(PhongMaterial), 右(GouraudMaterial)

その他、色々マテリアルが存在しますが、直近では必要ないものが多いので必要になったら戻って勉強をしたいです。
(FogMaterial)
霧のかかったような質感を出すマテリアル。

  • FogMaterialを作成 var fg:FogMaterial = new FogMaterial(0xffffff); 
  • FogFilterを使いFogmaterialを有効にする。 renderer.filter = new FogFilter(fg,40,1500,8000);

Papaervision3D 入門 4 マテリアル

マテリアル

CubeやCone,Sphereを表示した際の形状を決めるのがマテリアルです。

マテリアルにはいくつもクラスがあります。

  1. ワイアーフレームマテリアル(WireframeMaterial)
  2. カラーマテリアル(ColorMaterial)
  3. ビットマップマテリアル(BitmapMaterial)
  4. ムービーマテリアル(MovieMaterial)

ビットマップマテリアルは外部から画像データなどを使うことができるので3Dの外見が凄く綺麗に作り込むことができます。
ビットマップマテリアルにはさらにいくつかの種類が分かれています。

  1. 外部の画像を読み込んで使用する(BitmapFileMaterialクラス)
  2. FlashC3,FlashC4のライブラリパネルのシンボルを使用する(BitmapAssetMaterialクラス)
  3. BitmapDateから画像データを使用する(BitmapMaterialクラス)

僕にとって一番簡単なのは、BitmapAssetMaterialを使う方法。
画像を挙げて、名前を指定するだけで使えます。

その他、MovieMaterialというものがある。

これはビットマップに変わってムービクリップシンボルを使うマテリアル。そうすると、Flashで作った画像を3Dに貼付けて使用することが可能。

  1. あらかじめタイムライン上に作成したムービークリップを配置する(MovieMaterial)
  2. ライブラリのムービークリップを使用する。(MovieAssetMaterial)

上記のマテリアルの組合わせも可能(CompositeMaterial)

まずはパッケージをインポートする必要あり。
import org.papervision3d.materials.special.*;
書式
var material:CompositeMaterial = new CompositeMaterial();
material.addMaterial(new WireframeMaterial(0x0000ff));
material.addMaterial(new ColorMaterial(0xffff00));
var sphere:Sphere = new Sphere(material,500,10,10);

Papervision3D入門メモ 3

カメラ

このサンプルでは以下のようにカメラの位置を調節しています。

camera.x = 1000* Math.sin(rot* Math.PI/180);
camera.z = 1000* Math.cos(rot* Math.PI/180);

まず最初の1000はカメラの回る円の半径です。
rot* Math.PI/180 はラジアンを角度から算出しています。
sin,cosは (-1~1) の間を行き来する関数です。波を打ってます。

でもこのカメラがどう動いているかのイメージがわかない。

イージングがこのサンプルには使われています。
イージングの公式は 

 値 += (目標 ー 現在の値)* 減速値