スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

実際暇なのか

本当に暇なのか。物理的に時間が余ってるかといえば余ってはいない。気がする。
けど暇かと聞かれたら暇だと答えるしかないような。とか考えてる暇があるから暇なのか。
と、いうことにして納得しておこう。そんなことより塾辞めたい。いや、ちゅうがくせいいらない。
どこかに他人のことを考えないでいい塾ってないだろうか。私利私欲で動けるような。
ま、ようやくエイプリルフールは全日何もなく暇なのでプログラムイジるか。


ところで。部屋から腐ったか黴はえたかで赤茶色になった粘土(だと思う)が発見された。
表面削いだら白かったから多分黴。臭くないし。ただ前は青っぽいのがもさっと生えたような。
崩れた漫画を整理したついでに、引き出しとか押し入れとかも整理してたら出たんですよ。
何だろう、このタイミングでこれはエイプリルフールの一発ネタでも作れと言うのか。
問題は、割と無事なので本当に使い道ないのに勿体ない精神が発揮されてしまう。
多分前回仕舞ったときも同じこと考えて、袋に詰めて記憶から消したんだろうが…。
だいたい粘土って燃えるゴミでいいの?これ紙粘土じゃないっぽいんだけど。
なんていうか石膏ぽいような石粉ぽいような石綿ぽいような。


あー、一週間位なんも予定がなかったら気が済むまでC++いじれるのに。



スポンサーサイト

学校2週間は少なくともないのかな

同じ塾におります友人に聞いたところ、どうやらM大はゴールデンウィークあけまで休みらしいですね。
その上その人は成績表ももらっていないため一か月間生殺し状態らしいです。
ちなみにうちはどうなってるんですかね。今一つ具体性のある情報が少ないのだけれども。
見た感じ4/11にガイダンス日って感じなのでしょうか。誰か知ってたらメールしろ。して下さい。

あと最近白い画面見てると目が痛くなってくるのでブログの色を茶色くしてみた。
目が痛くなるほど見てたことないですけどね。VC++のエディタはデフォは白いのだよ。
背景色変えればいいんだろうが、初期設定大好き人間だからあんまりそういう変数弄りたくない。

あと全然見てなかった西さんのブログを開いたらやばい感じになってた。

すっごいピンク色だった。
一瞬なんかの宣伝サイトかと思った。
思わず肩に手をかけ首を横に振りたくなる感じだった。


「もう…手遅れだったんだ…」


続きを読む

墨灼?鏡

暇だ暇だ行ってたら9日連続塾入った。やべえマジやべえ時間ねえって。
あいつらマジ三日前に物理化学全然わかんないとかいうの止めてごめんなさい謝るから。
ニュートンリングとか酸化剤とか覚えてないから。お陰でこっちの方が人数分の試験勉強してるから。
ところで生徒から受験が終わったからって今更個人的にチョコもらったんだけどスルーだよね。


wave読み込みはよく考えたら、自前でごりごり読みとるべきかもしれぬ。
ストリーミングかつループにはシークが必要だと思うんだが、確かにmmio系にもシーク関数はあった。
しかしこいつらそもそもさ、何やるにもいろいろ構造体が必要で面倒くさいから、
フォーマット通りにバイナリでがしがし取ってしまうほうがいい気がする。
ものによっちゃfactチャンクやらが有ったり無かったりらしいので、そこさえ越えれば。

しかしCOMポインタなるものも有るらしいのだがそれを採用すべきか…。


駄目だな。やっぱり完全独学は天才じゃない限り効率悪い。誰か教えてor一緒にやろうぜ。
しかしここで諦めたらNMKDだから、せめて形を完成させないと。
これだけ休みあったんだし、休み中に何かしら生産せねば。


ただし免許は取らない。

睡眠導入剤NISHIを服用の際は十分ご注意ください

そろそろ地元の人たちが「就職」という言葉を発するようになってきて不安な毎日です。
いろいろやってるそうで、こっちはといえばだんだんと暇になってきました。
ただ不安に感じるだけでどうこうしようという気は一切起きないからもうどうとでもなーれ。
やることがねぇよ、っと。だからこそこのような文章を書いている次第でございます。
このブログの更新頻度は私の感じる暇さ加減を表すバロメータのようなものなのだよ。


