PV3D | Casting Shadows

shadowtop.png
さらに続けて、zupko.infoから影を作るTipsです。
これも続けて作りたい!作ろう!

→サイトはこちら

PV3D | Reflections

reflect3.png
zupko.infoにてPV3Dで反射のTipsが載っていました。
この反射かっこいいな〜。作りたい。作ろう!


→サイトはこちら

PV3D 2.0 | バージョンアップしたらレンダリングされない

SVNで、PV3Dのライブラリを更新したら、どうやらライブラリが少し変わったみたいで、いままで作っていたPV3Dのファイルが表示されない。
特にエラーが出てるわけではなく、単にレンダリングされないだけだったので、動いてるソースと見比べてみると、どうもカメラの設定が足りないみたい。
自分のソース内のカメラ設定部分に

camera.target = DisplayObject3D.ZERO;

を追加してみたところ、無事レンダリングされました。
カメラのターゲットを指定しろってことか〜。でもZEROってなんだろう?
いつからそうなんだろう?
日本語で訳してくれているサイトがあったのでペタリ。

参考:鮭とプログラムとか

→サイトはこちら

PV3D 2.0 | WOW Engine + Sound Spectrum

wow.jpgWOW Engineという3D物理エンジンライブラリとこの前のSound Spectrumを足すと面白いかな〜と思って作ってはみたものの、なんか違うな〜。単にボックスにSound Spectrumの値を入れただけだから物足りない。
Vertexごとに値を割り当てて、ガビガビしたのに合わせて、中の球をポンポン動かしたかったんだけども。。。
もうちょい調べよ〜。

Tutorialなど
ActionScript3用3D物理エンジンライブラリ「WOW-Engine」
参考サイト
shirotokoro:WOW-Engine
ミカン日記:WOWEngineを使ってみた
[Papervision3D]PV3D + WOW Engine

→微妙なサンプルはこちら

FlashCS3 | SourceBinder


Source Binder」という、Flashconferencefmx/08で発表した、
MacのQuartz Composerのように、ビジュアル的にスクリプトを構築するFlashのツールです。
オープンソースみたいですが、まだprivate alpha stageなので、Request Alpha Invitationからアルファ版が出る時に教えてくれるみたい。
めっちゃ面白そう。Wiimoteと組み合わせても遊べるそうな。
あ〜楽しそ〜。
FlashFilterLab.comでもtutorialが出ています。

PV3D | Sound Spectrum2

yellowball.jpg
とりあえず第2弾。
テクスチャとライトを設置してみた。
あと、えらく波形がビリビリなるので、参考サイトをまねて、半球で見易くしてみた。
それで、一番の問題としては、Sound Spectrumで音が出ない、波形が動かない、という事があったんですが、
同じブラウザで裏で音のなるFlashサイトを見ていた場合、画面がフリーズしてしまいました。
なんでそうなるのかな〜と検索してるとそんな記事を書いていた方がいました。
イベントとかで使う分には行けそうですね。
リアルタイムにはできないのかな〜。

参考
Papervision3D & SoundMixer
AS3のSoundMixer.computeSpectrumの問題点と対処法
SoundMixer.computeSpectrum() stretchFactor変化デモ
AS3:タイムライン再生の音の波形スナップショットが取れない
SoundMixer.computeSpectrum() マイクの音はキャプチャされない

→サイトはこちら

PV3D | Sound Spectrum

audio.jpgPV3DのプリミティブとSound Spectrumで取得したmp3の波形データを使い、
プリミティブをビリビリさせてみました。
結構楽しい。単純な形なのにmp3を変えるだけで全然違う。
もっと作り込もう。
帯と球の2種類作ってみました。
2つプリミティブが回っていますが、どっちかがLでどっちかがRのステレオ版です。
流れている曲はお友達のLili Hirakawaさんに作ってもらいました。ありがと〜。

注:いきなり音が出ます。
→帯はこちら
→球はこちら


Flash3D | Electric Oyster

eo.jpgPV3Dとは違うエンジンを使ってFlashで作られた、フライトシミュレーターのサイトです。
electric3D」というエンジンを使っているそうですが、詳細はよくわかりません。

→サイトはこちら

PV3D 2.0 | GreatWhite Basic Primitive

