Zurück   Flashforum > Software > 3D

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-07-2009, 13:41   #1 (permalink)
hudler
 
Benutzerbild von robotic
 
Registriert seit: Jan 2004
Ort: Vorarlberg - Austria
Beiträge: 224
3d kugel bewegen (sphere)

Hallo!

Ich habe mit papervision3d eine sphere in eine scene gepackt.

Später soll sie - wie schon so oft - eine Erdkugel werden. Und diese soll mit der Maus bewegt werden können. Und genau hier komme ich schon zu meinem problem. Die Kugel soll sich nämlich mit ein wenig easing nachbewegen. Hier mal der bisherige Code:

ActionScript:
  1. protected var globeMDiffX:Number = 0;
  2.     protected var globeMDiffY:Number = 0;
  3.     protected var mouseDown:Boolean = false;
  4.  
  5.         sphere.addEventListener(InteractiveScene3DEvent.OBJECT_MOVE, handleMouseMove);
  6.         sphere.addEventListener(InteractiveScene3DEvent.OBJECT_UP, handleMouseUp);
  7.         sphere.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleMouseDown);
  8.  
  9.         public function handleMouseDown(e:InteractiveScene3DEvent)
  10.  
  11. {
  12.                         mouseDown = true;
  13.                 globeMDiffX = -mouseX + sphere.rotationY;
  14.             globeMDiffY = mouseY + sphere.rotationX;
  15. }
  16.  
  17.  public function handleMouseMove(e:InteractiveScene3DEvent)
  18.  
  19. {
  20.            if(InteractiveSceneManager.MOUSE_IS_DOWN){
  21.                   
  22.             if( mouseDown )
  23.             {
  24.                 var rotationY:Number = -( -mouseX - globeMDiffX );
  25.                 var rotationX:Number = -(  mouseY - globeMDiffY );
  26.  
  27.                 rotationX = rotationX > 10 ? 10 : rotationX < -30 ? -30 : rotationX;
  28.                
  29.                 Tweener.addTween(sphere, {rotationX:rotationX, rotationY:rotationY, time:3 } );
  30.    
  31.             }
  32.            }
  33. public function handleMouseUp(e:InteractiveScene3DEvent)
  34. {
  35.                         mouseDown = false;
  36. }               
  37.           
  38.           
  39.    }

Das Problem: Die Kugel bewegt sich auch von dem geklickten Punkt weg, jedoch nur um die eigene X-Achse. Ich kann die Kugel also nicht von oben nach unten oder schräg scrollen. Kann mir hier jemand auf die Sprünge helfen? Ich klemm hier echt schon seit zwei Tagen fest und glaub, ich hab mich da in etwas verrannt...

Vielen, vielen Dank!
__________________
hier zum lernen. ohne ende.

Geändert von robotic (21-07-2009 um 13:45 Uhr) Grund: code korrigiert. :)
robotic ist offline   Mit Zitat antworten
Alt 21-07-2009, 14:28   #2 (permalink)
hudler
 
Benutzerbild von robotic
 
Registriert seit: Jan 2004
Ort: Vorarlberg - Austria
Beiträge: 224
oder anders gefragt. ich habe auf http://pv3d.org diesen Schnippsel gefunden:

ActionScript:
  1. private function stage_mouseDownHandler(event:MouseEvent):void
  2.         {
  3.             isMouseDown = true;
  4.         }
  5.  
  6.         private function stage_mouseUpHandler(event:MouseEvent):void
  7.         {
  8.             isMouseDown = false;   
  9.         }
  10.  
  11.         override protected function onRenderTick(event:Event=null):void
  12.         {
  13.             var currentMousePoint:Point = new Point(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
  14.  
  15.             if(isMouseDown)
  16.             {
  17.                 var difference:Point = currentMousePoint.subtract(previousMousePoint);
  18.               var vector:Number3D = new Number3D(difference.x, difference.y, 0);
  19.  
  20.                 var rotationAxis:Number3D = Number3D.cross(vector, FORWARD);
  21.                 rotationAxis.normalize();
  22.  
  23.                 var distance:Number = Point.distance(currentMousePoint, previousMousePoint);
  24.                 var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x, -rotationAxis.y, rotationAxis.z, distance/250);
  25.  
  26.                 sphere.transform.calculateMultiply3x3(rotationMatrix, sphere.transform);
  27.             }
  28.  
  29.             previousMousePoint = currentMousePoint;
  30.  
  31.             super.onRenderTick(event);
  32.         }

Der funktioniert natürlich hervorragend und nützt auch schön die Möglichkeiten von papervision3d. Leider geht dann aber die Bewegung (easing) der Kugel verloren.
Wie kann ich hier noch zusätzlich ein Easing einbauen?
__________________
hier zum lernen. ohne ende.
robotic ist offline   Mit Zitat antworten
Alt 24-07-2009, 10:23   #3 (permalink)
hudler
 
Benutzerbild von robotic
 
Registriert seit: Jan 2004
Ort: Vorarlberg - Austria
Beiträge: 224
Gut. Auch ohne Hilfe hab ich das jetzt gelöst.

Meine Lösungszeile:

ActionScript:
  1. camera.orbit(cameraPitch, cameraYaw);

Ich komme aber schon zu einem weiteren Problem. Auf meiner Kugel befinden sich Punkte. Neben diesen Punkten ein Name. Dieser Name soll sich neben dem Punkt bewegen.

ActionScript:
  1. font3D = new HelveticaBold();
  2.             text3D = new Text3D(TextInhalt, font3D, textMaterial);
  3.             text3D.scale = .4;
  4.             text3D.x = 0;
  5.         text3D.y = 0;
  6.         text3D.z = 0;
  7.            scene.addChild(text3D);

Jetzt dreht sich der Text mit der Erdkugel mit. Natürlich dreht sich der Text in allen Achsen zu der Erdkugel. Wie kann ich jetzt den Text auf 2D Basis mitlaufen lassen?

Bisher meine Funktion (wenn ich die Kugel bewege):
PHP-Code:
            var p:Point getObj2DCords(punktcamera0);
        
text3D.p.x
        text3D
.p.
ActionScript:
  1. private function getObj2DCords ( o:DisplayObject3D, cam:CameraObject3D,  offsetX:Number = 0, offsetY:Number = 0 ):Point {
  2.           var view:* = o.view;
  3.             var persp:Number = (cam.focus * cam.zoom) / (cam.focus + view.n34);
  4.             return new Point ( (view.n14 * persp) + offsetX, (view.n24 * persp) + offsetY );
  5.         }
__________________
hier zum lernen. ohne ende.
robotic ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele