VRクリックした方向に固定
VRクリック方向に固定
// forked from whaison's 3D papervision3d VR cube BitmapFileMaterial Security loadPolicyFile 神社
package
{
import flash.display.AVM1Movie;
import flash.display.StageQuality;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.system.Security;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.core.math.Plane3D;
import org.papervision3d.core.proto.LightObject3D;
import org.papervision3d.events.*;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.*;
public class Main2 extends BasicView
{
private var cameraMode:String
private var buildY:Number;
public var _txt001:TextField
public var _txt002:TextField
public var _txt003:TextField
public var _txt004:TextField
public var _txt005:TextField
public var _txt006:TextField
public var _txt007:TextField
public var _txt008:TextField
public var _txt009:TextField
public var _txt010:TextField
public var scene3D:*
private var frontM:BitmapFileMaterial;
private var backM:BitmapFileMaterial;
private var rightM:BitmapFileMaterial;
private var leftM:BitmapFileMaterial;
private var topM:BitmapFileMaterial;
private var bottomM:BitmapFileMaterial;
private var alphaM:BitmapFileMaterial;
private var testM:BitmapFileMaterial;
public function Main2()
{
// BasicViewの初期化
super(0, 0, true, true, CameraType.FREE);
/////////////////////////////////////////////////////////
materialLoad()//frontM,backM,rightM,leftM,topM,bottomM のマテリアル準備完了
////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
scene3D = scene///////////////////////////////////////////////////////////////////////////ROOT
//////////////////////////////////////////////////////////////////////////////////////////////
// レンダリング
VRinitialize(scene3D);
// レンダリングを開始します
startRendering();
debugersetting()
}
public function materialLoad():void
{//frontM,backM,rightM,leftM,topM,bottomM
trace("マテリアル(立方体の面を作成")
Security.loadPolicyFile("http://farm6.static.flickr.com/crossdomain.xml");
/*
* alphaM = new BitmapFileMaterial( "imgs/alphamobetype/alpha100x100_waku.png", true );
alphaM.interactive = true; // インタラクティブを有効に設定
alphaM.doubleSided=true //両面テクスチャ
*/
///////////////////////////
Security.loadPolicyFile("http://farm6.static.flickr.com/crossdomain.xml");
frontM = new BitmapFileMaterial("http://farm6.static.flickr.com/5243/5347510799_d0616b0611.jpg");//ok
//frontM = new BitmapFileMaterial( "imgs/f.jpg", true );
frontM.interactive = true; // インタラクティブを有効に設定
frontM.doubleSided=true //両面テクスチャ
backM = new BitmapFileMaterial("http://farm6.static.flickr.com/5123/5347510701_bf7734d994.jpg");//ok
//backM = new BitmapFileMaterial( "imgs/b.jpg", true );
backM.interactive = true; // インタラクティブを有効に設定
backM.doubleSided=true //両面テクスチャ
rightM = new BitmapFileMaterial("http://farm6.static.flickr.com/5082/5348121034_7ebfcee951.jpg");//ok
// rightM = new BitmapFileMaterial( "imgs/r.jpg", true );
rightM.interactive = true; // インタラクティブを有効に設定
rightM.doubleSided=true //両面テクスチャ
leftM = new BitmapFileMaterial("http://farm6.static.flickr.com/5249/5348120992_689a331d02.jpg");//ok
//leftM = new BitmapFileMaterial( "imgs/l.jpg", true );
leftM.interactive = true; // インタラクティブを有効に設定
leftM.doubleSided=true //両面テクスチャ
topM = new BitmapFileMaterial("http://farm6.static.flickr.com/5246/5348121060_6b4577dab8.jpg");//ok
//topM = new BitmapFileMaterial( "imgs/u.jpg", true );
topM.interactive = true; // インタラクティブを有効に設定
topM.doubleSided=true //両面テクスチャ
bottomM = new BitmapFileMaterial("http://farm6.static.flickr.com/5169/5347510739_58a054988f.jpg");//ok
//bottomM = new BitmapFileMaterial( "imgs/d.jpg", true );
bottomM.interactive = true; // インタラクティブを有効に設定
bottomM.doubleSided=true //両面テクスチャ
testM=new BitmapFileMaterial("http://farm6.static.flickr.com/5123/5337043628_155be706a9.jpg");//ok
testM.interactive = true; // インタラクティブを有効に設定
testM.doubleSided=true //両面テクスチャ
}
public function VRinitialize(scene:*):void
{
////////cube用マテリアルの作成 素材はマテリアル用Functionのロードにまかせる。
var materials:MaterialsList = new MaterialsList(
{
front : frontM,
back :backM,
right : rightM,
left : leftM,
top : topM,
bottom: bottomM
});
// キューブを作成
var cube:Cube = new Cube( materials, 5000, 5000, 5000, 8, 8, 8, Cube.ALL, Cube.NONE );
scene3D.addChild(cube);
cube.name="cube"
cube.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
cube.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
var plane:Plane=new Plane()
// マウスのインタラクティブを設定しています
// カメラを原点に配置
//camera.x = camera.y = camera.z = 0;
// カメラを原点に配置
var cameraPositionXYZ:Number = 0
camera.x = 0
camera.y=0
camera.z=-500
trace("camera.x ="+camera.x)
trace("camera.y ="+camera.y)
trace("camera.z ="+camera.z)
//camera.x = cameraPositionXYZ
//camera.y = cameraPositionXYZ
//camera.z = cameraPositionXYZ
// 画質を「低」にして高速化
stage.quality = StageQuality.LOW;
///////ボタン用板作成
//-----------------------------------------------------------------------------------planeL
var planeW:Number=600
var planeH:Number=600
// var planeL:Plane = new Plane(leftM, planeW, planeH)
var planeL:Plane = new Plane(testM, planeW, planeH)
planeL.name="planeL"
//planeL.rotationY = 90
// planeL.x = -250
// planeL.z = -350-20-100;
// planeL 画面に表示
scene3D.addChild(planeL);
planeL.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
planeL.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
planeL.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
//-----------------------------------------------------------------------------------------planeR
var planeR:Plane = new Plane(rightM, planeW, planeH)
planeR.name="planeR"
planeR.x=250
planeR.rotationY = 90;
planeR.z = -350-20-100;
// planeR 画面に表示
scene.addChild(planeR);
planeR.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
planeR.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
planeR.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
//--------------------------------------------------------------------------------------planeF
var planeF:Plane = new Plane(frontM, planeW, planeH)
planeF.name="planeF"
planeF.z=-200
// planeF 画面に表示
scene.addChild(planeF);
planeF.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
planeF.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
planeF.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
//--------------------------------------------------------------------------------------planeB
var planeB:Plane = new Plane(backM, planeW, planeH)
planeB.name = "planeB"
//planeB.scale = 10
//planeB.z = -100;
planeB.z = -740;
//planeB.rotationY = 90;
//planeB.x = 100;
planeB.x = 0;
//planeB.z=-400
// planeB 画面に表示
scene.addChild(planeB);
planeB.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
planeB.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
planeB.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
/**/
addEventListener(Event.ENTER_FRAME, loop);
addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
// レンダリングを開始します
//startRendering();
trace("VRinitialize-■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■")
// キューブを作成
var cubes:Cube = new Cube( materials, 5000, 5000, 5000, 8, 8, 8, Cube.ALL, Cube.NONE );
scene3D.addChild(cubes);
// マウスのインタラクティブを設定しています
//addEventListener(Event.ENTER_FRAME, loop);
// addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
// レンダリングを開始します
//startRendering();
}
private function _onOver(e:InteractiveScene3DEvent):void
{
_txt007.text="■■■■■ 3D _ OVER イベント発生"+e.currentTarget.name;
}
private function _onOut(e:InteractiveScene3DEvent):void
{
_txt007.text="■■■■■ 3D _ OUTイベント発生"+e.currentTarget.name;
}
private function _onClick(e:InteractiveScene3DEvent):void
{
_txt007.text="★★★★OBJECT_★CLICK★ イベント発生"+e.currentTarget.name;
if(e.currentTarget.name=="planeL"){
cameraMode="SPOT_LEMON"
}
if(e.currentTarget.name=="planeR"){
cameraMode="SPOT_LIME"
}
if(e.currentTarget.name=="planeB"){
cameraMode="SPOT_GF"
}
if(e.currentTarget.name=="planeF"){
cameraMode="SPOT_DOOR"
}
if(e.currentTarget.name=="cube"){
cameraMode="OTHER"
}
_txt003.text="cameraMode="+cameraMode+"に設定しました。"
}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■ VR ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
public function loop(e:Event):void
{
var rotY:Number
var rotX:Number
// マウスの位置に応じてインタラクティブを設定しています。
// カメラの目標となる視線方向を計算
rotY = 480 * mouseX/(stage.stageWidth);//横回転
//rotX = 180 * mouseY/(stage.stageHeight) - 90;
rotX = 180 * mouseY/(stage.stageHeight*10) -15;//縦回転
// イージングの公式を使ってカメラの値を更新
camera.rotationY += (rotY - camera.rotationY) * 0.1;
_txt001.text="camera.rotationY:"+Math.floor(camera.rotationY)+"横回転の値"
camera.rotationX += (rotX - camera.rotationX) * 0.1;
_txt002.text="camera.rotationX:"+Math.floor(camera.rotationX)+"縦回転の値"
if(cameraMode=="SPOT_LEMON"){
//rotY=90
//camera.rotationY=90 なぜか逆。
camera.rotationY=270
}else if(cameraMode=="SPOT_GF"){
//rotY=180
camera.rotationY=180
}else if(cameraMode=="SPOT_LIME"){
//rotY=270
//camera.rotationY=270 なぜか逆。
camera.rotationY=90
}else if(cameraMode=="SPOT_DOOR"){
//rotY=270
camera.rotationY=0
}else{
}
}
// マウスホイールでカメラのズーム値を調整します
public function wheelHandler(e:MouseEvent):void {
// ホイールの値をズーム値に加える
camera.zoom += e.delta / 10;
// カメラのズーム値は1以下にならないように指定
if (camera.zoom < 1) {
camera.zoom = 1;
}
}
public function debugersetting():void {
//trace("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ デバッグ用テキスト■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■START ")
_txt001=new TextField()
_txt002=new TextField()
_txt003=new TextField()
_txt004=new TextField()
_txt005=new TextField()
_txt006=new TextField()
_txt007=new TextField()
_txt008=new TextField()
_txt009=new TextField()
_txt010=new TextField()
_txt001.text="_txt001"
_txt002.text="_txt002"
_txt003.text="_txt003"
_txt004.text="_txt004"
_txt005.text="_txt005"
_txt006.text="_txt006"
_txt007.text="_txt007"
_txt008.text="_txt008"
_txt009.text="_txt009"
_txt010.text = "_txt010"
addChild(_txt001)
addChild(_txt002)
addChild(_txt003)
addChild(_txt004)
addChild(_txt005)
addChild(_txt006)
addChild(_txt007)
addChild(_txt008)
addChild(_txt009)
addChild(_txt010)
buildY = 20;
_txt001.y=buildY
_txt001.width=300
buildY = buildY + 10;
_txt002.y=buildY
_txt002.width=300
buildY = buildY + 10;
_txt003.y=buildY
buildY = buildY + 10;
_txt004.y=buildY
buildY = buildY + 10;
_txt005.y=buildY
buildY = buildY + 10;
_txt006.y=buildY
buildY = buildY + 10;
_txt007.y=buildY
buildY = buildY + 10;
_txt008.y=buildY
buildY = buildY + 10;
_txt009.y=buildY
buildY = buildY + 10;
_txt010.y=buildY
buildY = buildY + 10;
// trace("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ デバッグ用テキスト■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■END ")
}
}
}