2009-01-01から1年間の記事一覧

就職

ゲーム会社に就職が決まった。一段落ついたし、またプログラム再開するか。。

深度バッファ

何か忘れていると思ったら、深度バッファを書いていなかった。 後は深度値を比較して塗りつぶし判定をする。出力してみたが、切れ目が入ってるようだ。。

ラスタライズ

ワイヤーフレームが出来たので、次はラスタライズに挑戦。 ブレゼンハムという有名な手法を使ってピクセルを塗りつぶした。まだシェーディングを行っていないので、ベタ塗り状態。

ワイヤーフレーム

授業が暇だったので、ワイヤーフレームでボックスを表示するプログラムを書いてみた。頂点を行列でスクリーン座標に変換しているだけだし、よく考えたらいつもやってることだ。 面白くなってきたので、ポリゴンを塗りつぶすプログラムも書いてみた。 次は変…

線形代数とか

C++

いままでD3DXのやつを使っていたけど、そろそろ自分で書こうと思い、ベクトルとマトリクスを書いてる最中。 その中でも、逆行列を求める関数の高速化が悩みどころだ。3次正方行列までなら行列式とかを使って地道に計算してもいいが、4次だと計算量が馬鹿に…

.NetのBitmapをポインタで操作する

C++

自前でピクセルデータとかいじらないし、使い道があるか分からんけど。 Bitmap ^buffer = gcnew Bitmap(256, 256); // ロック対象矩形 Rectangle rect(0, 0, 256, 256); // 書き込み専用でbufferをロック Drawing::Imaging::BitmapData ^bmp_data = buffer->…

もう一つの輪郭抽出

Sさんに輪郭抽出の話をしたら、フィルタを使わない方法を教えてもらった。 メッシュの面を裏返して、少しだけ拡大して黒で描画するというものだ。早速実装したが、カメラの距離によって輪郭線の太さが変わってしまう。輪郭線といっても元はメッシュだから当…

続・トゥーンシェーダ

前回上手くいかなかった輪郭線の抽出をフィルタを使ってやってみた。 t-potさんの本を参考にフィルタを作成。 一度レンダリングした画像の深度バッファからテクセルの差分をとって輪郭線を書く。 という方法で実装した。元がアセンブラのコードだったので、H…

今更だけど

トゥーンシェーダを実装してみた。 まず、色の階調化だけど、これは簡単にできた。ライトのベクトルと法線の内積をとって、UV座標を計算。ベクトルは正規化しないとU値が1より大きくなるので注意。このままでは、値が0以下のこともありえるので、0から1の範…

毎日ゴロゴロ

やる気が出ないで、一月以上日記つけるのをサボってしまった。 最近はSさんに触発されてやる気が出てきたので、何か新しいことをやろうと思い、マルチスレッド関係の本を買ってきた。学校の課題とかもあるので、のんびり勉強中…

また、しょうもないことで時間を無駄にした

描画バッファをスワップするたびに、謎のちらつきが発生。 ソースを読み返したら深度バッファ使ってないのに、深度バッファのクリアフラグが書かれているのを発見。 消去したら直ったが、これで30分くらい無駄になった・・・。アライメントの関係でBitmapは…

Spriteで画像表示

PSPSDKのGuを使用して画像表示するとこまでやった。 サンプルではテクスチャを事前にbin2oでオブジェクトファイルにして読み込んでいるが、いちいち画像を追加するたびにMakefileを書き直さなくてはいけないし、rawファイルしか使えないので面倒すぎる。デー…

PSPSDKのfreadはゆっくりしすぎ

PSPSDKのfreadを使って画像を読み込もうとしたのだが、512*512のビットマップをロードするのに軽く30秒以上かかる。遅すぎる。 いろいろと調べていたら、ファイルの読み込みは、sceIoRead関数で4byte境界で行ったほうが、早くなるらしいとのこと。とりあえず…

cygwinて名前は聞いたことあるけど何なのか知らなかった

PSP修理の失敗談を友人Mにしたら、PSPを貸しても良いと言ってくれたので、有難く借りてきた。 まずはPSPSDKのインストールからはじめた。が、俺はlinuxなどさっぱり分からないので、解説サイトを見ながら試行錯誤する羽目に。。一日掛けて何とかインストール…

