Comunidad de diseño web y desarrollo en internet online

Flare3d mi primera experiencia

Citar            
MensajeEscrito el 16 Feb 2011 12:12 am
]Aplicación de escritorio Flare3d+Mdm zink 3.0.22(demo)

Bueno en primera instancia los problemas que se me presentan a diario es que soy como un bohemio de la programación, por ende todo lo que hago, es combinar ejemplos, forear un poco, y arriesgarme a perder tiempo o en en el mejor de los casos lograr mi objetivo.

Mi idea:

Una aplicación, de escritorio, con accesos directos fijos a mis programas y carpetas.
Que en lo posible fuera en 3d, que sea de básicas líneas, y que tenga un fondo transparente, de manera tal que se destacaran mis ICONOS EN 3D.


En primera instancia, me registré en http://www.flare3d.com luego me descargue "FLARE3D", una excelente aplicación que permite exportar, modelos hechos en 3d max, a Flash, o no se si decir directamente a AS3. Con mucho miedo a no poder lograr nada, debido a mis pocas y malas experiencias con otros software que prometían lo mismo y resultaban muy complicados.

Luego instale Flare3d en mi pc, para mi sorpresa venia con ejemplos, para ser mas preciso 21 , al mirar dentro de cada ejemplo, me asombre lo fácil e intuitivo que era todo, lo primero que me gusto fueron las pocas líneas en AS3, luego la cantidad de posibilidades que tenia en frente mío.


Dentro de todos los ejemplos que había, el que yo justamente necesitaba no estaba, me refiero a algún objeto en 3d en el cual hacer clic y que suceda algo(creo que esto se llama evento o algo así)

Así que con esperanzas, empecé a forear, creyendo que tardarían , pero para mi sorpresa en 15 minutos, ya me habían contestado, y me habían pasado un link en el cual habia un ejemplo muy copado(para mi gusto)

http://www.flare3d.com/docs/tutorials/19%20-%20mouse%20events/

Mouse event

Se trataban de una esfera y un cubo que al presionarlos cambiaban de color,
Esto era genial para mi
Así que me lo baje y empecé a analizar



Código ActionScript :

/ Class Main.as
package  
{
   import flare.basic.*
   import flare.events.*
   import flare.materials.*
   import flare.primitives.*
   import flash.display.*
   import flash.events.*
   
   public class Main extends Sprite
   {
      private var scene:Scene3D
      
      public function Main() 
      {
         stage.quality = "medium"
         
         // creates the scene.
         scene = new Scene3D( this )
         
         // creates sphere and cube.
         var sphere:Sphere = new Sphere( "mySphere" )
            sphere.x = 10
            
         var cube:Cube = new Cube( "myCube" )
            cube.x = -10
            
         // add objects to scene.
         scene.addChild( sphere )
         scene.addChild( cube )
         
         // add objects listeners.
         sphere.addEventListener( MouseEvent3D.CLICK, mouseClickEvent )
         sphere.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         sphere.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         cube.addEventListener( MouseEvent3D.CLICK, mouseClickEvent )
         cube.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         cube.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         
         // add scene update listener.
         scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent )
         
         // set camera position and orientation.
         scene.camera.setPosition( 30, 30, -30 )         
         scene.camera.lookAt( 0, 0, 0 )
      }
      
      private function updateEvent(e:Event):void 
      {
         scene.rotateY( 1 )
      }
      
      private function mouseClickEvent(e:MouseEvent3D):void 
      {
         // change the material.
         
         var randomColor:int = 0xffffff * Math.random()
         
         var material:ShadedColorMaterial = new ShadedColorMaterial( "myMaterial", 0x000000, randomColor )
         
         e.target.setMaterial( material )
      }
      
      private function mouseOverEvent(e:MouseEvent3D):void 
      {
         // change scale.
         
         e.target.setScale( 1.2, 1.2, 1.2 )
      }
      
      private function mouseOutEvent(e:MouseEvent3D):void 
      {
         // reset to original scale.
         
         e.target.setScale( 1, 1, 1 )
      }
   }
}




Lo primero que hice fue probar si funcionaba el “fscommand”, pero en donde ponerlo

