AS3 papervision3d BasicView のスタートアップテンプレート
- 時間:2009年11月11日 15:35
-
delicious に登録
-
はてブに登録
- トラックバック:(0)
- コメント:(0)
BasicViewにはビューポートとシーンとカメラとレンダラーなどpapervision3dで必要な機能がすでに用意されているspriteを拡張しているクラスみたい。
viewport = new Viewport3D();
addChild(viewport);
scene = new Scene3D();
camera = new Camera3D();
renderer = new BasicRenderEngine();
などをいちいち記述しなくてもいけます
【サンプルswf】
あとこのファイルでポイントの箇所は
3Dオブジェクトを裏表表示したい場合はmaterialのdoubleSidedプロパティをtrueに変更。
defaultはfalse。下記の様に記述すればOK。
var material:WireframeMaterial = new WireframeMaterial(0xFF0000);
material.doubleSided = true;
【Sample20091111.as】
package {
import flash.display.*;
import flash.events.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.*;
import org.papervision3d.scenes.*;
import org.papervision3d.view.*;
import org.papervision3d.objects.*;
/*
* BasicView参考サイト
* http://wakaz.info/2009/02/pv3d_basicview.html
*/
public class Sample20091111 extends BasicView {
private var _isMouseDown:Boolean = false;
private var _oldX:Number=0
private var _oldY:Number=0
private var _targetRot:Number = 0;
private var _targetPitch:Number = 0;
private var _rot:Number = 0 // 角度
private var _pitch:Number = 0 // ピッチ=縦の角度
private var _plane:Plane;
public function Sample20091111() {
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
_init();
}
private function _init():void {
/*
* 等倍表示のための魔法の値参考サイト
* http://blog.r3c7.net/?p=166
*/
camera.zoom = 11;
camera.focus = 100;
camera.z = -1100;
/*
* マテリアル参考サイト
* http://clockmaker.jp/blog/2009/05/papervision3d_tutorial_3/
*/
var material:WireframeMaterial = new WireframeMaterial(0xFF0000);
//var material:ColorMaterial = new ColorMaterial(0x666666, 1, true);
//裏表表示
material.doubleSided = true;
_plane = new Plane( material, 100, 100, 1, 1 );
scene.addChild( _plane );
//レンダリング開始
startRendering();
/*
* カメラの動き参考サイト
* http://clockmaker.jp/blog/2009/05/papervision3d_tutorial_5/
*/
stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, _onMouseUpHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, _onMouseMoveHandler);
}
override protected function onRenderTick(event:Event=null):void{
_rot += (_targetRot - _rot) * 0.05;
_pitch += (_targetPitch - _pitch) * 0.05;
camera.x = 1100 * Math.sin(_rot * Math.PI / 180);
camera.z = 1100 * Math.cos(_rot * Math.PI / 180);
camera.y = 1100 * Math.sin(_pitch * Math.PI / 180);
renderer.renderScene(scene, camera, viewport);
}
private function _onMouseDownHandler(e:MouseEvent):void {
_isMouseDown = true;
_oldX = mouseX;
_oldY = mouseY;
}
private function _onMouseMoveHandler(e:MouseEvent):void {
if(_isMouseDown){
var dx:Number = e.stageX - _oldX
var dy:Number = e.stageY - _oldY
_targetRot += dx * 0.25
_targetPitch += dy * 0.25
_oldX = e.stageX
_oldY = e.stageY
}
}
private function _onMouseUpHandler(e:MouseEvent):void {
_isMouseDown = false
}
}
}
AS3 papervision3d BasicView のスタートアップテンプレートに対してコメントをする