Zurück   Flashforum > Software > 3D

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-02-2009, 08:47   #1 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
[PV3D] Sphäre mit PhongMaterial klickbar machen

Hi,

ich hab mir eine Sphäre auf die Bühne geholt und ein PhongMaterial drüber gelegt. Leider bin ich bis jetzt daran gescheitert das Ding klickbar zu machen. Interactive hab ich auf true gesetzt, Event Listener und Handler sind gesetzt, aber irgendwie möchte das Ding nicht.

Irgendjemand eine Idee? Lässt sich das Material überhaupt anklicken, oder muss ich mir einen Workaround suchen?

Danke
echo
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 09:16   #2 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
hi,
ich denke der 3DEventListener ist für 3dObjecte und nicht für materials.
wie sieht denn dein script aus?
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 09:24   #3 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
das ist jetzt grade blöd, sitz auf arbeit und hab das script nicht hier.

aber es ist wirklich nur eine simple sphere innerhalb eines 3D Containers, innerhalb eines 3D Containers, innerhalb eines 3D Containers.

Auf der Sphere ist wirklich nur ein PhongMaterial.

Den event listener hab ich auf die Sphere gepackt, also _mySphere.addEventListener(Interactive3D......, meineFunktion);

Muss ich den aufs PhongMaterial packen?
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+

Geändert von echo5-7 (04-02-2009 um 09:26 Uhr)
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 09:30   #4 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
http://papervision3d.googlecode.com/...ocs/index.html

damit kannst du jedes 3dObject interactiv machen, auch eine sphere....das hat nix mit dem verwendeten material zu tun
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 09:34   #5 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
ok, ich werde das mal austesten. ich glaub ich hab die sphere nicht auf interactive gesetzt, weil die autovervollständiung von flashdevelop mir das nicht angezeigt hat.
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 09:57   #6 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
du kannst die sphere auch nicht auf interactive=true setzen,
ich hab grad gesehen, dass mein link nicht richtig funktioniert und nur auf die Dokumentation verlinkt

such da mal nach InteractiveScene3DEvent
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 10:11   #7 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
Zitat:
InteractiveScene3DEvent(type:String, container3displayObject3D = null, sprite:Sprite = null, face3d:Triangle3D = null, x:Number = 0, y:Number = 0, renderhitData:RenderHitData = null, bubbles:Boolean = false, cancelable:Boolean = false)
ehm, ok, was macht dieses ding jetzt genau?
Muss ich jetzt eine extra Instanz dieses Events erzeugen und ihm als Parameter container3D meine Sphere übergeben um sie interaktiv zu machen? Was macht der Sprite Parameter?

Ich steh grade auf dem Schlauch und die Doku ist ja auch nicht grade detailiert...
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 10:40   #8 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
Code:
  
yourSphere.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, onPress);
private function onPress( e:InteractiveScene3DEvent ):void {
//...yourAction;
}
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 10:46   #9 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
ok, auch wenn sich das jetzt merkwürdig anhört, aber genau das steht bei mir auch drinn... ich poste heute abend mal das script.. muss ja irgendwie gehen.
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 18:18   #10 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
hier mal ein kleines Beispiel als Dokumentklasse
Code:
package {
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.shadematerials.PhongMaterial;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.lights.PointLight3D;

	public class SphereDemo extends BasicView {
		private var sphere:Sphere;
		
		
		public function SphereDemo(viewportWidth:Number=600,viewportHeight:Number=400,scaleToStage:Boolean=true,interactive:Boolean=true, cameraType:String = "Free") {
			super(viewportWidth,viewportHeight,scaleToStage,interactive, cameraType);
			iniObjects();
			startRendering();
		}
		
		
		private function _ROLL_OVER(e:InteractiveScene3DEvent):void {
			trace("ROLL_OVER");
			viewport.buttonMode = true;
		}
		private function _ROLL_OUT(e:InteractiveScene3DEvent):void {
			trace("ROLL_OUT");
			viewport.buttonMode = false;
		}

		private function _CLICK(e:InteractiveScene3DEvent):void {
			trace("Clicked: " + e.target);
		}


		private function iniObjects():void {
			var pm:PhongMaterial = new PhongMaterial(new PointLight3D  , 0x333333, 0x000000, 10);
			pm.interactive = true;
			
			sphere = new Sphere(pm);
			scene.addChild(sphere);
			sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _CLICK);
			sphere.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _ROLL_OVER);
			sphere.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _ROLL_OUT);
			
		}
	}
}
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 20:24   #11 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
hi,
also ich hab verstanden, das ich einfluss auf den viewport nehmen muss... wenn ich das allerdings mache, dann zeigt er mir gar nichts mehr an.

edit: ist das eigentlich normal das der cursor zwischen hand und pfeil hin und her flackert?