El lugar mas indicado era aquí

Código ActionScript :

private function mouseClickEvent(e:MouseEvent3D):void 
      {
         // change the material.
         
         var randomColor:int = 0xffffff * Math.random()
         
         var material:ShadedColorMaterial = new ShadedColorMaterial( "myMaterial", 0x000000, randomColor )
         
         e.target.setMaterial( material )
      }

Así que reemplace todo el choclo ese de cambios de color al azar por esto


private function mouseClickEvent(e:MouseEvent3D):void

Código ActionScript :

{
         fscommand("exec", "notepad.exe")
      }


Y como era AS3 al fscommand había que importarlo:

Al principio debajo de todos los import puse esto:

import flash.system.fscommand;

bien probé mi ejemplo, utilizando el proyector nativo de flash, ya que la funcion fscommand no funciona en “swf” así que luego de pasar mi flash a exe, lo probé
y ¿que creen?

FUNCIONÓ
Pero me encontré con otro, problema, que el proyector nativo de flash, no soportaba transparencias,


Así que buscando me baje una versión demo de “mdm zinck 3.0.22” por que esta además de ser la ultima soporta “adobe flash placer 10” necesario para el soporte en 3d.

luego de compilar mis swf con “mdm zink” me dejaba una marca agua en el medio de la aplicación por tratarse de una versión demo, pero se me ocurrió que podia ocultar esa marca agua fuera del monitor y decentar mi swf,
así que abrí mi “swf”, que era de 800 * 600px le puse un tamaño de 1000* 600px pensando que esto era la solución. Pero nuevamente al compilar la molesta marca agua.

Asi que lo que tenia que hacer en si era correr mis modelos 3d hacía la izquierda, de manera de ocultar fuera del monitor en la parte derecha la marca agua. Como no sabia como hacer, foreé de nuevo, y me dieron las bellas líneas que me permitían correr la cámara master donde se veían los 3d a donde yo quisiera

Código ActionScript :

scene.canvas.setViewport(300, 400, 20, 0);

y lo puse encima de esto

Código ActionScript :

// start application...
              }         // add objects listeners.
         sphere.addEventListener( MouseEvent3D.CLICK, pelota )
         sphere.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         sphere.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         cylinder.addEventListener( MouseEvent3D.CLICK, cubo )
         cylinder.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         cylinder.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         pyramid.addEventListener( MouseEvent3D.CLICK, piramide )
         pyramid.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         pyramid.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         // add scene update listener.
         scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent )

jugué con los valores hasta conseguir lo deseado

listo, burle a Mdm,

pero otra vezz, me tope con un problema, en mdm no se pueden utilizar los fscommand

así que me puse a forear, en CristaLab ahí me dieron una mano




bastaba con implementar esto

Código ActionScript :

import mdm.*;
//llamado a MDM un compilador exe que permite transparencias y ejecutar aplicaciones
          mdm.Application.init(this, initApp);


y en

Código ActionScript :

private function mouseClickEvent(e:MouseEvent3D):void 
      {
         //    var path:String = mdm.Application.path+"notepad.exe";
   //mdm.System.exec(path);
      }

Esto abre el notepad, al presionar tanto la esfera como el cubo.



Yo quería que al presionar la esfera, se abriera una cosa y con el cubo se abriera otra


Asi que lo que hice fue:

Código ActionScript :

Cambiar esto
// add objects listeners.
sphere.addEventListener( MouseEvent3D.CLICK, mouseClickEvent )
sphere.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
sphere.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
cube.addEventListener( MouseEvent3D.CLICK, mouseClickEvent )
cube.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
cube.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )

por esto

Código ActionScript :

sphere.addEventListener( MouseEvent3D.CLICK, pelota )
sphere.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
sphere.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
cube.addEventListener( MouseEvent3D.CLICK, cubo )
cube.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
cube.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )

Simplemente cambie en el evento click de sphere= mouseClickEvent por pelota
y lo mismo con cube

Código ActionScript :

  private function pelota(e:MouseEvent3D):void 
      {          
      
    var path:String = mdm.Application.path+"a.bat";
   mdm.System.exec(path);

      }
  private function cubo(e:MouseEvent3D):void 
      {          
      
    var path:String = mdm.Application.path+"notepad.exe";
   mdm.System.exec(path);
}





