Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-09-2006, 09:25   #1 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
[stuff] filtered cubic 3D

tach zusammen,


und weil es so ´n spaß macht...
hier ein kleiner 3D Würfel, gescriptet, mit so ein paar Filtern
versetzt

ansehen

Hier noch eine Variation - das ganze flirrt ein wenig mehr:

ansehen


Und hier mal was zum nachvollziehen und rumspielen:

Code:



/////////////////////////////////////////////////////
//  flat cubic burner
//  author : frank reitberger
//  site : http://www.dasprinzip.com
//  copyright 2006
/////////////////////////////////////////////////////


// --------------------------------------------------------------------------------------------------


stop();


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// import flash filter classes
///////////////////////////////////


import flash.display.BitmapData;
import flash.filters.*;
import flash.geom.*;



// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// setup firecracker global vars
///////////////////////////////////


var p:Object = new Object();

p.points = [
			{ x: -100, y: -100, z: -100 },
			{ x: +100, y: -100, z: -100 },
			{ x: +100, y: -100, z: +100 },
			{ x: -100, y: -100, z: +100 },
			{ x: -100, y: +100, z: -100 },
			{ x: +100, y: +100, z: -100 },
			{ x: +100, y: +100, z: +100 },
			{ x: -100, y: +100, z: +100 }];
			
var angle_x:Number = 0.01;
var angle_y:Number = 0.0075;
var angle_z:Number = 0.005;

var bindings:Array = new Array([0,1,0,1],[1,2,1,2],[2,3,2,3],[3,0,3,0],[4,5,4,0],[5,6,5,1],[6,7,6,2],[7,4,7,3]);


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// configure canvas
///////////////////////////////////

function initStage() {
	
	_root.efxStage = new BitmapData(Stage.width, Stage.height, true, 0x00FFFFFF);
	
	_root.createEmptyMovieClip("efxClip", _root.getNextHighestDepth());
	_root["efxClip"].attachBitmap(_root.efxStage, _root.getNextHighestDepth());	

	for ( var i:Number = 0; i<9 ;i++ ) {
		_root.createEmptyMovieClip("dot"+i,_root.getNextHighestDepth());
	}
	
	paint();
}



// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// paint flat cubic burner
///////////////////////////////////

function paint() {
		
	_root.onEnterFrame = function() {
	
		_root.efxStage.colorTransform(_root.efxStage.rectangle, new ColorTransform(1, 1, 1, 1, 1, -1, -1,-4));			
		_root.efxStage.applyFilter(_root.efxStage, _root.efxStage.rectangle, new Point(0, 0), new BlurFilter(2, 2, 2));	
		
		for (i=0; i<8; i++) {

			_root["dot"+i]._x = p.points[i].x+200;
			_root["dot"+i]._y = p.points[i].y+200;
			_root["dot"+i].lineStyle(1, 0xffffff, 100);
			_root["dot"+i].moveTo(p.points[bindings[i][0]].x+200,p.points[bindings[i][0]].y+200);
			_root["dot"+i].lineTo(p.points[bindings[i][1]].x+200,p.points[bindings[i][1]].y+200);				
			_root["dot"+i].moveTo(p.points[bindings[i][2]].x+200,p.points[bindings[i][2]].y+200);
			_root["dot"+i].lineTo(p.points[bindings[i][3]].x+200,p.points[bindings[i][3]].y+200);
			

			_root.efxStage.draw(_root["dot"+i]);
			_root["dot"+i].clear();

		}
		
		
		
		for ( var i:Number = 0; i<8 ;i++ ) {
			
			var px:Number = p.points[i].x;
			var py:Number = p.points[i].y;
			var pz:Number = p.points[i].z;

            // Rotation um x-Achse
            p.points[i].y = py*Math.cos(angle_x)-pz*Math.sin(angle_x);
            p.points[i].z = py*Math.sin(angle_x)+pz*Math.cos(angle_x);

            py = p.points[i].y;
            pz = p.points[i].z;

            // Rotation um y-Achse
            p.points[i].x = px*Math.cos(angle_y)+pz*Math.sin(angle_y);
            p.points[i].z =-px*Math.sin(angle_y)+pz*Math.cos(angle_y);

            px = p.points[i].x;

            // Rotation um z-Achse
            p.points[i].x = px*Math.cos(angle_z)-py*Math.sin(angle_z);
            p.points[i].y = py*Math.cos(angle_z)+px*Math.sin(angle_z);
			
			
        }

        paint();
	}
}


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// init
///////////////////////////////////

