[Processing]pointSphereを見てみる

Posted under processing by uechoco on 月曜日 17 3月 2008 at 00 : 00 : 00

 少し前にVimeoにpointSphereという作品が投稿されていたのですが、ソースコードがダウンロードできることに気がついて、少し気になった点があったので、中身を覗いてみました。

 気になった点というのは、

  1. 球の表面上の点はどういう計算で配置したのか(位置を求めたのか)
  2. 球の表面上の点の太さをどのように実現したのか

です。

 中身を見てみると、球の表面上の点の配置はtoxiclibsのgeomutilsに含まれている、Vec3Dクラスを用いているようです。これはいいライブラリですね。Vec3D.randomVector()で適当な方向のベクトルを作り、Vec3D.scaleSelf(r)でベクトルの長さを半径分まで伸ばしています。もし、このライブラリを使わずに、(少しいい加減だけど)球の表面上の点を配置するなら、たとえばこんな方法はどうでしょうか。

Processing:
  1. float px = random(radius);
  2. float pl = sqrt(sq(radius) - sq(px));
  3. float py = random(pl);
  4. float pz = sqrt(sq(pl) - sq(py));
  5. px *= (random(1) <0.5 ? 1 : -1);
  6. py *= (random(1) <0.5 ? 1 : -1);
  7. pz *= (random(1) <0.5 ? 1 : -1);

px < radius

 1行目で、半径以下の範囲で、pxを定めます。

py2 + pz2 = radius2 - px2
pl = √(py2 + pz2) = √(radius2 - px2)

 2行目で、px⊥pyの直角三角形の斜面plを求めます。

py < pl

 3行目で、pl以下の範囲で、pyを定めます。

pl2 = pz2 + py2
pz = √(pl2 - py2)

 4行目で、pzの長さが自ずと定まります。
 5?7行目で、符号の±をランダムにとります。

 一応これで、球の表面上に点を配置できます。結構適当な書き方ですが、数式で考えれば一応あってるはずです。

 さてさて、お次は点の太さの実装方法です。ソースコードを良く見ると、表面上の点はellipse()で描いているようです。普通に考えるとカメラが回転してしまうと、円の描く方向が変わってしまうので、変な風に見えるのですが、このプログラムでは、円を描く前にrotateY()で回転をかけています。どうやら、ビルボードという手法を用いることで、ellipse()でも大丈夫なように調整しているようです。

 ビルボードというのは、2Dの画像を3D空間上でいい感じに表示させる方法の1つで、常にカメラの正面の方向を向くように画像を回転させるテクニックです。「ビルボード 3D」とかで検索すると関連記事が出てくると思います。

 たぶん私だったらビルボードなんてテクニックをすっかり忘れていたので、sphereDetail()で精度を落としてsphere()で球を描いてしまうと思います。sphere()なら、もともとどの方向から見ても球ですから。もちろん、ellipse()に比べたらその描画コストは計り知れませんけれども。

 うまいの人のプログラムはやっぱり参考になりますね


[Processing]海外の大学のprocessing講義資料

Posted under processing by uechoco on 日曜日 16 3月 2008 at 00 : 00 : 00

 ニューヨーク大学の芸術学部(NYU's Tisch School of the Arts)のITP学科(Department of Interactive Telecommunications Program)では、The Nature of Codeという、Processingのプログラミングを通じて自然現象をシミュレーションする授業があります。その授業の講師のDaniel ShiffmanさんのWebサイトには、The Nature of Codeの講義に使われるチュートリアルとその解説が全て掲載されています。

 講義資料というだけあって、分量的にかなりあります。自然現象のシミュレートなので理系的な話がちょくちょく登場するとの、そもそも英語なので、まじめに読もうとすると大変ですが、とても価値のある資料だと思います。Processingで出力したJava Appletとソースコードも掲載されているので、とても参考になります。

 幾何学的なアート作品を作成するときは参考になりますね。

 余談ですが、The Nature of Codeのシラバスの一番下に、成績のつけ方が載っているのですが、

宿題:50%
プロジェクト:30%
出席:20%

と出席点が意外と高いことになんだか親しみを覚えました。


[Processing]鮮やかな色使いがたまらないソースコード付きアート作品集

Posted under processing by uechoco on 土曜日 15 3月 2008 at 00 : 00 : 00

processing.unlekker.net - Sketches and code
http://processing.unlekker.net/

 processinghacks.comなどで知られているMarius Watzさんの、ソースコード付きのアートサンプル集のサイト。鮮やかな色使いの作品がおおくて、ソースコードを読むととても参考になります。ただし、やや古いバージョンのソースコードなので、新しいバージョンのProcessingを使っている人は、適宜自分のバージョンにあったソースコードに置き換えてやる必要があります。ある程度Processingを使い慣れている人なら大丈夫ですかね。

 作品を楽しむだけでも十分満足ですが、せっかくソースコードが公開されているので、他の人のソースコードを読んでみるのはどうでしょうか。(と思ったのですが、ソースコードを読むっていう文化はプログラマ寄りだなぁっと後から気づいたり・・・)


[processing]Vim用のSyntax Highlightファイル

Posted under processing by uechoco on 金曜日 14 3月 2008 at 00 : 00 : 00

 ProcessingのソースコードもVimで開発している人、あるいはVimで開発したい人に朗報。

 Vim用のSyntax Highlight定義ファイルがありました。

Processing - Syntax highlighting for the Processing language : vim online
http://www.vim.org/scripts/script.php?script_id=2115

 VimerはこれでOK。


[雑記]もやもやが晴れてきた

Posted under 雑記 by uechoco on 木曜日 13 3月 2008 at 21 : 06 : 14

 最近の技術に追いついていないから技術を学ぶ、コーディングの腕が未熟だからプログラムを書く、ここ数年は明確な目標もなくただぼんやりとプログラムを書いていたような気もします。

 2月に入って、友人がいいバイト先を見つけてウハウハな話をしてくると、俺が嫉妬をしたようで、2?3月の間はProcessing、Flexを突然はじめてみたりしました。2?3月は、ただ闇雲に新しいことに挑戦して、何がやりたくて新しいことに挑戦したのかを見失っていました。

 [雑記]2008年のうえちょこ@ぼろぐでは、

  • Webサービスを4つ以上作ること
  • CakePHPをがんばること
  • モチベーションの維持

となんともアバウトな目標立てをして、今のところ1つも実現してはいません。

 今日、ある人と話をしていて、自分の今年、来年の方向性が自分の中で少し整理ができたような気がします。

 技術・コーディングはもちろん学んでいくけれども、Web制作のほうも進めていくけれども、自分の見据えている範囲を少し広げてみようかと思います。友人の活躍は聞いていると悔しいけれども、自分のペースでやっていくしかないですね。

 ちょっと気持ちの整理がついた今日でした。

 なんともアバウトな記事w


« 前ページへ次ページへ »

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.