[Return]
基本
バージョン:Alternativa 3D 8.17.0
Alternativa3D のコンテンツは、ActionScript 3.0 で制作します。
Alternativa3D 8 の基本となる最小コードは、下記の内容です。
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;
public class Main extends Sprite
{
private var stage3D:Stage3D; // Stage3D
private var camera:Camera3D; // カメラ
private var scene:Object3D; // 3D空間
//
// コンストラクタ(クラスの定義処理)
//
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);
// 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);
}
}
}
これが、Alternativa3D 8 での最低限必要な内容になります。
ここでは、何もない空間内にカメラを配置しただけですので、下のように真っ黒な世界が広がるだけです。
これをベースにして、表示したいオブジェクトを追加したり、アニメーションなどの処理を加えていくことになります。
Alternativa3D 7 までのものと違い、Alternativa3D 8 では Stage3D に関連した記述が出てきています。Alternativa3D 8 では、最終的な描画は Stage3D 任せになっていますので、この部分の処理も記述する必要があります。
Alternativa3D の仕様だけを理解すればよかった 7 と比べ、8 では Stage3D のことも理解する必要がありますので、7 までと比べると難易度は上がっていると思います。
Stage3D に触れたことがなく、Alternativa3D のことも分からない…という場合は、よりシンプルな Alternativa3D 7 から入られたほうが、習得は早いかもしれません。
Alternativa3D では、ワールドの座標系は Z-UP の座標系になっているそうです。
それに対してデフォルトのカメラは、上を向いている(Z の正の座標の遠いところを見ている)状態になっています。
いわゆる左手座標系です。
私は Z 軸が手前を向いている右手座標系を使用していますので、カメラを配置する際に
camera.rotationX = 180 * Math.PI / 180;
とカメラを回して配置しています。
もし左手座標系を使用される場合は、カメラは回さずに、カメラの Z 座標を
camera.z = -100;
という風に調整してください。
カメラを原点から引いて配置するのは、オブジェクトを配置する際に、デフォルトでは原点(0, 0, 0)に配置されるからです。
Alternativa3D ではポリゴン(メッシュ)の裏面は描画されませんので、オブジェクトの中にカメラが入ると、何も見えない状態になってします。
この状態を避けるために、カメラは原点から離して置いておくのが分かりやすいです。
あと、見た目は真っ黒で何もないように見えるけど、実際は黒い物体が描画されている…ということもありますので、Alternativa3D 標準の統計情報も表示しておくと良いです。
addChild(camera.diagram);
画面内にオブジェクトやポリゴンがあるかどうかは、「DRW」「TRI」の値が 0 以上になるかどうかで分かります。
このサンプルでは、オブジェクトもポリゴンも何も表示していませんので、どちらも 0 になります。
| ツイート |
[Return]