initStage();
Viel Spaß damit
pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 06-09-2006, 10:04   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Sieht sehr schick aus, allerdings röchelt meine CPU gaanz böse, schätze mal 10 FPS, da kann man es nicht genießen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 06-09-2006, 10:39   #3 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
hmmm...

wieviel FPS hast du denn, wenn du mein script ohne
das zuschalten des blur-filters, also nur mit dem color-
transform laufen läßt?

?
pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 06-09-2006, 10:51   #4 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Sieht schön aus, aber auch hier leider sehr langsam. Wieso rufst du in onEnterFrame noch einmal paint() auf?
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 06-09-2006, 10:55   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Hmm, in der IDE läufts relative angenehm, der Blurfilter halbiert aber die Performance in etwa.

Die Verschachtelung von paint und onEnterFrame ist lustig, aber einfacher hättest du es mit
PHP-Code:
_root.onEnterFrame paint
und paint dann ohne onEnterFrame und weiteren paint Aufruf.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 06-09-2006, 10:58   #6 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
paint()

an dieser stelle ist natürlich firlefanz...
bitte rausnehmen und so tun als hätte es da
nie gestanden...

pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 06-09-2006, 22:39   #7 (permalink)
Knopfmaler
 
Benutzerbild von Aerks
 
Registriert seit: Nov 2004
Ort: Essen
Beiträge: 227
Ganz lustig. Ein paar Sachen sind mir aber aufgefallen:

Neben der schon angesprochenen paint-Geschichte:

Code:
_root.efxStage = new BitmapData(Stage.width, Stage.height, true,0x00FFFFFF);
--------------------------------------------------------------^

Transparenz ist bei diesem Beispiel sinnlos, braucht du ja eh nicht (weil Hintergrund komplett schwarz) und es geht dann auch (vermutlich) etwas schneller. Also lieber auf false setzen und den Hintergrund schwarz machen.


Code:
_root.efxStage.applyFilter(_root.efxStage, _root.efxStage.rectangle, new Point(0, 0), new BlurFilter(2, 2, 2));	
-----------------------------------------------------------------------------------------------------------^
Die Blur-Qualität ist meiner Meinung nach zuviel. Würde mal mit 1 probieren, damit das ganze etwas flotter läuft.

Eine Kleinigkeit: In jedem Frame erzeugst du eine neue Blur-Filer-Instanz und einen neuen "Point" Muss ja nicht sein. Eins reicht ja. Dasselbe für ColorTransform.


Was ich nicht verstehe: Wieso wird für jede Fläche (bzw. 2 Linien) ein einzelner MovieClip benötigt? Hat das einen Grund?
Man kann doch alles in einen Clip reinmalen und danach den ganzen Kram mit .draw in die Bitmap malen.
Geht so vielleicht auch einen Tick fixer. Wirkt in dieser Form fast wie ein Flash4 Überbleibsel.

Viele Gruesse
=:] Aerks
__________________
______________________________________________
www.rgblaster.de
Aerks ist offline   Mit Zitat antworten
Alt 07-09-2006, 07:34   #8 (permalink)
liebt Skorpionin
 
Benutzerbild von Skorpion
 
