ログイン | アカウントの作成
CONTACT | HOME | BBS | Wiki | Blog | Tools |


ブログトップページ

自分のブログページ

最近更新されたブログ
押し出しテキスト (d5)
Cube回転 (d5)
パッケージ配布サーバ (d5)
RTMP Client ビデオをアップロード (d5)
WOWEngine インストール (d5)
ビデオStreamの画像キャプチャ (d5)
2DオブジェクトをMatrix3Dで操作する (d5)
メモリを割り当てる (d5)
Eclipse 環境構築 (d5)
アプリケーション入門編 ① (d5)
インストール (d5)
DisplayObject3D の削除を考える (d5)
入門編⑨ Cube マテリアル MaterialList (d5)
メニュー画面の作成② (d5)
Painter初挑戦~ (d5)
川端康成の誕生日 2008/06/14 (d5)
欧州選手権2008 2008/06/07 (d5)
スペインの画家「Diego Velazquez」 2008/06/06 (d5)
世界初 熱気球 2008/06/04 (d5)
歴史上初のエベレスト登頂の日 2008/05/29 (d5)
レーザー光線の発明 2008/05/16 (d5)
メニュー画面の作成 (d5)
新しい家族 (d5)
かぎ編みハマりました。 (yucca)
産婦人科グッズと愛するポトスに・・・ (yucca)
カーレースゲームを作ってみる⑪ 微修正 (d5)
カーレースゲームを作ってみる⑩ いろいろ修正 (d5)
カーレースゲームを作ってみる⑨ ゴールを作成 (d5)
カーレースゲームを作ってみる⑧ カメラの切り替え (d5)
カーレースゲームを作ってみる④ マップの作成 (d5)
カーレースゲームを作ってみる⑦ テクスチャーリピート (d5)
カーレースゲームを作ってみる⑥ collision (壁) の作成 (d5)
カーレースゲームを作ってみる⑤ グリップの調整 (d5)
カーレースゲームを作ってみる④ マップの作成 ② (d5)
カーレースゲームを作ってみる③ (d5)
Supreme Commander リアルタイムストラテジー (d5)
カーレースゲームを作ってみる② (d5)
カーレースゲームを作ってみる① (d5)
入門編⑧ Collada + Phong Shader + テクスチャー (d5)
入門編⑦ テクスチャ付き Phong Shader (d5)
テキストエディタ ショートカット 語句ジャンプ (d5)
入門編⑤ ライトを作成してPhong Shader を使用する (d5)
入門編⑥ Phong Shader の種類 (d5)
入門編④ テクスチャー (d5)
入門編③ マテリアルの設定 (d5)
入門編② 板ポリを動かす (d5)
入門編① 3Dシーンの作成 (d5)
ダウンロードとインストール(クラスパスの設定) (d5)
インストールと準備 (d5)
インストーラーの入手とインストール (d5)
インストール後の確認 (d5)
トップページ / d5 / Papervision3D / 入門編⑧ Collada + Phong Shader + テクスチャー

2008年 04月 21日

入門編⑧ Collada + Phong Shader + テクスチャー

Flash + Flex でやってきたんですが
今回は外部ファイルがいくつかあるのでEmbedで埋め込んで
Flex のみで作成しています。

colladaファイルとテクスチャーファイルは
papervision3d\trunk\as3\trunk\examples\Focus
を使用しました。


