テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル


log

2009.10.31 C++:ガッ!!

ファイル 197-1.jpg

C++のプログラムをほんの少し更新しました。
タイトルは特に、ぬるぽ的な意味はありませんよ。

変更点はというと、
・スプライトのαブレンディングが無事成功しました
・モデルがライティングされるようになりました

これくらいです。スプライトαテストの件はD3DRS_ALPHAREFと
D3DRS_ALPHAFUNCのレンダーステートを設定することで
無事解決しました。

ただ、それだけだとモデルとの半透明合成が行われなかったのですが。
なぜかスプライト描画前にD3DRS_ZWRITEENABLEを
OFFにすることでαブレンディングされました。

Zバッファに書き込むかどうかなんてスプライトに関係ないかと思って、
今まで設定してなかったのですが、スプライトはスクリーン座標系を
使用してるからなのか、どうもOFFにするのが無難なようです。

…ええ、詳しくは分かりませんでした。

それとモデルのアンビエントがなぜかうまく設定されなかったので
描画時のマテリアルループ毎にアンビエントの設定をかませることで
解決させたんですが、これも謎。謎だらけだなあ。


そういえば、ぬるぽって何なんでしょうね?
今まであまり興味なかったけど、C++扱うのなら少しくらい調べてみるかな。

それと、今日はひさしぶりにニコニコ生放送を見ていたのですが。
といっても、(名前を出してしまうと)Land-Yさんの動画の
最後だけチラ見しただけなのですが。
今回はICEでUVを設定するということをやっていて、
行列関係の話で盛り上がっていたのですが。そのなかで
「テクニカルディレクター向きな話だな」
というコメント(だったかな?)があって。はじめてそんな役職があることを知りました。

正直なんだかいいなと思いました。てくにかるでぃれくたー。

10年後くらいにはなれるといいな。
けど、10年後も平のデザイナーとかやってそうですが…。。
先の目標ができた分見れてよかったなと思いました。

2009.10.30 C++:とりあえずXファイルを読み込み完了!

ファイル 196-1.jpg

とりあえずC++のプログラムはスプライトとスキンメッシュ無しの
Xファイルの読み込みを実装させてみました。

長かったー。

個人的にはスクリプトを記述するよりも、クラスを組むときに
どうやったら後々効率がよくなるか考えてる方が時間かかってしまいます。

スプライトの方はタイル番号を変更することでテクスチャに格納されている
フォント群に合わせてUVを変更できるようにしました。
けど、今のままだと1文字ずつ描画する度にDrawPrimitive()を
呼び出していて、複数文字を扱うと処理が重くなりそうなので、
文字部分のスプライトの頂点バッファは1つにまとめて
扱うように変更しようかなと、ただいま検討中。

Xファイルの読み込みも実は標準命令で読み込んでるし…。
前まで自作でやろうとしてましたが、時間がかかるので後回しということで。

それとXファイルを読み込んで気がつきましたが、なぜかスプライトの
アルファテストがうまくいってません。(画像参照)
カラーキーでアルファ抜きをしていて、アルファ抜きはできているのに
モデルの上に被さると透明部分が背景色になる。なぜ?

2009.10.27 C++:ひさしぶりのVisual C++

今日はひさしぶりにC++の方のプログラムを制作していました。

スクリプトを組んでいると、いつの間にか触ってもいない部分でエラーが
大量に発生してしまい、原因を探すのにかなり時間がかかってしまいましたが。

どうやらクラスの定義の最後に;を付け忘れたり、#defineの最後に
;を付けたりすると、全く別の部分でエラーが発生するということが分かりました。

普通気づかんよ。こんなバグ。
え?慣れてる人はそもそもこんなミスしないって?
それをいっちゃあお仕舞いだ。

2009.04.15 C++:ゆっくりC++

更新あまりしてませんでしたが、色々とプログラムを追加してました。

多重起動できないようにしたり。
デバイスロストに対応したり。
マルチスレッドに対応させてみたり。
高速化するためにSetRenderStateがなるべく呼び出されないようにしたり。
ていってもまだXファイルを読み込む関数できてませんけどね。

今日はFPSを表示させてみたけど、なぜか40fpsくらいしかでません。。

変だ。

モデル表示すらしていないのに40fpsとな?うーん。。
試しにおちゃっこさんのWin32版E3Dサンプルをビルドして
やってみたけど普通に60fpsでてるし。

今のところ青画面だけなのでFPS表示の導入方法が悪かったのか、
他の部分が悪いのか分からないです。C++難しいな。

2009.04.10 C++:プログラム制作

プログラムがほんの少しづつですが出来てきました。

DirectXの入門本3冊を大体読んだので、
3D格闘ゲームプログラミングという本を読みながら
Xファイルの自作読み込みをやろうとしてるのですが、すごく難しいです。

とりあえずXファイルをシステムメモリに展開して、トークン単位で
読み込むところまでできるようになりました。

