[AS3D #1] 自作 3D ライブラリを Snippets にコミットしました
Papervision3D や Sandy など優秀な 3D ライブラリがある中、自学のため 3D ライブラリを作っているのですが、ある程度の形が出来たので Snippets にコミットしてみました。Snippets の AS3D からチェックアウトして試していただけるとありがたいです。
まだまだ上手く動いてないところや未実装な部分も多く、実用的ではありませんが・・・。
コードは下記の通り。
Papervision3D や Sandy など優秀な 3D ライブラリがある中、自学のため 3D ライブラリを作っているのですが、ある程度の形が出来たので Snippets にコミットしてみました。Snippets の AS3D からチェックアウトして試していただけるとありがたいです。
まだまだ上手く動いてないところや未実装な部分も多く、実用的ではありませんが・・・。
コードは下記の通り。
Papervision3D で少し遊んでみました。本来ならテクスチャとシェーディングは同時適用できない(どちらもマテリアルのため)ですが、BlendMode を活用して同時適用してみました。
1/27 追記:
嘘でした、ごめんなさい。ShadedMaterial で実現できるようです。今日も迷子さんで詳しく解説されていますので、そちらをご参照ください。あー、自分嘘ばっか。もう知ったかぶりはしません・・・。
シェーディングを施すと一気に質感が良くなりますね。Papervision3D のシェーディングは多分擬似だと思うのですが(擬似じゃない?自分の頭じゃ分かんない)、それにしても良く出来てるなぁ。以下はドキュメントクラスのコード。モデルデータとテクスチャは各自ゲットしてください。あと、GreatWhite (3.12.07) でパブリッシュしています。
コードは下記の通り。
なかなか時間が取れずに進んでませんが、自作 3D にテクスチャマッピング機能を付けました。まだまだおかしいところがありますが、一応動いているので載せてみます。
透視補正が出来ていないので平面の方はゆがみまくりですが、テクスチャ + グーローシェーディングです。Away3D は透視補正を実装してるので中身を覗いてみたんですが、複雑過ぎて何をしてるのかさっぱり・・・。カリングといい、透視補正といい、ピクセル処理が軽くなってくれれば、資料も多いしこんなに苦労しないんだろうなぁ。
3D の基礎知識として絶対に欠かせない「ベクトル」や「行列」。今回はベクトルについて。
ベクトルは大きさと方向を持った量のこと。
2 次元のベクトルの場合は、<x, y> 2 つの成分を持ち(厳密には、どんな成分を持たせるかは実装者次第で、n 次元のベクトルは n 個の成分を持つというだけ)、 AS でいうところの Point クラスのようなもの。Point クラスでいえば、大きさは length メソッドで求まり、方向は x, y 成分の各数値になる。ただ、3D で扱うベクトルは 3 次元なので <x, y, z> 3 つの成分を持つ独自のクラスを作る必要がある。この時、持たせておくクラスメンバは下記の通り。
AS で 3D をする際に必要な知識をエントリーしていきたいと思います。目的としては、自分用の備忘録として、副次効果で他の人の参考になればという感じです。僕自身は高校を中退して高校数学の基礎知識がほぼ皆無なため、数式等の詳しい説明は出来かねますが、参考サイトへのリンクを貼ってごまかすことにします。Math.sin の中でやってる計算なんて殆どの人が分からないのと同じで、必要なのは使えることだと思うので。間違いなどが結構出てくると思うので、詳しい方からの突っ込み大歓迎です。
新年明けまして、おめでとうございます。せっかくの連休で時間があるので、自作 3D ライブラリにカメラを実装しました。
ジオメトリパイプラインっていう、ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換の実装がかなり大変だったのですが、ここの記事がとても分かりやすく参考になりました。ホントに感謝。現在は平行光源しか実装出来てないんで、スポットライトとかも実装したいです。その前にテクスチャも実装しないとなぁ。そこまで出来たら公開してみるのも面白いかも。
そんな感じで、本年もどうぞよろしくお願いいたします。