PHP-Code:
package de.leerraum 
{
    
import flash.display.DisplayObject;
    
import flash.events.Event;
    
import flash.events.MouseEvent;
    
import flash.display.Sprite;
    
import gs.TweenMax;
    
import org.papervision3d.materials.shadematerials.PhongMaterial;
    
import org.papervision3d.materials.shaders.PhongShader;
    
import org.papervision3d.materials.shaders.ShadedMaterial;
    
import org.papervision3d.materials.utils.MaterialsList;
    
import org.papervision3d.render.BasicRenderEngine;
    
import org.papervision3d.scenes.Scene3D;
    
import org.papervision3d.objects.DisplayObject3D;
    
import org.papervision3d.view.BasicView;
    
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.GouraudMaterial;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.events.InteractiveScene3DEvent;
 
import org.papervision3d.materials.ColorMaterial;

    
    
/**
     * ...
     * @author LEERRAUM Kai Reinahrdt
     */
    
    
public class Spheres extends Sprite
    
{
        private var 
_mySphereOne:Sphere;
        private var 
_mySphereTwo:Sphere;
        private var 
_mySphereThree:Sphere;
        private var 
_container:DisplayObject3D;
        private var 
_view:BasicView;
        private var 
_angle:Number = new Number(0);
        private var 
_light:PointLight3D;
        private var 
_backlight:PointLight3D;
        private var 
_gouraud GouraudMaterial;
        private var 
_phong PhongMaterial;
        private var 
_parentStageW int;
        private var 
_parentStageH int;
        private var 
_rotor DisplayObject3D;
        private var 
_stator DisplayObject3D;
        private var 
_startInteractive Boolean false;
        private var 
_matList MaterialsList;
        
        public function 
Spheres(sW:int,sH:int
        {

            
_parentStageH sH;
            
_parentStageW sW;
            
            
addEventListener(Event.ADDED_TO_STAGEinit);
    
        }
        private function 
init (ev:Event) : void {
            
            
            
removeEventListener(Event.ADDED_TO_STAGEinit);
            
            
_view = new BasicView(_parentStageW_parentStageHfalsefalseCameraType.FREE);
            
_view.renderer = new BasicRenderEngine(); 
            
            
_light = new PointLight3D(true); 
             
_light.= -500
            
_light.200;
            
_backlight = new PointLight3D(true); 
             
_backlight.400
            
            
_phong = new PhongMaterial(_light0xFFFFFF0x9dc21a20);
            
_gouraud = new GouraudMaterial(_backlight0x0099000xFFFFFF);
            
_phong.interactive true;
            
            var 
_mySphereOneCon :Sprite = new Sprite ();
            
            
_mySphereOne = new Sphere(_phong603232);
            
_mySphereTwo = new Sphere(_phong603232);
            
_mySphereThree = new Sphere(_phong603232);
        
            
_container = new DisplayObject3D();
            
_rotor = new DisplayObject3D();
            
_stator = new DisplayObject3D();
            
            
_mySphereOne.200;
            
_mySphereOne.+= 100;
            
_mySphereTwo.= -200;
            
_mySphereTwo.+= 100;
            
_mySphereThree.= -200;
            
            
_phong.interactive true;
            
_phong.doubleSided false;
            
            
_container.addChild(_mySphereOne);
            
_container.addChild(_mySphereTwo);
            
_container.addChild(_mySphereThree);
            
_mySphereOne.+= 5000;
            
_mySphereTwo.+= 5000;
            
_mySphereThree.+= 5000;
            
            
_rotor.addChild(_container);
            
_stator.addChild(_rotor);
            
_view.scene.addChild(_stator);
            
addChild(_view);
            
            
addEventListenerEvent.ENTER_FRAMErotateContainer);
            
_view.singleRender();
            
TweenMax.to(_mySphereOne2, { z:100   } );
            
TweenMax.to(_mySphereTwo2, { z:100delay:0.3  } );
            
TweenMax.to(_mySphereThree2, { z:-200 ,delay:0.5,onComplete:startInteractive,onCompleteParams: [true] } );
        }
        private function 
mouseInteraction () : void {
            
_mySphereOne.addEventListenerInteractiveScene3DEvent.OBJECT_CLICK clicked );
            
_mySphereTwo.addEventListenerInteractiveScene3DEvent.OBJECT_CLICKclicked );
            
_mySphereThree.addEventListenerInteractiveScene3DEvent.OBJECT_CLICKclicked );
        }
        private function 
clicked (ev:InteractiveScene3DEvent ) :void {
            var 
ref DisplayObject3D ev.displayObject3D as DisplayObject3D;
            
ref.visible false;
            
            
        }
        private function 
rotateContainer (ev:Event):void {
            
            var 
maxyaw int 10;
            if (
_startInteractive) {
            
            
_stator.rotationX = ((_parentStageH*.5 -mouseY)/_parentStageH*.5) * 90//-((mouseY / _parentStageH) * 90);
        
            
var actYaw Number = ((mouseX - (_parentStageW .5)) / (_parentStageW .5)) * maxyaw;
            
_rotor.yaw(actYaw);
            
            }
            
_view.singleRender();
        }
        private function 
startInteractive (value:Boolean) : void {
                
_startInteractive value;
        }
        
    }
    

__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+

Geändert von echo5-7 (04-02-2009 um 20:32 Uhr)
echo5-7 ist offline   Mit Zitat antworten
Alt 04-02-2009, 21:20   #12 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
in deinem package so:
_view.viewport.buttonMode = true;

warum erbt deine klasse von sprite?

versuch mal deine klasse nach meinem beispiel aufzubauen, da funktioniert ja alles.
wenn sich die maus über einem 3dobjekt befindet siehst du die hand, sonst den pfeil


muss jetzt leider ins bett weil ich morgen früh raus muss, kann daher dein beispiel nicht ausprobieren
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 04-02-2009, 22:10   #13 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
sodala, jetzt hab ich den fehler.
ich dackel hab den viewport zuerst auf interactive gestellt und dann die BasicView instanziert. Nur mich wundert warum er da keinen NullObjektverweis gebracht hat.

Das mit dem Viewport wusste ich aber vorher noch nicht, insofern, vielen Dank für deine Hilfe
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 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 13:30 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele