- 2009-05-01 (金)
- Papervision3D 2.0
PV3D には PointLight3D クラスが用意されており、その名の通り、ライト(光源)を配置することができる。ライト(光源)があることにより、オブジェクトに明るい部分と暗い部分(影)の表現が可能となる。
Flash Player Plug-in はこちらからダウンロードする事が出来ます(無料)。
※マウスの位置に合わせてオブジェクトが動きます。
※右上の黄色のオブジェクトが光源になります。
上記サンプルを見て分かるようにライトの右上が明るくなり、逆方向の左下に影ができると思う。こんな感じでより臨場感のある表現が可能となる。
ライトを設置するためには
pointLight = new PointLight3D(true);
pointLight.x = 500;
pointLight.y = 300;
pointLight.z = -100;
scene.addChild(pointLight);
↑このような感じで、PointLight3D を生成して座標を設定し配置する。
ちなみに、new PointLight3D(true) の引数である true はライトのオブジェクトを表示するかどうか。true だと上記のサンプルのように黄色のオブジェクトが表示される。false にするとライトのオブジェクトは非表示となる。
また、ライトを設置してオブジェクトに表現するためには、専用のマテリアルを適用させる必要がある。
var materials1:MaterialsList = new MaterialsList
({
all : new GouraudMaterial(pointLight, 0xCCCCCC, 0x333333)
});
cube1 = new Cube(materials1, 300, 200, 100);//Cube生成
cube1.x = 250;
obj3D.addChild(cube1);
↑マテリアルは ShadeMaterials の GouraudMaterial で指定させる。
new GouraudMaterial(ライトオブジェクト, 明るい部分の色, 暗い部分の色) という感じで指定すればOK。
全ソースは下記。
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import caurina.transitions.Tweener;
//Papervision3D 2.0.883
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.GouraudMaterial;
import org.papervision3d.materials.utils.MaterialsList;
public class Main extends Sprite
{
public var main:MovieClip;
private var scene:Scene3D;
private var camera:Camera3D;
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var pointLight:PointLight3D;
private var obj3D:DisplayObject3D;
private var cube1:Cube;
private var cube2:Cube;
/*============================================================
コンストラクタ
============================================================*/
public function Main()
{
init();
init3D();
}
/*============================================================
初期設定
============================================================*/
public function init():void
{
//ステージ
stage.showDefaultContextMenu = false;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
}
/*============================================================
3D処理
============================================================*/
public function init3D():void
{
scene = new Scene3D();//シーン
camera = new Camera3D();//カメラ
renderer = new BasicRenderEngine();//レンダラー
viewport = new Viewport3D(0, 0, true);//ビューポート
viewport.opaqueBackground = 0x000000;//背景色
addChild(viewport);
//ライト
pointLight = new PointLight3D(true);
pointLight.x = 500;
pointLight.y = 300;
pointLight.z = -100;
scene.addChild(pointLight);
//obj3D生成
obj3D = new DisplayObject3D();
scene.addChild(obj3D);
//オブジェクト1
var materials1:MaterialsList = new MaterialsList
({
all : new GouraudMaterial(pointLight, 0xCCCCCC, 0x333333)
});
cube1 = new Cube(materials1, 300, 200, 100);//Cube生成
cube1.x = 250;
obj3D.addChild(cube1);
//オブジェクト2
var materials2:MaterialsList = new MaterialsList
({
all : new GouraudMaterial(pointLight, 0xFF9900, 0x642800)
});
cube2 = new Cube(materials2, 300, 200, 100);//Cube生成
cube2.x = -250;
obj3D.addChild(cube2);
//イベント
stage.addEventListener(Event.ENTER_FRAME, onEnterFrameListener);
}
/*============================================================
レンダリング
============================================================*/
function onEnterFrameListener(event:Event):void
{
var mousePos:Point = new Point(stage.mouseX, stage.mouseY);//マウスカーソルの位置を取得
mousePos.offset( -stage.stageWidth / 2, -stage.stageHeight / 2); //ステージの中心に座標をオフセット
obj3D.rotationX += mousePos.y / 20;
obj3D.rotationY += mousePos.x / 20;
renderer.renderScene(scene, camera, viewport);//レンダリング
}
}
}
この記事をブックマークしておく
- 次の記事: Papervision3D 2.0 ライト(PointLight3D)を動かしてみる
- 前の記事: Papervision3D 2.0 オブジェクトを入れ子にして個別に Tweener で動かしてみる
コメント:0
トラックバック:0
- この記事のトラックバックURL
- http://god.xsrv.jp/__mt/mt-tb.cgi/1418
- トラックバックを受ける記事
- Papervision3D 2.0 でオブジェクトにライトを当ててみる(PointLight3D) from 1ka2ka.com Flash & Action Script