ジャンクのその後

以前頼んだ液晶は二日後位に届き無事に交換することができ、起動も確認できた。が、少しいじってみるとメモリースティックとUMDを認識しない状態であることが判明。しかもかなりの頻度でフリーズ・・・。 仕方ないので完全に分解して掃除&どこが悪いのか調…

ジャンク

去年の暮れ頃、友人に画面の割れたPSPをもらった。 修理しようにも金欠で、部品どころか飯も買えないような状況だったので、そのまま放置していたが、長期休暇にバイトしたこともあり、金銭的な余裕ができたので修理することにした。 PSPの状態は、液晶割れ…

圧縮ファイルの中身

ネットを徘徊していたら、zipのファイルフォーマットについて解説しているサイトを見つけたので、これを参考に簡単なzipファイルを吐き出すプログラムを書いてみた。 zipの中身は基本的には、圧縮されているファイルの情報が入ったヘッダ、ファイルのデータ…

boostをビルドメモ

VSのコマンドプロンプトからboostのディレクトリに移動してbjamコマンド実行。以下オプション --toolset = msvc-x_0 コンパイラの指定VSならmsvc。バージョンを指定することも可、msvc-8_0、msvc-9_0、等。 link, runtime-link = static, shared 生成するラ…

クラスは自殺しても良いのか?

C++

ネットで拾ったソースを読んでいたら delete this していたので、これについて調べてみた。 結論から書くと、文法上間違ってはいないし、危険性を認識した上でいくつかの事柄を守れば、使用しても問題無さそうだった。 #include <iostream> class Suicide { public: vo</iostream>…

フィードバック・ブラー

試験も終わったのでプログラミング再開。 ゲームの見た目を華やかにするなら、やっぱりエフェクトをかけるのが手っ取り早い。 ということで、手始めにフィードバック・ブラーを実装。 前フレームに描画したものを拡大して、半透明合成するだけの簡単なものだ…

簡単な物理シュミレーション

前回の球を大量に表示していたら、何となくパチンコを連想してしまったので、球同士の衝突を実装してみる。 ついでにボックスも実装しておいた。 ボックスにめり込んだり、球を大量にばら撒くとクソ重くなってしまう等、まだまだ改善の余地があるなあ。

cook-torranceの反射モデルを実装してみる

DirectX9 シェーダプログラミングブックを見ながらcook-torranceを実装してみた。 とはいっても、計算式そのものは全くわからないんだけど、、あと、図書室で Morden C++ Design を見つけたので買わなくてすんだ。暫くは図書室に通うことになりそうだなぁ。

boost::spiritで構文解析

前から気になっていたspiritのページを少し読んでみた。 これを使ってBNF(Backus Naur Form)で文法を定義すれば、構文解析機が出来上がるという代物らしい。 以前、自前で字句解析機や構文解析機を書いていたが、結局面倒になってやめてしまったので、今度は…

enable_shared_from_this

shared_ptrにつっこんだクラスのメンバ関数内で、thisを値にもつshared_ptrを使いたいという場面があった。 weak_ptrをメンバ変数として持たせ、生成時にそれに記憶させるという手法をとっていたのだが、似たような機能を付加させるenable_shared_from_this…

バイト中

インフルエンザで学校が一週間ほど休みになったので、日雇いの仕事をしている。 給料でプログラム関係の本を買うつもり。 以下、気になる本リスト Morden C++ Design Effectiv STL ゲームプログラミングのための3Dグラフィックス数学学校の図書室にあるのは…

思わぬものが出てきた・・・

Windowは表示できたので、次はDirect3Dのコードを書こうとしていたら、HDDの奥からバックアップを取り忘れて消してしまったと思っていたDirect3Dのソースファイルが出てきた。 なので、これを流用してDirect3D部分を実装。試しに画像を表示してみる。次は入…

Window表示

C++

ゲームでも作ろうかと思って、昔書いたWindowを表示するコードを見たら結構酷かった。 このまま使うのは嫌なので、クラスを使って書きなおし。メンバ関数をCALLBACKにして使えないか調べていたが環境によってやり方が異なるようなので、おとなしくstaticにし…

なんとなく開始

毎日の勉強についての日記。 主にプログラム関係のことを書いていく予定。