「 プログラミング 」一覧

Xファイル解析


前回の反省点

前回のフォント問題は解決できたので、今回はDirectXのモデルファイルについて色々と。

ちなみにフォントの問題で一番引っかかったのが、
SHIFTJIS文字列→UNICODE変換時で変換できなかった文字について、
UNICODEでの”・”に変換されたため、除去に失敗してた…。

モデルフォーマット

今作っているライブラリ専用モデルファイルを作成しようと色々考え中。

DirectXのXファイルを読み込んで、自分の形式にするコンバータ作らないとなぁと思って、まずはそれを準備してみようと思って作業中。よってスキニングの仕組みを改めて調査&勉強してみたり。

スキニングモデルと単なるポリゴンメッシュのモデル、そしてアニメーション付き、
これらをちゃんと読み込んで変換するのはちょっと苦労しそうだ…。

アニメのことを考えると D3DXLoadMeshFromXは使えない。
D3DXLoadSkinMeshFromXofを使用するのか?と思いきや、LPDIRECTXFILEDATAは廃止に向かってるようだし、関数名変わってるし。

素直にアニメーションスキニングメッシュ読み込むサンプルをそのまま実装して、必要なデータだけ抽出するようにするか…。


インスタンシング


今日もインスタンシング

昨日に引き続き、今日はShaderInstancingをトライしていた。しかしHWインスタンシングに比べて動作は理解しやすい。単に形状データを繰り返し、頂点バッファを満たしておけばいい。あとはそれに対する変形パラメータを外部から叩き込めば終わり。必要回数、必要ポリゴン数になるまでdrawPrimitiveを繰り返す。

そんなわけで、さっくり実装できた。

HLSL

今は起動時で読み込んでコンパイルさせているけど、デフォルトのシェーダーくらいはlibに組み込んでしまいたいと思って色々調べてみた。どうやらバイナリのリソースとしてリソーススクリプトで記述すれば良さそうです。

GUIの操作としては、リソースのウィンドウで追加→ファイルから〜
その時の.rcの中身にはこんな風にして追記されることになります。

(グループ名を入れたかったのでそこだけは手作業)

<名前> <グループ名> DISCARDABLE “ファイル名.fx”

ここまでやって気付いたのだが、そのままバイナリファイルに組み込まれるみたい…。

さらに調べてみると .fxから .fxoを作ってしまうという方法もあるようだ。コンパイル済みシェーダーといったところか。

こちらを組み込みにすれば、先ほどよりはマシだろう。読まれたくないならば、
fxoをさらに暗号化してリソースにインポートすればいい話だし。

これには、プロジェクトに追加されている.fxファイルにコンパイルの記述を追加する。

こんな感じでコマンドライン行に追加。最初のはバージョンを決めるためのものだろう。
さらに、出力ファイルの箇所で “bin/$(InputName).fxo” と記述するのも忘れずに。

デバッグ版とリリース版で同じでも問題ないと思うけど、オプションを変更することも可能です。


プログラム的話題


UNICODE使用時におけるプリプロセッサについて

__FILE___や__DATE__などのプリプロセッサは ANSI文字として置き換わるので、そのままだとUNICODE文字配列には入ってくれません。

サフィックスLを付けるとUNICODE文字定数としてコンパイルされるので、

として、CONVERT2WIDE( __TIME__ ) とか。頭の中では L”12:00:00″ とか置き換わる算段です。

実際にはこれだけではダメで、

としなきゃダメみたいです。理由はよく分かりませんが、昔からの流れ?みたいです。


MySQLネタ


今日もmySQLと戦ってました

データ注入でうまくいかなくて結局1日消費。

昨日MSのSQLServer2000から取り出してきたデータを、
SQL文の形にしてインポートさせようとしたらShiftJISの問題で、
エスケープシーケンス埋め込んで対処。

また、ツールにはSQLyogのフリー版を使用。

文字コード

しかし問題が。ShiftJISとの問題でこれからも付き合っていくのか、と思うと大変に思ったので
全てのデータをUTF8に移行することに決定。

しかしながらこれまた大変な作業が待ってました。
ツール類はUTF8全滅で、表示できたのはMySQL Query Browserのみ。
SQLyogは使いやすかったので、UTF対応も是非行ってもらいたいです。

※最もツールが悪いのかデータがまずいのかで、数時間使っちゃってます

あと、PHPからのアクセス問題も発生したので検索して色々と。
データを取得する前に、以下のようにしておけば文字コード変換が働かなくなり、DBに格納してある生の文字コードで取得できるみたい。

リストアとか

結局データはリストアのデータと同じ形式に吐き出すように、プログラムを変更してデータ生成
その後リストアの処理するコマンドを一つずつ手打ちしてデータを注入しました。

UTF8にしたかった理由

思い出してみるとADO.NETでアクセスしてデータを表示させたかったから、でした。
データセットに取得してDataGridに表示させようとすると、どうしてもUTF8にってことで。


MySQLネタ


MySQLメモ

ユーザーとパスワード指定して、かつホストのペアで管理されるMySQLは、
任意のPCからのアクセスで拒否されるので、どうしたらいいんだろーと検索したメモ。

以下の権限&変更で、ホストは任意に変更できます

で、SQLServer2000からのデータ移行にチャレンジ中。
MS付属のDTSつかっていけるかと思ったけど、どうしても出来なく。
やっぱりレプリケーションとか設定の跡があるからまずいのかな。

コンバートできないデータ要素があるみたい。

色々探してみたら、MySQLにマイグレーションのツールがあったのでそちらで実行中。
うまく動作してるっぽい。オートインデックスに関係してる部分は、
途中でエラーが報告されるので、SQL文を削除して、オブジェクト作り直しでうまくいった。

SQLServerからのデータ取得. ADO.NETにて

データリーダーでテーブルを取ってきて、そのスキーマを知りたい場合について。
大体次のようにすれば、列名や列の型などを取得できるのでは。

コメントにした部分を知りたい項目にすれば、それに関しての情報が出ることを確認した。
わかりやすいサンプルがないので、ここに書いてみました。