最近对Flash3D效果产生了兴趣,下决心学习一下Sandy。一下将学习的体会的感受写下来,一来帮助大家熟悉Sandy,二来加强自己的记忆。
先从基础开始吧(基础解释转自Flash3D研究所)
原理解释:
- 窗口:
用户观看的窗口,简单的可以想成就是flash里面的画布大小。窗口也可以理解成渲染的尺寸,否则画面就无限大了
- 场景:
场景是指整个三维的场景。
- 摄像机:
很多人要问,为什么有了摄像机还要窗口呢?摄像机是用来拍画面的,看画面还是得电视机/窗口不是吗,^_^ 渲染器:如果没有这个东西,所有以上的东西都只是数据,渲染器就是把所有数据变成图像的东西。
下面这幅图虽然并不算准确的表述,但希望能帮助我们理解:
然后开始写代码了(目前感觉Sandy的代码还是比较简洁的):
要先将Sandy的类库下载下来哦!!(在这里要谢谢 tenzn 的提醒,呵呵。) 官方网站:http://www.flashsandy.org 下载地址:http://sandy.googlecode.com/files/Sandy3-1-1_src_rev1008.zip
先尝试创建一个立方体。
package { import flash.display.Sprite; import flash.events.Event; import sandy.core.Scene3D; import sandy.core.scenegraph.*; import sandy.primitive.*; /** * ... * @author ever5u */ public class fuxi extends Sprite { private var scene:Scene3D; private var camera:Camera3D; public function fuxi() { //创建一个摄像机 camera = new Camera3D(300, 300); camera.z = -300; //创建一个 Group var root:Group = createScene(); //创建场景 scene = new Scene3D( "scene", this, camera, root ); //创建实时侦听 addEventListener( Event.ENTER_FRAME, enterFrameHandler ); } var box = new Box("box", 100, 100, 100); public function createScene() { var g:Group = new Group(); g.addChild( box ); return g; } public function enterFrameHandler(_evt:Event) { box.rotateX = mouseX; box.rotateY = mouseY; scene.render(); } } }
|