| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| ° 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 } );
}
}
}
}
} 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]
... Vielen Dank echo |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |