トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

独り言日記(2009/03)

独り言日記

続・Flash10でのGraphics.drawTriangles(2009/03/28)

調査で結構苦労してしまいました。「Graphics.drawTriangles」にてテクスチャ描画テスト。FlashPlayer10でないと、以下には何も表示されませんので注意です。

asソースは、また別ページに詳しく解説しつつダウンロードできるようにしておきます。

「Graphics.drawTriangles」の引数は以下のようになってます。

引数内容
第一引数vertices:Vector.<Number>スクリーン座標での頂点座標の配列。頂点数 x 2の要素数。
第二引数indices:Vector.<int>三角形ごとの頂点インデックスの配列。三角形数 x 3の要素数。
第三引数uvtData:Vector.<Number>頂点ごとのUV値とt値。頂点数 x 3の要素数。
第四引数culling:Stringカリング設定(TriangleCulling.POSITIVE / TriangleCulling.NEGATIVEなど)

ここで注意する点は、テクスチャUVは頂点ごとに指定します(indicesの要素数分あります)。三角形の持つ頂点ごとの指定じゃないです。第三引数での「t」というのは

t = focalLength / (focalLength + z);

で計算されるものです。focalLengthは視点から投影面までの距離、zは透視投影後の投影面から対象頂点までの距離になります。

ワールド座標からビュー座標変換後、透視行列を掛けた後の座標値を(p.x, p.y, p.z, p.w)とすると、

focalLength = p.w - p.z ← これは定数
p.w = p.z + focalLength ← 視点から対象点までの距離  
Zバッファに格納するような値(0.0〜1.0) = p.z / p.w

で計算できます。drawTrianglesに渡す「t」値はこれのどれでもないんですね。

この関数、まとめて三角形を渡せるのですが同一頂点に複数UVがある表現ができないので面倒ですねぇ。結局、三角形ごとにdrawTrianglesを呼び出すほうがすっきりしそう(だけど、速度負荷がかかってしまう)。

Vector/Vector3D/Matrix3Dは、Flex3(Flash10)で追加されたもののようで、3D表現では使えるのですが、、、ちと仕様としてしっくりこないです。遠回りなんだなぁ・・・。これもまた書き連ねることにします。

ということで、Graphics.drawTrianglesにてパースペクティブ補正をかけての描画ができました。でも、陰影は実現できるんだろうか、、、。頂点カラーを指定してかつテクスチャもOnにしたいけど、う〜む。

「Shader」というクラスがあるのでピクセルシェーダー(ActionScriptでは「Pixel Bender」と呼ぶらしい。バイナリコード指定とな)を呼び出せるのかな?

Flash10でのGraphics.drawTriangles(2009/03/23)

「Graphics.drawTriangles」というのがどうやら、UVを指定して三角形を描画する関数のようで、uvtの指定ができるようです(tは視点から頂点までの距離)。後、まだいじってませんが「GraphicsTrianglePath」というのも使えるのかもしれません。Perspectiveのクラスとかもあるのですが、3Dオブジェクトを表示するのに使えそうな関数はdrawTrianglesだけかなぁ(普通の矩形やコントロール類は zを使えば奥行き表現ができるんだけど、あくまで3Dのポリゴンメッシュ表現をしたい)。

後、Zバッファで描画するわけじゃなさそうですね。Zバッファライクの機能は持ってないようです。ということで3D表現ではZソートすることになるのですが、面倒だなぁ。一度試してみますが、ほんとにグラフィックカードのアクセラレートがかかるもんなのだろうか、検証してみないと。

ところで、Flex3.3にてサウンド周りのAPIがなんか凝ってる感じがします。その他、SHA256という32バイトハッシュ作成、とかもクラスで見つけました。この辺のシステムで使えそうなクラスはJavaライクですねぇ。socketもあるので、P2Pアプリ作れそう。

ざっと試した感じでは、Flex3.3にてスーファミのゲームくらいのパフォーマンスは出せそうな感じです(ほのかにdrawTrianglesでの変形なども似た表現のような)。

ウィジット関連はまだ未調査。MXMLを使用せずに手軽に定義できればいいのだけど、、、、(Flex2ではMXMLを使わないでウィジットを表現する方法はラップが大変だったです)。

Flash10の機能を使う(2009/03/21)

