Processing

グラフィック系Java Appletを簡単に作ることのできるProcessingという言語のベータ版が公開されています。ウェブ・グラフィック用のツールとしてはFlashがメジャーですが、Flashベクター・グラフィックは得意なものの、三次元データの扱いが難しかったり、ピクセル・グラフィックが使えなかったり、けっこう制約もありました。Processingでは基本的にJava Appletでできるものはすべてできますし、アカデミア(MIT Media Lab)から出てきたツールだというのが僕には好印象でした。 グラフィック・アートをやるひとが多いみたいですが、コンピュータと対戦できるチェス・プログラムを作った人もいますし、AJAX的にビジネス用途に使うのも良いかもしれませんね。 ==== 下のグラフィックはProcessingのデモプログラムとして用意されている、マウス操作によって回転するカラーキューブです。このくらいのものであればプログラム本体は本当に短いのです。

見るにはJavaが必要です。

ソースコードはこんなかんじ。

// RGB Cube
// by fry <http://benfry.com>

// The three primary colors of the additive color model are red, green, and blue.
// This RGB color cube displays smooth transitions between these colors. 

// Created 25 October 2002

float xmag, ymag = 0;
float newXmag, newYmag = 0; 
 
void setup() 
{ 
  size(200, 200, P3D); 
  noStroke(); 
  colorMode(RGB, 1); 
} 
 
void draw() 
{ 
  background(0.5, 0.5, 0.45);
  
  pushMatrix(); 
 
  translate(width/2, height/2, -30); 
  
  newXmag = mouseX/float(width) * TWO_PI;
  newYmag = mouseY/float(height) * TWO_PI;
  
  float diff = xmag-newXmag;
  if (abs(diff) >  0.01) { xmag -= diff/4.0; }
  
  diff = ymag-newYmag;
  if (abs(diff) >  0.01) { ymag -= diff/4.0; }
  
  rotateX(-ymag); 
  rotateY(-xmag); 
  
  scale(50);
  beginShape(QUADS);

  fill(0, 1, 1); vertex(-1,  1,  1);
  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(1, 0, 1); vertex( 1, -1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);

  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);
  fill(1, 0, 1); vertex( 1, -1,  1);

  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(0, 0, 0); vertex(-1, -1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);

  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(0, 1, 1); vertex(-1,  1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);
  fill(0, 0, 0); vertex(-1, -1, -1);

  fill(0, 1, 0); vertex(-1,  1, -1);
  fill(1, 1, 0); vertex( 1,  1, -1);
  fill(1, 1, 1); vertex( 1,  1,  1);
  fill(0, 1, 1); vertex(-1,  1,  1);

  fill(0, 0, 0); vertex(-1, -1, -1);
  fill(1, 0, 0); vertex( 1, -1, -1);
  fill(1, 0, 1); vertex( 1, -1,  1);
  fill(0, 0, 1); vertex(-1, -1,  1);

  endShape();
  
  popMatrix(); 
}