Siguiendo con los problemas......

Este ejemplo que yo me habia bajado, no usaba ningun modelo exportado desde 3d max
Si no que tanto la pelota como el cubo eran generados

Código ActionScript :

// creates sphere and cube.
         var sphere:Sphere = new Sphere( "mySphere" )
            sphere.x = 10
            
         var cube:Cube = new Cube( "myCube" )
            cube.x = -10

lo que yo quería era tomar un diseño hecho en 3d Max y obtener eventos por medio de as3

así que lo que hice fue tomar un ejemplo de los que se instalan con flare 3d en donde se controla
una esfera ,una pirámide y un cilindro por medio de lineas:


Código ActionScript :

{
   import flare.basic.*
   import flare.core.*
   import flare.utils.*
   import flash.display.*
   import flash.events.*
   
   public class Main extends Sprite
   {
      private var scene:Scene3D
      private var cylinder:Pivot3D
      private var pyramid:Pivot3D
      private var sphere:Pivot3D
      
      public function Main() 
      {
         stage.quality = "medium"
         
         // creates the scene.
         scene = new Viewer3D( this, "scene.f3d" )
         
         // define progress and complete events.
         scene.addEventListener( Scene3D.PROGRESS_EVENT, progressEvent )         
         scene.addEventListener( Scene3D.COMPLETE_EVENT, completeEvent )         
      }
      
      private function progressEvent(e:Event):void 
      {
         // trace( scene.loadProgress )
      }
      
      private function completeEvent(e:Event):void 
      {
         // trace info about the scene.
         Pivot3DUtils.traceInfo( scene )
         
         // once completed, we can access to 3d objects.
         cylinder = scene.getChildByName( "cylinder" )
         pyramid  = scene.getChildByName( "pyramid" )
         sphere = scene.getChildByName( "sphere" )
         
         // we begin update the scene.
         scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent )
      }
      



Y combinarlo con mi trabajo anterior.

(SE LOS DEJO CON LAS MODIFICACIONES QUE FUI ANULANDO PASO A PASO)


Código ActionScript :

package  
{
   import flare.basic.*
   import flare.events.*
   import flare.materials.*
   import flare.primitives.*
   import flare.core.*
   import flare.utils.*
   import flash.display.*
   import flash.events.*
   import mdm.*;
   import flash.display.Sprite;
   import flash.system.fscommand;

   public class Main extends Sprite
   {
      private var scene:Scene3D
      private var cylinder:Pivot3D
      private var pyramid:Pivot3D
      private var sphere:Pivot3D
      
      public function Main() 
      {
         stage.quality = "medium"
         
         // creates the scene.
         scene = new Viewer3D( this, "scene.f3d" )
         
         // define progress and complete events.
         scene.addEventListener( Scene3D.PROGRESS_EVENT, progressEvent )         
         scene.addEventListener( Scene3D.COMPLETE_EVENT, completeEvent )         
      }
      
      private function progressEvent(e:Event):void 
      {
          trace( scene.loadProgress )
      }
      
      private function completeEvent(e:Event):void 
      {
         // trace info about the scene.
         Pivot3DUtils.traceInfo( scene )
         
         // once completed, we can access to 3d objects.
         cylinder = scene.getChildByName( "cylinder" )
         pyramid  = scene.getChildByName( "pyramid" )
         sphere = scene.getChildByName( "sphere" )
         
         // we begin update the scene.
         scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent )
      
         
         //pocisionamiento y tamaño de la camara dentro del swf yo la utilizo para evadir la marca de agua de mdm zin 
          scene.canvas.setViewport(300, 400, 20, 0); 
             //llamado a MDM un compilador exe que permite transparencias y ejecutar aplicaciones
          mdm.Application.init(this, initApp);
             function initApp():void{
    
   
   // start application...
              }         // add objects listeners.
         sphere.addEventListener( MouseEvent3D.CLICK, pelota )
         sphere.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         sphere.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         cylinder.addEventListener( MouseEvent3D.CLICK, cilindro )
         cylinder.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         cylinder.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         pyramid.addEventListener( MouseEvent3D.CLICK, piramide )
         pyramid.addEventListener( MouseEvent3D.MOUSE_OUT, mouseOutEvent )
         pyramid.addEventListener( MouseEvent3D.MOUSE_OVER, mouseOverEvent )
         // add scene update listener.
         scene.addEventListener( Scene3D.UPDATE_EVENT, updateEvent )
         
         // set camera position and orientation.
         scene.camera.setPosition( -20, 150, -90 )         
         scene.camera.lookAt( 50, 30, 0 )
      }
      
      private function updateEvent(e:Event):void 
      {
         scene.rotateY( 1 )
      }
      
        private function pelota(e:MouseEvent3D):void 
      {          
      //fscommand("exec", "notepad.exe")
    var path:String = mdm.Application.path+"a.bat";
   mdm.System.exec(path);

//else if ( e.target.name == "Cube" ) 
//{
  //    var path:String = mdm.Application.path+"notepad.exe";
   //mdm.System.exec(path);
//}
      
         
      }
      private function cilindro (e:MouseEvent3D):void 
      {          
      
    var path:String = mdm.Application.path+"notepad.exe";
   mdm.System.exec(path);

//else if ( e.target.name == "Cube" ) 
//{
  //    var path:String = mdm.Application.path+"notepad.exe";
   //mdm.System.exec(path);
}
   
   private function piramide(e:MouseEvent3D):void 
      {          
      
    var path:String = mdm.Application.path+"paint.exe";
   mdm.System.exec(path);

//else if ( e.target.name == "Cube" ) 
//{
  //    var path:String = mdm.Application.path+"notepad.exe";
   //mdm.System.exec(path);
}
   
   private function mouseOverEvent(e:MouseEvent3D):void 
      {
         // change scale.
         
         e.target.setScale( 1.2, 1.2, 1.2 )
      }
      
      private function mouseOutEvent(e:MouseEvent3D):void 
      {
         // reset to original scale.
         
         e.target.setScale( 1, 1, 1 )
      }
   }
}


