C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

なんとなく思いついた事

納品まであと数時間!
このタイミングでレアケースで発症するバグを見つけてしまった。
そんな時・・・

このバグを直せないのが初級プログラマー
このバグを直してしまうのが中級プログラマー
このバグの原因を突き止めておくのが上級プログラマー
このバグを見なかった事にするのがSE
このバグの言い訳を用意しておくのがPM


一番問題なのは中級プログラマなのだと思う。
そして本人は一番正しいことをしていると胸をはることだろう。

そういう若さが、自分にはいつの間にかなくなってしまったのだなぁと寂しく思った。


ちなみに上記の中に正解はない。
ベストな回答は正直に話ができる顧客との友好で平等な関係だと思うのだが・・・

しかし、どうしてか、この選択肢のenableは、いつもfalseだったりするのは、なんでだろうねぇ。
このエントリーをはてなブックマークに追加
LINEで送る

変換とか

SM3.0で使える最大テクスチャサイズは本当は2048pxまでで、
それ以上はハードによってはオプション的に対応している。
これはMRTについても同様のことが言える。

よってSM3.0に対応しているかどうかだけのチェックではハードの対応状態の判断がつかない。


あとCOLOR0、COLOR1とかセマンティクスをつけた場合COLOR0を未使用のままCOLOR1が使用できないとのこと。

バーテックスエレメントの指定とセマンティクスのサイズ差による型変換は公式に書かれていた。(URL忘れた・・)


Vector3.TransformNormalをHLSLで実装したい人がいるか怪しいが、
結構苦戦したのでメモ


struct VS_INPUT
{
float4 Normal : NORMAL0;
}

struct VS_OUTPUT
{
float4 ColNormal : COLOR1;
}

VS_OUTPUT output = (VS_OUTPUT)0;
float4x4 skinTransform = CreateTransformFromBoneTexture(input.BoneIndices, input.BoneWeights);
output.ColNormal = float4(normalize(mul(input.Normal.xyz, skinTransform).xyz), 1.0f); //TranceformNormal


出力先がfloat3の場合 float4( と ,1.0f) を消してやれば良い。
"ミソ"はノーマライズした結果の.xyzを利用すること。
このエントリーをはてなブックマークに追加
LINEで送る

セマンティクスの罠

セマンティクスのポジションを指定するときXNA側でVector3を指定したとき、
HLSL側での指定をfloat3とかやってしまうと、座標系がどこぞへとぶっ飛んでしまう模様。
この事実に気がつかず、モデルが一切表示されない状態に一週間陥っていた・・

分かってしまえばなんてことはないんだけど、
分からないとHLSLはどうにもハマることが多くていけない。

こう、もっとサラリと使えるデバッガがあればいいのに・・


ちなみに今回問題となったVertexElementは下記の通り

VertexElement[] {
new VertexElement(0, 0, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Position, 0),
new VertexElement(0, sizeof(float) * 3, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Normal, 0),
new VertexElement(0, sizeof(float) * (3 + 3), VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Color, 0),
new VertexElement(0, sizeof(float) * (3 + 3 + 3), VertexElementFormat.Vector4, VertexElementMethod.Default, VertexElementUsage.BlendIndices, 0),
new VertexElement(0, sizeof(float) * (3 + 3 + 3 + 4), VertexElementFormat.Vector4, VertexElementMethod.Default, VertexElementUsage.BlendWeight, 0),
new VertexElement(0, sizeof(float) * (3 + 3 + 3 + 4 + 4), VertexElementFormat.Vector2, VertexElementMethod.Default, VertexElementUsage.TextureCoordinate, 0)
}


んで、HLSLのポジションのセマンティクスが
float3 Position : POSITION0;
って感じだとダメで
float4 Position : POSITION0;
とする必要がある。


普段気にせずにいたけど、勝手に型の変換とかしてくれてるんだと思う。
やれやれ。
このエントリーをはてなブックマークに追加
LINEで送る

 | HOME | 

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2011-02 | »
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 - - - - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約