そんなどうでもいい話は置いといてだね、結局別のどうでもいい話をするのだけれど。

とりあえず魅惑の西ボイス「こんなものかっ(笑」をボリュームおよびピッチ変更して、
まるまるそのまま読み込んで再生することには成功した。つまるところ、あとはMSの用意した
コールバッククラスを継承して、別スレッドでストリーミングな読み込みをするだけ。
だけとはいってもそこがわからなかったから今まで放置していたのだけれどね。

XAudio2を使う上で最低限やることの流れをまとめると

1.XAudio2の本体を作る。
2.最終的な出力先であるマスターボイス、たぶんスピーカー的な位置づけの人を作る。
3.音声データそのものを読み込む。
4.個別の出力であるソースボイス、たぶん音声データから実際に音を作ってくれる人を作る。
5.ならす。

割と簡単。DirectSoundもだいたいこんな感じだったと思うが。

暇だし、いっこずつ見ていきましょうか。そういえば塾の子らはどっかしらには受かったのかしら。
フォローのしがたいお子さんがたくさんで、塾講師始めてからすこし今後の日本を心配しましたけど。

1.XAudio2の本体を作る。
   IXAudio2* pXAudio2 = NULL;
   XAudio2Create(&pXAudio2, 0);
   エラーチェックしなければ以上。

2.最終的な出力先であるマスターボイス、たぶんスピーカー的な位置づけの人を作る。
   IXAudio2MasteringVoice* pMasteringVoice = NULL;
   pXAudio2->CreateMasteringVoice(&pMasteringVoice)
   エラーチェックしなければ以上。

3.音声データそのものを読み込む。
    //mmioによるファイルハンドルみたいなものだと思う
    HMMIO hMmio = NULL;

    //RIFFファイル読み取りの際に必要な諸情報を格納する構造体
    MMIOINFO mmioInfo ={0};
    MMCKINFO riffChunk ={0};
    MMCKINFO formatChunk ={0};
    MMCKINFO dataChunk ={0};

    //読んで字のごとくWAVEファイルのフォーマット情報を格納する構造体
    WAVEFORMATEX wfx ={0};

    //データを格納するバッファ
    BYTE* pData;

    try{
        //ファイルオープン
        hMmio =mmioOpen(L"test.wav", &mmioInfo, MMIO_READ);
        if(!hMmio)
            throw "Waveファイルのオープンに失敗しました";

        //RIFFチャンク検索
        riffChunk.fccType =mmioFOURCC('W', 'A', 'V', 'E');
        if(mmioDescend(hMmio, &riffChunk, NULL, MMIO_FINDRIFF) != MMSYSERR_NOERROR)
            throw "RIFFチャンクの検索に失敗しました";

        //RIFFチャンクからfmtチャンクへ降りる
        formatChunk.ckid =mmioFOURCC('f', 'm', 't', ' ');
        if(mmioDescend(hMmio, &formatChunk, &riffChunk, MMIO_FINDCHUNK) != MMSYSERR_NOERROR)
            throw "fmtチャンクの検索に失敗しました";

        //fmtチャンクからWAVEフォーマットを読み取る
        if(mmioRead(hMmio, (HPSTR)&wfx, formatChunk.cksize) != formatChunk.cksize)
            throw "フォーマット読み取りに失敗しました";

        //RIFFチャンクへ上る
        mmioAscend(hMmio, &formatChunk, 0);

        //RIFFチャンクからデータチャンクへ降りる
        dataChunk.ckid =mmioFOURCC('d', 'a', 't', 'a');
        if(mmioDescend(hMmio, &dataChunk, &riffChunk, MMIO_FINDCHUNK) != MMSYSERR_NOERROR)
            throw "dataチャンクの検索に失敗しました";

        //波形データそのものを読み取り
        //Waveデータのサイズからまるまる全部入るだけのバッファを作成

        pData =new BYTE[dataChunk.cksize];
        if(mmioRead(hMmio, (HPSTR)pData, dataChunk.cksize) != dataChunk.cksize)
            throw "データの読み取りに失敗しました";

    }
    catch(char* error_str)
    {
        //ファイルを閉じる
        mmioClose(hMmio, 0);

        cout<< error_str <    }

    ああ長い。よくわからないけどWAVEの読み取り方はこうやるのがセオリーなんだろう、ググった結果。
    ここらへんに関してはWvaeAnalizerみたいなクラスにまとめちゃうのがいいのかもしれんから、
    そっち先に作るか。ぶっちゃけDirectXのサンプルについてるそんな感じのクラスを使ったほうが
    早いのかもしれないけど、なんだか何やってんだかよくわからないから性能悪くても自分で作る。
    だって、ひまだもの。


4.個別の出力であるソースボイス、たぶん音声データから実際に音を作ってくれる人を作る。
   IXAudio2SourceVoice* pSourceVoice = NULL;
   pXAudio2->CreateSourceVoice(&pSourceVoice, &wfx)
   エラーチェックしなければ以上。

5.ならす。
   pSourceVoice->Start();
   やったね!

DirectSoundと違ってWaveファイルの読み込みさえできれば、XAudio2に関する部分においては
10行程度で記述できると思われるし、使い勝手はそれなりに簡単になっている模様。
一応ループフラグを立てておくと延々と「こんなものか(笑」って言ってくれた。マジうざい。
再生したい生データをそのまんまキューに送ってやれば勝手に再生してくれるうえ、
コールバックを設定できるのでストリーミングの実装方法の理屈自体は理解しやすい。
よってこれから学ぶべきはマルチスレッド。別スレッドを作ることはそこまで難しくないしのんびりやるか。




理想と現状

理想->そろそろライブラリ完成
現状->まだまだライブラリ未完成

ま、そんなことは至上命令でもないので趣味的にまったりやろ~。
最近はマーベルVSカプコン3を(肉体的に)必死こいて攻略中。
PSコンの方向キーのエッジが有する破壊力を見誤ったが故、左親指の皮中央に穴が開いた今日この頃。
おかげでPSコンは赤黒く…なったけどゲームはしたいよね!せっかく買ったし。

ということで自己流格ゲー様コントローラーの使い方談義。
しかし格ゲーはやっぱり難しいですなぁ…。派手さに反して弾幕シューティングより精密性が要求されますからね。
しかも肉体的な反射神経を。弾幕のが精神面負担率が高い分私には向いてる。


1.アナログスティックを使う。
現状これがメイン。手が痛いので。波動コマンドと回転系コマンドはやりやすい。
が、異様にジャンプが暴発するのと、昇竜コマンドを実戦でやるのは難易度高すぎ。
とはいえそもそもガチで格ゲーやったのは初めてに近く、EAZYに辛勝がいいところで、
必殺技自体コンボに組み込むのが至難の業なため問題はないかもしれない。
しれないが、ネット対戦すると矢印キーより瞬殺率が心なしか上がる気がする。

2.簡単操作モード
ぶっちゃけこっちのが連打が許される分明らかに初心者である私は楽。
必殺技もコマンド自体がないので指を痛めない…のだがそのぶん出せる技が制限。
戦略なんか考えるレベルじゃなく見た目派手に楽しめるのでいいんだけど、
ネット対戦で使うと、個人的に何となく申し訳ない感があるのが唯一難点。

3.じゅうえんだま
を方向キーに貼り付ける。両面テープで。コンビニにポテチ買いに行ったとき思いついた。
一度騙されたと思って十円玉あてがってみ。そのサイズのピッタリ感に感動するから。
利点は指が痛くない、コマンドいれやすい。難点は銅臭い、力んでズレると致命的。総合的には昇竜出しやすいが若干違和感のあるアナログスティックな感じ。割とあり。

4.諦めてパッドかスティック買う
諦めたらそこでs(ry



という感じですね。
ところでPS3お持ちの西さんらみなさん、アサシンクリードが嫌なら、
はなから対戦ツールとして作られたこれで対戦しようぜ。私、ネット対戦だと瞬殺だから…。




ゲームやりてー

やりたいなー。

せっかくだから更新したほうがいいと思うので今日は私が嫌いな話し手自身の話(日記)をしましょう。
人のペットの話、人の旅行の話、人の妄想の話は、三大「内心ぶっちゃけどうでもいいんだけど」話だと思います。
でもきっとしている方はどんな時よりその話を楽しんでるでしょうな。
人生ってそんなものですよね、全然わからないけど。
ウゾダドンドコドーン!サッギョクスルテイッタディアナイディスカー!オンドゥルルラギッタンディスカーニシサーン!


続きを読む

フラーレンてなんだっけ

メモ:

文字列テクスチャ作成クラス
・ある程度はバッファに残しておいて高速に描画する。
・数字アルファベットはあらかじめ内部で作成する。

スマートポインタ
・ウィークポインタ的な機能
・参照カウンタ方式のboostのやつはnewでよくわからんが遅いらしいので、
あらかじめメモリを確保するか理解できてないリンクリスト方式で。

Xaudio2
・とりあえず再生、wave読み込みの見直し
・コールバックによるイベント管理でストリーミング再生実装

入力
・とりあえずマウスも追加
・もう少しキー入力増やす

オブジェクトリスト
・動的作成をメモリプールで効率化
・簡便なファクトリの実装


夏休みより長いし、と思い本腰入れてガチガチにやると意外と時間がない。
そろそろ入試らしいが余計なとばっちり喰らわんためにも真面目やっていただきたい生徒のみなさん。
あの中学生に欲情するとはロリコンはマゾを兼ねるのか、想像出来ないですよねぇ、西さん。西さん。


ところで何か虚しい(訳:日々の趣味的作業にリアクションがなくて(´・ω・`))ので
クッキー西さんカワッコさんあたりもGLUTあたりから一緒にCか何か学ぼうぜ!

DirectX9

世間様はDirectX10・11マンセーなのかもしれませんが扱い方がようやっと理解できて来たのでDirectX9です。
自分のイメージ先行なので間違ってはいるかもしれませんが今のところ動いてるんで大丈夫でしょう。

さて今日は四角形の自由変形に関して。
2D描画をGLUT気味にしたいと考えていて、単位四角形を自由変形したいと思っていたわけですが、
これを2次元のみでやるのは難しく、パースを考慮した射影変換をしてやる必要があるわけです。
2次元図形の射影変換にはxyに依存する値での「除算」がかかわってくるためになかなかに悩みました。
通常の行列演算では行列の割り算は定義されておらず、そもそも行列の成分はその変換時には
「定数」であるために、xyに依存する値を行列の成分にすることはできません。
できませんが、xyに依存する値を「頂点自体に」保存することが可能と思い立ちました。
そもそもデフォルトの射影変換はこの方法を用いているようなので大したことじゃないんだろうけど、
自分で気づくとテンションあがるよね、一人で勝手に。
また、四角形の自由変形は、もっと簡単に考えれば各座標に異なる変換を施したいという要望になるわけで。

今回はこの二つの方法を用いた四角形の自由変形でも。

続きを読む

西ゲ開発に関して(9)

午前一時帰宅。タ・ト・バ!
とりあえず2010EEを落としてきて、最新版のWindowsSDKをインストール。
英語を読むのが面倒なので、全部チェック付けてポチっとしたら1.2だか6だか
インストールしますって文字が見えたけど見なかったことにした。
やばい、主に西さん関係のどうでもいいファイルでCドライブが圧迫されてる。
1GB近くあるんだけどどっから沸いてきたのこれ?

午前2時半インストール完了
そして2010を起動してみる。ワードとかとおなじであの無駄にスタイリッシュな
デザインがMSのブームなのか・・・。若干イラッとする。そいでとりあえずプロジェクトを
コピってきて設定後、WIN32環境で動くかどうかためしにコンパイル。
一応問題なく動くようですね。

そして次は問題の64bit環境へ向けてコンパイルできるのか?
設定を見ると2008には無かったx64向けのものがあったため、コンパイルは出来るようだ。
だがしかし設定をするのが訳わかんないくらいメンドクサイ。難しいとかそういうのじゃなくて、
単純にメンドクサイ。もっと楽なUIにしてほしい。直接設定ファイル弄った方が見やすいじゃん・・・。
で、そこを変えてライブラリを64bit用に設定しなおす。
直してたら訳分からんことが書いてあったので「ちょっと」直してみるか。
気がついたら時間がちょっとじゃなかったけど気にしない。ビルドをポチ。



・・・あれ、何の問題もなくコンパイル通ったぞ・・・?
Win32APIって言うくらいだからWin64API見たいのがあってそれに書き直さなきゃならんのでは、
と思っていたのだがなんか気持ち悪いくらいすんなり通った・・・?警告のひとつも出ずに?ふーむ。
実行ファイルの大きさが1.2倍くらいになっているのはこれはそういうものなのか?
が、やっぱりと言うか当然と言うかどっちにしろビルドできても起動は出来ない。
有効なWin32アプリケーションじゃないとか言われて起動しない。するわけ無いんだけどね。


で、どうしましょうかこれ?

そのうちアップロードするか、スカイプあたりで渡すんでいっしーさん試してみてくれまいか。
どう考えても人柱になっちゃうのはいかんともしがたい。


・・・



タカッ!トラッ!バッタッ!

ああ何だろう耳から離れない・・・。リフレインし続けてる・・・。



・・・


よし、寝よう。




西ゲ開発に関して(8)

64bit環境に関して。

スペック十分なのに処理落ちする原因は、64ビット環境で32ビットをエミュレーションしているからとの報が。
あー64ビットですかー。と、言うことで64ビット向けにコンパイルできないか調べてみた。

結論から言うと。
VC++2008EEならば非正規な方法で64ビット向けのコンパイル作業が出来るそうです。
http://www.sharkpp.net/blog/2009/04/26/visual-c-2008-express-edition-enable-64-program.html

そもそも現在使っているVC++2008EEはいわゆる無料体験版、機能制限版であるために64ビット向けの
コンパイル機能はオミットされてしまっているようです。
DirectX9に関してはアーキテクチャがx86向けもx64向けもどちらに関しても一応ライブラリファイルが
インストールされていたので、コンパイルさえ通すことが出来ればある程度64ビット向けに移植できそうです。

しかし。

まず、2つのアーキテクチャはそもそも扱うメモリ空間が違う(8Tと4G)、つまりポインタの長さが
変わってきます。だからどうだと言うことでもないのですが、今までのコードの中で型(intとかchar)
の「サイズ」に依存したものがあると、多分正常に動かなくなるんじゃないかと思います。
簡単に言うと、ソースを大幅に書き換える必要が出る「かも」知れません。理解できないエラーが
出たりすると僕の頭が可哀想な事になります。具体的なところはやっていないのでよく分かりません。

次に、これは今までなんだかんだ書いた中で一番重要なんですが、「俺、64bit環境無いやんかー」。
宅には32bitXPしかありません。よって例え上記の問題を非正規に克服して64bit向けにコンパイルしても
何にも確認できない!とんでもない人柱を他人に要求することになります。

まとめると、「出来ないわけではない」のですが、バッチファイルを実行しないと64ビット向けへの対応は
難しいようなので、(私の環境での)現状としては「出来ない」という結果になるかと思われます。
ソースファイル上げるからそっちの環境でコンパイルしてみて、ってのが今のところ一番安全かなー・・・。

と言うことです。何かひらめいたら他の手段も考えて見ます。
今のとこ、今までどおりエミュレーションしてもらうしかないような。すいませんが。
しかし、つまりはクッキーがぬるぬる動くってことはビスタか7で64bitじゃ無いのか・・・?FF14やるのに。


それだけではなんなので、リプレイ機能を付けてみました。
が、ごくごくたまーーーにボス戦で意味不明な挙動をするのかもしれません。
いつかの震えるイクラみたいな感じにNishi-sanがぶるぶるします。
と、言っては見ましたが、実はリプレイファイルをわたしが間違えて
弄っちゃったんじゃないかって言うのが最有力です。

前回のファイルを適当に上書き・置き換えすることで更新してください。
仕様とかいろいろなことに関しては中身の更新履歴を見てください。

http://www1.axfc.net/uploader/Sc/so/153512.zip
PASS : nishi

追記:
2010ならExpressでもコンパイルできるとかなんとか見たけど
主に眠気でウワーな感じなのでいつか回復したときに。


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。