Comunidad de diseño web y desarrollo en internet online

PAPERVISION3D + CAMARA SIGUIENDO RATON

Citar            
MensajeEscrito el 02 Oct 2007 03:41 pm
Hola buenas tardes! estaba mirando el tutorial de eldervaz si no me ekivoko. En el explika komo krear una esfera aplikarle textura y un movimiento.

El tem es ke yo ya tengo mi propia escena kreada kon papervision3d y el problema es ke no se komo aplikar el kodigo para ke la kamara siga el movimiento del kursor del raton. En el tutorial sale un kodigo ke he probado y funciona kon la esfera, pero kuando intento aplikarlo a mi escena, no hay manera.... Perdonad de ante mano ke soy neofito en la materia programacion y seguramente sea algo mas sencillo de lo ke yo kreo!.

El kodigo de mi escena es el siguiente:

Código :

import org.papervision3d.components.as3.flash9.PV3DColladaScene;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.scenes.InteractiveScene3D;
import org.papervision3d.objects.DisplayObject3D;

scene3d.addEventListener(PV3DColladaScene.SCENE_COMPLETE, handleInit);
scene3d.addEventListener(PV3DColladaScene.SCENE_LOAD_PROGRESS, handleProgress);
scene3d.addEventListener(PV3DColladaScene.SCENE_LOAD_ERROR, handleLoadError);

function handleInit(...rest):void
{
   /*
   * The code below is an example of getting mouse events from a DisplayObject3D in your collada scene - 
   * YOU MUST USE INTERACTIVE MATERIALS TO RECEIVE MOUSE EVENTS
   * */
   
   
   var my3DObject:DisplayObject3D = scene3d.collada.getChildByName("esfera");
   my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleObjectClick);
   my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver);
   my3DObject.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut);
      
   /*
   * The code below is an example of getting mouse events from the InteractiveSceneManager, which dispatches 
   * events for all interactive objects in a scene.
   * */
   /*
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleMousePress);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE, handleMouseRelease);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleMouseClick);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleMouseOver);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleMouseOut);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_MOVE, handleMouseMove);
   scene3d.scene.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE, handleReleaseOutside);
   */
}

// COLLADA Scene event handlers ===================================

function handleProgress(e:FileLoadEvent):void
{
   trace(Math.floor(e.bytesLoaded/e.bytesTotal)*100);
}

function handleLoadError(e:FileLoadEvent):void
{
   trace("Collada load error", e.file, e.message);
}

// Individual DisplayObject3D event handlers ===================================

function handleObjectOut(e:InteractiveScene3DEvent):void
{
   trace("out", e.displayObject3D.name);
}

function handleObjectOver(e:InteractiveScene3DEvent):void
{
   trace("over", e.displayObject3D.name);
}

function handleObjectClick(e:InteractiveScene3DEvent):void
{
   trace("click", e.displayObject3D.name);
}

// InteractiveSceneManager event handlers ===================================

function handleMousePress(e:InteractiveScene3DEvent):void
{
   trace("press", e.displayObject3D.name);
}
function handleMouseRelease(e:InteractiveScene3DEvent):void
{
   trace("release", e.displayObject3D.name);
}
function handleReleaseOutside(e:InteractiveScene3DEvent):void
{
   trace("releaseOutside");
}
function handleMouseClick(e:InteractiveScene3DEvent):void
{
   trace("click", e.displayObject3D.name);
}
function handleMouseOver(e:InteractiveScene3DEvent):void
{
   trace("over", e.displayObject3D.name);
}
function handleMouseOut(e:InteractiveScene3DEvent):void
{
   trace("out", e.displayObject3D.name);
}
function handleMouseMove(e:InteractiveScene3DEvent):void
{
   trace("move", e.displayObject3D.name);
}


Todo esto lo tengo pegado en el primer frame del timeline. Funciona bien, pero no se donde lolokar la parte donde la kamara sigue al raton ke sale en el mencionado tuotial de arriba:

Código :

function loop3D(event:Event):void {
    //esfera.yaw( 5 );
    escena.renderCamera( camara );
    esfera.rotationX = -contenedor.mouseY/4;
    esfera.rotationY = -contenedor.mouseX/4;
}

En mi kaso seria interesante ke se pudise aplikar esa funcion en la escena3d collada ke he importado desde componentes papervision3d.

gracias a todos! :D

[Zah]Usa las etiquetas code[/Zah]

Por SKATERR

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Oct 2007 03:42 pm

Por SKATERR

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Oct 2007 03:42 pm
¿Has intentado estudiar ortografía? :?

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 02 Oct 2007 04:17 pm
"Nunca maestro, siempre aprendiz..." <--- desde luego ke a ti te va muy bien esa frase.

Por favor, si alguien tiene ke kontestar, ke sea para tratar el tema por el kual kree el post!. No entre aki para perder el tiempo kon "frickys" (nunka mejor dicho)....

Por SKATERR

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Oct 2007 07:33 pm
SKATERR, he intentado leer tu post y casi me he mareado... no digamos ya si tengo que pensar una respuesta.

Por favor, en el futuro trata de escribir mejor y de ser más respetuoso. Eso incrementará las posibilidades de que alguien quiera er... perder el tiempo contigo.
:swat:

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 03 Oct 2007 11:43 am
Mira esta clase. Utilízala como un Main. Tienes que importar tu objeto Collada, y asignarcelo a la variable forma, porque si no te funciona. Si lo adaptas bien, veras tu objeto collada moviéndose fluidamente con el mouse.

Código :

package 
{
   import flash.display.*;
   import flash.events.*;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.events.IOErrorEvent;
   import flash.display.Loader;
   import flash.display.StageAlign;
   import flash.display.StageScaleMode;

   import org.papervision3d.scenes.*;
   import org.papervision3d.cameras.*;
   import org.papervision3d.objects.*;
   import org.papervision3d.materials.*;
   [SWF( frameRate="20")];
   public class Main extends Sprite
   {
      public var contenedor :Sprite;
      public var escena     :Scene3D;
      public var camara  :Camera3D;
      public var forma  :Forma3d;
      public var estiramiento:Number = 500;



      public function Main()
      {
         stage.scaleMode = StageScaleMode.NO_SCALE;
         stage.align = StageAlign.TOP_LEFT;
         stage.addEventListener(Event.RESIZE, redimensionar);
         contenedor = new Sprite();
         addChild( contenedor );
         escena = new Scene3D( contenedor );
         camara = new Camera3D();

         cargarTextura();
      }
      private function cargarTextura():void
      {
         var cargarTextura:Loader = new Loader();
         cargarTextura.contentLoaderInfo.addEventListener(Event.COMPLETE, texturaCargada);
         var urlTextura:String ="textura.jpg";
         cargarTextura.load(new URLRequest(urlTextura));
      }
      private function texturaCargada(event:Event):void
      {
         var material :BitmapMaterial = new BitmapMaterial(event.target.content.bitmapData);
         forma = new Forma3d(material);

         escena.addChild( forma );
         addEventListener(Event.ENTER_FRAME, loop);
         redimensionar(new Event(Event.RESIZE));
      }
      private function loop(event:Event):void
      {

         var posx:Number = (stage.mouseX-300)*.01;
         var posy:Number =(stage.mouseY-200)*.01;

         var gotoX:Number = Math.cos(posx)*estiramiento;
         var gotoZ:Number = Math.sin(posx)*estiramiento;
         var gotoY:Number = Math.cos(posy)*estiramiento;

         if (Math.abs(gotoX-camara.x)>1)
         {
            camara.x += (gotoX-camara.x)*.2;
            camara.y += (gotoY-camara.y)*.2;
            camara.z += (gotoZ-camara.z)*.2;
         }
         camara.lookAt(forma);
         escena.renderCamera( camara );
      }
      private function redimensionar(event:Event):void
      {
         contenedor.x  = Math.ceil(stage.stageWidth/2);
         contenedor.y= Math.ceil(stage.stageHeight/2);
      }
   }
}

Por AXM

Claber

705 de clabLevel

8 tutoriales

Genero:Masculino  

Bogotá

firefox
Citar            
MensajeEscrito el 05 Oct 2007 03:31 am
bueno, al parecer el usa el componente de PPV y no solo code ^^

son cosas distintas

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox

 

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