■
旧バージョンでは引数が2つ(横幅,縦幅)のみだったのですが.バージョンアップして,3つの引数を取れるようになったんだって.折角だから,少し適当に訳してみました.
英語サイトのリファレンス
size() \ Language (API) \ Processing 3+
sizeの第3引数はレンダリングエンジンを選択するものです.もしあなたがwebで使う3次元の形を描きたいのであればP3Dを使い,OpenGLのプログラムとしてエクスポートしたいのであれば,OpenGLを引数に選びましょう.
- P2D(Processing 2D):Java 1.1にサポートされた2Dレンダリングです.
- P3D :webで早い3Dレンダリングです.
- JAVA2D:デフォルトのレンダリング,全体的に高いクオリティであるがP2Dよりも遅いです.
- OPENGL:もしOpenGL Graphic Cardがインストールされていれば,OpenGLのハードウェア加速器と調和して速度を高める事が出来ます.
もし,あなたが,ピクセルの操作(get()やblend()といったメソッドを使ったり,pixels[]配列を操作する)をするのであれば,P3D(同様にP2D)はデフォルト設定であるJAVA2DやOPENGL設定よりもより軽快に動きます.同様に,多くのイメージを処理する時や,ビデオの再生をする時は,P3Dはしばしば早くなるでしょう.立て幅と横幅の最大値は,あなたのOSによって制限されます.そして,それは大抵あなたの実際のスクリーンの縦横値と同じです.いくつかのマシンでは,単純にあなたの現在のスクリーンのピクセルの数です.つまり,800x600の解像度のスクリーンを使っている場合,size(1600,300)を利用する事が可能という事を意味しています.
この変更により,あなたは自分自身が求めるものを見つけるまで,いろいろなサイズやレンダリングモデルを試みるべきである.また,もしあなたがより大きなサイズが必要になったならば,non-visual drawing surfaceを作り出す,createGraphicsを用いましょう.
とのことです.じゃぁ,早速試してみようじゃない.因に,おいらのiBookG4のビデオカードはATI Mobility Radeon 9200(VRAM32M)です.
文末につけるプログラムを用いて「3次元のキューブ」を描画してみた,まずはP3Dで実行してみたところ,直ぐに描画されてその後もサクサク動く.次にOPENGLでやると,ライブラリーが足りませんって言われる.そこで,文頭に
import processing.opengl.*;
とopenglライブラリーをimportしてみると動いた........が,起動に物凄く時間がかかる...まぁRadeonだから仕方ないのかなぁ〜....動いてしまえばおおきな違いは無い様な感じがする...って,おいらが気づかないだけかな(汗
次に文末の「2次元平面」のプログラムを実行したらJAVA2DとP3Dでは動いたけど,P2Dが動かなかった.なんでだろうね?ただ,この程度だとさほど影響を受けない気がする....
あと,文末のプログラムに
beginShape(QUADS); vertex(50, 50); vertex( 150, 50); vertex( 150, 150); vertex(50, 150); endShape();
beginShapeメソッドを用いています.引数には,頂点をどのように結ぶかを決めます.引数の詳細は以下のリンク先を参照してください.
beginShape() \ Language (API) \ Processing 3+
今回用いたサンプル
3次元キューブ
import processing.opengl.*; float xmag, ymag = 0; float newXmag, newYmag = 0; void setup() { size(200, 200, OPENGL); noStroke(); } void draw() { background(0.5, 0.5, 0.45); pushMatrix(); //translateはローカル座標系の移動です,引数は(x方向,y方向,z方向)です. 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を scale(50); //beginShapeとendShapeの間に頂点を表示し,その間をどのように保管するかのパラメータを引数にとる beginShape(QUADS); vertex(-1, 1, 1); vertex( 1, 1, 1); vertex( 1, -1, 1); vertex(-1, -1, 1); vertex( 1, 1, 1); vertex( 1, 1, -1); vertex( 1, -1, -1); vertex( 1, -1, 1); vertex( 1, 1, -1); vertex(-1, 1, -1); vertex(-1, -1, -1); vertex( 1, -1, -1); vertex(-1, 1, -1); vertex(-1, 1, 1); vertex(-1, -1, 1); vertex(-1, -1, -1); vertex(-1, 1, -1); vertex( 1, 1, -1); vertex( 1, 1, 1); vertex(-1, 1, 1); vertex(-1, -1, -1); vertex( 1, -1, -1); vertex( 1, -1, 1); vertex(-1, -1, 1); endShape(); popMatrix(); }
2D平面
void setup() { size(200, 200, P2D); noStroke(); } void draw() { background(0.5, 0.5, 0.45); beginShape(QUADS); vertex(50, 50); vertex( 150, 50); vertex( 150, 150); vertex(50, 150); endShape(); }