Registriert seit: Apr 2003
Beiträge: 1.258
@Aerks: da wollte uns doch der gütige pwdVergesser nur eine kleine Freude machen und du schiesst ihm eine volle Breitseite rein... aua. Aber deine Argumente sind stichhaltig. Noch mehr aua.

@pwdVergesser: bin mir zwar über Sinn und Unsinn deines Scripts nicht ganz im klaren, aber das Ergebnis sieht interessant aus. Finde solche Experimente spannend. Danke für die Anregung.
Skorpion ist offline   Mit Zitat antworten
Alt 07-09-2006, 08:28   #9 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
@Aerks
Zitat:
Transparenz ist bei diesem Beispiel sinnlos, braucht du ja eh nicht (weil Hintergrund komplett schwarz) und es geht dann auch (vermutlich) etwas schneller. Also lieber auf false setzen und den Hintergrund schwarz machen.
...der Hintergrund hat einen Verlauf - evtl. nicht auf deinem Monitor...

Zitat:
Eine Kleinigkeit: In jedem Frame erzeugst du eine neue Blur-Filer-Instanz und einen neuen "Point" Muss ja nicht sein. Eins reicht ja. Dasselbe für ColorTransform.
...hast recht - muß nicht - werde ich mal ändern.


Zitat:
Was ich nicht verstehe: Wieso wird für jede Fläche (bzw. 2 Linien) ein einzelner MovieClip benötigt? Hat das einen Grund?
Man kann doch alles in einen Clip reinmalen und danach den ganzen Kram mit .draw in die Bitmap malen.
Geht so vielleicht auch einen Tick fixer. Wirkt in dieser Form fast wie ein Flash4 Überbleibsel.
..."Mensch Thoooooorsten" ...ist doch nur mal eben als Flash-Filter-Spaß gedacht.
Zum ansehen...

Sicherlich kann man das auch alles in einem Clip malen usw. ...
man kann auch drüber streiten ob man _root verwenden sollte (sollte man
nicht) ... aber das mache ich dann wenn ich nicht "mal eben" was zum gucken
poste...

@skorpion

Zitat:
@pwdVergesser: bin mir zwar über Sinn und Unsinn deines Scripts nicht ganz im klaren, aber das Ergebnis sieht interessant aus. Finde solche Experimente spannend. Danke für die Anregung.
Danke danke - denn so war es gedacht - als Anregung...


pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 07-09-2006, 09:36   #10 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
Ruckelt bei mir im Browser leider auch enorm.
Sowohl im Firefox als auch im IE mit dem neuesten Player.
Habe mir dann die SWF mal runtergeladen und von lokal getestet. Da läuft es dann super flüssig

Bis dann,
-querkopf-
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 07-09-2006, 13:04   #11 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Eine flüssigere Variante:
http://je2050.de/showroom.php?file=fadecube

-- Auch lustig: Icecube

Dazu ein wenig den Code verändert, also lokale Variablen benutzt und die Technik auch geändert was die ganzen MovieClips da usw. angeht.

PHP-Code:
/////////////////////////////////////////////////////
//  flat cubic burner
//  author : frank reitberger
//  site : http://www.dasprinzip.com
//  copyright 2006
/////////////////////////////////////////////////////

import flash.display.BitmapData;
import flash.filters.*;
import flash.geom.*;

var 
points: Array = [
            { 
x: -100y: -100z: -100 },
            { 
x: +100y: -100z: -100 },
            { 
x: +100y: -100z: +100 },
            { 
x: -100y: -100z: +100 },
            { 
x: -100y: +100z: -100 },
            { 
x: +100y: +100z: -100 },
            { 
x: +100y: +100z: +100 },
            { 
x: -100y: +100z: +100 }];
            
var 
angle_x:Number 0.01;
var 
angle_y:Number 0.0075;
var 
angle_z:Number 0.005;

var 
bindings:Array = new Array([0,1,0,1],[1,2,1,2],[2,3,2,3],[3,0,3,0],[4,5,4,0],[5,6,5,1],[6,7,6,2],[7,4,7,3]);

