■
マルベリーのキャラクターのレンダリングに使用している頂点ブレンディングがRadeon系でバグっているようでRadeon9550を買って来ました
一応D3DCREATE_HARDWARE_VERTEXPROCESSINGは無理だろうなぁとは思っていたのでD3DCREATE_MIXED_VERTEXPROCESSINGで切り替えしていたんだけど、前からあやしいなとは思っていました(笑
実行してみるとやっぱりMaxVertexBlendMatrixIndex関係かなーというかんじに腕がひん曲がる
今更頂点ブレンディングを固定機能でやるのが間違っているのかもしれません
ちなみにトゥーンレンダリングのエッジのレンダリングにはなぜか頂点シェーダを使っていて
そこまでやるなら両方やればいいのにorz
で、プログラムを見ると
unsigned long aMaxVertexBlendMatrixIndex =::Mulberry3DLevel::Instance().GetDeviceCaps().MaxVertexBlendMatrixIndex; if(aMaxVertexBlendMatrixIndex==0 || aMaxVertexBlendMatrixIndex>0 && aMaxVertexBlendMatrixIndex+1<fMaxFaceInfl) { fSoftWareProcessing=true; } else { fSoftWareProcessing=false; }
・・あれ?合ってませんか?
よくよくヘルプを見てみますとMaxVertexBlendMatrixIndexの説明のところにこうある・・
ライティングにブレンディングする必要のある頂点データに法線が存在する場合、行列の数は、この能力フラグで示されている数の半分になる
あれ・・そうでしたっけ?前からあった?orz
確かにCloneFVFでD3DFVF_NORMALはつけましたさ・・
正解はこっちだったのね
unsigned long aMaxVertexBlendMatrixIndex =::Mulberry3DLevel::Instance().GetDeviceCaps().MaxVertexBlendMatrixIndex; if(aMaxVertexBlendMatrixIndex==0 ||aMaxVertexBlendMatrixIndex>0&&(aMaxVertexBlendMatrixIndex+1)/2<fMaxFaceInfl) { fSoftWareProcessing=true; } else { fSoftWareProcessing=false; }
でもせっかくだから頂点シェーダにします^^;
あぁ意味なかったなぁ・・・orz