[AS3] Alternavta3d7.5教程(一)
2010年12月30日
"Molehill"来袭,大家都准备好了吗?Flashplayer11的GPU支持将改变整个Flash平台的开发。
Alternavta3d是目前最好的Flash平台3D引擎,最新版本是7.5.1,虽然下一个版本8还没放出,但由于跟原来5.6的版本差异很大,跟8应该相差不大了。
Alternavta3d由于不是开源的,网上教程比较少,我会陆续更新Alternavta3d7.5系列教程。
Hello, Alternativa3D
这是我的第一个Alternativa3D例子
打开演示
整个例子非常简单,有几点需要注意:
1. wireMaterial和colorMaterial都是通过FillMaterial创建的,区别只是在参数的设定上。
2. flash运行的状态数据(如FPS,MEM等)可以通过addChild(camera.diagram)来显示。
3. 不像pv3d有一个scene,将3D对象放到场景可以用addChild Object3DContainer,或使用BSPContainer来实现。 复制内容到剪贴板
[b]代码: [/b]
/**
* Engine:Alternativa3D7.5.1
* Author:Mars Yang
* Link:http://www.marsyang.com/blog/archives/85
*/
package
{
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3DContainer;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Plane;
import alternativa.engine3d.primitives.Sphere;
import flash.display.Sprite;
import flash.events.Event;
[SWF(backgroundColor="#000000", frameRate="100")]
public class Example0 extends Sprite
{
private var rootContainer:Object3DContainer = new Object3DContainer();
private var camera:Camera3D;
private var plane:Plane;
private var sphere:Sphere;
private var wireMaterial:FillMaterial = new FillMaterial(0, 0, 0, 0xffffff);
private var colorMaterial:FillMaterial = new FillMaterial(0xff0000, 1, 0, 0xffffff);
public function Example0()
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
public function init(e:Event): void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//create camera & view
camera = new Camera3D();
camera.view = new View(stage.stageWidth, stage.stageHeight);
addChild(camera.view);
addChild(camera.diagram);
camera.rotationX = -120*Math.PI/180;
camera.y = -150;
camera.z = 100;
rootContainer.addChild(camera);
//create object3d
plane = new Plane(200, 60);
plane.setMaterialToAllFaces(colorMaterial);
rootContainer.addChild(plane);
sphere = new Sphere(50);
sphere.y = 100;
sphere.setMaterialToAllFaces(wireMaterial);
rootContainer.addChild(sphere);
camera.render();
stage.addEventListener(Event.RESIZE, onResize);
}
private function onResize(e:Event):void {
camera.view.width = stage.stageWidth;
camera.view.height = stage.stageHeight;
camera.render();
}
}
}
2010年12月30日
"Molehill"来袭,大家都准备好了吗?Flashplayer11的GPU支持将改变整个Flash平台的开发。
Alternavta3d是目前最好的Flash平台3D引擎,最新版本是7.5.1,虽然下一个版本8还没放出,但由于跟原来5.6的版本差异很大,跟8应该相差不大了。
Alternavta3d由于不是开源的,网上教程比较少,我会陆续更新Alternavta3d7.5系列教程。
Hello, Alternativa3D
这是我的第一个Alternativa3D例子
打开演示
整个例子非常简单,有几点需要注意:
1. wireMaterial和colorMaterial都是通过FillMaterial创建的,区别只是在参数的设定上。
2. flash运行的状态数据(如FPS,MEM等)可以通过addChild(camera.diagram)来显示。
3. 不像pv3d有一个scene,将3D对象放到场景可以用addChild Object3DContainer,或使用BSPContainer来实现。 复制内容到剪贴板
[b]代码: [/b]
/**
* Engine:Alternativa3D7.5.1
* Author:Mars Yang
* Link:http://www.marsyang.com/blog/archives/85
*/
package
{
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3DContainer;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Plane;
import alternativa.engine3d.primitives.Sphere;
import flash.display.Sprite;
import flash.events.Event;
[SWF(backgroundColor="#000000", frameRate="100")]
public class Example0 extends Sprite
{
private var rootContainer:Object3DContainer = new Object3DContainer();
private var camera:Camera3D;
private var plane:Plane;
private var sphere:Sphere;
private var wireMaterial:FillMaterial = new FillMaterial(0, 0, 0, 0xffffff);
private var colorMaterial:FillMaterial = new FillMaterial(0xff0000, 1, 0, 0xffffff);
public function Example0()
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
public function init(e:Event): void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//create camera & view
camera = new Camera3D();
camera.view = new View(stage.stageWidth, stage.stageHeight);
addChild(camera.view);
addChild(camera.diagram);
camera.rotationX = -120*Math.PI/180;
camera.y = -150;
camera.z = 100;
rootContainer.addChild(camera);
//create object3d
plane = new Plane(200, 60);
plane.setMaterialToAllFaces(colorMaterial);
rootContainer.addChild(plane);
sphere = new Sphere(50);
sphere.y = 100;
sphere.setMaterialToAllFaces(wireMaterial);
rootContainer.addChild(sphere);
camera.render();
stage.addEventListener(Event.RESIZE, onResize);
}
private function onResize(e:Event):void {
camera.view.width = stage.stageWidth;
camera.view.height = stage.stageHeight;
camera.render();
}
}
}