Home > flash > Metasequoia クラスを GreatWhite に対応させてみた

Metasequoia クラスを GreatWhite に対応させてみた

  • Posted by: non
  • 2008年1月21日 04:34
  • flash

昨年の秋から放置していた Papervision3D をそろそろ触ってみることにした。あまり基本的なことをやっても楽しくないので、rch850 さんの Metasequoia クラスを使って .mqo ファイルを読み込んでみることにした(3Dデータは三次元CG@七葉の保管庫から△2000の初音ミクをお借りしました)。まず、PV3D1.5 でやってみたのがコレ。

Metasequoia クラスを GreatWhite に対応させる

表示はできるけど、やっぱり「最新のリビジョンでやってみたい」ということで、Metasequoia クラス(PV3D1.7版)を PV3D 2.0 GreateWhite(リビジョン395)に対応させてみた。

まずは import パスの置き換え。

note.x さんのこの記事によると、PV3D1.7 の Face3D クラスが Triangle3D に、Mesh3d クラスが TriangleMesh3D に名前が変更され、仕様が変更されたとのこと。更に PV3D1.7 から PV3D2.0 になってディレクトリ構成が大幅に変更されていたので、クラス名で検索をかけつつパスを置き換えてみた。

33~37行目。

import org.papervision3d.core.geom.Face3D;
import org.papervision3d.core.geom.Mesh3D;
import org.papervision3d.core.geom.Vertex3D;
import org.papervision3d.core.Matrix3D;
import org.papervision3d.core.NumberUV;
↓
import org.papervision3d.core.geom.TriangleMesh3D;
import org.papervision3d.core.geom.renderables.Triangle3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.math.Matrix3D;
import org.papervision3d.core.math.NumberUV;

43行目。

import org.papervision3d.materials.MaterialsList;
↓
import org.papervision3d.materials.utils.MaterialsList;

53行目。Metasequoia クラスは Mesh3D クラスを継承しているので、TriangleMesh3Dクラスに変更してやる。

public class Metasequoia extends Mesh3D {
↓
public class Metasequoia extends TriangleMesh3D {

331行目。Face3D を Triangle3D に。

var face:Face3D;
↓
var face:Triangle3D;

最後に、346, 348, 362, 386, 388, 401, 403 行目の Face3D インスタンスが生成されている所を、 Triangle3D に変更。ただ、PV3D 2.0 では面が属する DisplayObject3D を第1引数に取るようになったようなので、以下の例と同様に 7 行分置き換えてやる。なぜ this を渡しているかというと、面が属すのは DisplayObject3D を継承している TriangleMesh3D、つまり Metasequoia 自体を渡せばいいのでは?という結論に至ったから。まぁ、動いたのでOK。

  • do3dInstance:面が属するDisplayObject3D?(若干自信無い)
  • vertices:面を構成する頂点Array
  • material:面のマテリアル?(未調査)
  • uv:面のUV座標Array
note.x | [Papervision3D2.0] TriangleMesh3D

例)346行目

face = new Face3D([a, b, c], material, [uvA, uvB, uvC]); 
↓
face = new Triangle3D(this, [a, b, c], material, [uvA, uvB, uvC]);

PV3D 2.0 GreatWhite で初音ミク

PV3D 2.0 GreatWhite に対応させた Metasequoia クラスを使って初音ミクを読み込んだ結果がコレ。若干軽くなった。

これで PV3D 1.5/1.7 を使わなくても .mqo 形式で読み込めるようになりました。

以下ソースコード。

package  {

	import flash.display.*;
	import flash.events.Event;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;
	import org.libspark.pv3d.Metasequoia;
	
	[SWF(width="800", height="800", backgroundColor="#000000")]
	
	public class HatuneMiku extends Sprite
	{
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var viewport:Viewport3D;
		private var renderer:BasicRenderEngine;
		private var rootNode:DisplayObject3D;
		private var valx:Number = 0;
		
		public function HatuneMiku()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			stage.quality = StageQuality.MEDIUM;
			stage.addEventListener(Event.RESIZE, onStageResize);
			initialize();
		}
		
		protected function initialize():void
		{
			viewport = new Viewport3D(stage.stageWidth / 2, stage.stageHeight / 2,false, false, true, true);
			viewport.x = stage.stageWidth / 4;
			viewport.y = stage.stageHeight / 4;
			this.addChild(viewport);
			
			renderer = new BasicRenderEngine();
			
			camera = new Camera3D();
			camera.focus = 500;
			camera.zoom = 1;
			camera.z = 500;
			
			scene = new Scene3D();
			rootNode = scene.addChild(new DisplayObject3D("rootNode"));
			
			//.mqoファイルの読み込み
			var mqo:String = "http://nondelion.com/samples/as3/HatuneMiku/mqo/output_0.mqo";
			var obj:Metasequoia = new Metasequoia();
			obj.load(mqo, 0.7);
			obj.pitch(0);
			rootNode.addChild(obj);
			
			this.addEventListener(Event.ENTER_FRAME, loop3D);	
		}
		
		private function loop3D( event:Event ):void
		{
			valx += (viewport.mouseX - viewport.width / 2) / 50;
			rootNode.rotationY = valx;
			renderer.renderScene(scene, camera, viewport);
		}
		
		private function onStageResize(event:Event):void
		{
			viewport.x = stage.stageWidth  / 2 - viewport.width / 2;
			viewport.y = stage.stageHeight / 2 - viewport.height / 2; 
		}
	}
}

※2008-02-03T12:44:00+09:00 追記

本家 libspark の Metasequoia クラスが正式に GreatWhite に対応したようです。

heteml banner

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://nondelion.com/cms/mt-tb.cgi/94
Listed below are links to weblogs that reference
Metasequoia クラスを GreatWhite に対応させてみた from nondelion.com

Home > flash > Metasequoia クラスを GreatWhite に対応させてみた

Search
Feeds

http://feeds.feedburner.com/nondelion

Return to page top