Zurück   Flashforum > Software > 3D

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-12-2009, 14:43   #1 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
[away3d] BitmapMaterial funktioniert nicht.

Hi,

ich hab in Flash eine Reihe von PNG's als Klassen definiert und adde die jetzt nach Bedarf zu einem Sprite. Damit das aber nicht so langweilig aussieht, splitte ich diese PNG's in viele kleine BitmapDatas (kacheln) und möchte sie auf Planes mappen, um diese dann schön zu animieren.

Das splitten klappt, nur das Mappen mit BitmapMaterial klappt nicht. Die BitmapDatas sind da, ich hab sie auch schon testweise mal Anzeigen lassen. Alles wie es sein soll.

Die Klasse die Away3D die BitmapData's übergeben soll, sieht folgender Maßen aus.

BitmapResolver splittet die ihm übergebenen Daten, und funktioniert. Er speichert die in einem mehrdimensionalen Array[x][y].
Code:
package de.leerraum 
{
	import away3d.cameras.Camera3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.materials.BitmapMaterial;
	import away3d.materials.ColorMaterial;
	import away3d.primitives.Plane;
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.media.Camera;
	
	import gs.TweenMax;
	
	/**
	 * ...
	 * @author Kai Reinhardt
	 */
	public class PlaneHandler extends Sprite
	{
		private var bitmapSource : BitmapResolver;
		private var bitmapTarget : BitmapResolver;
		private var xTiles : int;
		private var yTiles : int;
		private var tileWidth : int = 95;
		private var tileHeight : int = 49;
		private var bitmapSourceReady : Boolean = false;
		private var bitmapTargetReady : Boolean = false;
		private var tilePlane : Plane;
		private var frontMaterial : BitmapMaterial;
		private var backMaterial : BitmapMaterial;
		
		private var planeArray : Array;
		
		private var view : View3D;
		private var scene : Scene3D;
		private var camera : Camera3D;
		
		
		public function PlaneHandler(input:BitmapData, output: BitmapData, xTiless:int, yTiless:int) 
		{
			
			trace("PlaneHandler called : input.width: "+input.width+ " output.width: "+output.width);
			
			xTiles = xTiless;
			yTiles = yTiless;
			
			planeArray = [];
			
			bitmapSource = new BitmapResolver();
			bitmapTarget = new BitmapResolver();
			bitmapSource.addEventListener("bitmapsReady", triggerBothReady);
			bitmapTarget.addEventListener("bitmapsReady", triggerBothReady);
			bitmapSource.resolve(input, xTiles, yTiles);
			bitmapTarget.resolve(output, xTiles, yTiles);

			
		}
		
		private function triggerBothReady(ev:Event):void
		{
			
			if (ev.target == bitmapSource) {
				bitmapSourceReady = true;
			}
			if (ev.target == bitmapTarget) {
				bitmapTargetReady = true;					
			}
			
			createPlanes();
			
		}
		
		private function createPlanes ():void
		{
						
			if ( bitmapSourceReady == true && bitmapTargetReady == true ) {
				
				view = new View3D();
				scene = new Scene3D(); 

				for (var i: int = 0; i < yTiles; i++)
				{
				
					for (var o:int = 0; o < xTiles; o++)
					{
						
						frontMaterial = new BitmapMaterial(bitmapSource.BitmapArray[i][o],{debug:true});
						backMaterial = new BitmapMaterial(bitmapTarget.BitmapArray[i][o],{debug:true});
						
						// dummymaterialien für den funktionstest
						var cmf : ColorMaterial = new ColorMaterial(0xFF00FF);												
						var cmb : ColorMaterial = new ColorMaterial(0x00FF00);
						
						tilePlane  = new Plane( {x: o*tileWidth, y: i*tileHeight, width:tileWidth, height:tileHeight, segments: 2, segmentsW:2,segmentsH:2, material:frontMaterial, back:backMaterial , bothsides:true, yUp:true } );
						tilePlane.rotationX = 90;
						tilePlane.x = o * tileWidth;
						tilePlane.y = i * tileHeight;
						tilePlane.z = 0;
						
						view.scene.addChild(tilePlane);
						
						planeArray.push(tilePlane);
						
					}
				
				}
				
				view.x = 122;
				view.y = 626;
				
				addChild(view);
				addEventListener(Event.ENTER_FRAME, renderer);
				
				//movePlanes();
			}
			
		}
		
		private function renderer (ev:Event):void
		{
		
			view.render();
			
		}
		private function resetAll():void
		{
			
			removeEventListener(Event.ENTER_FRAME, renderer);
			
			for ( var p : int = 0; p < planeArray.length; p++)
			{
				
				view.scene.removeChild(planeArray[p]);
				
			}
			
			removeChild(view);
			
			dispatchEvent(new Event("tranisitionComplete"));
		}
		
		private function movePlanes():void
		{
		
			for ( var p : int = 0; p < planeArray.length; p++)
			{
				if(p< planeArray.length-1){
					TweenMax.to(planeArray[p], 1, { rotationY:180, delay: Math.random()*1 } );
				}else {
					TweenMax.to(planeArray[p], 1, { rotationY:180, onComplete:resetAll } );
				}
			}
			
		}
		
	}

}
Das führt zum Error

Code:
TypeError: Error #2007: Parameter bitmap darf nicht 'null' sein.
    at flash.display::Graphics/beginBitmapFill()
    at flash.display::Graphics/beginFillObject()
    at flash.display::Graphics/drawGraphicsData()
    at away3d.core.render::AbstractRenderSession/renderTriangleBitmapF10()[H:\Classes\AS3\away3d\core\render\AbstractRenderSession.as:674]
    at away3d.materials::BitmapMaterial/renderTriangle()[H:\Classes\AS3\away3d\materials\BitmapMaterial.as:625]
   ...
Hat irgendwer eine Ahnung was hier schief läuft?

Vielen Dank
echo
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 01-12-2009, 16:21   #2 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 192
trace dir mal immer bitmapSource.BitmapArray[i][o] mit i und o aus und schau mal ob da überhaupt was drinsteckt
Plopsi ist offline   Mit Zitat antworten
Alt 01-12-2009, 16:56   #3 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
das wars! ich hab den RowArray in der inneren for schleife neu gemacht. was fürn schwachsinn. der gehört natürlich in die äußere!
__________________

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PV3D - BitmapMaterial segmentierung taymless 3D 5 16-06-2009 13:22
3d text in away3d flasher_gordon 3D 0 23-03-2009 09:04
Performance Problem in Papervision 3D mit BitmapMaterial Taschkin 3D 4 03-02-2009 10:04
QuadrantRenderEngine schaltet von BitmapMaterial auf WireMaterial um Taschkin 3D 6 19-12-2008 15:11
away3D: Shadingmöglichkeiten für MovieMaterial? jacquesr 3D 2 01-09-2008 15:42


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele