2010年8月11日水曜日

VideoCube 7

以前、ブロガー諸氏のブログを書くためのツールに関する記事を読んだことがあった。そのときいろいろ探して結局断念した記憶がある。経緯は忘れた。だが結果がそうであるのだから、きっと何か、おそらく自分で作った方が的な考えでボツになったのだろうから、今回またちょっとそんな(ツールほしい)気になったからといって、どうにかするつもりはない。だから当面、今まで通りBloggerの素晴らしい標準エディタにお世話になろうと思う。

OpenOfficeには色々書いたが、読み返すと疲れることが多いので、ところどころ割愛していく。またどこで区切るかは、区切りを入れてなかったのでまったくの適当。

Faceについて見て行く。

わかるところから。

def animate = bind z > 0 and error on replace old {
if (animate != old) {
if (animate) {
animation.play()
} else {
animation.pause()
}
}
}

普通変数というと、何か状況に応じて設定されて、後で条件判定されたり、計算結果として保存されたりするものだが、このanimateという変数は、単にon replaceを掛けるための物と言って良いと思う。つまりz>0 and errorが変化したらplay()かpause()をしたいのだ。一見animateのif文は冗長にも見えるがこれはしょうがないところか。bindにしろ、on replaceにしろ、変化点で処理が出来るのは基本的好都合。すばらしい。

createで Faceの要素が作られるようだが、大まかには、
Group
|-- Polygon( PerspectiveTransform )
|-- Group( PerspectiveTransform )
|-- Rectangle
|-- Circle
|-- Circle
|-- Circle
|-- Circle
|-- Text
|-- Line
|-- Line
|-- Arc
|-- MediaView( PerspectiveTransform )
のようになっていて、GroupとMediaViewには、Faceを生成する際に指定されたPointによる PerspectiveTransformがeffectにより対応付けられる。Polygonの場合は、Polygon.pointsというポリゴン自身の頂点自体にPerspectiveTransformの頂点がbindされる。もちろんPolygonの頂点は4つ。これで単純に疑問に思うのは、最初のGroupのeffectにPerspectiveTransformしていない点。おそらくPolygonにうまく利かないのかもしれないが、試しに実行してみればわかるだろう。ただPerspectiveTransformはもっと複雑な鳥瞰による模型の場合、例えば部屋などで、部屋全体にPerspectiveTransformを利かせられないとしたら残念である。ただ私はまったくその辺のCGの基本概念がなってないので、御託を並べてるにすぎない。

Textはいいとして、円が4つ?線が2つ?これはなんだろう。そしてArc。これはくるくるの正体だからいい。もう一度実行して確認してみよう。なるほど、円が4つで二重線のような枠線になっているのか。直線は十字に引かれてる。Rectangleは面と同じ四角。非表示にすると面は真っ黒になるが、四角は保たれる。これはどこから来ているのか? 色がforeground変数にbindして設定してある。代入でも良いと思った瞬間なるほど、bindなら後で色変更を追加したとき、foregroundを変更すれば、全部自動的に変わるわけだ。この辺は非常に分かりやすい典型的なbindの効果かな。素晴らしい。

Lineもstrokeにforegroundをbindしている。が、どうしてTextやRectangleはfillでLineはstrokeなんだろう。

ところでcontent:にRectangleやCircleなどをどやどや入れて行くのは良いが、後からそのインスタンスにアクセスするにはどうすれば良いのだろうか。初めから変数に入れておけば良いのだろうが、それでは面倒だから、何か直接アクセスできる方法がきっとあるのではないかと思われる。

0 件のコメント:

コメントを投稿