グーローシェーディングが出来たので、エントリー。
デモはこちら
といっても、三点の頂点色をグラデーションで線形補間するやり方がまったく思いつかなかったので、psyark.jp さんのこのエントリーを参考にさせていただきました。というかそのまま使ってます。こんなの良く思いつくなぁ、尊敬。
ちなみにここ一週間くらい、ライブラリちっくに一連の 3D 用クラスをまとめてて、
var scene:Scene3D = new Scene3D(600, 300);
addChild(scene);
scene.addChild3D(new Torus(10, 60, 8, 16));
scene.addChild3D(new Torus(20, 20));
上のやつなんかはこんな感じのコード 4 行で動いてます。ただ、カメラの機能だったり、ライトの位置変更だったり、絶対に欠かせない機能が実装できてないのでダメダメですが。形になるのはいつになるやら。
普段使わないものは、人間忘れていくもので、beginGradientFill の存在をすっかり忘れていました。これを使えばベクターデータでのグーローシェーディングも実現できるのではと、色々試しています。それの失敗作が面白かったのでエントリー。
デモはこちら
キラキラ光ってます。こんなことする予定ではなかったんだけどなぁ。
今回はグーローシェーディング + テクスチャマッピング。同時に適用するとさすがに激重。それでも出来ることは出来ましたので、公開しておきます。
デモはこちら
そういえば Papervision3D 2.0 が出てたので、中身を見てみました。グーローシェーディングほかフォンシェーディングまで新たにサポートされてるみたいです。ただ、テクスチャとの同時適用は多分出来なさげです。実際に試したわけではないので確実では無いですが・・・。実用的な方法での実現が出来ればいいんですが。
1/27 追記:
ShadedMaterial で実現できるようです。今日も迷子さんで詳しく解説されていますので、そちらをご参照ください。
ようやく移植できましたよ、滑らかな曲線が気持ち良いグーローシェーディング。何とか動いてます。これで、ピクセル毎ドット描いてたら、重過ぎてたまらないところ。今でも十分に重いですが、ByteArray 方式に切り替えたおかげで大分マシかな。
デモはこちら
でも、やっぱり実用的ではないですね。こんなの仕事で使ったら重すぎて苦情がきそう。Flash Player の処理速度が馬鹿みたいに上がればいいけど、まだまだ時間は掛かりそう。実用的にしようと思ったら、やっぱりシェーディングは省かないといけないんですね。やるとしても、フラットシェーディングまでかな、PaperVision3D みたいに。まぁ、ほぼ実験みたいなものなので、このまま次はテクスチャマッピングに進みます。
前回はベクターでの実装。でも、これだとグーローシェーディングが絶対無理なので、なんとかビットマップで実装できないものか「ウンウン」うなされながら考えてみました。
最初に考えたのが setPixel() での無理やり実装。かなり重いので要注意。
setPixel() での無理やり実装
出来るのは出来るけど、重すぎる。しかも、描画エリアを制限してもこの程度。これだと無理があるので、ByteArray を使っての実装を考えてみました。
ByteArray を使っての実装
違いがお分かりいただけるでしょうか?無い頭を振り絞って考えたので、かなり満足の行く結果。これなら一度は諦めかけたグーローシェーディングに挑戦できます。ということで、次はグーローシェーディングに挑戦。
今回はいよいよボリゴンの描画。オリジナルは全ピクセルを走査してるけど、AS には MemoryImageSource() なんて便利そうなクラスは無いし、Graphics を使って描画してます。
デモはこちら
一応できた。ワイヤーフレームとかにもできますが、線描いてるだけなので重いです。
ただ、これでは次のグーローシェーディングが実装できないんだよなぁ。setPixel() を使ってやるにはコストが高すぎるし、どうしよう。ByteArray と setPixels() 辺りを使ってうまくできないものか。でも ByteArray は扱ったことないし糞詰まり。これで終わりかも。
前回の行列による座標変換の続き。中身をビットマップでの描画に変えてみました。
デモはこちら
前回のと比べて、分割数を上げていってもらうと差は歴然。ビットマップの方が確実にスペックが良いです。今更ながらビットマップの凄さを実感。次は、フラットシェーディング。
「JAVAde3D」というサイト、ご存知ですか?ROXIK の城戸さんの講演を聴いて以来、密かに持っている 3D 熱。この間、「ActionScript 3.0 アニメーション」を読了して基本の考え方が分かったので、次にチャレンジしてみようと見つけたのが上記のサイト。目からウロコなわけですが、時間あるときに移植することにしました。そんな「ASde3D」第一弾。
デモはこちら
いやいや、めっちゃ面白い。これは本気で 3D をやってみたくなります。やっぱり実際にやってみるのが、一番勉強になりますね。マトリクスやらベクトルやら、外積やら内積やら。数?も途中までしかやったことない自分にとって未体験&理解不能だったわけですが、実際に使っていくと「こういうときに使うのか」と。式の意味とかは分かんなくても、使えれば OK。どこまで出来るか分かりませんが、飽きないよう無理せず続けていこうと思います。
ブログのテンプレート適用中に余計なことをしたため、またデータが消えてしまいました。はじめましてのつもりで再開したいと思います。今までの内容は、改めてエントリーするかもしれないし、しないかもしれません。よろしくお願いします。