DELPHIER

プログラミングを中心にした思いつきの書きとめ場所です。

2005年07月09日

C++にはまってしまった

え、DELPHIERのくせにC++ですか?と言わないで下さい。

DELPHIを使い始めて早8年、ついにC++にはまってしまいました。

主な理由は二つあります。
一つは、OpenH323というオープンソースソフトウェアのソースコードに感動したこと。
一つは、VCのエディタが非常にしっくりくること。
これの比率は8:2くらいです。なので、一つめの理由について書きます。

具体的にいうと、pwlibライブラリに含まれるPSemaphorePWaitAndSignalというクラスが、非常にツボにはまりました。「スコープを抜けたらオブジェクトが解放される」ということを利用して、スレッドプログラミングでおなじみの同期オブジェクトのシグナル状態の変更をエレガントにやってのけています。

コードで書くと、こんな感じです。

PSemaphore semaphore;
:
{
PWaitAndSignal w( semaphore );
// ここに保護したいコードを書く。
}

かっこいい。

これの何がかっこいいかというと、コメント部のコードのロック、アンロックを、クラス変数の宣言コードが一行だけで済む。ということです。普通、ロック、アンロックで保護したいコードをはさむ必要があり、途中でreturnするときなどを考えると、コードがぐちゃついてしまうのです。

同時に思ったのが、今僕が知りうる知識では、同等のことをDELPHIではやれない、ということです。
DELPHIではクラス変数はコンストラクタで初期化する必要があり、破棄する場合にはデストラクタを呼び出す必要があるからです。

言語の選択によって、コーディングセンスは変わってしまう。
そう気づかせるようなコードでした。
コードを読むことによる感動は、Extreme Shootersのコードを読んで以来の事です。ちなみにExtreme Shootersは、Quadruple Dの作者であるSANDMANさんの作品です。

「スコープを抜けたらオブジェクトが解放される」を利用したテクニックは、処理時間計測などにも活用(どっちかというと適用かな)できます(コードはここに書きませんが)。

DELPHIで、同等のことはできないのでしょうか?(結局DELPHI)

2005年05月09日

fladdict.net blog: 世界最強のajaxアプリ TRIGLAV

Diablo風ajaxアプリが紹介されていました。
すごくなめらか。実際に動かして見て下さい。

fladdict.net blog: 世界最強のajaxアプリ TRIGLAV

ゴクリ・・・。
ってなりますよね?

余談ですが、個人的にJavaScriptにはあまりいい思い出がありません。
過去にFlashとJavaScriptを連携させようとしたことがありました。
この場合、SetVariable、fscommandを駆使することになりますが、
IE以外でうまく動かせなかった、ということが起因しています。

それはさておき。
ちょっとajaxについて整理しておきます。
[続きを読む..]

2004年06月15日

Flashで3D、少なくとも無限平面

Flashでパースつき無限平面、パースなしテクスチャマッピングが出来る、
ということは、実物を見て知っていたのですが、サンプルなどを見て
確実に実装できるという確信を持ったので、取り組んでいきます。

参考になるページを列挙しておきます。

■国内
vas animation
Flashで興味深い実験をいろいろとなされています。
実際に動くものを公開されており、参考になるリンクも多いです。

■海外
実際に動くもの
マリオカート的なサンプル。
http://www.nlc.net.au/~oceana/games/rc.htm
http://www.nlc.net.au/~oceana/games/rc.zip
ソースつきの無限平面サンプル。

3d texture mapper and OOP engine
テクスチャマッピングのサンプル。ただし、テクスチャの形が正三角形で作られていたため、
四角形のテクスチャを張るためなら即戦力にはならない。

3D rotating cube (large version with pictures as texture)
こちらは四角形テクスチャマッピングが簡単。
画像を変えるだけですぐに使える。

Flash kit
上記のような参考になるものが数多く集まっている。
[続きを読む..]

2004年02月28日

DelphiXをDelphi6で使う方法

turbo - unofficial DelphiX homepage

DelphiXをDelphi6で使う方法です。
ニーズが多少なりともあるようなので、メモしときます。
海外に解説ページがあるので、まずはそこにリンクを。
[続きを読む..]

2003年12月11日

質量と速度を考慮しつつめり込みを少し考えた衝突





結構よさげですね。ただ、Flashはオブジェクトの位置を変更すると、即反映されてしまうので、
たまにおかしく見えますね(まぁ僕が作っためりこみ補正処理が甘いからなんですが)。
ダブルバッファリングみたいな機能がFlashにはないのかな?
自前で実装するのも、なんか変な気分だし・・・。


2002年07月23日

Smart Filtering

スクリーンショット











点補間

点補間

バイリニア

バイリニア

スマートフィルタリング

スマートフィルタリング


ダウンロード


  • プログラム(90kb)
  • ソース(30kb)


  • 要約


    テクスチャのフィルタリングは現代の3Dグラフィックスにおける必須機能である。
    3Dのアクセラレーション機能が登場するまで、リアルタイムテクスチャマッピングには、
    四角っぽさ丸出しの、点補間フィルタだけが使われていた。
    今では、我々はいろいろなフィルタを使うことができる(ミップマップベースの縮小、
    バイリニアフィルタによる拡大など)。



    バイリニアフィルタでは、たいていの場合十分な画質が得られる。
    特に、隣接したテクセルの色が比較的目立たない場合に有効である。
    だが実際には、多くのテクスチャにはくっきりとした境界線で区切られた均一色領域がいくつかある。
    バイリニアフィルタはこれらの境界線を滑らかにしてしまうので、非常にぼやけた画像を作ってしまう。
    人間の視覚は、均一色領域間にあるエッジ(縁)の検出を基本とているので、
    エッジをぼかさずにはっきりと表現することは、とても重要である。



    このデモでは、この問題を解決するために設計したテクスチャのフィルタリング方法を紹介する。

    まず、処理段階において、四つの隣接したテクセルのうち、
    それぞれが似たような色同士であるかどうかを決定する。
    ただ色を比較するだけなので簡単にできる。これには14の場合が考えられる。



    それぞれの場合で、それに見合うフィルタを用いる。

    その1:四つのすべてのテクセルが同じ領域にあるので、
    このテクセルの補間には、バイリニアフィルタを使う。

    その2:上の二つのテクセルと下の二つのテクセルで分かれている。
    水平境界線の上の領域の色は上の2つのテクセルによって線形補間される。
    下の領域も同様に処理する。その他の場合のフィルタも同じような方法で定義される。

    テクセル補間のためのフィルタ番号は、テクスチャと一緒に格納されている(各テクセルに4bitを付加することによって実現している)。
    レンダリング段階では、このフィルタ番号を読み込むことによって、テクセル補間に正確なフィルタを使うことができる。
    だから、このテクニックを使うと、拡大率にかかわらず、均一色領域の間をはっきりとした境界線として表現できる。
    さらに、均一色領域内部にバイリニアフィルタを使うことによって、待望の滑らかさを得る。



    この特殊なデモはちょっと複雑なテクニックを使っている。テクセルごとに付加した4bitが、
    各テクセル間の境界線の位置を正確に記述するのに役立っている。
    だから、テクスチャは24bitを色情報、残り8bitをフィルタ記述子とした、
    32bitTGAファイルとして記憶されている。レンダリングは全て完全にソフトウェアで実装されており、
    スマートテクスチャフィルタリングのための性能は、ソフトウェアでバイリニアフィルタを実装した場合と比べて約10%しかない。
    そんなにいい性能の理由は単純である。典型的なテクスチャ画像では、境界のテクセルの個数は、テクセル内部の個数よりも
    ずっと少ないからである。



    現在のハードウェアはこのテクスチャフィルタリングテクニックをサポートしていないが、
    将来もっとバージョンの進化したプログラマブル・ピクセル・シェーダがハードウェアでの実行を可能にするだろう。






    個人的な感想(訳者による)


    実行画面もとてもきれいで久々に驚いた。
    これをハードウェアがサポートすれば、正に「革命」となりうるだろう。
    320x240の解像度で実行される2Dゲームでも、解像度を上げて、この手法を取り入れれば
    画質が向上すると思われる。

    しかし、α値はどこに格納するのか、などの点が気になった。

    266323 Since 2005-05-01