/* * Copyright(c) 2006 the Spark project. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package { import org.libspark.geom.Matrix4; import org.libspark.geom.Vector3D; import org.libspark.geom.Vector4D; import org.libspark.thunder.*; import flash.display.Sprite; import flash.text.TextField; import flash.events.Event; import flash.utils.getTimer; public class Demo extends Sprite { private var render:Render; private var worldMatrix:Matrix4; private var vertices:Array; private var indices:Array; private var len:uint; private var fps:uint; private var fpsField:TextField; private var rx:Number; private var ry:Number; private var rz:Number; public function Demo() { stage.scaleMode = 'noScale'; render = new Render(); render.setRenderTarget(graphics); worldMatrix = new Matrix4(); render.setWorldMatrix(worldMatrix); var view:Matrix4 = new Matrix4(); var vCam:Vector3D = new Vector3D(0, 0, 3); var vCamEye:Vector3D = new Vector3D(0, 0, 0); var vCamTop:Vector3D = new Vector3D(0, 1, 0); var camDiv:Number = 0.1; MatrixUtil.lookAt(view, vCam, vCamEye, vCamTop); render.setViewMatrix(view); var projection:Matrix4 = new Matrix4(); MatrixUtil.perspective(projection, 60 * Math.PI / 180, 3 / 4, 0.01, 100); render.setProjectionMatrix(projection); var d:Vector3D = new Vector3D(0, -5, -5); d.normalize(); render.setLight(new Light(d, new ColorValue(0.3, 0.3, 0.3), new ColorValue(0.7, 0.7, 0.7))); render.setViewport(new Viewport(0, 0, 320, 240)); var shape:Object = SimpleShape.createDonuts(23); vertices = shape.vertices; indices = shape.indices; len = indices.length / 3; fpsField = new TextField(); fpsField.x = 240; fpsField.y = 0; addChild(fpsField); fps = getTimer(); rx = ry = rz = 0; addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(event:Event):void { var m:Matrix4 = worldMatrix; var r:Render = render; m.identity(); m.rotateX(rx += 0.01); m.rotateY(ry += 0.02); m.rotateZ(rz += 0.05); r.updateMatrix(); r.clear(); r.beginScene(); r.drawIndexedPrimitive(indices, vertices, len); var poly:uint = r.endScene(); r.present(); fpsField.text = Math.floor(1000 / (getTimer() - fps)) + 'fps; ' + poly + 'polygons'; fps = getTimer(); } } }