この本、CDについてる関数がすごく豊富で便利なんだけど
細かい説明がほとんど無いので、自分で調べるのにすごく時間がかかります。。
明らかにネット機能とか、関係ないものまでついてて、
どうも作者のライブラリをごっそりインクルードしてるようなんですが、
それだと細かい関数が多くて読み込みも処理も時間がかかるので、
こっちでひとつひとつ命令を調べて使う命令だけ
ひとつの関数にまとめたりしていました。

ちなみに僕自身、他人が驚くくらいすごく忘れっぽいので
僕のプログラムには「マニュアルか?」ってくらい、びっしり
ひとつひとつの命令や引数にコメントが入ってたりします笑。

それと、後になってなぜか僕のDirectX SDKディレクトリには
dmusici.hが入っていないことに気がつきました。

なぜ?

ちゃんとSDKインストールできてないのか、
別のIncludeディレクトリにでも入ってるのかな?
これじゃ音楽が扱えないです。

2009.04.08 C++:Geforce6200の悲劇

XSIのアニメーションの勉強をはじめていたけど、ここまでくると
Tipsにまとめるのが非常に面倒くさくなってきたので
XSIの書籍でも買って勉強することにしました。

で、ちょうどXSI7に対応している新刊が発売されてたのでアマゾンで購入。
ほんとは立ち読みしてから決めたかったんだけど、近くの本屋に
売って無いんですよね。。

それでとりあえずXSI本がくるまでの間は、ようやくC++でプログラミングを
はじめようと思ってプログラム組んでいたら、とあることに気がつきました。

そう、僕のパソコンだとHALが使えないんです!

HALっていうのは、アプリケーションの計算をほとんど
3Dビデオチップにお任せしてしまおうっていう機能なんだけど
どうもGeforce6200はその機能が使えないようです。
everestのレポートだとDirectXハードウェアサポートが
DirectX v9.0cって書いてあるんですけどねぇ。

けど色々プログラムを変えてるうちに、ハードウェアT&Lは
一応サポートしてることが分かったので。
普通のD3Dデバイス生成のプログラムだと、
①HAL + ハードウェアT&L
②HAL + ソフトウェア頂点計算
③REF + ソフトウェア頂点計算
が一般的だと思うけど、僕のプログラムでは②と③の間に
HAL + ハードウェア頂点計算をはさむことにしました。

てかせっかくGeForce6200買ったのに、今までテクスチャ計算とかは
CPUでやってたのか。。
どうりで前のビデオチップとあんまり変わらなかったわけだ。

まぁいっか。頂点計算はサポートできてるし。
XSI本楽しみだな。

2009.03.29 C++:DirectXに関する考察。

DirectXに関する考察。というかメモ。

以前半透明処理のソートを克服する方法として、
頂点単位ではなくアルファ単位のZバッファを作ればソートしなくても
いいんでないかと考えてたけど、どうもそれはA-Bufferといわれる技術だそうな。

けど、やっぱりその場合でもアルファ領域のポリゴンのZ値の違いの数だけ
バッファを作成しないといけないので、めちゃくちゃメモリを食うことになってしまう。

他には、圧縮テクスチャのほかにメッシュやUV座標を圧縮する技術もあるそうな。
でも調べてみたけど、ほとんど記事がみつからないし、みつけても英文でさっぱりだったり。。

あぁ、VRAMを超スマートに利用できるようになりたい。

それと以前服をモデリングしてたときにマテリアルの境目を
滑らかにしたいって考えてたけど、それを動的に生成する技術をハルシェーダーというそうで。
カメラからみて輪郭の部分のメッシュだけを滑らかに分割することで
輪郭のカクカクをなくすみたいです。
この記事をみたときに、おーって思ったけど。それって要するに
毎フレームおきにポリゴン(もしくはエッジ)単位で際の判定をするってことだから
よっぽど判定するポリゴンを限定しておかない限り、処理速度の面で
実用的でないような気がするし、それだったらあらかじめ
ポリゴンを割っておいた方が正解なんじゃないかと思う。
けど、こういうことを思いつく人はすごいなと思います。
ハルシェーダーは正直思いつきませんでした。

2008.10.19 C++:DirectXをはじめよう

今まで長いこと挫折していたDirectXだけど、もしかしたら僕でも
扱えるようになるかもしれないと思いました。

最近ちょくちょく勉強しているOPENGLは、すごく分かりやすくて
いいなと思っていて、調べてみると僕が扱っているのは
OPENGLはOPENGLでも、GLUTというフレームワークを使って
プログラムを組んでいるらしく、これによって面倒なウィンドウ生成まわりの
スクリプトを省くことができるようになるんですね。

で、DirectXについても同じようにVer.9からDXUTっていうのが
あるらしく、それを使えば僕にもGLUTと同じような感覚で
プログラムを組むことができるのかなと思いました。
(まだ分かりませんけどね。)

DXUT.hをインクルードすることによって、このフレームワークが
扱えるようになるようです。
OPENGLとDirectXは共通点がいくつかあるようなので、
同時進行で勉強するといいのかもしれない。