[Mac]adobe livedocsを一括ダウンロード > デスクトップアプリケーション化
livedocs.adobe.comリファレンスをオフラインで閲覧するためのデスクトップアプリケーションの作成手順。以下の例はFlex 3リファレンスガイドだけど別になんでもok。もちろんadobeじゃなくても応用可能。livedocsadobe.comのような階層化したhtml群をダウンロードするにはコマンドラインでwgetを用いればよいが(wgetでAdobe Flex3の日本語APIリファレンスを一括ダウンロードする方法 - アガテナ)、コマンドラインに苦手意識があるのでwgetしてくれるソフトウェアを用いた。
- wgetをGUI操作できるCocoaWgetをゲット(MacOSX10.4以降)
- CocoaWgetを起動 > URL欄に「http://livedocs.adobe.com/flex/3_jp/langref/」と入力。これでダウンロードターゲットが「flex/3_JP/langref/」配下のファイルになる
- 「リンクをたどる」にチェック。さらに「このホストのみ」を選んでダウンロードしたい階層を選択。ここでは10階層にした。追加ボタンを押したらダウンロード開始
- デフォルトだとデスクトップに「livedocs.adobe.com」というフォルダが作成されていてその中にファイル一式がダウンロードされる。フォルダの位置は適宜移動
ファイルダウンロードに関しては以上で終了で、この段階でも普通にブラウザで見れる。次にデスクトップアプリケーション化。
- ファイル一式をデスクトップアプリケーション化するソフトウェアFluidをゲット(MacOSX10.5以降)。Fluidは簡単に説明すると、特定のwebサイトを閲覧するための専用ブラウザ作成ソフトで、例えばtwitterクライアントなんかが簡単に作成できる。専用ブラウザなのでFirefoxやSafariが強制終了しても被害を被らず、リファレンスのような常時起動させておきたいものをブラウジングするのに非常に便利
- Fluidを起動 > URL欄に先ほどダウンロードしたリファレンスのトップページのロケーションを選択。不明な場合、リファレンスのトップページをFirefox等で開いてみて、ローカルURL(file:///Users/~~~~~/index.html)をそのままコピー&ペーストすればok
- アプリケーションの名前を設定。このアプリケーション用にアイコンを用いたい場合はその画像ファイルを指定。僕はFlickrで発見したAdobeのロゴをつかった
- Createボタンを押せばアプリケーションフォルダに専用ブラウザが作成されているはず
注意点としては、ローカルに保存したファイルの格納場所を変更させるとブラウジングできなくなる点。移動させる場合は再度専用ブラウザを作成する必要がある。アイコンを変えたい場合やアプリケーション名を変更したい場合も同様。まあ5秒ぐらいでできるけどね。
[FlashPlayer10]drawTrianglesで球面にテクスチャリング
Tags: FlashPlayer10
zソート等で非常に参考になったのは/as3/Astro/Torus3D_01/src/Document.as - Spark project。上記Spark projectの例の場合、プリミティブを構成する頂点座標は重複して登録させず、かわりに三角形パッチを構成する頂点座標の組み合わせをインデックスすることで多面体を作成している(詳細はdrawRectanglesの仕様参照)。この場合、各三角形を構成する頂点座標の組み合わせ情報に関してzソートを行うだけで済むので経済的なんだけど(i.e., drawRectanglesの第二引数indicesに関してのみソーティングが行われている)、それ以前にプリミティブ作成時に頂点情報の組み合わせをどうインデックス化するか思考するのが面倒くさい。
そこで今回は頂点情報が重複するのを一切気にせず各三角形パッチごとに頂点座標を計算させた(つまりdrawRectanglesの第二引数indicesを全く設定していない)。グリッド化は簡単になったのだけど、計算量が増えた(三角形パッチ数は頂点数の約二倍)こととzソートする成分がdrawRectanglesに渡す第一引数verticesと第三引数uvtDataの二つになる点が面倒くさい点か。あと幾何学的問題で、矩形画像の球面上へのテクスチャリングはどうしても極近傍に空白ができる。グリッドサイズを細かくしていけば無視できるレベルにはなるけど。ソースはswfリンク先にあります。
[追記:2008/06/05]
Spark projectソースに関して補足。renderScene関数内の
vector.w = projection.focalLength / (projection.focalLength + vector.z); vector.project();
は不要の模様。直前のworld(Matrix3Dクラス)に投影情報が含まれているので
var vector:Vector3D = world.transformVector(vertex);
この時点ですでにvectorは投影用に座標値が変換されている。あと関係ないのだけど、Vector3D.project()はVector3Dの第4引数wで第1~3引数の値を”割る”メソッドなので注意が必要。こんなかんじ。
var v:Vector3D = new Vector3D(100,100,100,2); v.project(); trace(v);//(50,50,50)
[追記:2008/08/06]
Spark projectのソースについて作者の方よりご指摘を受けています。僕が現在Flash Player 10を使えない状況なのでまだ確認ができていません。上記情報を鵜呑みにせず、コメントも合わせて参照ください。



