📄 engine3d.as
字号:
/*******************ENGLISHproject: 3d engineby: ivan ivanoff (www.i2off.org)based on the work made by : stuart schoneveld (www.illogicz.com) email: avatar@i2off.orgapologies: to my wife and kids for supporting me. to jorge, valerialaura & mariano, for bothering them all the time. thx to valerialaura for the english translation--------------------ABOUT THIS CLASSIt's instanciated by the engine's component. It contains the render systme and the global properties.--------------------ABOUT IT'S PUBLIC METHODS-addModel(model) adds a new model to the scene. model is an instance of the Model class returns the added model.-removeModel(model) removes a model from the scene. model is an instance of the Model class previously added to the scene.-getModels() returns a list of all available models.-removeCamera(cam) removes a camera from the scene. cam is an instance of the Camera3D class.-setCamera(cam) adds and sets the camera to use in the scene. cam is an instance of the Camera3D class.-reset() removes all models and cleans the scene.-setScene(int) sets a scene as active eliminating the current scene. int is an integer representing the scene number of the list of available scenes setted with the property: scenes.-onFreezeModel() event to be overwritten. notifies the moment when a model is freezed. -addTexture(layer, texture) allows the given layer to be used as a mask for an item in the library (texture)--------------------ABOUT IT'S PUBLIC PROPERTIES-layers the amount of different layers you wish to use. Models can be assigned to different layers. If a model is set in front of another but on an lower layer, it will be shown behind. layers are great for working with textures. -freezeMode sets whether freeze mode is active or not. freeze mode active stops rendering sections of a freezed model. -porFrezar this value affects the chance of freezing. the freezing will occur on a chance of 1/porFrezar. -FXNMode whether the FXN (where N is 1,2, etc) mode is on or off. FX can stop, strech or contract parts of the affected polygon. -FXNFac this value is used on the calculation of the FX. -scenes a list containing the different scenes. These are functions receiving an instance of the engine as it's parameter. Every scene has the step by step description of camera and polygons creation.--------------------HOW TO USE-drag the component to the scene-give the instance a beautiful name (i.e:my_3d)!it's highly recommended to crete methods for model creation so you don't haveto write in the scene the step by step for every polygon-create a method to simplify model creation (i.e. square)function square(){ var mo = new Model() //coord 0 mo.addCoord(new Coord(0, 0, 0)); //coord 1 mo.addCoord(new Coord(50, 0, 0)); //coord 2 mo.addCoord(new Coord(50, 50, 0)); //coord 3 mo.addCoord(new Coord(0, 50, 0)); var ld = []; ld.push([0, 'moveTo']); ld.push([1, 'lineTo']); ld.push([2, 'lineTo']); ld.push([3, 'lineTo']); ld.push([0, 'lineTo']); mo.addPolygon(new Polygon(ld)); return mo}-create the scene (a function) that will create the camera and modelsvar sc1 = function (engine) { // Create camera var c = engine.setCamera(new Camera3D()); c.setCoordinates(0, 0, -100); c.setRotation(0, 0); // Create model var m = engine.addModel(_root.square()); m.setCoordinates(0, 0, 0); m.setColor(200, 224, 204);}-add the scenemy_3d.scenes = [sc1];-set the scenemy_3d.setScene(0)--------------------WHAT ARE FREEZE AND EFFECTS?these are effects over what you see on the screen.they do not affect the real model but the way they are shown.--------------------WHAT IS A SCENE?a scene must be a function that has an engine parameter to receive an instance of the component.the engine is needed to create the camera and add the different models.//////////////////////////////ESPANOLproyecto: engine 3dpor: ivan ivanoff (www.i2off.org)basado en el trabajo de: stuart schoneveld (www.illogicz.com) email: avatar@i2off.orgperdones: A mi mujer e hijos por aguantar. A jorge, valeria y mariano, por joderlos a cada rato. --------------------ACERCA DE ESTA CLASEEsta es instanciada por el componente del engine. Es la que contiene el sistema de render y las propiedades globales.--------------------ACERCA DE SUS METODOS PUBLICOS-addModel(model) agrega un modelo a la escena. El model es una instancia de la clase Model(). devuelve el modelo agregado-removeModel(model) remueve un modelo de la escena. El model es una instancia de la clase Model() previamente agregada a la escena.-getModels() devuelve una lista con todos los modelos disponibles.-removeCamera(cam) remueve uns camara de la escena. Cam es una instancia de la clase Camera3D().-setCamera(cam) agrega y setea la camara que se usa en la escena. Cam es una instancia de la clase Camera3D()-reset() borra todos los modelos y limpia la escena.-setScene(int) setea como activa una escena eliminando a la que se este ejecutando. int es un entero que representa el numero de escena de la lista de escenas seteadas con la propiedad: scenes-onFreezeModel() evento a ser sobreescrito que recoge notifica del momento en el cual un modelo es freezado.-addTexture(layer, texture) este metodo permite que un layer determinado no se dibuje normalmente sino como mascara de un objecto en libreria (texture)--------------------ACERCA DE SUS PROPIEDADES PUBLICAS-layers la cantidad de layers distintos que se quieren usar. Uno puede asignar modelos a distintos layers. Teniendo en cuenta que a si un objeto esta ubicado delante de otro, pero en un layer inferior, se ve por detras. Los leyers son optimos para el trabajo con texturas (ver addTexture)-freezeMode si esta activo o no el modo de freeze. Este lo que hace es dejar de redibujar secciones de un modelo freezado.-porFrezar la posibilidad global que tienen los modelos de ser freezados. -FXNMode si esta activo o no el mode de FXN (1, 2, ETC). Este detiene partes del poligono afectado, las estira o las contrae.-FXNFac factor para el calculo de aplicacion de o de los FXN -scenes lista que contiene las distintas escenas. Estas son funciones que reciben como parametro la instancia del engine. Cada escena tiene la descripion paso a caso de la creacion de la camara y cada uno de sus polygonos--------------------MODO DE USO-draguear el componente en la escena-nombrar la instancia (ej:my_3d)!es recomendable crear metodos para la creacion de los modelos para no escribiren la escena toda el paso a paso de cada uno de los polygonos-crear metodo para simplificar la creacion del modelo (ej: cuadrado)function cuadrado(){ var mo = new Model() //coord 0 mo.addCoord(new Coord(0, 0, 0)); //coord 1 mo.addCoord(new Coord(50, 0, 0)); //coord 2 mo.addCoord(new Coord(50, 50, 0)); //coord 3 mo.addCoord(new Coord(0, 50, 0)); var ld = []; ld.push([0, 'moveTo']); ld.push([1, 'lineTo']); ld.push([2, 'lineTo']); ld.push([3, 'lineTo']); ld.push([0, 'lineTo']); mo.addPolygon(new Polygon(ld)); return mo}-crear la escena (una funcion) que crea la camara y los modelosvar esc1 = function (engine) { // Crea la camara var c = engine.setCamera(new Camera3D()); c.setCoordinates(0, 0, -100); c.setRotation(0, 0); // Crea un modelo var m = engine.addModel(_root.cuadrado()); m.setCoordinates(0, 0, 0); m.setColor(200, 224, 204);}-agrega la escenamy_3d.scenes = [esc1];-setea la escenamy_3d.setScene(0)--------------------QUE ES FREEZADO Y EFFECTS?son efectos sobre lo que se ve en pantalla. Estos efectos no afectan realmente al modelo. Sino a la forma en la que estos son mostrados--------------------QUE ES UNA ESCENAuna escena debe ser una funcion que recivira como parametro la instancia del componente para poder crear en ella la camara y los distintos modelos.*******************/class engine3D extends MovieClip { var depths:Object; var models:Object; var cameras:Object; var camera:Object; var depositoGrafico:MovieClip; var layers:Number = 1; //cuantos layers graficos tiene var idModels = 1; var freezeMode = false; var porFrezar = 10; var porPoligF = 1; //la posibilidad de dibujar el poligonoF var FX1Mode = false; var FX2Mode = false; var FX1Fac = 10; var FX2Fac = 10; var scenes:Array; function engine3D() { trace("a"); _global.engine3DRun = this; _global.engine3DCore = new Object(); depths = new Object(); models = new Object(); camera = undefined; cameras = new Object(); } function init(l) { //el movieclip tiene que tener en el primer frame un llamado al init if (l == null || l == undefined || typeof (l) != "number") { l = 1; } layers = l; this.createEmptyMovieClip("depositoGrafico", 1); for (var i = 0; i<l; i++) { var la = depositoGrafico.createEmptyMovieClip("layer"+i, (i+1)*2); la._depth = (i+1)*2; la.ids = 0; } } function addModel(model) { models[model._id] = model; model.onAdd(this); return model; } function removeModel(model) { models[model._id].onRemove(); delete models[model._id]; } function getModels() { return models;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -