| INDEX |

RADIOHEADのアレ( RA DIOHEA_D / HOU SE OF_C ARDS – Google Code )を僕もやってみた。データの説明とかあまり見てないので色のデータが??だけど、とりあえず僕のところにもトムヨーク増やしてみました。

BitmapData の setPixel32() です。

それにしても重い…。しばらく回しているとろくろ首にみえてきた…。もっといろいろあそんでみたい。

追記
なんだか、note.xさんMASDAさん、からリンクを張っていただいて恐縮しております。僕のサンプルは、frocessingのテストでつくってたやつなので、ソースを上げておくことにしました。以下ソースです。

 
package
{
  import flash.display.MovieClip;
  import flash.display.StageQuality;
  import org.libspark.thread.Thread;
  import org.libspark.thread.EnterFrameThreadExecutor;
  
  [SWF(width=425, height=600, frameRate=30, backgroundColor=0x000000)]
  public class TestPlot extends MovieClip
  {
    public function TestPlot()
    {
      stage.quality   = StageQuality.LOW;
      Thread.initialize(new EnterFrameThreadExecutor());
      new TestPlotThread(this).start();
    }
  }
}
 
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.filters.BlurFilter;
import flash.net.URLRequest;
import flash.geom.Point;
import flash.errors.IOError;
 
import org.libspark.thread.Thread;
import org.libspark.thread.threads.net.URLLoaderThread;
 
import frocessing.core.F5BitmapData3D;
import frocessing.geom.FNumber3D;
import frocessing.math.FMath;
 
class TestPlotThread extends Thread
{
  private var _target:Sprite;
  private var fg:F5BitmapData3D;
  
  var w:Number = 425;
  var h:Number = 600;
  
  var dataloader:URLLoaderThread;
  var vertexs:Array;
  var colors:Array;
  
  public function TestPlotThread( target:Sprite )
  {
    _target = target;
    fg = new F5BitmapData3D( w, h, false, 0x01000000 );
    _target.addChild( new Bitmap( fg.bitmapData, "auto", true  ) );
  }
  
  override protected function run():void
  {
    var datauri:String = "1.csv";
    dataloader = new URLLoaderThread(new URLRequest(datauri))
    dataloader.start();
    dataloader.join();
    
    next(setup);
    
    error(IOError, errorHandler);
    error(SecurityError, errorHandler);
  }
  
  protected function setup():void
  {
    var dats:Array = dataloader.loader.data.split("\r\n");
    
    vertexs = [];
    colors  = [];
    var len:int = dats.length;
    var d:Array;
    var r:int;
    var g:int;
    for ( var i:int; i < len; i++ )
    {
      d = dats[i].split(",");
      r = Math.min( 0xff, (int(d[3]) + 50) );
      g = Math.min( 0xff, (int(d[3]) + 100) );
      vertexs[i] = new FNumber3D( Number(d[0]), Number(d[1]), Number(d[2]) );
      colors[i]  = r << 16 | g << 8 | 0xff;
    }
    
    fg.background( 0, 0.2 );
    fg.strokeAlpha = 0.5;
    
    next(draw);
  }
  
  var blurfilter:BlurFilter = new BlurFilter( 4 );
  var zp:Point = new Point();
  var camera_z:Number = 100;
  var _pan:Number = 0;
  var _pth:Number = 0;
  
  protected function draw():void
  {
    fg.bitmapData.applyFilter( fg.bitmapData, fg.bitmapData.rect, zp, blurfilter );
    fg.beginDraw();
    
    camera_z += ( 100 + _target.mouseY  - camera_z ) * 0.5;
    _pan += ( -FMath.radians( _target.mouseX - w/2 )*1.5 - _pan  ) * 0.2;
    _pth += ( -FMath.radians( _target.mouseY - h/2 )*0.05 - _pth ) * 0.2;
    
    fg.camera( w/2, h/2, camera_z );
    fg.translate( w/2, h/4, 0);
    
    fg.rotateY( _pan );
    fg.rotateX( _pth );
    
    var len:int = vertexs.length;
    var vt:FNumber3D;
    for ( var i:int = 0; i < len ; i++ )
    {
      fg.strokeColor = colors[i];
      vt = vertexs[i];
      fg.pixel( vt.x, vt.y, vt.z );
    }
    
    fg.endDraw();
    
    next(draw);
  }
  
  private function errorHandler(e:IOError, t:Thread):void
  {
    trace("Thread Error.");
    trace(e.getStackTrace());
    next(null);
  }
}

いい加減、きれいにソースを貼ることを考えなくちゃいけない…と思いました。

| INDEX |