Web3D – 实时3D技术在Flash中的应用




[ 08-08-29 ] 更新的SWF动画,加入了飘动的云层效果。

好久没什么新鲜作品了,今天放出一个来。上面这个flash有点大,点开后要等一下才能看到。1.44MB,没做loading。不过我想99%的网民还没见过这样的flash吧,所以值得一等。

在IE里不用特别的插件就实现实时3D,这在不久之前还是个幻想。德国一家公司推出过一整套Web3D解决方案。不过都是用java实现的。普通用户浏览还需要安装一个7MB的插件。现在这年头你敢随便装插件吗?反正我是不敢。

另一个解决方案是Director+Shockwave Player。中文网站上现在还能找到几篇年代久远的Director 3D的教程。但真正精彩的应用我在中文区还一个都没找到。加拿大一家公司将此技术应用在e-Learning领域,做的非常精彩。

Shockwave Player相对普及一些了,但仍然不是每个网民都会装这个。那么有哪个web插件最普及呢?每个TX都会异口同声的回答 FLASH~~ 没错。想过用Flash开发CS射击y游戏吗?看似遥不可及,但其实已经不远了。Adobe在收购Macromedia之后,已经悄悄在flashplayer v9里加入了3D支持。有很多传言声称Adobe为了升级Flash Player 10一直在和一些比较知名的Flash 3D引擎开发团队合作。以便在下一个版本中全面扩充3D功能,并且和这些团队现有的程序保持兼容。

说到这里,比较专业的朋友应该已经能够嗅到一场新的风暴即将到来。这将会是一个非常广阔的领域。

Web will never be the same…

3D Flash的前景暂时先聊到这儿,回过头说说上面那个Flash。在Flash中导入了一些贴图,只用了一帧。外加3D引擎和一段程序来描述场景和贴图位置。

想亲手试验的朋友,可以到flash-3d.org去看看,那边有我刚刚翻译的制作过程详细说明





源代码如下
import away3d.containers.;
import away3d.core.base.;
import away3d.primitives.;
import away3d.materials.;
import away3d.core.utils.Cast;
import away3d.cameras.*;
// import some filters we'll use later
import flash.filters.BitmapFilter;
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilterType;
import flash.filters.GradientGlowFilter;

// variables var move:Boolean = false; var lastPanAngle:Number; var lastTiltAngle:Number; var lastMouseX:Number; var lastMouseY:Number; var skies:Sphere;

// Set the scene var scene:Scene3D = new Scene3D();

// Create and set up the camera var camera:HoverCamera3D = new HoverCamera3D({zoom:2, focus:200, distance:400}); camera.targetpanangle = camera.panangle = -180; camera.targettiltangle = camera.tiltangle = 15; camera.yfactor = 1; var view:View3D = new View3D({scene:scene, camera:camera}); //var view:View3D = new View3D({scene:scene, camera:camera, renderer:Renderer.BASIC}); //var view:View3D = new View3D({scene:scene, camera:camera, renderer:Renderer.CORRECT_Z_ORDER}); // Add viewport to the Flash display list so it's visible addChild(view); // Adjust view view.x = 230; view.y = 200;

var globe:Sphere = new Sphere({material:"blue#white",radius:150,segmentsH:18, segmentsW:26}); view.scene.addChild(globe); view.render();

// interactive function MouseDown(event:MouseEvent):void {     lastPanAngle = camera.targetpanangle;     lastTiltAngle = camera.targettiltangle;     lastMouseX = stage.mouseX;     lastMouseY = stage.mouseY;     move = true; }

function MouseUp(event:MouseEvent):void {     move = false; }

function onEnterFrame(e:Event):void {     // rerender viewport         var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement.       if (move) {     camera.targetpanangle = cameraSpeed(stage.mouseX - lastMouseX) + lastPanAngle;         camera.targettiltangle = cameraSpeed(stage.mouseY - lastMouseY) + lastTiltAngle;     }         camera.hover();       view.render(); }

addEventListener(Event.ENTER_FRAME, onEnterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

globe.material = new BitmapMaterial(Cast.bitmap("earthmap1k.jpg"));

//skies = new Sphere({material:"earthcloudmap.png",radius:153,segmentsH:18, segmentsW:26}); //scene.addChild(skies); globe.material = new BitmapMaterial(Cast.bitmap("earthmap1k.png"));

var heavens:Sphere = new Sphere({material:"star_map_small.jpg",radius:1200,x:0,y:0,segmentsH:9, segmentsW:9}); view.scene.addChild(heavens);

heavens.invertFaces();

var sun = new Sphere({material:"sunmap.jpg",radius:50,x:150,y:100,z:600,segmentsH:6, segmentsW:6}); view.scene.addChild(sun);

var newMaterial:BitmapMaterial = new BitmapMaterial(Cast.bitmap("earthmap1k_night_day.png")); globe.material = newMaterial;

//atmosphere var myFilter1:Array = new Array() myFilter1.push(new GlowFilter(0xFFFFAA, 1, 25, 25, 3, 1, false, false)); sun.ownCanvas=true; sun.filters=myFilter1; var myFilter2:Array = new Array() myFilter2.push(new GlowFilter(0xFFFFFF, 0.4, 15, 15, 2, 1, false, false)); globe.ownCanvas=true; globe.filters=myFilter2;




感谢代码原作者Jens C Brynildsen!

《Web3D – 实时3D技术在Flash中的应用》上有0条评论

回复 天行者 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注