A3D 开发的FPS游戏
作者:灰色的狼 日期:2009-06-15 15:17
最多类似上个世纪的早期FPS游戏《毁灭公爵》,强烈呼唤adobe能让fp和gpu建立亲密关系啊。
A3D 的一个小游戏。
作者:灰色的狼 日期:2009-05-10 07:03
A3D更新为5.4.0
作者:灰色的狼 日期:2008-08-30 11:54
这次更新也一并更改了版本号的规则。
- Added View getFaceUnderPoint and getFacesUnderPoint methods, which let to get faces under set point
- Added WalkController and FlyController classes, which let to manage walk and fly modes
- Added EllipsoidCollider class, which implements ellipsoid-to-geometry collision detection
- Added Scene3D planeOffsetThreshold parameter — an offset for defining distances between point and splitter planes
- Added Set.createFromArray method, which creates set from array
- Added Matrix3D.axisAngleToMatrix method, which forms rotation matrix from axis-angle representation
- Added Matrix3D getRotations method, which gets rotation angles values
- Bug fixed in OBJLoader, which showed up during uploading model with textures but without UV-mapping
- Bug fixed in Mesh cloning, which showed up if surface has no material
增加了几个新的方法和类,如WalkController和FlyController类,对漫游方式的飞行和行走选择提供了支持。也修正了几个bug..
A3D 更新为5.03
作者:灰色的狼 日期:2008-08-05 01:00
此版本会有两个版本的alternativa3d ,FP9和FP10.
更新内容:
http://help.alternativaplatform.com/en/client/alternativa3d_help.zip 这个是api的doc下载地址.
alternativa3d更新为5.0.1
作者:灰色的狼 日期:2008-06-25 22:07
试玩 Text 3D 文字
作者:灰色的狼 日期:2008-06-17 11:46
发现一张很有意思的图
作者:灰色的狼 日期:2008-06-09 18:14
关于A3D目前的版本功能
作者:灰色的狼 日期:2008-06-08 20:03
灯光和鼠标控制事件暂时也没有提供,我想下个版本应该会有这些基本的功能。
也就是说,现在的版本还只适合做漫游,或是类CS的东西。
貌似alternativa.engine3d.physics下面有物理碰撞的类。得有空的时候来摸了。
A3D 3 加载3DS模型
作者:灰色的狼 日期:2008-06-05 22:38
- package cn.com.xy50{
- import alternativa.engine3d.controllers.CameraController;
- import alternativa.engine3d.core.Camera3D;
- import alternativa.engine3d.core.Mesh;
- import alternativa.engine3d.core.Object3D;
- import alternativa.engine3d.core.Scene3D;
- import alternativa.engine3d.display.View;
- import alternativa.engine3d.loaders.Loader3DS;
- import alternativa.engine3d.materials.TextureMaterialPrecision;
- import alternativa.utils.FPS;
- import alternativa.utils.MeshUtils;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- [SWF(backgroundColor="#000000", frameRate="100")]
- public class Test3 extends Sprite {
- private var scene:Scene3D;
- private var view:View;
- private var camera:Camera3D;
- private var cameraController:CameraController;
- private var loader:Loader3DS;
- /**
- *
- */
- public function Test3() {
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- startLoading();
- initScene();
- initListeners();
- onResize(null);
- }
- /**
- * Создание сцены и камеры.
- */
- private function initScene():void {
- scene = new Scene3D();
- scene.root = new Object3D();
- camera = new Camera3D();
- camera.x = 0;
- camera.y = -400;
- camera.z = 0;
- scene.root.addChild(camera);
- view = new View();
- addChild(view);
- view.camera = camera;
- cameraController = new CameraController(stage);
- cameraController.camera = camera;
- cameraController.setDefaultBindings();
- cameraController.checkCollisions = true;
- cameraController.collisionRadius = 20;
- cameraController.controlsEnabled = true;
- cameraController.speed = 500;
- FPS.init(stage);
- }
- /**
- *
- */
- private function onResize(e:Event):void {
- view.width = stage.stageWidth;
- view.height = stage.stageHeight;
- }
- /**
- *
- */
- private function onEnterFrame(e:Event):void {
- cameraController.processInput();
- scene.calculate();
- }
- /**
- *
- */
- private function initListeners():void {
- stage.addEventListener(Event.RESIZE, onResize);
- stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- /**
- * 加载 3DS 格式的三维模型.
- */
- private function startLoading():void {
- loader = new Loader3DS(); // 3ds 加载类,继承自 EventDispatcher
- loader.smooth = true; // 材质的平滑模式
- loader.precision = TextureMaterialPrecision.HIGH; // 透视精确度,这里设置为高,可选值"BEST,HIGH,LOW,MEDIUM,NONE,VERY_HIGH,VERY_LOW"
- loader.load("assets/me/djwolf.3ds"); // 加载模型
- loader.addEventListener(Event.COMPLETE, onLoadingComplete); // 监听加载事件
- }
- /**
- *
- */
- private function onLoadingComplete(e:Event):void {
- for (var o:* in loader.content.children) {
- var object:Object3D = o;
- cameraController.lookAt(object.coords);
- weldVerticesAndFaces(object);
- scene.root.addChild(object);
- }
- }
- /**
- * Объединение вершин и граней объекта.
- */
- private function weldVerticesAndFaces(object:Object3D):void {
- if (object is Mesh) {
- MeshUtils.autoWeldVertices(Mesh(object), 0.01); // 连接网格物体的顶点有相同的坐标。
- MeshUtils.autoWeldFaces(Mesh(object), 0.01, 0.001);
- }
- // Запуск процедуры для детей объекта
- for (var key:* in object.children) {
- weldVerticesAndFaces(key);
- }
- }
- }
- }

http://boxstr.com/files/2287538_lhiur/tt.rar
此连接包含code和3ds文件,建议编译环境Flex+FDT。
A3D 2 -- 坐标系统
作者:灰色的狼 日期:2008-06-04 11:54
A3D 的坐标系统和以前我所接触过的坐标方向有所区别,正负还是通过"右手法则"可以判断,但是3轴方向如图:

---------------------------------- fgx ------------------------------------
- package cn.com.xy50 {
- import alternativa.engine3d.controllers.CameraController;
- import alternativa.engine3d.core.Camera3D;
- import alternativa.engine3d.core.Object3D;
- import alternativa.engine3d.core.Scene3D;
- import alternativa.engine3d.display.View;
- import alternativa.engine3d.materials.FillMaterial;
- import alternativa.engine3d.primitives.*;
- import alternativa.utils.FPS;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- public class Test1 extends Sprite {
- private var scene:Scene3D;
- private var view:View;
- private var camera:Camera3D;
- private var cameraController:CameraController;
- private var boxX:Box;
- private var boxY:Box;
- private var boxZ:Cone;
- private var speed:Number=.1;
- public function Test1() {
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- createScene();
- }
- private function createScene():void
- {
- // 创造一个场景
- scene = new Scene3D();
- scene.root = new Object3D();
- boxX = new Box(100, 100, 100, 3, 3, 3);
- boxX.setMaterialToAllSurfaces(new FillMaterial(0xFF0000));
- scene.root.addChild(boxX);
- boxX.x=-200;
- boxY = new Box(100, 100, 100, 3, 3, 3);
- boxY.setMaterialToAllSurfaces(new FillMaterial(0x00FF00));
- scene.root.addChild(boxY);
- boxY.x=0;
- boxZ = new Cone(100, 100, 3, 3, 3);
- boxZ.setMaterialToAllSurfaces(new FillMaterial(0x0000FF));
- scene.root.addChild(boxZ);
- boxZ.x=200;
- // 加入相机
- camera = new Camera3D();
- camera.x = 0;
- camera.y = -500;
- camera.z = 100;
- scene.root.addChild(camera);
- view = new View();
- addChild(view);
- view.camera = camera;
- // 相机控制
- cameraController = new CameraController(stage);
- cameraController.camera = camera;
- cameraController.setDefaultBindings();
- cameraController.checkCollisions = true;
- cameraController.collisionRadius = 20;
- cameraController.lookAt(boxY.coords);
- cameraController.controlsEnabled = true;
- // 显示FPS
- FPS.init(stage);
- stage.addEventListener(Event.RESIZE, onResize);
- stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- onResize(null);
- }
- private function onResize(e:Event):void {
- view.width = stage.stageWidth;
- view.height = stage.stageHeight;
- }
- private function onEnterFrame(e:Event):void {
- boxX.rotationX+=speed;
- boxY.rotationY+=speed;
- boxZ.rotationZ+=speed;
- // 处理用户输入
- cameraController.processInput();
- // 计算渲染场景
- scene.calculate();
- }
- }
- }
这是一个更加清晰显示坐标系统的例子.
