iTunes Store(Japan)

Return

Box

バージョン:Alternativa 3D 8.17.0

Alternativa3D 8 には、デフォルトの図形(プリミティブ)として、箱である Box が用意されています。
これを基本のソースを元に表示してみましょう

package
{
	import flash.display.Sprite;
	import flash.display.Stage3D;
	import flash.events.Event;

	import alternativa.engine3d.core.Camera3D;
	import alternativa.engine3d.core.Object3D;
	import alternativa.engine3d.core.Resource;
	import alternativa.engine3d.core.View;

	import alternativa.engine3d.primitives.Box;
	import alternativa.engine3d.materials.FillMaterial;

	public class Main extends Sprite
	{
		private var stage3D:Stage3D; // Stage3D
		private var camera:Camera3D; // カメラ
		private var scene:Object3D; // 3D空間

		private var box:Box; // 箱

		//
		// コンストラクタ(クラスの定義処理)
		//
		public function Main()
		{
			// ステージに追加されたら、初期化処理を呼ぶ
			addEventListener(Event.ADDED_TO_STAGE, init);
		}

		//
		// 初期化
		//
		private function init(ev:Event):void
		{
			// 3D の空間を定義
 			scene = new Object3D();

			// 3D カメラ作成
			camera = new Camera3D(1, 10000);

			// カメラが描画する範囲(view)をステージサイズに設定
			camera.view = new View(stage.stageWidth, stage.stageHeight);
			camera.rotationX = 180 * Math.PI / 180;
			addChild(camera.view);

			// 統計情報の表示
			addChild(camera.diagram);

			//
			// カメラの座標設定
			//
			camera.x = 0;
			camera.y = 0;
			camera.z = 100;

			// カメラの座標設定
			scene.addChild(camera);

			// 0 番目の Stage3D を利用
			stage3D = stage.stage3Ds[0];

			// Context3D が作成された際に呼ばれるハンドラを設定
			stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);

			// Stage3D に Context3D の作成を要求
			stage3D.requestContext3D();
		}

		//
		// Stage3D に Context3D の準備が出来たときに呼ばれるイベントハンドラ
		//
		private function onContextCreate(e:Event):void
		{
			// イベントリスナーを削除
			stage3D.removeEventListener(Event.CONTEXT3D_CREATE, onContextCreate);

			//
			// Box を空間に追加
			//
			box = new Box(25, 25, 25, 1, 1, 1, false, new FillMaterial(0xff0000, 1.0));
			scene.addChild(box);

			// scene にある 3D リソースを取得して、Context3D にアップロード
			var resources:Vector.<Resource> = scene.getResources(true);

			for each (var resource:Resource in resources)
			{
				resource.upload(stage3D.context3D);
			}

			//
			// 毎フレーム毎の処理を設定
			//
			addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
		}

		//
		// 毎フレーム毎の処理のイベントハンドラ
		//
		private function onEnterFrameHandler(ev:Event):void
		{
			// カメラで見えているものを Stage3D に描画する
			camera.render(stage3D);
		}
	}
}

基本から追加されたのは、下記の三ヶ所です。

import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.materials.FillMaterial;

private var box:Box; // 箱

box = new Box(25, 25, 25, 1, 1, 1, false, new FillMaterial(0xff0000, 1.0));
scene.addChild(box);

Box を作成し、空間に配置します。
配置する場所は指定していませんので、デフォルトの場所である原点(0, 0, 0)に配置されます。

Box の面には、ベタ塗りの素材である「FillMaterial」を割り当てます。
このため画面上には、赤のベタ塗りの四角が表示されます。

FillMaterial はライトが無くてもベタ塗りとして表示されますので、図形が表示されているかどうかを区別するのには、分かりやすい素材です。

箱を置いたのに、なんで平面的な四角なの?と思われた方もいらっしゃるかもしれませんが、それは箱とカメラから見ている視点との関係です。
箱を回したり、カメラの位置を動かしたりすると、箱が立体的になっていることが分かります。

試しに、毎フレームごとに箱の回転軸の値を変えて、箱を回してみましょう。

//
// 毎フレーム毎の処理のイベントハンドラ
//
private function onEnterFrameHandler(ev:Event):void
{
	// 箱を回す
	box.rotationX += 0.5 * Math.PI / 180;
	box.rotationY += 0.5 * Math.PI / 180;

	// カメラで見えているものを Stage3D に描画する
	camera.render(stage3D);
}

ベタ塗りですけれど、ちゃんと箱が配置されていて、それが回っているのが分かりますね。

マテリアルをテクスチャーを使ったものに変更して、ライトを追加すると、より立体的に見せることが出来ます。
その辺は、マテリアルやライトの使い方になりますので、そちらで紹介します。

Return

Love Love Heart

Top

About
Contact

News

Download

Ryu!

Profile
Works
Twitter
YouTube

Adobe Flash

Flash
Alternativa3D

Computer

Macintosh

Game

- There is still no name of mine. -