まきょーんのどうでもいい日記

どうぞよしなに・・・

DirectX10の本

Beginning DirectX 10 Game Programmingを読みやすいように訳してます。
訳さないでも読める場所や、今更こんなこと知ってもしょうがないって場所はすっとばしてますが。
とりあえずDirectX10勉強したい人は読んでおいて損は無いと思います。
別窓 | Programming | コメント:0 | トラックバック:0
∧top | under∨

やばい、XNAいじりたくなった

西川さんの記事です。GameWatchより
西川善司の3Dゲームファンのための「XNA Game Studio 2.0」講座
XNA2.0でXbox LIVE アーケードデビューするまでの道のりは?

XNAでついにネットワーク対応だそうです。
主な内容はDirectX10.1とXNA2.0について。

うーん、久しぶりにいじってみようかな…
別窓 | Programming | コメント:0 | トラックバック:0
∧top | under∨

思わぬところでいい参考資料見つけた

1.ふと思い出してXNAをいじってたんですけど、そいえばサンプルが充実してるじゃないか…!と思い出す
2.XNA Creators Club Onlineへ行く
3.うほ…いいサンプル

全部英語ですけど、愛と気合があれば読めます。
別窓 | Programming | コメント:0 | トラックバック:0
∧top | under∨

シャドウマップ

今日はシャドウの勉強
有名なシャドウの技法としては投影シャドウ、シャドウマップ、シャドウボリュームですかね

今日はサンプルにあったシャドウマップをやってみることに。
ゲームのリアル性を求めるならシャドウは欠かせません。シャドウがあるなしでは物体の位置把握がしにくいからです。丸影でもあるなしでは結構違いますし。

丸影は単にテクスチャを地面に置くだけなので超軽いです。PS、PS2なんかは特に多いですね。
地面リアルに移したいだけなら投影シャドウ使えばリアルになります。
ただこの場合は一つのオブジェクトは一つのオブジェクトにしか影は落とせません。シャドウ用のテクスチャたくさん容易すればできますけど、非効率すぎますね。
投影テクスチャの弱点は何かの物体があっても貫通して影を指定したオブジェクトに落としてしまうということでしょうか。まぁ…そこまでリアルにこだわる必要性はないですけど。

さてシャドウマップですが、まぁ技法としては有名なんでさくっと。

ライトから見た深度値をテクスチャに書き込む
レンダリング先に用意したテクスチャを指定してビュー行列にライトの位置を設定してあとはそのままレンダリングすれば完成

シェーダコードはこんな感じ
// 頂点シェーダの関数
float4 VS_SM(VS_INPUT input) : SV_POSITION
{
// 頂点座標 モデル座標系→透視座標系
float4 Out;

Out = mul(input.Pos, World);
Out = mul(Out, View);
Out = mul(Out, Projection);
return Out;
}
float4 PS_SM( float4 In ) : SV_Target
{
float4 FinalColor;
FinalColor= In.z / In.w;
return FinalColor;
}

すごいうちにくい。外部エディタで編集してからここにのせるんだった。

んでまああとは通常空間でテクスチャを貼り付けて各ピクセルの色を算出してから深度マップの値を小さい場所を影と判定して黒く塗りつぶせば完成。

シャドウマップは重いですけど、最近のマシンなら特に問題ないと思います。オブジェクトが1000個とかあったら重いと思いますけど。

あとは深度マップに書き込む時のオブジェクトを通常描画するときのオブジェクトとは別のローポリのオブジェクトを用意すれば処理的には軽くなります。

シャドウはあまりやったこと無いので適当なこといってたらすいません。勉強途中なのでがんばります。間違えてたら指摘してください(´・ω・`)


別窓 | Programming | コメント:0 | トラックバック:0
∧top | under∨

久しぶりにプログラムネタ Lua編

オープンソースのLua
正直使わない手は無いと思います

何故か日本の企業は海外のオープンソース物やミドルウェアってのをあまり使いたくない様子

せっかくなんでVC2005での使い方を紹介
ここから最新のLua(lua5_1_2_Win32_vc8_lib.zip)を落としてください。2007年8月31日現在最新バージョンは5.12です。

解凍するとlua5.1.libファイルとincludeディレクトリが作成されます。

プロジェクトに lua5.1.libのライブラリ参照を追加し、次にincludeディレクトリにもパスを通せば完了です。

C++で使用する場合はこうしないとリンクエラーになります
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
これはLuaがCで書かれているためです。

適当にそのうちまた追記します…


別窓 | Programming | コメント:0 | トラックバック:0
∧top | under∨
| まきょーんのどうでもいい日記 | NEXT