まだまともに操れてませんが、Flash10の機能をFlex 3.3でいじっています。過去の自分で書いた情報を日記からあさっていて探しにくかったので「Flex」のページにてまとめるようにしています。う〜ん、久しく触ってないとかなり忘れてるなぁ〜。

Flash10の機能を使うには、mxmlcのコンパイラにて

-target-player 10

のオプション指定をする必要があるようでした。

以下、「TextFieldText.as」ファイルにて回転するTextFieldを配置。

package {
   import flash.display.*;  
   import flash.text.*;  
   import flash.events.*;
   import flash.utils.*;

   public class TextFieldTest extends Sprite {
       private var m_text:TextField;
       private var m_tf:TextFormat;
       private var m_counter:int;
       
       public function TextFieldTest() {
           m_text = new TextField();
           m_text.text = "";
           
           // フォントの指定
           m_tf = new TextFormat();
           m_tf.font      = "_等幅";       // フォントの種類
           m_tf.size      = 36;            // フォントサイズ
           m_tf.bold      = true;          // 太字
           m_tf.italic    = false;         // イタリック
           m_tf.underline = false;         // アンダーライン
           m_text.setTextFormat(m_tf);     // テキストフィールドのフォントを指定
           
           // 表示位置の指定
           m_text.x = 100;
           m_text.y = 60;
           m_text.z = 200;                 // Z値(0で奥行きなし)
           m_text.rotationY = 0;           // 回転角度(0 〜 360)
           m_text.textColor  = 0x0000ff;   // テキスト色
           m_text.selectable = false;      // テキスト選択できないようにする
           m_text.multiline  = false;      // 単一行表示
           m_text.autoSize   = "left";     // 動的にテキストフィールドのサイズを変える
           
           addChild(m_text);               // ルートのSpriteにオブジェクトを追加
       
           m_counter = 0;
           
           // タイマーの追加
           var timer:Timer = new Timer(50, 0);     // 50 msごと
           timer.addEventListener(TimerEvent.TIMER, onTimer);
           timer.start();
       }
       
       /**
        * タイマーイベント
        */
       private function onTimer(evt:TimerEvent):void {
           // Y軸中心の回転
           m_text.rotationY += 1.0;
           if(m_text.rotationY > 360) m_text.rotationY -= 360;
           
           m_counter++;
           if(m_counter > 99999) m_counter = 0;
           m_text.text = "はろ〜 " + String(m_counter);
           
           // 文字列指定後で再びフォントの指定をしないとクリアされる?
           m_text.setTextFormat(m_tf);
   
       }
   }
}

TextField(DisplayObject)の値として、「z」「rotationX」「rotationY」「rotationZ」というのが追加されていて、これで奥行き表現ができているようです。

ということで、上記を実行するswfを貼り付けてみました。

この要領で、立体をパースペクティブ補正して配置できるのかな?他のサイトを見て調べた限りは、ちょっとクセがありそう。Matrix3Dあたりを使うのでしょうけど、また試してみます。

Flash10(2009/03/16)

最近はずっと研究系開発をしていたため、Flashの情報をぜんぜん仕入れてなかったのですが、Flash10は3D表現にてハードウェア対応しているらしいと小耳に挟みました。そもそもFlash9までは3D APIはなかったはずなのに追加されてたのかぁ。触りたいなぁ、

http://www.adobe.com/jp/products/flashplayer/features/all_features/

なんだか、昔のスーファミのゲーム「スターフォックス」のラスボスで家庭用ゲームではおそらく初めてポリゴンにテクスチャを貼った表現が出てきて(単純な立方体だったと思う)、おお、これが次世代の表現か、と思ったそんな感じがよみがえってきました(笑)。

Flex3.3ではFlash10の機能が使えるのかな?

http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3

以前、苦労してFlex2で3D表現していたものが水の泡になるのですが、この進化はありだなぁ。

確定申告(2009/03/08)

年に1回の住基カードの活躍です。e-taxでの確定申告、行いました。所得税の確定申告期限は2009年3月16日までですのでお忘れなく。ちなみに1日でも遅れると罰金取られます(経験済み(^_^;;)。

ちょっと実験的に、Mac上(BootCamp)のVistaにて、FireFox環境で申告してみました(FireFoxはサポート外なんだな。天邪鬼でなければIEでやりましょう)。

e-taxの手続きおよび住基カードの手続きを役所でしてない場合は、まずそれを先に行わないといけません。一回やっておけば毎年使えます。が、有効期限があります。住基カードの有効期限は10年、電子証明書の有効期限は3年です。

ICカードリーダーの購入も必要。私の持っているカードリーダーは、HITACHIの「接触型ICカードリーダ・ライタ HX-520UJ.J」です。Macではサポート外(というか対応していない)なのですが、BootCamp上のVistaではドライバをインストールすることでなんなく認識しています。

公的個人認証サービスのクライアントソフト(JPKI利用者ソフト)のバージョン

2.3である必要があります。去年のバージョンは2.2ですので、まずはダウンロードしましょう。

http://www.jpki.go.jp/download/

よりダウンロードできます。

e-taxサイトの入り口

https://www.keisan.nta.go.jp/h20/ta_top.htm

上記URLより進めます。ポップアップウィンドウの表示をOnにしておくこと。FireFoxでも、最後まで登録〜送信できました。

ただし、注意点。「申告書送信」のJavaアプレット画面が出ない場合は、一度戻って再度「申告書送信」のページを出すようにします。つまづいたのはこれだけかな。

きちんと税務署に送信されたか確認する「メッセージボックス確認」は、firefoxではできないようです(不正なセキュリティ証明書を使用しています、となって次の画面に進めない)。これだけは、IE起動して確認。

前回もe-taxを使ったので2年目ですが、この場合は5000円のキャッシュバックは使えません(この特典を使えるのは1回だけ)。

ということで、無事、納税の手続き完了。後は税金を振り込んでくるだけです。1年目は役所を何回か往復して面倒だったのですが、一度やってしまえば割と楽です。

しかし、住所入力にて28文字制限は少なすぎますねぇ。ビル内にオフィスを構える会社だったら、普通オーバーすると思うけど、、、誰からもクレームでてないのだろうか?

後、ヘルプにてたとえば「給与所得」を見たとして、そこから「源泉徴収」のリンクへ飛びたいのだけど、そもそもリンクすらなかったり(ヘルプの文章は一階層のみ、リンクは一切なし)で、ユーザフレンドリーじゃないところが妙にむずがゆいです(^_^;;。元システム屋から言わせてもらうと、「企業内のシステムから抜け出ていない感じ」がします。もっと、一般人が使うことを意識しないと利用者は増えないじゃないかなと。

紙媒体(郵送なりで申告書を送る場合は事前に送付されます。e-taxユーザには送られてきません)はもっと詳しく書かれているのですが、その濃さがe-tax上にはないような雰囲気です。書いてはいるのですが、www.nta.go.jpのトップからたどる仕組みで、ささっとヘルプ的に見る状態じゃない、紙で言えば前のページに戻って対象を熟読してみる、って感じでしょうか。なんせ、ネットでのいいところ(リンク)が生かせてないのが残念。

ちなみにe-taxの利用者数は以下から見れます。

http://www.e-tax.nta.go.jp/topics/kensu.html

年々増えてはいるのですが、多いと見るか少ないと見るか、、、。

Shadeドリームハウス(2009/03/05)

3月になりました。Shadeホームデザイン改め、Shadeドリームハウスのダウンロードが開始されたようです。1.23GBもある、、、。Shadeもバージョンアップしましたね。

自分自身は、Shadeドリームハウスを使う率のほうがShadeよりも高かったりするので(ほぼデータ集としての利用だけど(^_^;;。レンダラ実験では結構使ってます)、バージョンアップは素直にうれしいです。

アップデータは、すでにShadeホームデザインがインストールされていれば「上書きされずに」インストールされました。また、独自のカスタム形状がインポートできるか、など調査してみることにします。

過去のShadeホームデザインのデータはそのまま読み込み成功。カスタム形状も読み込めてます。後、「オンライン」というタグが追加されてました。形状共有できるのかな?今は時計が結構登録されてます。

残念ながら、Shade形式(shd)に吐き出してもマスターサーフェイスにてグループ化できてませんでした(すべて独立した表面材質の状態)。また、和室データは相変わらず弱い感じ(というか変化なし)。

しかし、Shade10.5と違って、何が新しくなったか?という文章がないので、違いがわからんです(^_^;;。リアルタイムレンダリングはきれいになった気が。

追伸。アップデート情報は以下にかいてました。

http://shade.e-frontier.co.jp/home/product/dream01.html

レンダリングは前のまますね。「Shade部品インポート機能を追加」というので、ユーザデータはシームレスにインポートできるようになったようです。もう、XMLを書かなくて済みますねぇ。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.