2009年4月26日日曜日

にっきty


http://cid-8cd7cf5ea9fbca55.skydrive.live.com/self.aspx/Public/program/test090426.zip

 ダッシュの実装
ダッシュボタンを押した瞬間から10F間移動速度が2倍
その後6Fはダッシュボタンを押してもダッシュしない。
ダッシュのエフェクトにはわっかと適当な線、さらにパーティクルを描画している。


 既存のゲームとか見てると、少ないエフェクトを効果的につかっててすげえと感心する。
必要最小限というか、よく見るとエフェクトすくないんだけど、変な感じがしない。
GBなんかだとさすがにエフェクトがんばれよと思うものもあるんだけど、GBでも後期の作品になるとエフェクト1個しかないのにすごいかっこいいのとかあったり。
 自分のはとりあえず沢山だしとけって感じに、ぼこぼこ表示してるけどいまひとつ印象に残らない。

2009年4月21日火曜日

FontToBitmap


http://cid-8cd7cf5ea9fbca55.skydrive.live.com/self.aspx/Public/program/FontToBitmap.zip
size: 36.7 KB

□概要
 文字をasciiコードの順番で描画し、Bitmapファイルに出力します。

□使い方
 FontToBmp.exeを起動することで、同フォルダにfont.bmpが出力されます。
 細かい設定はconfig.iniに記述します


 似たようなのを探すと意外にこれというのがない。
文字が足りなかったり、位置調整が出来なかったり、フォントが選べなかったり。
そんなわけで自分用に作成がてら、少し汎用的にして外にも公開。

 Windows98SEではGetPrivateProfileSectionが正しく動かないので、動作対象外。
確保したメモリ先にデータが流れてこない。

error C2857


error C2857: /Ycstdafx.h コマンド ライン オプションで指定された '#include' ステートメントは、ソース ファイルに含まれていません。

 Debugビルド時のみこのエラーがでてコンパイルが出来ない問題が発生した。
Releaseだとこのエラーは出ないから、オプションが何かしらの影響を与えているらしい。

 「プリコンパイル済みヘッダーを使用しない」や「ランタイムライブラリ」をいじったりとあれこれしてみたが解決できず。
「前処理済みファイルの生成」をいいえから変更すると、それとなくコンパイルが通るんだけど、結局別の問題が発生する。

 結局、新規にプロジェクトを生成しなおして、ファイルを追加してコンパイルしたら通った。
原因はわからずじまいだけど、動かないままよりは幾分ましか。応急処置。
ググっても具体的な解決方法が出てこなかったので、一応参考までに。

2009年4月20日月曜日

nikkichan

 なんか最近PCの動作重いなーとか思って、
ふとデフラグ分析したら全面真っ赤だった。
そんなわけでデフラグ中。

 その間暇なんで、古いPCでちょこちょこ遊んでる。
CPU: Mobile AMD Duron 800Mhz
メモリ: 256M
ビデオメモリ: 4M
  ATI RAGE MOBILITY-CL AGP
サウンド: VIA Audio
のようなスペック。DirectXSDKを入れるのに3時間かかった。貧弱。

 適当に現在作成中のプログラムを動かしたところ、
表示はされるものの、2秒に1フレームと超低速。
以前作成したGDIの某STGはさくさく動くのに、DirectXにしたとたん満足に動かないとは。
ちなみにDirectXSDKを入れる前はエラーも出さずに即終了していた。少しまずい。
 多少いじくってみたところ、Zバッファを切るとかなり速くなった。20FPSぐらい。
背景3Dはあきらめざるを得ない。もしくはZバッファを使わなくてすむように頂点を調整するか。
 またテクスチャレンダーがうまく機能しない。
CreateTextureにD3DUSAGE_RENDERTARGETを指定しているけど、関数が失敗する。
D3DFMT_A8R8G8B8が対応してないのか。いや、それはないか。
 シェーダは1.0すら動かない。ごみじゃねえか!
そのほかはかねがね普通に動くようで、スクリーン、加算、乗算、半透明合成は正しく表示される。
東方の紅魔郷(体験版)だと加算合成だかの表示がおかしかったので、てっきり動かないものかと思ってた。
D3DMATRIXA16もMMXだか3DNow!だかしらんが何か動いてるらしく、
D3DX: (INFO) Using AMD optimizationsと表示される。
音周りもとくに不具合は見当たらない。

