« [f5]簡単なtextureを描画できるようにしてみた | MAIN | Spark project 勉強会 #01 いってきました »

RADIOHEADのアレ

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);
	}
}

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

COMMENT+

いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。

TRACKBACK

URL : http://nutsu.com/cgi/mt/mt-tb.cgi/86