PV3Dのバージョンが2.0になってから、少しレンダリングの方法が変わったので、忘れないようにメモメモ。
おでんおでん。
「PV3D_Basic.as」というファイルを作り、中に以下のコードを書く。
package {
	import mx.core.UIComponent;
	import flash.display.Sprite;
	import flash.events.Event;

	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.cameras.FreeCamera3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.render.BasicRenderEngine;

	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.*;

	public class PV3D_Basic extends Sprite {
		private var container:Sprite;
		private var vp:Viewport3D;
		private var scene:Scene3D;
		private var camera:FreeCamera3D;
		private var rootNode:DisplayObject3D;
		private var rdr:BasicRenderEngine;
		//プリミティブの定義
		private var cube:Cube;
		private var sphere:Sphere;
		private var cylinder:Cylinder;
		private var cone:Cone;
		private var plane:Plane;
		
		public function PV3D_Basic() {
		  //初期化
			init();
		}
		private function init():void{
			init3D();
			rootNode.addChild(mkCube(0,-175,0));		//立方体を作る
			rootNode.addChild(mkSphere(0,0,0));			//球を作る
			rootNode.addChild(mkCylinder(0,-100,0));	//シリンダーを作る
			rootNode.addChild(mkCone(0,100,0));			//円錐を作る
			rootNode.addChild(mkPlane(0,0,0));			//板を作る
			//繰り返し処理
			addEventListener(Event.ENTER_FRAME,expEnterFrame);
		}
		private function init3D():void {
			//スプライト作成
			container=new Sprite  ;
			addChild(container);
			//ビューポート作成
			vp=new Viewport3D(stage.stageWidth,stage.stageHeight,true,true);
			container.addChild(vp);
			//シーン作成
			scene=new Scene3D;
			//レンダラー作成
			rdr=new BasicRenderEngine;
			//カメラ作成
			camera			=new FreeCamera3D;
			camera.zoom		=3;
			camera.focus	=300;
			//ルートノード
			rootNode=scene.addChild(new DisplayObject3D("rootNode"));
			}
		//レンダリング
		public function expEnterFrame(e:Event):void {
			cube.rotationY += 10;
			rdr.renderScene(scene,camera,vp);
		}
		//立方体
		private function mkCube(xPos,yPos,zPos):DisplayObject3D {

			var wireMat:WireframeMaterial=new WireframeMaterial();
			wireMat.lineAlpha=.5;
			var colMat:ColorMaterial = new ColorMaterial( 0xff00ff ,.8);
			colMat.oneSide=false;
			colMat.lineColor=0xFFFF00;
			var cubeMat:MaterialsList = new MaterialsList({
				front	:colMat,
				back	:wireMat,
				right	:wireMat,
				left	:wireMat,
				top		:wireMat,
				bottom	:wireMat
			});
			var w:Number			=50;		//幅
			var h:Number			=50;		//高さ
			var d:Number			=50;		//奥行き
			var segmentsS:Number	=2;			//横面分割数
			var segmentsT:Number	=4;			//奥行き分割数
			var segmentsH:Number	=8;			//縦面分割数
			var insideFaces:int		=0;			//裏返す面の指定?
			var excludeFaces:int	=0;			//非表示する面の指定?
			var initObject:Object	=null;
			cube=new Cube(cubeMat,w,d,h,segmentsS,segmentsT,segmentsH,insideFaces,excludeFaces,initObject);
			cube.x=xPos;
			cube.y=yPos;
			cube.z=zPos;
			return cube;
		}
		//球体
		private function mkSphere(xPos,yPos,zPos):DisplayObject3D {
			var sphereMat:MaterialObject3D = new WireframeMaterial();
			var radius:Number		=50;		//半径
			var segmentsW:int		=8;			//横の分割数
			var segmentsH:int		=6;			//縦の分割数
			var initObject:Object	=null;
			sphere=new Sphere(sphereMat,radius,segmentsW,segmentsH,initObject);
			sphere.x=xPos;
			sphere.y=yPos;
			sphere.z=zPos;
			return sphere;
		}
		//シリンダー
		private function mkCylinder(xPos,yPos,zPos):DisplayObject3D{
			var cylinderMat:MaterialObject3D = new WireframeMaterial();
			var radius:Number		=50;		//半径
			var h:Number			=100;		//高さ
			var segmentsW:int		=8;			//横の分割数
			var segmentsH:int		=6;			//縦の分割数
			var topRadius:Number	=-1;		//上面の半径
			var topFace:Boolean		=true;		//上面の表示/非表示
			var bottomFace:Boolean	=true;		//下面の表示/非表示
			var initObject:Object	=null;
			cylinder = new Cylinder(cylinderMat,radius,h,segmentsW,segmentsH,topRadius,topFace,bottomFace,initObject);
			cylinder.x=xPos;
			cylinder.y=yPos;
			cylinder.z=zPos;
			return cylinder;
		}
		//円錐
		private function mkCone(xPos,yPos,zPos):DisplayObject3D{
			var coneMat:MaterialObject3D = new WireframeMaterial();
			var radius:Number		=100;
			var h:Number			=100;
			var segmentsW:int		=8;
			var segmentsH:int		=6;
			var initObject:Object	=null;
			cone = new Cone(coneMat,radius,h,segmentsW,segmentsH,initObject);
			cone.x=xPos;
			cone.y=yPos;
			cone.z=zPos;
			return cone;
		}
		//板
		private function mkPlane(xPos,yPos,zPos):DisplayObject3D{
			var planeMat:MaterialObject3D=new WireframeMaterial();
			var w:Number=400;
			var h:Number=400;
			var segmentsW:Number=3;
			var segmentsH:Number=2;
			var initObject:Object=null;
			plane = new Plane(planeMat,w,h,segmentsW,segmentsH,initObject);
			plane.x=xPos;
			plane.y=yPos;
			plane.z=zPos;
			return plane;
		}
	}
}
レンダリング時(表示時)にsceneとcameraとviewportを設定しないとダメみたい。たぶん。
立方体だけぐるぐる回っています。
立方体のマテリアルは面ごとに設定しないとエラーになっちゃうみたい。
んで、これを新規で作ったflaファイルのプロパティのドキュメントクラスに「PV3D_Basic」と書いてパブリッシュすればおでんのできあがり。

PV3D | Bend modifier


PV3Dのモデリングデータをボーンを入れたようにぐにゃぐにゃ曲げれるサンプルサイトです。
これは第2弾ですが、第1弾ではお札がぱらぱら曲がってました。

→サイトはこちら