Como resultado









Contento con mi resultado, sigo experimentando


archivos: http://www.megaupload.com/?d=TUKNXFR7



saludos:

Carlos Andrès Milanoff


"Todo lo que somos, son los fragmentos que captamos de nuestro etorno"

Por carxfer

20 de clabLevel



Genero:Masculino  



Ultima edición por carxfer el 20 Feb 2011 05:47 pm, editado 1 vez

chrome
Citar            
MensajeEscrito el 16 Feb 2011 03:25 am
:D :) ^^

Por carxfer

20 de clabLevel



Genero:Masculino  



Ultima edición por carxfer el 20 Feb 2011 05:49 pm, editado 1 vez

chrome
Citar            
MensajeEscrito el 16 Feb 2011 01:34 pm
Es genial! Me encanto la idea :) un dia de estos me hago uno tambien :p

Por arieln

0 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Feb 2011 05:42 am
carxfer, no te niego, está bueno el contenido. Pero tu forma de redactarlo me hace muy difícil pasarlo a portada sin pasar excesivo tiempo editandolo.

Cosas como "me loguie en" o usar "q" en vez de "qué". No quiero desanimarte, no es difícil redactar un poco mejor y seguro entonces, sin problemas, pasaré tus aportes a portada.

Por ahora, muevo esto al foro Aportes.

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

chrome
Citar            
MensajeEscrito el 20 Feb 2011 05:55 pm
Estimado Freddie,
no te preocupes, agradezco tu crítica, la considero constructiva, para próximos proyectos,
intentè corregir un poco el aporte.
un cordial saludo

Por carxfer

20 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 03 Mar 2011 03:30 am
Me gusto, lastima que cuando lo subi a una web aparecio el logo grande de flare3d y para q desaparezca hay q poner u$s 500. Me quedo con alternativa3d q es free y muy potente.

Por walterman

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Mar 2011 12:53 pm
entiendo a lo que te refieres, pero si cuelgas el swf sin html no aparece
mira:
http://www.carlosreparador.com.ar/example.swf

un cordial saludo

Por carxfer

20 de clabLevel



Genero:Masculino  

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.