Zurück   Flashforum > Software > 3D

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-01-2009, 19:33   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 66
Papervision3D Cube Panorama Clickbare Fläche ... Bsp?

Hy,

ich bin noch recht neu bei Papervision3D und verzweifel im Moment etwas.
Ich bau grade an einer kleinen Virtuellengalerie wo man Räume betreten kann.

Die Räume wurden soweit schon als Texturen gerendert.

Nun Verwende ich einen Cube mit doublesided Texturen und befinde mich im Cube ... wie bei sowas üblich.

Nun möchte ich aber z.B. eine Tür (Button) clickbar machen und finde einfach keinen Ansatz ...

Jegliches experimentieren mit dem Great White Release (2.0) und MovieAssetMaterials mit interactive true erwies sich bisher als Sackgasse.

Kennt jemand vielleicht ein gutes Beispiel mit Code das er mir posten kann?
Also mit einem "echten" Clickbaren Button ...
weil solche Lösungen:
http://papervision2.com/advanced-interactivity-2/
können es doch nicht bloß gewesen sein?

Danke euch!!

Mein Code (falls es was bringt):

HTML-Code:
package {
	import flash.display.*;
	import flash.filters.*;
	import flash.display.Stage;
	import flash.events.*;
	
	// Import Papervision3D
	import org.papervision3d.cameras.*;
	import org.papervision3d.scenes.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.special.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.materials.shaders.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.lights.*;
	import org.papervision3d.render.*;
	import org.papervision3d.view.*;
	import org.papervision3d.events.*;
	import org.papervision3d.core.utils.*;
	import org.papervision3d.core.utils.virtualmouse.VirtualMouse;


	public class main extends Sprite {
		// ___________________________________________________________________ vars3D

		var container :Sprite;
		var scene     :Scene3D;
		var camera    :Camera3D;
		var renderer  :BasicRenderEngine;
		var viewport3D:Viewport3D;
		
		var mouseDrag :Boolean = false;

		var	mtx:int;
		var	mty:int;
		
		var m_x:Number = 0;  // set the x startlocation
		var m_y:Number = 0;  // set the y startlocation
		var m_z:Number = 0;  // do not set the z-axis! YOUR SCREEN IS FLAT!!!
		
		var keyboard_Steps:Number = 6;	// set the stepwide for the keys
		var mouse_Steps:Number = 70;	// set the speed for mousetracking
		
		var zoom_MAX:Number = 6;		// set the maximum of zoom
		var zoom_MIN:Number = 2;		// set the minimum of zoom
		var zoom_Steps:Number = 0.5;	// set the stepwide for zooming
		var zoom_Start:Number = 100;	// set the zoomstart


		// ___________________________________________________________________ main

		function main() {
			// onEnterFrame
			this.addEventListener( Event.ENTER_FRAME, loop3D );

			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
			this.addEventListener(MouseEvent.MOUSE_DOWN,  onmouseDown);
			this.addEventListener(MouseEvent.MOUSE_UP,  onmouseUp);
			
			init3D();
		}



		// ___________________________________________________________________ init3D

		function init3D():void {
			
			viewport3D = new Viewport3D(1000, 550, true, true);
			
			addChild(viewport3D);
			
			renderer = new BasicRenderEngine();
			
			// Create container sprite and center it in the stage
			//container = new Sprite();
			//addChild( container );
			//container.x = 500;
			//container.y = 275;

			// Create scene
			scene = new Scene3D( );

			// Create camera
			camera = new Camera3D();
			camera.zoom=zoom_Start;
			camera.x = camera.y = camera.z = 0;
			camera.rotationX = camera.rotationY = camera.rotationZ = 0;
			camera.yaw(0); camera.pitch(0); camera.roll(0); 
			
			addCubicVR();
			
			renderer.renderScene(scene, camera, viewport3D);

		}



		// ___________________________________________________________________ CubicVR

		function addCubicVR():void {
			
			var materialSpace :MovieAssetMaterial;

			// name, angle, x, y, z
			var ar:Array = new Array();
			ar.push (["front_mc",   0, 0, 0, 2500]); 
			ar.push (["right_mc",  90, 2500, 0 ,0]); 
			ar.push (["back_mc",  180, 0, 0,-2500]); 
			ar.push (["left_mc",  -90,-2500, 0, 0]); 
			ar.push (["bottom_mc", 90, 0,-2500, 0]); 
			ar.push (["top_mc",   -90, 0, 2500, 0]);
						 
			for (var i:int = 0; i < 6; i++) {
				materialSpace = new MovieAssetMaterial( ar[i][0], false, true );
				materialSpace = new MovieMaterial( ar[i][0], false, true );
				materialSpace.interactive = true ; 
				var plan:DisplayObject3D = new Plane( materialSpace, 5000, 5000, 12, 12 );
				if (i==4 || i==5) plan.pitch(ar[i][1]) else plan.yaw(ar[i][1]);
				plan.x = ar[i][2];
				plan.y = ar[i][3];
				plan.z = ar[i][4];
				scene.addChild( plan );
			}
		
		}
		
		function overFunc ():void {
			trace("over");
		}


		// ___________________________________________________________________ update


		function update_Camera():void 
		{	 
			if (m_x >= 360) m_x = 0;
			if (m_x <=-360) m_x = 0;
			if (m_y >=  10) m_y = 10;
			if (m_y <= -10) m_y = -10;

			camera.rotationX = m_y;
			camera.rotationY = m_x;
			camera.yaw(0); camera.pitch(0); camera.roll(0);
			
			//renderer.renderScene(scene, camera, viewport3D);

		}
		
		// ___________________________________________________________________ keyboard


		function keyDownHandler(event:KeyboardEvent):void 
		{	 
						
			if (event.keyCode == 37) { //LEFT		
				m_x -= keyboard_Steps;
				update_Camera();
			}
			
			if (event.keyCode == 38) { //UP
				m_y -= keyboard_Steps;
				update_Camera();
			}
			
			if (event.keyCode == 39) {  //RIGHT
				m_x += keyboard_Steps;
				update_Camera();
			}
			
			if (event.keyCode == 40) {  //DOWN
				m_y += keyboard_Steps;
				update_Camera();
			} 
			
						
			if (event.keyCode == 16){
				if(zoom_MAX > camera.zoom) {
					camera.zoom += zoom_Steps;
				}
			}
			
			if (event.keyCode == 17){
				if(zoom_MIN < camera.zoom) {
					camera.zoom -= zoom_Steps;
				}
			}
			
		}



		// ___________________________________________________________________ loop

		function loop3D(event:Event):void {
		
			if(mouseDrag){
				
				var dx: Number = mouseX - 500;
				var dy: Number = mouseY - 275;

				m_x += dx/mouse_Steps;
				m_y += dy/mouse_Steps;

			}
			
			update_Camera();
			
			renderer.renderScene(scene, camera, viewport3D);
			
			// Render the scene
			//scene.renderCamera( camera );
		}
		
		
		// ___________________________________________________________________ mouse
		
		function onmouseDown(event:Event):void {
			mtx = mouseX;
			mty = mouseY;
			mouseDrag = true;		
		}
		
		function onmouseUp(event:Event):void {
			mouseDrag = false;		
		}
				
		
	}
}