dxinfo
http://www.netsphere.jp/dxinfo/
にデータがなかったので、ずうずうしくもレポートを送信した。
何かの役に立てば幸い。

2009年4月14日火曜日

3Dオブジェクト



 ようやく当初の目的である、背景3Dな2DSTGっぽいことが出来るようになってきた。
前はMesh使わないとオブジェクトを設置できなかったけど、なんとか自力で描画できるようになった。
頂点情報をプログラムで算出してるから、複雑な形状は不可能。
外からデータを取ってこれるようにすればそれっぽいのかな。




D3DXMatrixPerspectiveFovLH(
  &proj,
  Math::degToRad(120.f),
  800.f/600.f,
  0,
  5000
);

 プロジェクション設定を上記のように間違えてて、
Zバッファがうまく動かねえってしばらく詰まってた。正しくは、

D3DXMatrixPerspectiveFovLH(
  &proj,
  Math::degToRad(120.f),
  800.f/600.f,
  1,
  5000
);

のように、パラメータを0→1にする。0ではうまく動かないらしい。
このミス、前もした気がする。


 頂点座標の計算は

D3DXMATRIXA16 mat, calc;
// 拡大
D3DXMatrixScaling( &mat, 省略 );
// 回転
D3DXMatrixRotationYawPitchRoll( &calc, 省略 );
mat *= calc;
// 平行移動
mat._41 += moveX;
mat._42 += moveY;
mat._43 += moveZ;

 とかやると、拡大回転移動成分でできた行列が出来るので、

D3DXMATRIXA16 tmp;
D3DXMatrixIdentity( &tmp );
tmp._41 = 元データの頂点位置X;
tmp._42 = 元データの頂点位置Y;
tmp._43 = 元データの頂点位置Z;
tmp *= mat;

 のように、行列に3Dモデルの頂点座標をセットしてから掛けてやると、
回転や移動後の座標が得られる。
 動かしてみたらうまく動いたからこのようにしてるけど、
論理的に正しいのかどうかは分からん。
 行列って数ⅢAかなんかだったっけ。まったく覚えてないね!
*090420追記
 数ⅠA、ⅡB、ⅢCって区分だと後からわかった。何よⅢAって。
いかにわかってないかがわかる。俺の背中。俺スタイル。

2009年4月10日金曜日

日記ちん

Vol.24 4ビットマイコン 大人の科学マガジン 大人の科学.net
http://otonanokagaku.net/magazine/vol24/index.html
2009年6月下旬発売予定
予価:2,500円(税込)

 これは買わざるを得ない。世代じゃないけど興味心身だ。

2009年4月1日水曜日

constなメンバ変数を持つクラス


class Test
{
private:
  const int m_val;

public:
  Test( int num )
    : m_val( num )
  {}

  int getVal() const { return m_val; }
};

 ってなクラスを作成しコンパイルしたところ、
warning C4512: 'Test' : 代入演算子を生成できません。
と怒られてしまった。
メンバからconstをはずすと問題なくコンパイルが通る。

 考えてみれば、

Test t(10), tt(100);
t = tt;

なんてこともできちゃう訳だけど、メンバがconstだからコピー出来ない。
 そんなわけで、

class Test
{
private:
  int m_val;
  const Test& operator = ( const Test& );

public:
  Test( int num )
    : m_val( num )
  {}

  int getVal() const { return m_val; }
};

と、このように明示的にコピーを不可能にすることで、コンパイルが通るようになる。

 30分ほどなんでよーって悩んだ。
コンパイルが出来たり出来なかったりして意味がわからなかったが、
共通点を探すとコピー不可にしていたことから、あー、なるほどってな具合。
ググってもぱっと出てこなかったので記述しておく。

にっきちゃん

 車のナンバーの値を足して遊びながら散歩してたら、道に迷った。
線路沿いに歩いていけば隣に駅に到着できるよねー、
とか言って線路沿いを歩いていたのに、なぜか出発駅に到着する七不思議。
頭がどうにかなったのかと思ったわ。

 5+7とか6+7とか8+7がすげえ苦手なことが分かった。
12だか13だか混乱する。頭悪い。
何がハッピーセブンだ、死んでしまえ!