var 
wNumber Stage.width;
var 
hNumber Stage.height;

var 
screenBitmapData = new BitmapDatawhfalse);
this.attachBitmapscreen);

var 
bufferMovieClip this.createEmptyMovieClip'__buffer__'0xff );
buffer._visible false;

var 
sclNumber .25;

var 
fxMatrix = new Matrix;
fx.= ( scl ) / w;
fx.= ( scl ) / h;
fx.tx = -scl;

var 
dampColorTransform = new ColorTransform.99.91.991000);

var 
originPoint = new Point;

var 
filterBlurFilter = new BlurFilter22);

this.onEnterFrame = function( Void ): Void
{
    
screen.drawscreenfxdamp );
    
screen.applyFilterscreenscreen.rectangleoriginfilter );
    
    for ( var 
iNumber 08i++ )
    {
        var 
bi: Array = bindings];
        
        
buffer.clear();        
        
buffer.lineStyle10xffffff100 );
        
        
buffer.moveTopointsbi] ].200pointsbi] ].200 );
        
buffer.lineTopointsbi] ].200pointsbi] ].200 );                
        
buffer.moveTopointsbi] ].200pointsbi] ].200 );
        
buffer.lineTopointsbi] ].200pointsbi] ].200 );
        
        
screen.drawbuffer );
    }
        
    for ( var 
iNumber 08i++ )
    {
        var 
pointObject points];
        
        var 
px:Number point.x;
        var 
py:Number point.y;
        var 
pz:Number point.z;
        
        var 
sin: Function = Math.sin;
        var 
cos: Function = Math.cos;
        
        var 
caxNumber cosangle_x );
        var 
saxNumber sinangle_x );
        var 
cayNumber cosangle_y );
        var 
sayNumber sinangle_y );
        var 
cazNumber cosangle_z );
        var 
sazNumber sinangle_z );

        
point.py cax pz sax;
        
point.py sax pz cax;

        
py point.y;
        
pz point.z;

        
point.=  px cay pz say;
        
point.= -px say pz cay;

        
px point.x;

        
point.px caz py saz;
        
point.py caz px saz;
    }

__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/

Geändert von [je] (07-09-2006 um 13:07 Uhr)
[je] ist offline   Mit Zitat antworten
Alt 07-09-2006, 13:52   #12 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
auch cool - der farbige blur gefällt mir auch sehr gut.

aber auch hier verlangsamt sich die drehung des cubes
nach ca. eineinhalb "selbstumdrehungen" um 50%...

Und der Icecube ist bei mir performance-technisch widerum
leider ein killer...

pwd
__________________
Blog/Lab Xing

Geändert von pwdVergesser (07-09-2006 um 13:58 Uhr)
pwdVergesser ist offline   Mit Zitat antworten
Alt 07-09-2006, 14:07   #13 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Thumbs up

@pwd: du weißt ja das es auf meinem rechner mal so gar nicht läuft. im firefox macht es kaum sinn.. naja. aber weiß ja von deinem rechner noch wie es ausehen soll

@je: wow, der totale performance schuub. deine variante kann ich mir fast problemlos sogar im ff anschauen! begeistert bin

grüße, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 07-09-2006, 14:17   #14 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
obwohl das ja nur die konsequenten umsetzungen
der anmerkungen von Aerks sind...

pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 07-09-2006, 14:29   #15 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.366
Zitat:
Zitat von pwdVergesser
obwohl das ja nur die konsequenten umsetzungen
der anmerkungen von Aerks sind...
hab ich ja gelesen... aber [je] hats halt umgesetzt. der performance schuub ist krass. aerks schrieb ja "Geht so vielleicht auch einen Tick fixer.".. also bei mir liegen da welten zwischen. kann es dir gerne morgen zeigen

cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar 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 18:27 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele