忍者ブログ
 >admin |  >entry |  yukku++Blog 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PV3Dの使い方続き。今回はマテリアル関係。要するに色とかテクスチャね。
さて、シーンとカメラとビューとレンダラーを用意して、3D空間をレンダリングできるようにしたら、
シーンにオブジェクトを追加していこう。primitive クラスに基本モデルがあるので
とりあえず分かりやすい plane と cube のオブジェクトを出してみることに。

pv3d_test.swf

回転はRotationX / Y / Z の値をいじればいい。位置も x / y / z と分かりやすいね。
今回は plane にメッシュとワイヤーフレームに単色の色を、cube にテクスチャを張ってみた。

plane のマテリアルの設定の大雑把な方法:
ColorMaterial と WireframeMaterial を作って、 compositeMaterial に 追加する。
マテリアル情報をまとめるコンテナみたいな役割って感じ。
んで、それを plane のコンストラクタに渡してやる。これでマテリアルを設定できる。

cube のテクスチャの設定の大雑把な方法:
BitmapFileMaterial に画像を読み込む。パスを設定するだけで外部画像を読み込める優れモノ。
BitmapMaterial と BitmapAssetMaterial ってのもある。今回はBitmapFileMaterial で。
それを MaterialsList に追加する。 ココでポイント。
cube には当然6面メッシュがある。だから、どの面に貼るかを設定しなくちゃならない。
それが、cubeMat.addMaterial(texture, "all") ってやつ。
"all" は全面。それぞれ"front" "back" "left" "right" "top" "bottom" でアクセスできる。
んで、それを cube のコンストラクタに渡してやる。

色とかマテリアル張るだけでだいぶさまなってくるね。
直接 pv3d_test.swf にアクセスしないとテクスチャが出ない。クロスドメインがどーのってやつか
BitmapMaterial か BitmapAssetMaterial でやればいいんだろうけど、とりあえず保留。

package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.render.*;
	import org.papervision3d.scenes.*;
	import org.papervision3d.view.*;
	
	[SWF (width = "320", height = "240", frameRate = "24")]
	
	public class pv3d_test extends Sprite
	{
		// 3D空間の準備
		private var scene:Scene3D = new Scene3D();
		private var camera:Camera3D = new Camera3D(60, 5, 5000);
		private var view:Viewport3D = new Viewport3D(640, 480, true);
		private var renderer:BasicRenderEngine = new BasicRenderEngine();
		
		// plane(一枚板) と cube(立方体)
		private var plane:Plane;
		private var cube:Cube;
		
		// 色やテクスチャ
		private var color:ColorMaterial;
		private var wire:WireframeMaterial;
		private var texture:BitmapFileMaterial;
		
		// 素材のコンテナ
		private var planeMat:CompositeMaterial = new CompositeMaterial();
		private var cubeMat:MaterialsList = new MaterialsList();
		
		public function pv3d_test() 
		{
			// 素材を設定する
			color = new ColorMaterial(0xFF0000, 0.8);
			wire = new WireframeMaterial(0xFFFFFF, 80, 1);
			texture = new BitmapFileMaterial("texture.jpg", true);
			
			// 素材オブジェクトを素材コンテナに追加する
			planeMat.addMaterial(color);
			planeMat.addMaterial(wire);
			// メッシュの両面に適用
			planeMat.doubleSided = true;
			
			// 素材オブジェクトを素材コンテナに追加する
			cubeMat.addMaterial(texture, "all");
			
			// オブジェクトの生成
			plane = new Plane(planeMat, 120, 120);
			cube = new Cube(cubeMat, 120, 120, 120);
			
			// 位置調整
			plane.x -= 100;
			cube.x += 100;
			camera.z = -500;
			
			// オブジェクトを追加
			scene.addChild(plane);
			scene.addChild(cube);
			
			// 表示リストに追加とイベントリスナー登録
			stage.addChild(view);
			stage.addEventListener(Event.ENTER_FRAME, update);
		}
		
		private function update(e:Event):void
		{
			// 適当に回転とかさせる
			plane.rotationX += 0.5;
			plane.rotationY += 1;
			plane.rotationZ = mouseX / 10;
			cube.rotationX += 0.5;
			cube.rotationY += 1;
			cube.rotationZ = mouseY / 10;
			
			camera.z = mouseY * -1 / 2 - 500
			
			// レンダリング処理
			renderer.renderScene(scene, camera, view);
		}
	}
}
PR
Comment
Name
Title
Color
Mail
URL
Comment
Passwd   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Track
TB:
[61]  [60]  [56]  [55]  [48]  [47]  [46]  [45]  [44]  [43]  [42
プロフィール
Name :
yukku
カレンダー
06 2024/07 08
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
ブログ内検索
Twitter
Ads
アクセス解析
忍者ブログ [PR]