Geändert von gdav (11-01-2009 um 20:04 Uhr)
gdav ist offline   Mit Zitat antworten
Alt 12-01-2009, 12:43   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2006
Beiträge: 83
spontan würde mir einfallen, dort wo du eine klickbare fläche haben willst, ein transparentes plane zu setzen, da kannste ja dann auch click events drauf abfangen. einfach so ganz knapp vor deinen cube, nur ein paar pixel versetzt von der wand weg...
jacquesr ist offline   Mit Zitat antworten
Alt 12-01-2009, 20:20   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 66
Hy & thx,

hab das Problem jetzt behoben.
Die Lösung ist es die Texture vorher als MovieClip zu instanzieren und dann per new MovieMaterial als Texture zu laden.

So kann man über die ID des MovieClips die einzelnen Elemente mit entsprechenden EventListenern versehen.

Da es sich um die Portierung des Visicam Panorama Viewers von Papervision3d 1.5 zu 2.0 handelt.

Mit nun clickbaren Flächen hier kurz der von mir angepasste Code:
PHP-Code:
package {
    
import flash.display.*;
    
import flash.filters.*;
    
import flash.display.Stage;
    
import flash.events.*;
    
    
// Import Papervision3D
    
import org.papervision3d.cameras.*;
    
import org.papervision3d.scenes.*;
    
import org.papervision3d.objects.*;
    
import org.papervision3d.objects.special.*;
    
import org.papervision3d.objects.primitives.*;
    
import org.papervision3d.materials.*;
    
import org.papervision3d.materials.special.*;
    
import org.papervision3d.materials.shaders.*;
    
import org.papervision3d.materials.utils.*;
    
import org.papervision3d.lights.*;
    
import org.papervision3d.render.*;
    
import org.papervision3d.view.*;
    
import org.papervision3d.events.*;
    
import org.papervision3d.core.utils.*;
    
import org.papervision3d.core.utils.virtualmouse.VirtualMouse;


    public class 
main extends Sprite {
        
// ___________________________________________________________________ vars3D

        
var container :Sprite;
        var 
scene     :Scene3D;
        var 
camera    :Camera3D;
        var 
renderer  :BasicRenderEngine;
        var 
viewport3D:Viewport3D;
        
        var 
mouseDrag :Boolean false;

        var    
mtx:int;
        var    
mty:int;
        
        var 
m_x:Number 0;  // set the x startlocation
        
var m_y:Number 0;  // set the y startlocation
        
var m_z:Number 0;  // do not set the z-axis! YOUR SCREEN IS FLAT!!!
        
        
var keyboard_Steps:Number 6;    // set the stepwide for the keys
        
var mouse_Steps:Number 70;    // set the speed for mousetracking
        
        
var zoom_MAX:Number 6;        // set the maximum of zoom
        
var zoom_MIN:Number 2;        // set the minimum of zoom
        
var zoom_Steps:Number 0.5;    // set the stepwide for zooming
        
var zoom_Start:Number 100;    // set the zoomstart


        // ___________________________________________________________________ main

        
function main() {
            
// onEnterFrame
            
this.addEventListenerEvent.ENTER_FRAMEloop3D );

            
stage.addEventListener(KeyboardEvent.KEY_DOWNkeyDownHandler);
            
this.addEventListener(MouseEvent.MOUSE_DOWN,  onmouseDown);
            
this.addEventListener(MouseEvent.MOUSE_UP,  onmouseUp);
            
            
init3D();
        }



        
// ___________________________________________________________________ init3D

        
function init3D():void {
            
            
viewport3D = new Viewport3D(1000550truetrue);
            
            
addChild(viewport3D);
            
            
renderer = new BasicRenderEngine();
            
            
// Create container sprite and center it in the stage
            //container = new Sprite();
            //addChild( container );
            //container.x = 500;
            //container.y = 275;

            // Create scene
            
scene = new Scene3D( );

            
// Create camera
            
camera = new Camera3D();
            
camera.zoom=zoom_Start;
            
camera.camera.camera.0;
            
camera.rotationX camera.rotationY camera.rotationZ 0;
            
camera.yaw(0); camera.pitch(0); camera.roll(0); 
            
            
addCubicVR();
            
            
renderer.renderScene(scenecameraviewport3D);

        }



        
// ___________________________________________________________________ CubicVR

        
function addCubicVR():void {
            
            var 
materialRoom:MovieMaterial
            
            
// name, angle, x, y, z
            
var ar:Array = new Array();
            
ar.push (["front_mc",   0002500]); 
            
ar.push (["right_mc",  902500,0]); 
            
ar.push (["back_mc",  18000,-2500]); 
            
ar.push (["left_mc",  -90,-250000]); 
            
ar.push (["bottom_mc"900,-25000]); 
            
ar.push (["top_mc",   -90025000]);
                         
            for (var 
i:int 06i++) {
                var 
planeT:MovieClip;
                if( 
== planeT = new front_mc();
                else if( 
== planeT = new right_mc();
                else if( 
== planeT = new back_mc();
                else if( 
== planeT = new left_mc();
                else if( 
== planeT = new bottom_mc();
                else if( 
== planeT = new top_mc();
                if( 
planeT.doorBtn ) {
                    var 
doorBtn:MovieClip planeT.doorBtn;
                    
doorBtn.addEventListener(MouseEvent.MOUSE_OVERoverFunc);
                }
                
materialRoom = new MovieMaterial planeT );
                
materialRoom.interactive true;

                var 
plan:DisplayObject3D = new Plane(materialRoom5000,5000,12,12);

                if (
i==|| i==5plan.pitch(ar[i][1]) else plan.yaw(ar[i][1]);
                
plan.ar[i][2];
                
plan.ar[i][3];
                
plan.ar[i][4];
                
scene.addChildplan );
            }
        
        }
        
        function 
overFunc (e:MouseEvent):void {
            
trace("over "+e.target);
        }


        
// ___________________________________________________________________ update


        
function update_Camera():void 
        
{     
            if (
m_x >= 360m_x 0;
            if (
m_x <=-360m_x 0;
            if (
m_y >=  10m_y 10;
            if (
m_y <= -10m_y = -10;

            
camera.rotationX m_y;
            
camera.rotationY m_x;
            
camera.yaw(0); camera.pitch(0); camera.roll(0);
            
            
//renderer.renderScene(scene, camera, viewport3D);

        
}
        
        
// ___________________________________________________________________ keyboard


        
function keyDownHandler(event:KeyboardEvent):void 
        
{     
                        
            if (
event.keyCode == 37) { //LEFT        
                
m_x -= keyboard_Steps;
                
update_Camera();
            }
            
            if (
event.keyCode == 38) { //UP
                
m_y -= keyboard_Steps;
                
update_Camera();
            }
            
            if (
event.keyCode == 39) {  //RIGHT
                
m_x += keyboard_Steps;
                
update_Camera();
            }
            
            if (
event.keyCode == 40) {  //DOWN
                
m_y += keyboard_Steps;
                
update_Camera();
            } 
            
                        
            if (
event.keyCode == 16){
                if(
zoom_MAX camera.zoom) {
                    
camera.zoom += zoom_Steps;
                }
            }
            
            if (
event.keyCode == 17){
                if(
zoom_MIN camera.zoom) {
                    
camera.zoom -= zoom_Steps;
                }
            }
            
        }



        
// ___________________________________________________________________ loop

        
function loop3D(event:Event):void {
        
            if(
mouseDrag){
                
                var 
dxNumber mouseX 500;
                var 
dyNumber mouseY 275;

                
m_x += dx/mouse_Steps;
                
m_y += dy/mouse_Steps;

            }
            
            
update_Camera();
            
            
renderer.renderScene(scenecameraviewport3D);
            
            
// Render the scene
            //scene.renderCamera( camera );
        
}
        
        
        
// ___________________________________________________________________ mouse
        
        
function onmouseDown(event:Event):void {
            
mtx mouseX;
            
mty mouseY;
            
mouseDrag true;        
        }
        
        function 
onmouseUp(event:Event):void {
            
mouseDrag false;        
        }
                
        
    }

ps.
vielleicht nicht der galanteste Weg aber es funktioniert
gdav ist offline   Mit Zitat antworten
Alt 30-01-2009, 06:46   #4 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
hallo,
geht auch mit MovieAssetMaterial...

interactive = true;
und
animated = true;
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 30-01-2009, 11:20   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 66
Hy,

wie ist dann der dreh um die eventlistener zu adden?

weil ich daran gescheitert war, über die plane geht es ja kaum oder?
gdav ist offline   Mit Zitat antworten
Alt 30-01-2009, 18:19   #6 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
das sollte über:

materialRoom.movie.doorBtn.addEventListener(MouseE vent.MOUSE_OVER, overFunc);

funktionieren
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 30-01-2009, 21:09   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 66
werd ich morgen mal ausprobieren.

danke dir
gdav 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 12:57 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele