package
{
import away3d.cameras.Camera3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.utils.Cast;
import away3d.lights.DirectionalLight3D;
import away3d.materials.PhongBitmapMaterial;
import away3d.primitives.Sphere;
import flash.display.Sprite;
import flash.events.Event;
import jiglib.math.JNumber3D;
import jiglib.physics.PhysicsSystem;
import jiglib.physics.RigidBody;
import jiglib.plugin.away3d.Away3DPhysics;
[SWF(backgroundColor="#000000", frameRate="30", width="800", height="600")]
/**
* 程序入口
* @author cwin5
*/
public class TestMain extends Sprite
{
// 贴图
[Embed(source="temp.jpg")]
private var textureClass:Class;
private var _scene:Scene3D = null;
private var _camera:Camera3D = null;
private var _view:View3D = null;
private var _ballMaterial:PhongBitmapMaterial = null;
private var _ball:Sphere = null;
private var _light:DirectionalLight3D = null;;
/**
* 构造
*/
public function TestMain()
{
init();
}
// 初始化
private function init():void
{
initEngine();
initMaterials();
initObjects();
initLights();
initListeners();
initJiglibEngine();
}
// 初始化引擎
private function initEngine():void
{
_scene = new Scene3D();
_camera = new Camera3D();
_camera.z = -500;
_view = new View3D();
_view.scene = _scene;
_view.camera = _camera;
addChild(_view);
}
/**
* 初始化材质
*/
private function initMaterials():void
{
_ballMaterial = new PhongBitmapMaterial(Cast.bitmap(textureClass));
_ballMaterial.specular = 0.1;
_ballMaterial.shininess = 10;
}
/**
* 初始化对象
*/
private function initObjects():void
{
_ball = new Sphere();
_ball.material = _ballMaterial;
_ball.radius = 10;
_ball.segmentsW = 12;
_ball.segmentsH = 10;
_scene.addChild(_ball);
}
/**
* 初始化灯光
*/
private function initLights():void
{
_light = new DirectionalLight3D();
_light.x = 1;
_light.y = 1;
_light.z = -1;
_light.ambient = 0.5;
_scene.addChild(_light);
}
/**
* 初始化侦听
*/
private function initListeners():void
{
_view.x = stage.stageWidth / 2;
_view.y = stage.stageHeight / 2;
addEventListener(Event.ENTER_FRAME , onEnterFrame);
}
/**
* 刷新
* @param e
*/
private function onEnterFrame(e:Event):void
{
PhysicsSystem.getInstance().integrate(0.2);
_view.render();
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/**
* 初始化物理引擎
*/
private function initJiglibEngine():void
{
var physics:Away3DPhysics = new Away3DPhysics(_view);
// 创建圆在物理世界的对象
var body:RigidBody = physics.createSphereByView(_ball);
body.y = 100;
body.restitution = 1; // 弹性
// 创建物理世界地面
var ground:RigidBody = physics.createGround(null, 1);
ground.restitution = 1; // 弹性
}
}
}
{
import away3d.cameras.Camera3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.utils.Cast;
import away3d.lights.DirectionalLight3D;
import away3d.materials.PhongBitmapMaterial;
import away3d.primitives.Sphere;
import flash.display.Sprite;
import flash.events.Event;
import jiglib.math.JNumber3D;
import jiglib.physics.PhysicsSystem;
import jiglib.physics.RigidBody;
import jiglib.plugin.away3d.Away3DPhysics;
[SWF(backgroundColor="#000000", frameRate="30", width="800", height="600")]
/**
* 程序入口
* @author cwin5
*/
public class TestMain extends Sprite
{
// 贴图
[Embed(source="temp.jpg")]
private var textureClass:Class;
private var _scene:Scene3D = null;
private var _camera:Camera3D = null;
private var _view:View3D = null;
private var _ballMaterial:PhongBitmapMaterial = null;
private var _ball:Sphere = null;
private var _light:DirectionalLight3D = null;;
/**
* 构造
*/
public function TestMain()
{
init();
}
// 初始化
private function init():void
{
initEngine();
initMaterials();
initObjects();
initLights();
initListeners();
initJiglibEngine();
}
// 初始化引擎
private function initEngine():void
{
_scene = new Scene3D();
_camera = new Camera3D();
_camera.z = -500;
_view = new View3D();
_view.scene = _scene;
_view.camera = _camera;
addChild(_view);
}
/**
* 初始化材质
*/
private function initMaterials():void
{
_ballMaterial = new PhongBitmapMaterial(Cast.bitmap(textureClass));
_ballMaterial.specular = 0.1;
_ballMaterial.shininess = 10;
}
/**
* 初始化对象
*/
private function initObjects():void
{
_ball = new Sphere();
_ball.material = _ballMaterial;
_ball.radius = 10;
_ball.segmentsW = 12;
_ball.segmentsH = 10;
_scene.addChild(_ball);
}
/**
* 初始化灯光
*/
private function initLights():void
{
_light = new DirectionalLight3D();
_light.x = 1;
_light.y = 1;
_light.z = -1;
_light.ambient = 0.5;
_scene.addChild(_light);
}
/**
* 初始化侦听
*/
private function initListeners():void
{
_view.x = stage.stageWidth / 2;
_view.y = stage.stageHeight / 2;
addEventListener(Event.ENTER_FRAME , onEnterFrame);
}
/**
* 刷新
* @param e
*/
private function onEnterFrame(e:Event):void
{
PhysicsSystem.getInstance().integrate(0.2);
_view.render();
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/**
* 初始化物理引擎
*/
private function initJiglibEngine():void
{
var physics:Away3DPhysics = new Away3DPhysics(_view);
// 创建圆在物理世界的对象
var body:RigidBody = physics.createSphereByView(_ball);
body.y = 100;
body.restitution = 1; // 弹性
// 创建物理世界地面
var ground:RigidBody = physics.createGround(null, 1);
ground.restitution = 1; // 弹性
}
}
}
Away3DPhysics新加的方法:
public function createSphereByView(obj:Mesh):RigidBody
{
var r:Number = obj["radius"];
var jsphere:JSphere = new JSphere(new Away3dMesh(obj), r);
addBody(jsphere);
return jsphere;
{
var r:Number = obj["radius"];
var jsphere:JSphere = new JSphere(new Away3dMesh(obj), r);
addBody(jsphere);
return jsphere;
}