Difference between revisions of "3D Space Example.as"

From Organic Design wiki
(Import oldest version)
(typo in imported old sort)
Line 51: Line 51:
 
debug.htmlText = msg + '</font>';
 
debug.htmlText = msg + '</font>';
  
 +
if (0) {
 
// Sort buffer by Z and synchronise rendering levels
 
// Sort buffer by Z and synchronise rendering levels
 
for ( var i = 0; i < balls.length-1; i++ ) {
 
for ( var i = 0; i < balls.length-1; i++ ) {
Line 67: Line 68:
  
 
}
 
}
 
+
}
 
// oldest z-buff sort
 
// oldest z-buff sort
i = 0;
+
for ( var i = 0; i < n-1; i++ ) {
while ( i < n-1) {
+
maxz = balls[i].az
maxz = zbuff[i].z
 
 
maxp = i;
 
maxp = i;
j = i+1;
+
for ( var j = i + 1; j < n; j++ ) {
while (n>j) {
+
z = balls[j].az;
z = zbuff[j].z;
+
if ( z > maxz ) { maxz = z; maxp = j; }
if (z>maxz) { maxz = z; maxp = j; }
 
++j;
 
 
}
 
}
 
if ( maxp != i ) {
 
if ( maxp != i ) {
zbuff[i].swapDepths( zbuff[maxp] );
+
balls[i].swapDepths( balls[maxp] );
iname = zbuff.maxp;
+
iname = balls[i]._name;
zbuff.maxp = this.iname;
+
balls[i] = balls[maxp];
 +
balls[maxp] = iname;
 
}
 
}
++i;
 
 
}
 
}
  

Revision as of 07:13, 20 March 2006

  1. include "Space.as"


// Instantiate a new 3D-space //createEmptyMovieClip( 'test', 1 ); //initialiseSpace( test ); //test._x = width/2; //test._y = height/2;

// testing z-ordering algorithm var balls = []; for ( var i = 0; i < 5; i++ ) { attachMovie( 'ball', 'ball'+i, i ); o = balls[i] = _root['ball'+i]; j = i + 1; r = (j & 1) ? 0xff : 0; g = (j & 2) ? 0xff : 0; b = (j & 4) ? 0xff : 0; c = new Color(o); c.setTransform( { ra:r, ga:g, ba:b } ); }


function byDepth( a, b ) { return a.getDepth() < b.getDepth(); }

// Per frame function reduce() { now = new Date(); time = now.getTime(); //if (_root.ctr++ < 2) // for ( var i = 0; i < allSpaces.length; i++ ) // if ( allSpaces[i].active ) allSpaces[i].frame();

balls.sort( byDepth );

// testing z-ordering algorithm a += 0.01; c = 2*Math.PI/5; for ( var i = 0; i < balls.length; i++ ) { obj = balls[i]; b = a + c * i; obj._x = width/2+Math.sin(b)*width/3; obj.az = obj._xscale = obj._yscale = 50+Math.cos(b)*25; obj._y = height/2; }

msg = ""; for ( var i = 0; i < balls.length; i++ )

   msg = msg + i + ': '+balls[i].getDepth()+' : '+balls[i]._name+'
';

debug.htmlText = msg + '';

if (0) { // Sort buffer by Z and synchronise rendering levels for ( var i = 0; i < balls.length-1; i++ ) { obj = balls[i]; var maxz = obj.az, maxp = i; for ( var j = 0; j < balls.length; j++ ) if ( balls[j].az > maxz ) { maxz = balls[j].az; maxp = j; } if ( maxp != i ) { obj.swapDepths( maxp ); //balls[i] = balls[maxp]; //balls[maxp] = obj; } }

} } // oldest z-buff sort for ( var i = 0; i < n-1; i++ ) { maxz = balls[i].az maxp = i; for ( var j = i + 1; j < n; j++ ) { z = balls[j].az; if ( z > maxz ) { maxz = z; maxp = j; } } if ( maxp != i ) { balls[i].swapDepths( balls[maxp] ); iname = balls[i]._name; balls[i] = balls[maxp]; balls[maxp] = iname; } }

createTextField( 'debug', 100, 0, 0, width, height ); with ( debug ) { selectable = true; border = false; multiline = true; wordWrap = true; html = true; }

// Test object //test.create( [ 0, 0, , 'torus', 5, 200, 5000 ] );