レイヤリープ

amelia2007-08-17

暑い暑いと言いながら、外を出歩かない職業のプログラマの皆さん、いかがお過ごしでしょうか。あまり家ではエアコンをかけない派なんですが、職場はキンキンの方が好みのあめりあです。
ここのところ、3Dのバグ修正とUSBデバイスの標準ディスクリプタを更新するというレイヤリープな作業が舞い込んできてまして、てんやわんやです。
3D実装は別の担当者(離職)がやっており、私は3Dに関して全くの素人。趣味でもいじったことなくて、DirectXとかOpenGLというライブラリが存在することぐらいしか知識がない状態。そんなモデリングのモや座標系の座の字も知らない私がいきなりコードリーディングしても、最初から「ぇ」て感じになる訳で。こりゃやべぇー!て、ちと1日かけてglut使って色々とパラメタやら関数をいじって感触だけでも掴もうと励んでみました。ちょっとでも、座標操作系関数の発行順番を変えたり、パラメタを変えただけで描画されなくなる(実際はどこかへ飛んでいるんですけどね)のを目の当たりにして、更にやべぇー!基礎知識がないとまずいって。で、あれです、そこで線形代数学から始めたりすると日が暮れるので、とにかく投影とリサイズがおかしいちゅうことで、的を絞ってネットでお勉強。ネットの3Dプログラミングサイト(OpenGL使っているので其系)の人達は、確かにそれなりに詳しい人も多いのですが、なんちゅうか一貫性がないてゆうのか、結構、各々で言っていることが微妙に違っていたりして、初心者の私からすると、5サイトくらい巡回した結果、「で、一体どれが本当なの?」て混乱気味になったりする。それと言うのも、私が全く基礎知識を持たない状態で、掲載文章を読んでいるので、ニュアンスが微妙に違うだけで大きくぶれてくる訳でして。やはり、実際にプログラミングした結果が本当であり、それが己の結論に直結するんだろうな。透視投影を平行投影に変更しただけで、ここまで苦労するとは。。ちゅか、まだ3Dプログラミングの入り口にしか立ってないし。DirectXの本を立ち読みしたんだけど、OpenGLから直感的に移行出来るのか不安になるような実装だし。これって、3Dの基礎があると、なんてことないんだろうな。やりたいことが見えてると、その機能を提供するAPI叩けば良いだけだし。

C言語で学ぶ実践CG・映像合成

C言語で学ぶ実践CG・映像合成

この本、何故か家にあった(笑)。以前、古本屋で見つけて将来使うかなぁと買っておいたものだったわ。やっと出番が来た。
ちょっと、コードとしては汚いんだけど、3Dライブラリを無闇に叩いて分かったつもりになるよりかは、基礎理論と3Dライブラリはこんな感じで実装してんのかなぁ的模索に使えて、それなりに面白いです。ゲームプログラマて、業務プログラマより遥かに苦労してるだろうなぁと思う。物理学とかばりばり出てくるだろうしね。今まで物理学の知識を利用するなんてないもんな。

USBデバイスの標準ディスクリプタを更新するちゅうのは、USB規格としてはオプショナルなものであり、実装が義務付けられている訳じゃないから、ドライバでサポートしているか否かちゅうところに依存すると思われる。業務で使っているドライバは、コントロール転送でサポしているのが参照系だけで、設定/更新ちゅうものがない。Intelの汎用Hubドライバも参照系しかサポってないから、Hub経由でのアクセスでも更新不可能ちゅう状態になっている。確かに、こんなもの公開しちゃっていたら、分かってる人間ならばいくらでもディスクリプタを書き直しちゃうからサポらないのは分かるけど、だけど、汎用じゃなくてベンダドライバならば、I/O Controlを開発者に公開しても大丈夫な訳じゃない?まぁ、ここら辺はドライバ開発者に問い詰めたい気持ちでいっぱいだったけど、色々勉強になったんで、またの機会に。