package {
	import flash.display.Sprite;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import flash.events.Event;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.core.utils.Mouse3D;
	import flash.display.BitmapData;
	import flash.utils.getDefinitionByName;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.shadematerials.PhongMaterial;
	import org.papervision3d.materials.shadematerials.GouraudMaterial;
	import org.papervision3d.materials.shadematerials.CellMaterial;
	import org.papervision3d.materials.shadematerials.EnvMapMaterial;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.parsers.Collada;
	import org.papervision3d.objects.DisplayObject3D;
	import flash.display.Bitmap;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.events.RendererEvent;
	import org.papervision3d.events.AnimationEvent;
	import org.papervision3d.events.FileLoadEvent;
	import org.papervision3d.materials.shaders.PhongShader;
	import org.papervision3d.materials.shaders.ShadedMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import flash.display.StageQuality;
	
	[SWF(width="400",height="300",frameRate="30",backgroundColor="#CCCCCC")]
	public class pv3d_test8 extends Sprite
	{
		
		public var viewport	:Viewport3D;
		public var scene		:Scene3D;
		public var camera		:Camera3D;
		public var renderer	:BasicRenderEngine;
		public var model		:DisplayObject3D;
		
		public var Steer_FL	:DisplayObject3D;
		public var Steer_FR	:DisplayObject3D;
		public var Wheel_FR	:DisplayObject3D;
		public var Wheel_FL	:DisplayObject3D;
		public var Wheel_RR	:DisplayObject3D;
		public var Wheel_RL	:DisplayObject3D;
		
		
		
		[Embed(source="./data/Focus.dae", mimeType="application/octet-stream")]
		private var collada_car:Class;
		
		[Embed(source="./data/image/body.jpg")]
		private var body_texture:Class;
		
		[Embed(source="./data/image/wheel.jpg")]
		private var wheel_texture:Class;
		
		
		/**----------------------------------------------------------------------
		 * コンストラクタ
		-----------------------------------------------------------------------*/
		public function pv3d_test8() {
			
			//画質を低に
			this.stage.quality = StageQuality.LOW;
			
			//初期化
			init();
		}
		
		/**----------------------------------------------------------------------
		 * init
		 * 初期化
		-----------------------------------------------------------------------*/
		public function init():void {
			
			//このムービーのスケールモードを設定
			this.stage.scaleMode = "noScale"
			this.stage.align = "left";
			
			//3Dの初期設定
			this.init3D();
			
			//毎フレーム呼び出されるイベントを追加
			this.addEventListener( Event.ENTER_FRAME, this.loop_Proc );
			
		}
		
		/**----------------------------------------------------------------------
		 * init3D
		 * 3Dの初期設定
		-----------------------------------------------------------------------*/
		public function init3D():void {
			
			// ビューポートの作成
			this.viewport = new Viewport3D(0, 0, true, true);
			this.addChild( viewport );
			
			//レンダラーの設定
			this.renderer = new BasicRenderEngine();
			
			//シーン作成
			this.scene = new Scene3D();
			
			//ライトの作成
			var light:PointLight3D = new PointLight3D();
            light.x = 100;
            light.y = 1000;
            light.z = -1000;
            
            //ライトを追加
            this.scene.addChild(light);
            
            //テクスチャー
			var body_tex:Bitmap = new body_texture() as Bitmap;
			var body_bit_mat:BitmapMaterial = new BitmapMaterial(body_tex.bitmapData);
			
            var phong_shader:PhongShader = new PhongShader(light ,0xFFFFFF , 0x444444,1);
			
			
			//マテリアルリスト
            var body_mat_list:MaterialsList = new MaterialsList(
            	{all:new ShadedMaterial(body_bit_mat,phong_shader)}
            );
			
			
			
			//collada から モデルを作成
			this.model = new Collada(XML(new collada_car()),body_mat_list).getChildByName("Focus");
			
			
			//モデルをシーンに追加
			this.scene.addChild(this.model);
			
			
			//ホイルのマテリアルを作成
			var wheel_tex:Bitmap = new wheel_texture() as Bitmap;
			var wheel_mat:BitmapMaterial = new BitmapMaterial(wheel_tex.bitmapData);
			var wheel_sh_mat:ShadedMaterial = new ShadedMaterial(wheel_mat,phong_shader);
			
			//パーツを取得
			this.Steer_FL = this.model.getChildByName("Steer_FL");
			this.Steer_FR = this.model.getChildByName("Steer_FR");
			this.Wheel_FL = this.Steer_FL.getChildByName("Wheel_FL");
			this.Wheel_FR = this.Steer_FR.getChildByName("Wheel_FR");
			this.Wheel_RL = this.model.getChildByName("Wheel_RL");
			this.Wheel_RR = this.model.getChildByName("Wheel_RR");
			
			//ホイルのマテリアル設定
			this.Wheel_RL.material = wheel_sh_mat;
			this.Wheel_RR.material = wheel_sh_mat;
			this.Wheel_FL.material = wheel_sh_mat;
			this.Wheel_FR.material = wheel_sh_mat;
			
			
			//地面を作成
			var plane:Plane = new Plane(new WireframeMaterial(0x000000),2000,2000,5,5);
			plane.rotationX = -90;
			plane.y = -70;
			
			this.scene.addChild(plane);
			
			
			// カメラの作成
			this.camera = new Camera3D();
			this.camera.z = -1800;
			this.camera.zoom = 5;
			this.camera.y = 1000;
			
			this.camera.lookAt(this.model);
		}
		
		
		/**----------------------------------------------------------------------
		 * loop_Proc
		 * 毎フレーム呼び出される 関数
		-----------------------------------------------------------------------*/
		public function loop_Proc(event:Event):void 
		{
			
			
			//モデルの回転
			this.model.rotationY += 2;
			
			
			//レンダリング
			this.renderer.renderScene(scene, camera, viewport);
		}
		

	}
}






なかなかいいじゃんー

投稿者: d5      23 : 04
更新日:2008-04-22 21:05:10
  



「Papervision3D」のアーカイブ




CgInstitute のホーム   -    コンタクト   -    CgInstitute について   -    アカウントの作成