【C++】 DirectX初心者質問スレ Part32 【C】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/10/29(金) 01:08:02これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part31 【C】
http://hibari.2ch.net/test/read.cgi/tech/1285850721/
0002デフォルトの名無しさん
2010/10/29(金) 02:06:16http://msdn.microsoft.com/ja-jp/library/bb219685%28v=VS.85%29.aspx
0003デフォルトの名無しさん
2010/10/29(金) 03:39:18苦労を労って虎のxファイルをやろう
0004デフォルトの名無しさん
2010/10/29(金) 10:22:42どのようにして扱ってるのですか?
0005デフォルトの名無しさん
2010/10/29(金) 10:35:19だからXファイルで十分。
マイクロソフトがWindowsXpを越えるOSを出せるのだろうか、
その可能性は少ない。
0006デフォルトの名無しさん
2010/10/29(金) 11:14:24頂点バッファやインデックスバッファ、アニメーションデータをそのままバイナリで保存しなおせば
直に扱えるデータの出来上がりじゃない
00074
2010/10/29(金) 11:22:390008デフォルトの名無しさん
2010/10/29(金) 22:50:36OS再インストールして最新のSDK入れたらビューアがない…
今でも入手できる?
0009デフォルトの名無しさん
2010/10/29(金) 22:59:249だよね?
あるよバグってるけどw
DirectXViewerになってね?
でもバグってるんだ
正常なはずのXFileが読めない(ときがある!)
0010デフォルトの名無しさん
2010/10/29(金) 23:05:49下記URLの某ゲーム画面は牌や卓の輪郭がとても滑らかに表示されています。
ttp://blog-imgs-18-origin.fc2.com/s/a/n/sanmayonma/20090303_01s.jpg
私は「DirectXゲームグラフィックスプログラミングVer2.0」という本を参考に作ってみたのですが、
本の通りにXファイルから読み込んで表示させていますが、
輪郭が滑らかにならず、ぼかしがないギザギザな感じで表示されてしまいます。
一応オプションで
SetRenderState( D3DRS_DITHERENABLE, TRUE);//高品質描画
SetRenderState(D3DRS_ANTIALIASEDLINEENABLE,TRUE);//アンチエイリアス
ということはやっております。
どうやったら滑らかになるでしょうか。
0011デフォルトの名無しさん
2010/10/29(金) 23:30:11それらのステートはアンタの環境で
サポートされてるの?
まずそっからでしょ
0012デフォルトの名無しさん
2010/10/29(金) 23:47:04それ以前にそれらのレンダリングステートはポリゴンのジャギを消すのに役立たないでしょ
とりあえず手っ取り速くアンチエイリアスを掛けたいなら
CreateDeice時にフルシーン マルチサンプリングを有効にする
ttp://msdn.microsoft.com/ja-jp/library/bb172574(VS.85).aspx
でも、かなり負荷がかかるしそれほど望むほど綺麗にはならないかもしれない
そのゲーム知らないからなんとも言えないけど
まずその牌はほんとに3Dなのだろうか?
ライティングもしてないようだし3Dっぽく描かれた2D絵のようにもみえる
3Dだとしたら
・牌のポリゴン数を見た目以上にたくさん使ってるとか
・シェーダーで輪郭線に対してぼかしをかけてるとか
・ざっくりやるなら一度バックバッファよりも2倍程度大きいレンダリングターゲットに描画してから
そのテクスチャをフィルター付き縮小してバックバッファに転送するとか
レンダリングステートのオンオフだけではなんとも出来ないなんらかの工夫をしてると思われ
0013デフォルトの名無しさん
2010/10/30(土) 02:04:52事前にCheckDeviceMultiSampleTypeでチェック
OKならば
d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
でCreateDeviceして
滑らかになったよ。ありがとう!
0014デフォルトの名無しさん
2010/10/30(土) 16:31:20頂点バッファをLockしてアクセスする場合はSYSTEMメモリに確保しろというような。
Helpにも有る程度書いてあるのですが、書いてある箇所が分散しているので
速度に関係ある部分のみのまとめが無いかなと。
0015デフォルトの名無しさん
2010/10/30(土) 16:59:01嘘はいっちゃいかん
ttp://msdn.microsoft.com/ja-jp/library/bb147263(VS.85).aspx
0016デフォルトの名無しさん
2010/10/30(土) 23:00:35使わないで自前でやるとどれくらいの速度がでるものなの?
0017デフォルトの名無しさん
2010/10/30(土) 23:54:240018デフォルトの名無しさん
2010/10/31(日) 00:41:52同意
初心者スレだからって調子に乗りすぎだよな
0019デフォルトの名無しさん
2010/10/31(日) 02:16:00まぁ、興味が無くもないから今日の夜時間あったらコード書くよ
0020デフォルトの名無しさん
2010/10/31(日) 02:47:550021デフォルトの名無しさん
2010/10/31(日) 03:18:260022デフォルトの名無しさん
2010/10/31(日) 03:34:01thx. そうみたいですね…
Windows7SDKのサンプル見てたんですが、D3Dと併用すれば可能って感じですかね…
0023デフォルトの名無しさん
2010/10/31(日) 07:17:21んで、書き込んだからには報告でもするのかと思いきや音信不通になるんだろ?
そのくせ回答者にいつも文句ばっかり言ってる類でしょ?
根っからの糞だよねw君w
0024デフォルトの名無しさん
2010/10/31(日) 10:13:140025デフォルトの名無しさん
2010/10/31(日) 10:16:270026デフォルトの名無しさん
2010/10/31(日) 10:24:35入門サイト見てたらdirectx9で2dからやると良いって書いてあるけど、
他のバージョンで仕様が変わっても勉強が無駄になりませんでしょうか?
0027デフォルトの名無しさん
2010/10/31(日) 10:26:02その後の移行も楽になる。
0028デフォルトの名無しさん
2010/10/31(日) 11:47:539から始めるにしても固定機能は忘れてシェーダーのみでやれば
11と比べて資料も豊富だし、HLSLやプログラマブルシェーダーの知識は無駄にはならないと思う
でも全体でみると大幅に変わってるから
11が出来る環境があって今から勉強始めるなら11でもいいかもね
0029デフォルトの名無しさん
2010/10/31(日) 12:11:270030デフォルトの名無しさん
2010/10/31(日) 12:54:14ありがとうございます。
MSDNではなくmhtの方しか見てませんでした。
0031デフォルトの名無しさん
2010/10/31(日) 15:02:04d3dx11.dllがないとかで。(これどっかからダウンロードしてきて入れたらいいのかね。それでも無理そうだが)
まぁXPを切り捨てるはめになるが、今から覚えるなら11の方がいい。9を覚えても無駄になる。
シェーダの書き方も変わってるから。
0032デフォルトの名無しさん
2010/10/31(日) 15:17:560033デフォルトの名無しさん
2010/10/31(日) 15:51:570034デフォルトの名無しさん
2010/10/31(日) 16:17:540035デフォルトの名無しさん
2010/10/31(日) 16:22:049でやる以上無駄なことなんて無い
有益無益で判断するくらいならおとなしく11でやりなさい
0036デフォルトの名無しさん
2010/10/31(日) 16:52:57グラフィックボードが少ない、というのは11特有の機能を使う
ことができないという意味?
9相当の機能だけでいいのなら、11に対応してないグラフィック
ボードでも11は一応動かすことができるの?
0037デフォルトの名無しさん
2010/10/31(日) 17:00:37http://msdn.microsoft.com/ja-jp/library/ee417660
0038デフォルトの名無しさん
2010/10/31(日) 17:05:09多少はGPUもあるけど
0039デフォルトの名無しさん
2010/10/31(日) 17:05:570040デフォルトの名無しさん
2010/10/31(日) 17:08:25ありがとう
0041デフォルトの名無しさん
2010/10/31(日) 20:30:57今、ビューポートを画面と同じサイズにして3Dモデルを描画しています。
これを、例えばそのまま 100px 左にずらして描画したいのですが、方法がわかりません…。
単純にモデルの位置をずらしても、カメラとの角度が変わってしまうため、見た目が変わります。
奥行き自体は表現したいので、平行投影にすることはできません。
単純にビューポートを左にずらした場合、つまり D3DVIEWPORT9::x = -100 とした場合、何も描画されなくなりました。
(SetViewport で D3DERR_INVALIDCALL が返ってくると思ったのですが、エラーは返って来ませんでした。)
一度、テクスチャに描画してからあらためて D3DFVF_XYZRHW でそのテクスチャを描画すればうまく行くのですが、
これだけのために2段階描画にするのも…と思いますし、他のモデルとの奥行きを考えるのが難しくなります。
今考えてるのは、射影行列を頑張って作る方法(左右対称ではなく、右に偏ったカメラを作る)ですが、
なかなか上手くいきません…。
もっと単純にずらす方法はないでしょうか?
よろしくお願いします。
0042デフォルトの名無しさん
2010/10/31(日) 21:22:32ビューポートはスクリーンサイズを越えて指定はできないはず
モデルを横にずらして
ビルボードと同じ要領でカメラの方に回転させればいいじゃない
0043デフォルトの名無しさん
2010/10/31(日) 22:16:27計算は・・・・だれかお願いっ!
004441
2010/10/31(日) 22:23:34説明が下手で申し訳ないのですが…。
例えば長方形の板ポリを2枚置きます。
(A)
1枚目はカメラ正面、カメラ向き。2枚目は1枚目と同じ向きで、カメラより右よりに置きます。
この場合は、2枚ともZ座標が4頂点で全て同じになり、そのまま長方形として描画されます。
(B)
ところが、Y軸を中心に90度回転させた場合、正面に置いた板ポリはちょうど見えなくなりますが、
右に置いた板ポリは角度がついて見えてしまいます。
ビルボードのようにカメラの方を向けてしまうと、(A)の段階で既に角度がついてしまい、台形になります。
>>43
射影行列で、例えば x 座標を x' = m(x + n) のような式にできる場合、同時座標を使った行列変形できるのですが
そう単純な結果にならず…苦労しています
0045デフォルトの名無しさん
2010/10/31(日) 22:30:48それをそれぞれ90°回転するのですね
グローバルから見て、Y角度は異なりますね
カメラの画角によりますが周囲の歪みが出るかもしれません、それは仕方ない。
0046デフォルトの名無しさん
2010/10/31(日) 22:35:01// カメラから求められたビュー行列
D3DXMATRIX matView ;
// ビルボード行列
D3DXMATRIX matInvView;
D3DXMatrixInverse ( &mInvView, NULL, &matView ) ;
mInvView._41 = mInvView._42 = mInvView._43 = 0;// 移動オフセットを殺して純粋な回転行列にする
// ワールド行列
D3DXMATRIX matWolrd;
// 縮小行列
D3DXMATRIX matScale;
// 回転行列
D3DXMATRIX matRot;
// 移動行列
D3DXMATRIX matTrans;
matWolrd = matScale*matRot*matInvView*matTrans;
↑
ココに掛ける
これでダメなら知らない
0047デフォルトの名無しさん
2010/10/31(日) 23:09:33D3DXMatrixPerspectiveOffCenterLHじゃだめ?
0048デフォルトの名無しさん
2010/10/31(日) 23:12:18ビルボードでしょうか?
うーん、やはり上手くいかないです…
0049デフォルトの名無しさん
2010/10/31(日) 23:36:200050デフォルトの名無しさん
2010/10/31(日) 23:36:58おお、行けそうです…
まだ理解できてなくてサイズがおかしいことになっていますが、位置が違う物体が同じ向きで回ってる…
希望が見えてきました!!!
0051デフォルトの名無しさん
2010/11/01(月) 00:18:09時間かかりましたができました!!!!
行列でうまくできたんですね…まだまだ行列の理解も足りないようです。
ありがとうございます!!
0052デフォルトの名無しさん
2010/11/01(月) 00:37:52数Cだっけ?
0053デフォルトの名無しさん
2010/11/01(月) 01:27:37それに文系とか、理系でも選択してないとかでCやってない人も多い
0054デフォルトの名無しさん
2010/11/01(月) 01:46:50複素数平面世代なので、一次変換すら習っていません。何に使うかとかには一切触れませんでした。
3Dへの応用とかは全く別分野だと思います…。
0055デフォルトの名無しさん
2010/11/01(月) 03:27:16BitBltでそのままウィンドウのデバイスコンテキストに転送して計測したfpsと、
Direct3D9で単純にBeginScene→EndScene→Presentしただけのfpsとでは、
前者の方が早いのですね。
こんなものですかね?
0056デフォルトの名無しさん
2010/11/01(月) 04:06:000057デフォルトの名無しさん
2010/11/01(月) 04:13:32DXで描画するのと同じレンダリング結果になる処理を自前でしてみなよ
(頂点情報からライスライズしてポリゴンを描画、そのポリゴンにテクスチャマッピングやライティング等のシェーディング処理)
ちょっとしたレンダラをWinAPIだけで作った事あるが、
スキニング無しで単純なモデルを自前レンダリングするだけの描画でDXに完敗だったよ
GPUとそのドライバ(HAL)が使えないのは、ゆくゆくの実際の使用に耐えられないよ
今のメニーコアで、並列処理とSIMD命令使いまくりのコードかけば、少しは行けるかも知れないけどw
0058デフォルトの名無しさん
2010/11/01(月) 04:14:580059デフォルトの名無しさん
2010/11/01(月) 04:16:55まずは、実際のFPSの数値を出さないと。
0060>>55
2010/11/01(月) 04:30:28画面サイズによってはD3D9のほうが早かったりする…
0061デフォルトの名無しさん
2010/11/01(月) 04:34:420062デフォルトの名無しさん
2010/11/01(月) 04:38:01DDBを直接ウィンドウのDCにBitbltしてるので即座に画面に結果が表示されてるので、それはないかと。
>>57
それはごもっともです。
>>59
DDB D3D9
256 x 256 = 4,500 3,600
600 x 480 = 850 1,000
あれ〜…サイズによって違うし…
0063デフォルトの名無しさん
2010/11/01(月) 04:43:260064デフォルトの名無しさん
2010/11/01(月) 04:44:39しかしだ、色々表示した場合のDXのスピードに驚く必要がある。
多くのオブジェクトをDCに描画する遅さを気がつくべきだ。
毎回一枚絵だったら別だが、それはビデオ映像しかないしな。
0065デフォルトの名無しさん
2010/11/01(月) 04:46:12300 x 300 = 3,300 3,000
1280 x 700 = 220 90
>>63
意味はないねw
>>64
ごもっともです
0066デフォルトの名無しさん
2010/11/01(月) 04:50:020067デフォルトの名無しさん
2010/11/01(月) 04:53:530068デフォルトの名無しさん
2010/11/01(月) 05:00:380069デフォルトの名無しさん
2010/11/01(月) 07:56:460070>>55
2010/11/01(月) 12:03:49D3D9の方はバックバッファ一つで、ウィンドウのクライアントサイズにしての結果です。
0071>>55
2010/11/01(月) 13:24:39ttp://codepad.org/LYYwNeh2
0072デフォルトの名無しさん
2010/11/02(火) 00:05:56いまって4:3のディスプレイのが少ないよね?16:9?
800x600で組んでたけどもう時代遅れかなぁ・・・とかちょっと思ってる
0073デフォルトの名無しさん
2010/11/02(火) 03:33:190074デフォルトの名無しさん
2010/11/02(火) 04:22:511280x720がトレンドだと思い込んでみる
問題は1024x768のモニタだと横が足りないところだな
0075デフォルトの名無しさん
2010/11/02(火) 06:11:01応答おそくなったよ。なかなか人のソフトの動作確認は、ちょい面倒だから。
D3D9
1280 x 700 = 1994 これはグラフィックボードがN6600GTで6年前ので性能悪いやつ
1280 x 700 = 200 これはヘボイノートPCの性能
実験しているPCはノートでしょ。それも俺のより性能悪い物かな
ソフト的には問題ないよ、90はグラフィックボードの問題。
性能いいグラフィックボードなら、10000いくと思う。
0076デフォルトの名無しさん
2010/11/02(火) 06:15:50俺もノートPCで作ってるけど、重いときはデスクトップでやってるから。
0077デフォルトの名無しさん
2010/11/02(火) 06:33:27>問題は1024x768のモニタだと横が足りないところだな
まだ、そんなのあるの?
0078デフォルトの名無しさん
2010/11/02(火) 06:46:52多いな
16:9はなんか申し訳程度にサポートされてる感が強い
0079>>50
2010/11/02(火) 08:34:52うおぉぉぉーーー!!!!
お忙しいでしょうに丁寧に検証して下さいましてありがとうございます!!!
まさかまさか検証してもらえるとは思ってなかったのでw
ご明察の通り、しょぼいノートPCです。
hpのG62(三ヶ月前で8万円くらい)ですww
3D表示を多く出すのはちゃんとしたマシンでやればよさそうですね。
とりあえずノートでは256x256でレンダリングして512x512に引き伸ばしてやれば、
実用に耐えれそうなのでそれでやってみます。
ほんとにありがとうございました。
0081デフォルトの名無しさん
2010/11/02(火) 11:33:33DirectXの方は毎フレームIDirect3DDevice9::Clearしてるのに
DDBの方は転送するだけってフェナな計測方法じゃないな
単純にVRAMがオンボとかでClearが遅いだけとかじゃね
0082デフォルトの名無しさん
2010/11/02(火) 17:54:31http://animal.myds.jp/aquatic/crucian_carp/
0083デフォルトの名無しさん
2010/11/02(火) 20:00:3016:9がメインストリームだろ
0084デフォルトの名無しさん
2010/11/02(火) 20:17:040085デフォルトの名無しさん
2010/11/02(火) 21:36:14俺のPCだとなんかもうしわけ程度に1280x720(60Hzのみ他の解像度は75Hzはある)だけが
サポートされてて他の16:9はないんよ
なのでPCだと16:10が主流なのかな?と
こっち(16:10)は結構ある1440x900まである
0086デフォルトの名無しさん
2010/11/02(火) 21:43:423Dならアス比が変わっても大丈夫なように作る
よこに伸びたり視野が広がることでゲーム性が変わっちゃうようなゲームなら
中央部分だけ使うようにするかな
0087デフォルトの名無しさん
2010/11/02(火) 21:51:044:3だとなんかしょっぱく見えるんだよ(目が肥えた)
引き伸ばすとキャラがデブっちくなるからはじめから横にしておいたほうがいい感じ
0088デフォルトの名無しさん
2010/11/02(火) 21:53:120089デフォルトの名無しさん
2010/11/02(火) 21:56:090090デフォルトの名無しさん
2010/11/02(火) 21:56:11うん
そんなディスプレイ使ってる奴はきっとアス比が変わっても気にならない
てか、フルスクリーンモードで起動しないんじゃね?的な予想
0091デフォルトの名無しさん
2010/11/02(火) 21:58:18ミドルレンジだとまだ4:3が多いからなぁ
0092デフォルトの名無しさん
2010/11/02(火) 22:01:21ぜってーゲームなんかやんねーよそいつ
みたいな奴のこと気にするな
0093デフォルトの名無しさん
2010/11/02(火) 22:04:160094デフォルトの名無しさん
2010/11/02(火) 22:14:26おま、サポートに寄せられる苦情とか見たことないの?
0095デフォルトの名無しさん
2010/11/02(火) 22:21:46スクエアからワイドへの移行は目に見えて明らかだけど、
16:10から16:9へも緩やかに移行してるとか。
0096デフォルトの名無しさん
2010/11/02(火) 23:13:580097デフォルトの名無しさん
2010/11/03(水) 00:45:03安めのノートPCでDXを使う場合の注意事項と利点。
まず基本的に、グラフックの表示チップにDX3D機能ををハードで実装していない
場合が多い、この時はドライバー内でDX機能をエミュレートしている。
だから、単なるべた塗りはプログラム側でやってもDXでやっても似たようなスピードに
なりやすい。
問題はドライバーによるソフトエミュレーションにいくつかの機能制限が多いことだ。
なおかつ、DXの機能問い合わせで機能有り返るが、正しく動かなかったりする。
だから、動くはずだが動かないと悩む可能性でつまずくはずだ。
今回の単なる最小ループの更新も、スピードが変わらないとつまずいたはずだが、
ソフトエミュレーションのノートPCグラフィックなら当然そうなる。
検証用のPCが必要だ。しかし、そのノートPCで動くようなら、多くのPC上でも
問題なく動作する可能性が高いため、ユーザー上で動作しない問題を回避できる。
性能の良すぎるPC上で開発すると、他のPCで動作しない危険をつかみやすい。
0098デフォルトの名無しさん
2010/11/03(水) 02:12:59ttp://akiba-pc.watch.impress.co.jp/hotline/20101106/newitem.html
を見て気になったんですが、2枚刺しのビデオカードを利用した場合、
ビデオメモリが12GBになると書いてありますが、実際にプログラムからも
12GBのメモリとして使えるのでしょうか?
ATIのボード2枚刺し、nVIDIA+ATIで2枚と組み合わせでいろいろ変わってくると
思いますが、とりあえずnVIDIA2枚刺しの場合どうなるのでしょうか。
0099デフォルトの名無しさん
2010/11/03(水) 08:24:42マジか
でもググッタら16:9になったわけが・・・
http://www.labornetjp.org/news/2010/0702tideji/
よし、俺は当初の予定通り黄金比(16:10)に合わせて16:9には黒枠いれることにしよう
きっと黄金比がなんとかしてくれる
0100デフォルトの名無しさん
2010/11/03(水) 08:35:410101デフォルトの名無しさん
2010/11/03(水) 09:04:36AdjustWindowRectEx
0102>>55
2010/11/03(水) 09:25:04>>81
! まったくもっておっしゃるとおりです…
という訳で検証してみた結果、
DDB D3D9
0256 x 0256 = 4,500 6,500(+2,900)
0300 x 0300 = 3,300 5,000(+2,000)
0600 x 0480 = 850 1,600(+ 600)
1280 x 0700 = 220 600(+ 510)
となりました。
>>100
>>71のソースでちょうど使ってますw
0103>>55
2010/11/03(水) 09:26:500104デフォルトの名無しさん
2010/11/03(水) 09:36:08>g_D3D9Params.AutoDepthStencilFormat = D3DFMT_D16;
これ
D3DFMT_D24X8
にしろよ
0105デフォルトの名無しさん
2010/11/03(水) 12:37:47ウィンドウレクトとってクライアントレクトとって引き算してウインドウの縁を取って、
縁に好みの大きさのクライアントの幅と高さを足してウインドウ変更という手もあるよ。
0106デフォルトの名無しさん
2010/11/03(水) 12:53:170107105
2010/11/03(水) 12:56:37が、物理的にモニタからはみ出す場合はさらに計算しないといけない。
0108>>55
2010/11/03(水) 13:14:21それに指定するとfpsが低下しますたorz
実は2Dゲームを想定しておりまして、
Zバッファのビット深度は特に気にする必要もないかと思われますので、
EnableAutoDepthStencil = FALSE;
AutoDepthStencilFormat = D3DFMT_UNKNOWN;
でやろうと思います。
これだけでfpsが256サイズだと400位の差が出ました。
EnableAutoDepthStencil = FALSE にしてるのに、
AutoDepthStencilFormat は D3DFMT_D16 や D3DFMT_D24X8 よりも D3DFMT_UNKNOWN の方が早いのですね…
0109デフォルトの名無しさん
2010/11/05(金) 11:24:54Lockのコスト > 転送コストの場合、
実行速度は DrawIndexedPrimitiveUP > DrawIndexedPrimitive になる。
この認識でおk?
0110デフォルトの名無しさん
2010/11/05(金) 11:46:09普通はやっちゃいけない実装だが
1フレームに数百回Lockするような仕様ならUPの方が速くなるかもね
0111デフォルトの名無しさん
2010/11/05(金) 12:34:00�dクス。
IndexBufferのインデックス作成は事前に行い、1フレームにVertexBufferをLockするのは一回だけ。
これでテストしてみたんですがね、マイPCだとどうにもUPの方が早いんですよね…
相当キワモノなグラフィックカードなのかなorz=3
0112デフォルトの名無しさん
2010/11/05(金) 12:36:580113デフォルトの名無しさん
2010/11/05(金) 12:44:050114デフォルトの名無しさん
2010/11/05(金) 13:12:00Mobile Intel(R) 4 Series Express Chipset Family というビデオカードなのでそれかな!
と思ってたら…
>>112
VertexBuffer.Lock()で 0 指定してますた…
D3DLOCK_DISCARD で DrawIndexedPrimitiveUP より早くなりましたw
どうもお騒がわせして申し訳ありませんでした。
0115>>55
2010/11/05(金) 15:57:30>>71 なんですけど、
デスクトップ領域の左上や左下にウィンドウを持っていった時にfpsが激減するんですよね。
他の領域に持っていくと早くなる(元に戻る)。
何も処理してないってのに…
Win7使ってまして、Areoはオフ(Windowsクラシック)にしてるし、
AeroSnapもオフ(コンピューターの簡単操作センターにて)にしてるから
DWMが悪さしてるとは思えないんですけどね。
で、DwmIsCompositionEnabled で調べたらちゃんと 0(FALSE) 帰ってくるし、謎だ…
7ではおとなしくDirectX10 or 11にするべきなのかな…
0116>>55
2010/11/05(金) 18:14:49それを実行してみたら…
同じ現象が発生した/(^o^)\
0117デフォルトの名無しさん
2010/11/05(金) 22:28:09意味ないからやめろ
実際にゲーム作ったうえで計測しないと本当に無意味だぞ
同じもんを複数回描画したときと
違うもんをたくさん描画したときって描画の仕方によっても違うし
0118デフォルトの名無しさん
2010/11/06(土) 02:00:320119>>55
2010/11/06(土) 12:21:57自分のコードが拙いのか環境なのか判断したくて色々調べたけど、
おっしゃるとおりですね。とりあえず後回しにします。
一応>>71のコードはテスト用にシンプルにしたものでして、
自分のゲームにのっとった形式でのテストはしております( ´∀`)ノ
>>118
色々弄ってみましたがね、多分そうなんでしょうね。
C#のStopwatchもQueryPerformanceCounter使ってるって話みたいですし、
ソコかDirectX(DWM含む)の中の方なのかなと。
0120デフォルトの名無しさん
2010/11/06(土) 18:21:50「640x480」の画面を2分割し、「320x480」の画面を左右に2個置くようにビューポートを分割した後、(『ぷよぷよ』のイメージ)
それぞれのビューポートに対して全く同じビュー変換・射影変換処理をして描画したところ、
後に設定した方のビューは、先に設定した方の2倍に引き伸ばされて描画されてしまっています。
これを、左右の画面で全く同じ描画が行われるようにしたいのですが、どうすればよいでしょうか。
普段作業しているPCでは、現状のコードでも左右で同じ画面が描画されるのですが、
別のPCでは上記のようになってしまい、困っております。
0121デフォルトの名無しさん
2010/11/06(土) 18:43:14D3DVIEWPORT9 vp1;
vp1.X= 0;
vp1.Y= 0;
vp1.Width = 320;
vp1.Height = 480;
D3DVIEWPORT9 vp2;
vp2.X= 320;
vp2.Y= 0;
vp2.Width = 640
vp2.Height = 480;
みたいに矩形で指定しちゃってるとか
WidthとHeightはあくまで幅高さなので
vp2.Width = 320
vp2.Height = 480;
でないといけない
スクリーンから+方向にはみ出た指定をした場合
スクリーンに収まるように勝手に補正してくれるハードも有れば
してくれないハードもあったはず
0122デフォルトの名無しさん
2010/11/06(土) 19:33:39言われた通りにして、治りました!すごい!
完全にSetViewportメソッドの仕様を勘違いしてました。
半日悩んでましたが、スッキリ解決して良かったです。
ありがとうございました。
0123デフォルトの名無しさん
2010/11/06(土) 20:51:170124デフォルトの名無しさん
2010/11/06(土) 21:03:09経験の賜物だな
0125デフォルトの名無しさん
2010/11/06(土) 21:11:37>スクリーンに収まるように勝手に補正してくれるハードも有れば
>してくれないハードもあったはず
これを知ってないとわからないよね
0126デフォルトの名無しさん
2010/11/06(土) 21:29:480127121
2010/11/06(土) 23:00:16D3DCREATE_HARDWARE_VERTEXPROCESSING
でデバイスを作った場合は
ちゃんとスクリーンに収まるように変換されるくさい
(座標変換済み頂点の場合はちゃんと指定してないとおかしくなる)
D3DCREATE_SOFTWARE_VERTEXPROCESSING
だとはみ出た分も計算されちゃうみたいで横にのびるようだ
おそらく、デバイス作成のところに
頂点シェーダーのバージョンが1.1以下ならソフトウェア計算に切り替えるみたいなのが仕込んであって
不具合が出たほうはそれにひっかかったのだと思われ
0128デフォルトの名無しさん
2010/11/07(日) 00:14:59どちらにしてもちゃんと範囲内で指定しろってこったな
0129デフォルトの名無しさん
2010/11/07(日) 00:18:220130デフォルトの名無しさん
2010/11/07(日) 00:29:50頂点の座標変換は
IDirect3DDevice9::SetTransformやシェーダーで指定する
ワールド、ビュー、射影変換の3つで終了ではなく
実はこの後、射影空間上の頂点をスクリーン空間座標に変換するビューポート変換が存在する
これはDirectX9以前ではデバイスにセットされてるビューポートに従って自動で行われる
通常はデフォルトでバックスクリーンと同サイズのビューポートが設定されてるので
変わったことをしようとしないかぎり気にしなくて良い
0131デフォルトの名無しさん
2010/11/07(日) 01:07:10ありがとうございます。理解できました。
0132デフォルトの名無しさん
2010/11/07(日) 07:11:42少し大きなサイズの「法線とデプスを持つテクスチャ(1024*1024)」を用いて
「SSAO影マップ(256*256)」を作りたいのですが、「SSAO影マップ」のサイズが
1024*1024でない場合、ぐちゃぐちゃなテクスチャを読み込んだようになってしまいます。
(たまに他のゲームなどで使われたテクスチャが出ることがあるので、変な所を参照しているようです)
レンダリングターゲットを超えるサイズのテクスチャを使うことは出来ないのかとも思いましたが、
探してもそのような記述は見つかりませんでした。
どなたか分かる方がいらっしゃいましたら、よろしくお願い致します。
0133デフォルトの名無しさん
2010/11/07(日) 10:09:14全然違うテクスチャを参照してるというならどこか根本的な所でミスがあると思われ
そもそも「他のゲームなどで使われたテクスチャが出ることがある」と何故判断したわけ?
深度マップが正常に書き出されてるのは確認してるんだよね?
0134デフォルトの名無しさん
2010/11/07(日) 10:13:18MipMapが有効になってるとか?
0135132
2010/11/07(日) 15:43:28>>133
深度マップは正常に書き出されていました。
他のゲームで使われた〜〜〜というのは、その少し前に起動していた
他の市販のゲームのテクスチャが見えたからです。
>>134
よく分かりませんが、特にそのような指定はしていないと思います。
nVidiaコントロールパネルのmipmaを強制するは「なし」ですし、
サンプラの設定のMinfilterなどの部分は色々いじってみましたが、変わりませんでした。
0136デフォルトの名無しさん
2010/11/07(日) 15:48:02深度マップ用のテクスチャをCreateTextureするときに
引数でMipレベルを0を指定してるから自動でMipMapが作られてるんじゃない?
縮小してるので作っただけで何も書き込まれてないミップレベルの領域が参照されてるのだと思われ
0137132
2010/11/07(日) 16:42:20言われた通り、CreateTextureでMipレベルを1にしてみたら正常になりました!
ずっと悩んでいたので、本当に助かりました。ありがとうございました。
0138デフォルトの名無しさん
2010/11/07(日) 16:46:48俺はそれをみて「あぁ、これだな」と思っただけだ
0139デフォルトの名無しさん
2010/11/08(月) 00:29:01パフォーマンス的にはちょっと無駄がある、
という状況はありふれていますよね?
こういう場合たとえば10000回読んで時間計測して、
これくらいなら許容範囲か・・・もしくはこれはまずいな・・・
という感じで決めていくしかありませんか?
0140デフォルトの名無しさん
2010/11/08(月) 00:38:150141デフォルトの名無しさん
2010/11/08(月) 07:09:04ターゲットPC(もしくはハード)を決めてそのPCで動くかどうかのみ
10000回の計測とか同じ処理を何度も繰り返すのは
キャッシュのヒット率100%なのでなんの参考にもならない
0142デフォルトの名無しさん
2010/11/08(月) 10:34:36あ、そうか・・・それもそうですよね
ありがとうございます
0143デフォルトの名無しさん
2010/11/08(月) 14:40:300144デフォルトの名無しさん
2010/11/08(月) 14:43:560145デフォルトの名無しさん
2010/11/08(月) 16:47:490146デフォルトの名無しさん
2010/11/08(月) 16:49:410147デフォルトの名無しさん
2010/11/08(月) 16:56:38プロポーショナルフォントって指定してるってことは
等幅フォントではもう既にできてるんだよね?
あとは文字ピッチを1文字ごとに変えるだけじゃん
0148デフォルトの名無しさん
2010/11/08(月) 20:43:50IXAudio2::Initializeの引数の数がヘッダとDLLで食い違うため。
----- ここまでチラシの裏
何故IXAudio2VoiceってIUnknown派生じゃないんでしょ?
CComPtrが使えなくて悲しい・・・
0149デフォルトの名無しさん
2010/11/08(月) 23:19:580150デフォルトの名無しさん
2010/11/10(水) 15:49:01Direct3D11にフォント描画機能がなくて実装中
必要な文字だけテクスチャに焼いて使うしかないんじゃね?
0151デフォルトの名無しさん
2010/11/10(水) 17:21:170152150
2010/11/10(水) 17:39:322014x2048のR8G8B8A8テクスチャに16x16の文字を焼くとしたら1枚にwide charの全文字が収まるからアクセスも超早くなる予定
フォントスタイルを変えたらもう一枚必要だけど
0153デフォルトの名無しさん
2010/11/10(水) 18:46:23ボリュームコントロールのWAVが動くんですよ
これってつまり、全部の音の音量を増減をしようと思ったら全セカンドバッファ
を一度に変更しないといけないってことですかね
0154デフォルトの名無しさん
2010/11/10(水) 22:51:45プライマリバッファのボリューム弄ればいいじゃん
セカンダリのって個々の音のフェードインとかアウトで弄るから
あんまちょっかい出さねーほうがいいだろそうでもない?
0155デフォルトの名無しさん
2010/11/11(木) 01:21:08DXSDK9サンプルのEmptyProject([EP])に、サンプルSimpleSample([SS])のRenderText()の部分(機能)を
付け足そうとして躓いています。
エラーはhrが定義されていない識別子だという内容で、DXUTmisc.hのここ:
#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
のhrが定義されていないということなのですが、どこかでhrがグローバル変数のHRESULTとして
定義されているのでしょうか。
SimpleSampleで右クリックしてhrの定義を追っていっても、DirectXに直接関係のない
ObjIdl.h, CommCtrl.hの構造体(MULTI_QI, NMTVASYNCDRAW)のメンバhrがヒットするだけです。
なお、
・includeにOptionalを追加
・プロジェクトにSDKmisc.hとSDKmisc.cppを追加
・ライブラリにd3dx10d.libを追加(SimpleSampleにはデフォで入っているけどEmptyProjectにはない)
などをして、V_RETURN()以外の部分ではビルドは通っています
(V_RETURNを使っている行をコメントアウトするとビルド正常終了。もちろん正しく動作はしません)。
0156155
2010/11/11(木) 01:30:58SimpleSampleにおいて、V_RETURN()のマクロが使われている箇所は、必ずその前に
HRESULT hr;
と宣言がなされていました。
つまりV_RETURNを使う箇所は必ず前もってHRESULT hr;を書いておくべしということですね。
てっきりマクロは単体で動き得るものと思い込んでいて、SimpleSample側で
原因を追っていく際にもV_RETURNの宣言(DXUT.h)から上位にしか注目していませんでした。
お騒がせしてすみませんでした。
0157質問です
2010/11/11(木) 15:06:32DrawText() の戻り値でエラーコードが返されます。
Retail Version/Debug Version 共に ERROR_BAD_ENVIRONMENT(0x0000000a) が返されます。
WinError.h でそのエラーコードが定義されているのは判っているのですが、DrawText() が何故エラーになるのか判らないのです。
もし宜しければアドバイスいただけないでしょうか。
以下コード
↓↓↓↓↓
LPDIRECT3DDEVICE9 pD3D9Device; // 作成済みとする
LPD3DXFONT pD3DXFont;
HRESULT hr;
hr = D3DXCreateFont(pD3D9Device, 10, 0, FW_NORMAL, 1, FALSE,
SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, TEXT("MS ゴシック"), &pD3DXFont);
// hrはS_OK
const LPTSTR& lpText = TEXT("hello world");
hr = pD3DXFont->DrawText(NULL, lpText, ::lstrlen(lpText), &rect, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB(255, 255, 0, 0));
// hrはERROR_BAD_ENVIRONMENT(0x0000000a)
0158>>157
2010/11/11(木) 15:09:02RECT rect = { 0, 0, 0, 0 }; // { 0, 0, 200, 50 }等にしても同じ結果でした。
0159デフォルトの名無しさん
2010/11/11(木) 15:36:54ID3DXFont::DrawTextの戻り値はそもそもHRESULTじゃない
ttp://msdn.microsoft.com/ja-jp/library/bb173962
>戻り値
>成功した場合、テキストの高さを論理単位で返します。
>DT_VCENTER または DT_BOTTOM が指定されている場合は、
>描画されたテキストの pRect から (上側から下側まで) のオフセットを返します。
>失敗した場合、戻り値は 0 です。
0161デフォルトの名無しさん
2010/11/11(木) 21:12:45音楽はDirectSoundじゃないんで影響受けますからね
効果音再生に使うからフェード処理はやらないんじゃないかな?
まぁとにかくセカンダリ全部変更するようにしますわ。というか質問前する前に作っちゃったしw
レスありがとうございました
0162デフォルトの名無しさん
2010/11/12(金) 10:47:04世の中にはデスクトップマスコットなるものがあるようでして
そいつがアクティブなウィンドウのタイトルバーのどっかに腰かけるor走りまわるわけです
画面にマスコットが重なると
ゲームがものすごく遅くなるのですがなにか回避策はあるでしょうか?
できれば○○ちゃんといっしょにゲームをやりたいのでマスコットを終了したくないとか寝言を申しております
0163デフォルトの名無しさん
2010/11/12(金) 11:04:010164デフォルトの名無しさん
2010/11/12(金) 11:10:56てかDirectX関係無い
0165デフォルトの名無しさん
2010/11/12(金) 12:01:460166デフォルトの名無しさん
2010/11/12(金) 13:58:48拡大(縮小)されますが、この処理はどこのどいつが行っているのでしょうか?
1) ウィンドウがやっている
2) DirectXがやっている
3) その他
0167デフォルトの名無しさん
2010/11/12(金) 14:16:530168デフォルトの名無しさん
2010/11/12(金) 14:23:45http://msdn.microsoft.com/ja-jp/library/bb174423%28VS.85%29.aspx
>必要に応じて、引き伸ばし操作を適用して、ソース矩形内のピクセルを
>ターゲット ウィンドウのクライアント領域のデスティネーション矩形に転送します。
ってある
0169デフォルトの名無しさん
2010/11/12(金) 14:38:44申し訳ありません。Present()の話でした。
>>168
ありがとうございます。
0170デフォルトの名無しさん
2010/11/12(金) 15:01:54>拡大(縮小)されますが、この処理はどこのどいつが行っているのでしょうか?
そもそもサイズ変更はパラメータ次第なので、「される」わけではないし、
自分でそのように指定して「させている」だけ。
0171デフォルトの名無しさん
2010/11/12(金) 15:16:30自分の無知を晒しちゃってるぞ
0172デフォルトの名無しさん
2010/11/12(金) 15:36:37出力サイズを明確に指定すればいいだけの話。
0173デフォルトの名無しさん
2010/11/12(金) 16:25:50って多くね?
本当に設定できるのか?
0174デフォルトの名無しさん
2010/11/12(金) 16:32:36D3DXFONTの設定でフォントの文字間隔(縦、横)はどこで決めるのでしょうか?
0175デフォルトの名無しさん
2010/11/12(金) 17:12:49やっぱりいいです
0176デフォルトの名無しさん
2010/11/12(金) 18:04:39他人になりきるの止めてもらえますか?
こういうところで育ちの悪さが出てしまうんですよ
0177デフォルトの名無しさん
2010/11/12(金) 18:27:49ここでそういう観念が役に立たないのには気づかないのか。
郷に入らばなんだっけ?
0178デフォルトの名無しさん
2010/11/12(金) 18:35:530179デフォルトの名無しさん
2010/11/12(金) 18:54:08まだ>>174は解決していません
よろしくお願いします
0180デフォルトの名無しさん
2010/11/12(金) 18:55:28http://www.google.co.jp/search?q=id3dxfont
馬鹿の方が多いって、世も末だよな。
0181デフォルトの名無しさん
2010/11/12(金) 19:20:49ピッチと改行幅は変えられない
0182デフォルトの名無しさん
2010/11/12(金) 20:23:28そうですか
ありがとうございました
自力でなんとかするしかないのですね
0183デフォルトの名無しさん
2010/11/12(金) 20:55:030184デフォルトの名無しさん
2010/11/12(金) 22:58:320185デフォルトの名無しさん
2010/11/12(金) 23:07:360186デフォルトの名無しさん
2010/11/12(金) 23:29:32毎フレーム作ってるもんに関してはいらないんじゃない?一瞬だし
ロード時に作ったもんは復旧時に読み直せばいらないし
特定の場面でしかできない特殊なもんぐらいしか考えられないのかな?
0187デフォルトの名無しさん
2010/11/14(日) 12:13:36ありがとうございました
0188デフォルトの名無しさん
2010/11/14(日) 18:08:57D3DXMatrixLookAtLHのカメラの位置のxとzを
どのようにかえればいいんでしょうか?
0189デフォルトの名無しさん
2010/11/14(日) 18:23:10こんなん
static float pos_x = 0.0f;
static float pos_z = 0.0f;
static float ang = 0.0f;//0-360
static float len = 100.0f;
float x = pos_x + len * cosf(D3DXToRadian(ang));
float z = pos_z + len * sinf(D3DXToRadian(ang));
ang += 1.0f;
if(ang > 360.0f)ang -= 360.0f;
0190デフォルトの名無しさん
2010/11/14(日) 18:40:13ありがとうございました
0191デフォルトの名無しさん
2010/11/14(日) 21:29:26'LPDIRECT3DDEVICE9' : 不明なオーバーライド指定子です
というエラーが出てしまいます。
DirectX SDKもPlatform SDKも落として、ネットで検索したりしながら
実行ファイルもインクルードファイルもライブラリファイルも設定し、
追加の依存ファイルもちゃんと設定しました。
今書いているのは本のサンプルを手打ちで移したもので、
打ち間違いを考慮して該当部分をコピーしたりしたのですが状況が変わりません。
このエラーはどうして出るのでしょうか?
0192デフォルトの名無しさん
2010/11/14(日) 21:38:42エスパーすると
LPDIRECT3DDEVICE9の行より前に何か問題がある
拡張子が.cになってたり
1行前に;を忘れてたり
どっかが全角になってたり
たぶんDirectX以前の問題だ
0193デフォルトの名無しさん
2010/11/14(日) 21:40:58そんなの原因考えるの面倒臭ぇからまず動くSDKのプロジェクトを拝借して
それをベースに構築して改めて動くもんと動かないもんを比べてみたらどうよ?
0194デフォルトの名無しさん
2010/11/14(日) 21:47:22ところで本のサンプル(CDついてる?)はコンパイルして実行できるの?
0195デフォルトの名無しさん
2010/11/14(日) 22:09:550196191
2010/11/14(日) 22:16:51ありがとうございます。直前の宣言で ; が抜けてましたorz
で、オーバーライド指定子は無くなりましたが、
LPDIRECT3DDEVICE9 で宣言した変数が「定義されていない識別子です」というエラーで引っかかりました。
>>194
納得いかないくらいすんなりと実行できました。(リンカの設定とか適当なのに)
・・・もっかい打ち直してみる事にします。
0197デフォルトの名無しさん
2010/11/14(日) 22:22:22ソース何べん打ち直しても設定腐ってたらダメじゃん
とりあえずベースはサンプルソースの奴使えよ
0198デフォルトの名無しさん
2010/11/15(月) 17:09:370199デフォルトの名無しさん
2010/11/15(月) 19:27:11ベースってのはライブラリじゃなくて
プロジェクトの設定とかそういうのだよ
話わからないくせに横から口出して自爆してんじゃねーよキチガイ
0200デフォルトの名無しさん
2010/11/15(月) 19:31:150201デフォルトの名無しさん
2010/11/15(月) 19:32:160202デフォルトの名無しさん
2010/11/15(月) 19:36:52だから流れわからなきゃ口出さなきゃいーのに
誰も頼んでないのに間違えて恥かしい奴だなお前はw
0203デフォルトの名無しさん
2010/11/15(月) 19:45:46よっぽどリアルがさみしいの?の?
0204デフォルトの名無しさん
2010/11/15(月) 19:56:030205デフォルトの名無しさん
2010/11/16(火) 10:11:38あるいは、DirectX9をやっておけば11にスムースに移行できますか?
0206デフォルトの名無しさん
2010/11/16(火) 10:25:33>>26-38
0207デフォルトの名無しさん
2010/11/16(火) 10:52:12ありがとうございます
0208デフォルトの名無しさん
2010/11/16(火) 15:22:06シェーダがきつそうだったら9で固定機能で遊んでみるのも
道のひとつかもしれない
それもきつそうだったらDXライブラリとかででも多少慣れるのも
道のひとつかもしれない
0209デフォルトの名無しさん
2010/11/16(火) 15:37:11遠回りのなだらかな道と、急勾配の近道だったら、俺なら・・・・・・遠回りでいいや (´∀`)
0210デフォルトの名無しさん
2010/11/16(火) 17:26:120211デフォルトの名無しさん
2010/11/16(火) 18:30:540212デフォルトの名無しさん
2010/11/16(火) 20:36:00ようやくポリゴンが表示できて喜んでいたのだが、これが無駄になるのか・・・
「DirectX11 3Dプログラミング」ってのでも買うか・・・
0213デフォルトの名無しさん
2010/11/16(火) 20:44:08DXライブラリではもうローポリ3Dゲームを完成させているので、DirectXを直で触ろうと思って聞きました
……DirextX11の資料がなさすぎて心が折れそうです
0214デフォルトの名無しさん
2010/11/16(火) 20:57:33だから
あなたがプログラムを作って、友達が使ってくれますか?
DirectX9を使えばほとんどの人が可能です。
DirectX11の場合はほとんどの人が使えない。
将来がどのようになるかわからないけど、
あまり変化がないとおもうよ
0215デフォルトの名無しさん
2010/11/16(火) 21:22:17XPが半分以上って、それ企業で使うPCとか含めてるだろ。
そうじゃなくてもPC保有者の大半はゲーマーじゃねぇ。
ゲーマーじゃない奴をゲーム市場に引き込むってんなら大したもんだが、
もともと相手にしてるのはごく一部に過ぎない。
0216デフォルトの名無しさん
2010/11/16(火) 23:27:390217デフォルトの名無しさん
2010/11/17(水) 02:15:20まぁ無駄ではないよ
3Dやポリゴンの表示とか基本的な考え方は一緒だ
そこさえわかってればプログラムを書き直すなんて楽だろ
0218デフォルトの名無しさん
2010/11/17(水) 02:22:300219デフォルトの名無しさん
2010/11/17(水) 07:17:440220デフォルトの名無しさん
2010/11/17(水) 15:33:25同人ゲーム作ってるけど、購買層の大半がXP。いまだに2000なんて使ってるやつもいる
Vistaや7を買ってPCゲームやっちゃってるぜ!っていう層を狙うなら11でもいいが、それってプロだろう
プロならDirectX11でいい
素人で、ちょっとゲームつくってフリーで公開したり、同人で売ったりと考えてるなら9以外の選択肢は今のところ無い
0221デフォルトの名無しさん
2010/11/17(水) 16:01:52個人で初めてゲーム作るってのなら出来るだけ未来を見据えたほうがいいと思う。
バージョンの違いをサクッと吸収できる実装を作れるなら自由にすればいいと思うけど。
0222デフォルトの名無しさん
2010/11/17(水) 20:14:55で、評判が悪いのでMSもDirectX12では9の仕様に戻すんじゃないの?
0223デフォルトの名無しさん
2010/11/17(水) 21:01:590224デフォルトの名無しさん
2010/11/17(水) 21:24:51かなり初歩的な事からの考え方の解説をしているサイトや参考書はありませんか?
>>2の解説ですら4x4の行列の所で詰まりました、どこでこれを使っているのかすら・・、2Dは画像の表示、貼り付け、移動処理など出来ますが・・
DirectXが用意してくれている関数に頼りすぎていて、3Dモデルを表示はできたのですが、全く仕組みが分かりません
(必要な関数をつなぎ合わせた感じです)
0225デフォルトの名無しさん
2010/11/17(水) 21:45:08DirectX9時代の次は恐らくDirectX11時代が長く続く
DirectXは奇数世代の寿命が長い
>>224
MSDN
0226デフォルトの名無しさん
2010/11/17(水) 22:18:14msdnもいいが、
大型書店でもいって立ち読みをして、
自分と相性のよさそうな本を探したほうがいいかも
もしC++があやしいくらいに初心者ならそっちを片付けるべきだ
0227デフォルトの名無しさん
2010/11/17(水) 22:24:37というのをちらほら聞くのですが、これはどういう仕組みですか?
0228デフォルトの名無しさん
2010/11/17(水) 22:43:300229デフォルトの名無しさん
2010/11/17(水) 22:57:14DirectXでフラグをONにするときに名前は見るけど原理は俺もまったく知らんがな
0230デフォルトの名無しさん
2010/11/17(水) 23:02:44テクスチャ座標を4要素で扱うんだ
DirectX的なu,v,wの次って何使うのか知らんからGLにならってs,t,r,qでいうと
テクスチャ座標を補間するときにs,t,r,qをそれぞれ線形に補間してs,t,rをqで割る
s'=s/q. t'=t/q. r'=r/q.
各頂点のqを上手く設定しておくとs',t',r'がいい感じになって正しいパースで貼れる
0231デフォルトの名無しさん
2010/11/17(水) 23:09:50>テクスチャ座標を4要素で扱うんだ
ここからすでにわかんね
テクスチャ座標はuは横でvが縦ってところが俺の限界だ
0232デフォルトの名無しさん
2010/11/17(水) 23:18:543次元テクスチャの座標は3次元
x, y, z, w の w
0233デフォルトの名無しさん
2010/11/17(水) 23:31:22d3dx9d_43.dllが見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。
というエラーが出ます
ビルドはできてるのですが、デバッグで開始をしようとするとエラーが出ます。どうしたら良いでしょうか?
0234デフォルトの名無しさん
2010/11/17(水) 23:43:48ほんとうにありがとうごいました
0235デフォルトの名無しさん
2010/11/18(木) 03:32:56xファイルの関連付けか無くなってたので、関連付けようしようとしてDxViewerを使おうとすると
MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした
と出ます
DxViewerのソリューションをクリーンしてビルドしてもさっきみたいに治りません。
どうすれば良いでしょうか?
0236デフォルトの名無しさん
2010/11/18(木) 04:04:250237デフォルトの名無しさん
2010/11/18(木) 04:25:08http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=ja
ありがとうございます
これをやりましたができませんでした
0238デフォルトの名無しさん
2010/11/18(木) 10:46:270239デフォルトの名無しさん
2010/11/18(木) 10:50:49ありがとうございます
それをするとLIBCMT.libと競合して未解決のエラー等がたくさん出ます
というかそもそもビルドせずとも使えてたEXEなのですがどうなってしまったのでしょうか
0240デフォルトの名無しさん
2010/11/18(木) 10:55:450241デフォルトの名無しさん
2010/11/18(木) 10:58:10いえ、リリースでビルドしてリリースフォルダからDxViewer.exeを起動しても
「MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした」
とエラーが出ます
0242デフォルトの名無しさん
2010/11/18(木) 11:31:16どっか別のPCのインストールフォルダをそのままコピって使ってるとかじゃないの?
0243227
2010/11/18(木) 13:23:49少し理解が深まりました
ありがとうございます
0244デフォルトの名無しさん
2010/11/19(金) 10:51:48なんどか試しましたが、ノイズだらけの爆音になってしまいます。
XAudioエンジン:マスタリングボイス:ソースボイスを1:1:1で複数個用意して同時に再生した場合は
普通にできるのですが、これだと正規の方法ではない気がします。
XAudio2のサンプルコードは一通り理解はしましたが、このような複数音源の例が無いため
どうすればいいのか分かりません。
ご教示ください。
0245デフォルトの名無しさん
2010/11/19(金) 13:27:38三角+四角面が1800なら
1800ポリゴンのローポリですよね?
0246デフォルトの名無しさん
2010/11/19(金) 13:28:340247デフォルトの名無しさん
2010/11/19(金) 13:30:350248デフォルトの名無しさん
2010/11/19(金) 13:47:48インストールしたストリートファイター4も同様です。
どちらも数日前までは動きました。
DirectXが原因かと思いこちらに書き込みさせて頂きましたが、どなたかアドバイス頂けないでしょうか?
Windows 7 Home Premium 64-bit
Intel Core i7 860 @ 2.80GHz
4.0 GB デュアル-Channel DDR3 @ 668 MHz
MSI P55-SD50 (MS-7586) (CPU1)
1024 MBGeForce GTS 250 (Undefined)
0249デフォルトの名無しさん
2010/11/19(金) 14:11:50何かこう板の名前を見ずに質問する輩が多いな
スレチどころか板違いだ
ここはDirectX"プログラミング"質問スレ
0250227
2010/11/19(金) 14:41:21普通にマスタリングボイス1、ソースボイス2で出来るはず
めちゃくちゃな音が出るってことは
フォーマットデータとか不正なメモリ書き込みでデータが壊れてるんじゃないか?
0251250
2010/11/19(金) 14:48:500253デフォルトの名無しさん
2010/11/19(金) 15:36:500254デフォルトの名無しさん
2010/11/19(金) 16:09:500255デフォルトの名無しさん
2010/11/19(金) 16:46:01サターンなんか1000円で売ってるよ
0256デフォルトの名無しさん
2010/11/19(金) 17:06:101個だと普通に鳴るのですが、
全く同じソースボイスの作り方で2個同時だと鳴らないのです。
0257デフォルトの名無しさん
2010/11/19(金) 17:25:56言語は何だろ?
.NETでGC働いてリリースされてるとかないよね。
0258デフォルトの名無しさん
2010/11/19(金) 21:35:392つの入力のサンプルレートが違うんじゃない?
0259デフォルトの名無しさん
2010/11/19(金) 23:03:030260デフォルトの名無しさん
2010/11/19(金) 23:11:30プログレッシブメッシュ
0261デフォルトの名無しさん
2010/11/19(金) 23:14:36してないんじゃない。
KinectはKinect SDKが別で出るでしょ。多分。
0262デフォルトの名無しさん
2010/11/19(金) 23:17:03kinnectはXBOXが主だから、XNAが先でしょ
0263デフォルトの名無しさん
2010/11/19(金) 23:32:29DirectX11関連本を探したところ、「ちょっとだけDirectX11」「DirectX11 3Dプログラミング」の2つくらいしか出てないみたいなのですが、
これらの本の評価はどんな感じなんでしょうか?
0264デフォルトの名無しさん
2010/11/20(土) 00:06:52洋書が読めないのなら、DirectX9にしとけ
0265デフォルトの名無しさん
2010/11/20(土) 05:17:14後者持ってるけど、全くのゼロからだと厳しいかもしれない。
もしDX9を勉強してないならそちらからやった方がいいかもしれない。
0266デフォルトの名無しさん
2010/11/20(土) 05:32:48無理そうだったら9へいけば
9より解説しているサイトは少ないがそれでもなんこか11の解説サイトあったから(携帯なのでアドレスまでは面倒なので載せないが)
0267デフォルトの名無しさん
2010/11/20(土) 13:12:05そこまで物体との距離は近くないように感じるのですが
カメラに近づくとこんな感じになってしまいます。なぜでしょうか?
DXUTを使ってます。
0268デフォルトの名無しさん
2010/11/20(土) 13:22:45D3DXMatrixPerspectiveFovLHの第4引数で、カメラの写る範囲を指定できるんだよ
>>268
ありがとうございました
0269デフォルトの名無しさん
2010/11/21(日) 10:19:26で、お礼のレスを誤爆して268に書いちまったとw
0270デフォルトの名無しさん
2010/11/21(日) 10:32:510271デフォルトの名無しさん
2010/11/21(日) 11:03:34業務アプリでちょっとした3Dデータを描画することになりました。
(ちょっとしたと言いましたがDirect3Dは初めてなので大変ですが)
Direct3D10のサンプルを見ながらなんとか3Dデータは描画することは
できました。さらにラインストリップで全体を四角で囲みたいのですが、
そのときに奥の角も3Dデータに隠れないようにとのことで、処理としては
Zを無視して描画ができるようなことは分かったのですが、実際にZを
無視して描画するためにどのような設定をすればよろしいのでしょうか。
0272デフォルトの名無しさん
2010/11/21(日) 11:24:30さすがに>>258辺りに言うつもりだったのを番号間違えただけだと思うがw
0273デフォルトの名無しさん
2010/11/21(日) 13:48:56右周りさせた場合カメラの位置をx、y、zにどのような値を加算すれば
360度(一周)した時に元の位置に戻ってくることが出来るのでしょうか
0274デフォルトの名無しさん
2010/11/21(日) 14:01:12最初X方向にカメラがあるとして、(10.f,0,0)yは適当で
上から見て半時計回りに回転する角度をθだとすると、
x = 10.f * sinθ
z = 10.f * cosθ
で、時計回り(右回り)だと逆なので-θだとすると、
x = 10.f * sin(-θ) = 10.f * -sinθ
z = 10.f * cos(-θ) = 10.f * cosθ
θを適当に増やすと回転する
三角関数が分からなければ
ttp://www.nicovideo.jp/watch/sm12492903
が面白かった
0275デフォルトの名無しさん
2010/11/21(日) 14:10:35深度テストを無効にする。
ttp://msdn.microsoft.com/ja-jp/library/bb205074(VS.85).aspx
シェーダ側で設定してもOK
0276デフォルトの名無しさん
2010/11/21(日) 14:23:21271ではないですけど、
シェーダー内からの設定はどうすればいいんですか?
0277デフォルトの名無しさん
2010/11/21(日) 14:23:45どうせ横だけじゃなくて縦にも回そうとしたときに詰むんだから
カメラの初期姿勢を行列で拡縮・回転・移動すれば楽だと思うの
視点を変えたい場合でも初期姿勢を入れ替えるだけでイイしね
0278デフォルトの名無しさん
2010/11/21(日) 14:49:50パス内に記載する。
例えばこんな感じ。
pass Pass1
{
VertexShader = compile vs_1_1 vertexshader();
PixelShader = compile ps_2_0 pixelshader();
ZEnable= True;
AlphaBlendEnable = True;
CullMode = CCW;
}
0279デフォルトの名無しさん
2010/11/21(日) 15:29:35ありがとうございます
こういう書き方できたんですね!
0280デフォルトの名無しさん
2010/11/21(日) 15:57:52>>273じゃないけどkwsk
0281デフォルトの名無しさん
2010/11/21(日) 17:06:33ほい、これでカメラ回したい放題
最低限のことしか書いてないから後は使いやすいようにカスタマイズすればいいと思うよ
http://codepad.org/PDFfVYw5
0282デフォルトの名無しさん
2010/11/21(日) 18:32:58ローカル座標とワールド座標を理解して
ローカル座標Aにあるものをローカル座標Bに、
ワールド座標Bにあるものをローカル座標Aに自由に移動できるようになれ
そうすれば
ワールド座標−3Dモデル座標−ゲタ(横用)座標A−ゲタ(縦用)座標B−カメラ座標
としてゲタをまわしても楽だぞ
0283デフォルトの名無しさん
2010/11/21(日) 23:02:33>>278
271です。
シェーダー側でもできるんですね。
ありがとうございます。大変参考になりました。
0284デフォルトの名無しさん
2010/11/22(月) 11:13:01なにが問題なのか、原因がわかる方はお教えください m(_ _)m
// 現在の方向ベクトル(Z軸の向き)を算出
now_vec.x = m_pModel->GetMatrixWorld()._31;
now_vec.y = m_pModel->GetMatrixWorld()._32;
now_vec.z = m_pModel->GetMatrixWorld()._33;
D3DXVec3Normalize(&now_vec,&now_vec);
// 注視点への方向ベクトルを算出
eye_vec.x = pointdata.posx - m_pModel->GetMatrixWorld()._41;
eye_vec.y = pointdata.posy - m_pModel->GetMatrixWorld()._42;
eye_vec.z = pointdata.posz - m_pModel->GetMatrixWorld()._43;
D3DXVec3Normalize(&eye_vec,&eye_vec);
// それぞれのクォータニオンを作成
now_q = D3DXQUATERNION(now_vec.x,now_vec.y,now_vec.z,0.0f);
eye_q = D3DXQUATERNION(eye_vec.x,eye_vec.y,eye_vec.z,0.0f);
// 2つのベクトルから角度を求める
angle = acos(D3DXVec3Dot(&now_vec,&eye_vec));
// クォータニオンの変化量を求める
q_vel = angle_vel / D3DXToDegree(angle);
if(q_vel > 1.0f) q_vel = 1.0f;
// 次フレームの角度を決めるクォータニオンを求める(スラープ補間
D3DXQuaternionSlerp(&ans_q, &now_q, &eye_q, q_vel);
// !↑この時点のクォータニオン(ans_q)を描画に使用してもうまくいかない。
0285284
2010/11/22(月) 11:14:52// クォータニオンから回転行列を求める
D3DXMatrixRotationQuaternion(&rot_mat,&ans_q);
// 回転行列からオイラー角を求める(http://marupeke296.com/DXG_No20_TurnUsingQuaternion.html参照)
sx = rot_mat._32 * -1;
ans_angle.x = asin(sx);
cx = cos(ans_angle.x);
sy = rot_mat._31 / cx;
cy = rot_mat._33 / cx;
ans_angle.y = atan2(sy, cy);
sz = rot_mat._12 / cx;
cz = rot_mat._22 / cx;
ans_angle.z = atan2(sz, cz);
// 求めた角度を設定
m_AngleVel = D3DXToDegree(ans_angle);
m_pModel->ShiftAngle(D3DXToRadian(m_AngleVel));
0286デフォルトの名無しさん
2010/11/22(月) 11:23:59DirectInputはサポートしなくなったしXInputは専用ゲームパッドしか動かないみたいだし
0287デフォルトの名無しさん
2010/11/22(月) 11:25:35これからどうやっていけばいいんだろ?
0288デフォルトの名無しさん
2010/11/22(月) 11:34:550289デフォルトの名無しさん
2010/11/22(月) 12:10:32左にあるか(a_mat._41 < 0)、右にあるか(a_mat._41 >= 0)、の判定は、
どのようにしておこなえますか?
0290デフォルトの名無しさん
2010/11/22(月) 12:15:460291289
2010/11/22(月) 12:18:53あるモデルAの行列を原点としたときの、ある行列Bの位置づけは、どのようにしたら取得できますか?
行列Aと行列Bは等しいワールドに置かれているものとします。
0292デフォルトの名無しさん
2010/11/22(月) 12:26:52vをゼロベクトルとして v*B - v*A とか?
0293292
2010/11/22(月) 12:29:430294デフォルトの名無しさん
2010/11/22(月) 12:39:15DirectInputとかDirectSoundってDirectx8でしょ?
今売ってるGPUとかはDirectx8〜11ってのが多いから、これがDirectx9〜ってなったらGPUとかOSでも認識しなくなるんじゃない?
0295デフォルトの名無しさん
2010/11/22(月) 12:43:20angle_velとか意味不明な変数が出て来てるからよくわからんが
D3DXQuaternionSlerpの使い方が良くない気がする
これはnow_q→eye_qを0→1.0で変化させるものなので
毎フレーム動かすのはq_velだけでnow_qとeye_qは移動し始めのものを使わないと固定量移動にはならない
この方法毎フレーム計算するなら
now_vecとeye_vecの法線を外積で求めてそいつを回転軸にして
D3DXQuaternionRotationAxisでnow_vecを固定角度回転させたほうがいい気がする
0296デフォルトの名無しさん
2010/11/22(月) 12:54:01Aの逆行列にBをかければよいのでは
0297デフォルトの名無しさん
2010/11/23(火) 10:20:50ゲームの街のポリゴン数ってもっと少ないですか?
それとも分割して表示するとかで一お城のポリゴン数自体はこんなものなのでしょうか?
お城はこれですhttp://sketchup.google.com/3dwarehouse/details?mid=3c144b8c49657ea4892861a071be7a12&prevstart=96
0298デフォルトの名無しさん
2010/11/23(火) 10:46:200299デフォルトの名無しさん
2010/11/23(火) 10:47:45影響するのがメモリサイズであって、ティクスチャに大きく影響されるでしょう。
.jpgを使うと極端に遅くなるかもしれない。
そのまま使う事はほとんど無く、
ゲームエンジンに合わせて最適化するだろうし、構造を変えるかもしれない。
また、ターゲットPCを基準にして大きすぎるか小さいかの判断がされる。
ティクスチャ無しで読み込んで どの程度なのか確認するのもひとつの方法。
0300デフォルトの名無しさん
2010/11/23(火) 10:48:56DirectSound使ってますぅ
動かないPCは死ねですぅ
0301デフォルトの名無しさん
2010/11/23(火) 10:50:57ありがとうございます
やってみます
0302298
2010/11/23(火) 11:08:41使う意味なかった
0303デフォルトの名無しさん
2010/11/23(火) 11:30:47やってみました。
全部jpgだったのでマテリアルからテクスチャの項を消してやりました。
若干早くなった気もしますが2分ぐらい掛かりました。拡張子は何でするのが良いのでしょうか?
ということでまず何をすれば良いのでしょうか?
http://www.nicovideo.jp/watch/sm9661189
昔たまたま見つけたこれが印象的なのですがどうでしょうか?
0304デフォルトの名無しさん
2010/11/23(火) 11:44:47ゲームエンジンの要求するファイル形式があるはず
相性があるから、調べてみ
ティクスチャにjpgを使わない。DDSかTGA
2分くらいなら遅くないと思いますが、メモリ消費の方が心配。
0305デフォルトの名無しさん
2010/11/23(火) 11:45:050306デフォルトの名無しさん
2010/11/23(火) 12:13:24ありがとうございます
ポリゴンのファイル形式はxファイルでゲームエンジンはbulletで、要求する形式はわかりませんが普通に他のはxファイルでやってます
2分で遅くないのですか…つまりどのみちファイルを読み込む処理は絶対に必要だからファイルのサイズに比例する。早くしたいならポリゴンを減らすしかないみたいな感じですか?>>303の処理は読み込んだ後動かしてる時のメモリを減らす処理ということですね
それと、メモリはタスクマネージャーで見ると、お城があるときは152308Kで、コメントアウトすると67000kでした
0307デフォルトの名無しさん
2010/11/23(火) 12:35:402分が遅くないってことはないでしょう・・・少なくともゲームだと遅いと思いますよ。
あなたのPCスペックがわからないので、一概には早い遅いと言えないですが。
また、巨大なマップでもドカっと読み込むのではなく、エリアごとに分割しておいて最初に必要な
場所だけロードし、他の処理中に読み込むとかいう方法もあります。
物体が小さいのに、ポリゴン数が多いモデルデータはそもそもゲーム向けではない気もしますし。
0308デフォルトの名無しさん
2010/11/23(火) 12:42:200309デフォルトの名無しさん
2010/11/23(火) 12:49:24ありがとうございます
>>308
はい。
バイナリでやってみます
0310デフォルトの名無しさん
2010/11/23(火) 12:51:53うーん、それじゃあね
そのXファイル3DデータをアップローダーででもUPしてくれれば、調べる。
これ以上は具体的に最適化を考えないと 答えにならない。
読み込みが遅くとも、最初の1回だけだから大きい問題ではない。
0311デフォルトの名無しさん
2010/11/23(火) 13:00:060312デフォルトの名無しさん
2010/11/23(火) 13:03:21イナリにする方法がわかりません教えてください
0313デフォルトの名無しさん
2010/11/23(火) 13:04:04とりあえず>>310
0314デフォルトの名無しさん
2010/11/23(火) 13:09:16大きいマップなんかは5分くらい待たせるから、2分だと速い方
0315デフォルトの名無しさん
2010/11/23(火) 13:22:18とりあえずこれです
http://marupeke296.com/TOOL_No1_convertXFormat.htmlバイナリ変換ツールのソースを見つけましたが組み立てるのが面倒臭いので誰か下さい
0316デフォルトの名無しさん
2010/11/23(火) 13:33:36Core2Duo3GHz
GeForce9600
0317デフォルトの名無しさん
2010/11/23(火) 13:36:5015秒で開けた@C2D Q9550/RAM4GB/9800GT
0318デフォルトの名無しさん
2010/11/23(火) 13:44:35でもプログラム中で開いたら、普段は5秒ぐらいで窓が開くのに
お城があると2分はかかります。もしかしてそっちのミスでしょうか
0319デフォルトの名無しさん
2010/11/23(火) 13:50:08遅いのは当たり前、死ねよ。
0320デフォルトの名無しさん
2010/11/23(火) 13:50:320321デフォルトの名無しさん
2010/11/23(火) 13:54:12同じような時間で開けないなら何かしら理由があるはず
0322デフォルトの名無しさん
2010/11/23(火) 13:54:140323デフォルトの名無しさん
2010/11/23(火) 13:57:05すいません。バイナリとは言ってません。はい(その通り、テキスト形式でした)。バイナリでやってみます。というニュアンスでした。
>>320
他に何か良いのがあったら教えてください。
それから虎のに入れたら3分ぐらい掛かりました
今、一生懸命バイナリツールを組みた立てますが、クリエイトデバイスとかで未解決のエラーが一杯出て全然できません。誰か下さい。
0324デフォルトの名無しさん
2010/11/23(火) 14:00:35仕事増やすだけで根本的な解決をしようとしてない。
0325デフォルトの名無しさん
2010/11/23(火) 14:01:32それで3分とか異常だろ、バイナリ/テキストどうのこうの言うレベルじゃない。
あとやる気が感じられない。面倒くさいだの誰か下さいだの。死ねよ
0326デフォルトの名無しさん
2010/11/23(火) 14:06:25何で変換が必要なのか意味不明。
0327デフォルトの名無しさん
2010/11/23(火) 14:14:58>>324
ありがとうございます。エスパーしてください。どうしてでしょうか。
>>325
そうです。チュートリアル6のタイガーにそのまま入れたところ2分ぐらい掛かりました。
それから今必死にバイナリのプロジェクトを作ってるのです。しかしプログラム経験自体浅いのでなかなかできないのです。
サンプルのエンプティープロジェクトに組み込もうと思ったのですが
ImeUi.obj : error LNK2019: 未解決の外部シンボル _ImmSetConversionStatus@12 が関数 "long __cdecl ImeUi_ProcessMessage(s
こんなエラーが20個ぐらい出てます。プロパティで追加の依存ファイルの設定と、ユニコード文字の設定としたのですが他に何かしないといけませんでしたっけ?
>>326
バイナリで出力する設定がありません。
0328デフォルトの名無しさん
2010/11/23(火) 14:34:45http://www1.axfc.net/uploader/C/so/125598
虎に入れたのと一緒に入れときます
やはり2分はかかります。何かおかしいのでしょうか?
0329デフォルトの名無しさん
2010/11/23(火) 15:00:27さすがにコレは繋がった1つのマップとしてはポリゴン数多すぎ(118019ポリ)。
そもそもゲーム考慮してつくってないんだろうしこのモデル。
XSIで開いてみたけど開くのもクソ時間かかった。
早くしたければ
1:どうしてもこのMAP使いたければ自分でポリゴン削るか適当に分割する。
2:独自形式つくって変換して自分でローダー作って速度比べる
3:諦めろ
ところでなんでこのオブジェクト、デフォ姿勢が垂直に突き刺さってんの?
0330デフォルトの名無しさん
2010/11/23(火) 15:23:33変換するときに狂ったのかな
何を使ってデータ変換したの?
変なXファイルだ、動くから間違いではない。
独自形式ならば一瞬で読み込める。
0331デフォルトの名無しさん
2010/11/23(火) 15:42:28リンクするLIBがリリース版なのと、自分のプロジェクトの設定がデバッグ情報無しになってるよね?
0332デフォルトの名無しさん
2010/11/23(火) 16:27:57わかりました。ありがとうございます。デフォ姿勢は適当に出力したからです
>>330
壊れてるかはわかりませんが、ちょっと変なところに飛んでるのはただの消し忘れです。
モデリングツールはBlenderです
>>331
すいません。理解できません。具体的にどうすれば良いのでしょうか?
0333デフォルトの名無しさん
2010/11/23(火) 16:55:25デバッグ無しで開始にしたらとても早くできました
ありがとうございました
>>329
>>330
素人乙wwwwwwwwwwwwww
0334デフォルトの名無しさん
2010/11/23(火) 17:03:440335デフォルトの名無しさん
2010/11/23(火) 17:08:46それが協力しようとしてくれた人に対する態度か。
お前もド素人だろ(笑)
0336デフォルトの名無しさん
2010/11/23(火) 17:08:470337デフォルトの名無しさん
2010/11/23(火) 17:12:180338デフォルトの名無しさん
2010/11/23(火) 17:20:47全角がダメだの、挨拶がどうだの
ITドカタは先輩に土下座して情報教えてもらうのかもしれんが、今時PCなんて趣味レベルなのに俺らの常識がPC界の常識(キッ
みたいにイキりたっててうざい。肩のPawer抜けよ
0339デフォルトの名無しさん
2010/11/23(火) 17:24:44Pawer?wwwww
釣り針でけぇから食いついちゃうけど、
お前みたいなやつの、教えてもらって当然みたいな考えがウザイんだよ。
0340331
2010/11/23(火) 18:37:09同じような自前プログラムで、開けるけど遅いって言えば、
デバッグ実行してるから?って思っただけなんだけど…
これは玄人だから素人だからは関係ない
どっちかって言うとエスパー力かな、と思うw
因みにエスパー伊藤と江頭2:50が好きな芸人
お前ら肩の力を抜け、333が本人とも限らないだろう、
30分ほど前の一つ前のレスでデバッグビルドを理解出来ないと言ってるし
まあ、それだと解決してないことにもなるけどw
0341デフォルトの名無しさん
2010/11/23(火) 19:06:000342デフォルトの名無しさん
2010/11/23(火) 19:26:400343デフォルトの名無しさん
2010/11/23(火) 21:45:43ニアクリップ2、
ファークリップ1000の時、
ビュー空間でのZが
たった30で、すでにZバッファに入る値が0.94
120でもうZバッファは0.99
になってしまいます
偏りが出ることは聞いたことがあったのですが、
Zバッファって実際こんなに偏りがあるものですか?
グラフにしたものは
ttp://up3.viploader.net/ippan/src/vlippan170142.jpg
です
0344デフォルトの名無しさん
2010/11/23(火) 21:50:41ニアクリップの2倍近辺で0.5
0345デフォルトの名無しさん
2010/11/23(火) 21:52:07あまりの衝撃に開いた口がふさがりません
0346デフォルトの名無しさん
2010/11/23(火) 21:56:57ありがとうございました
口が開いたままでお礼を忘れてました
0347デフォルトの名無しさん
2010/11/23(火) 22:10:18>近くの平面の距離に対する遠くの平面の距離の比率を 100% とした場合、
>深度バッファ範囲の 90% がシーンの深度範囲の最初の 10% に費やされる。
>娯楽や風景のシミュレーション用の典型的なアプリケーションでは、比率 (遠くの平面 / 近くの平面) がどこでも 1000 から 10000 の間である必要がある。
>比率が 1000 の場合、深度バッファ範囲の 98% が深度範囲の最初の 2% に費やされ、比率が高くなるにつれて分布状態が悪くなる。
0348デフォルトの名無しさん
2010/11/24(水) 00:05:200349デフォルトの名無しさん
2010/11/24(水) 07:03:33全部自分の手で座標などを打って実現するものなのでしょうか?
関数一つで便利に扱えたりするものではないのでしょうか?
0350デフォルトの名無しさん
2010/11/24(水) 07:16:400351デフォルトの名無しさん
2010/11/24(水) 08:31:14モデリングツールでモーション作って、出力したファイルから必要なデータを読み込んで計算する。
言ってるモーションっていうのは恐らくスキンメッシュアニメーションのことだと思うけど、
その場合はボーンデータ(頂点を動かすための行列)を使って、その行列の動きが適応される
部分の頂点を変換(拡大・回転・移動)する。
って書いたとこでそれDirectX関係ないよねってことに気づいた
0352デフォルトの名無しさん
2010/11/24(水) 12:38:060353デフォルトの名無しさん
2010/11/24(水) 12:47:010354デフォルトの名無しさん
2010/11/24(水) 12:53:220355デフォルトの名無しさん
2010/11/24(水) 13:09:13そもそも何を使っているかも書かずに情報が得られると思っているんだろうか?
0356デフォルトの名無しさん
2010/11/24(水) 13:10:090357デフォルトの名無しさん
2010/11/24(水) 13:13:49Xファイルにウェイトの情報はあるのかとか
0358デフォルトの名無しさん
2010/11/24(水) 13:24:590359デフォルトの名無しさん
2010/11/24(水) 13:42:360360デフォルトの名無しさん
2010/11/24(水) 13:43:480361デフォルトの名無しさん
2010/11/24(水) 13:44:380362デフォルトの名無しさん
2010/11/24(水) 14:31:290363デフォルトの名無しさん
2010/11/24(水) 14:38:02どうやればいいの?
0364デフォルトの名無しさん
2010/11/24(水) 15:12:30リソースとして取り込むか
ファイルなんて基本ただのバイナリ列なんだから
ファイルをヘッダーにコンバートするツールでも作ってincludeしとけばいいんじゃね?
0365デフォルトの名無しさん
2010/11/24(水) 17:44:170366デフォルトの名無しさん
2010/11/24(水) 17:48:03メタセコに5000円払うとプラグインにkeynoteってのがあってそれが使える
複数アニメーションも対応してるしとりあえず不満はない感じ
メタセコ+rokdeboneって組み合わせもいい
こっちはタダ
0367デフォルトの名無しさん
2010/11/24(水) 19:37:550368デフォルトの名無しさん
2010/11/24(水) 19:50:54用意された関数でロードって意味ではXファイルだけ
自分でロードしたらなんでもいけるんちゃう?
0369デフォルトの名無しさん
2010/11/24(水) 20:29:35それぐらい自分でいろいろ考えようや
10分くらいで書いた超適当コンバート
独自形式とかではなく、ただバイナリ列にしてるだけ、汎用性はあまり考えてないよ!
http://codepad.org/Wzzl2Zh9
出来上がったexeに変換したいファイルをドロップすると
それぞれのファイルに対応したヘッダーと
そのフォルダ内にあるデータ用ヘッダーを全て統括するfile.hが出来上がる
それらを全部使用先にコピペしてfile.hをインクルードすると元ファイル名からデータを検索できる
コレをつかって虎のチュートリアル
http://www5b.biglobe.ne.jp/~mya_a/dx/Meshes.zip
EXEだけで動くはず?
0370デフォルトの名無しさん
2010/11/24(水) 20:37:370371デフォルトの名無しさん
2010/11/24(水) 21:12:510372デフォルトの名無しさん
2010/11/24(水) 22:00:17ワンダーウィッチみたいだな
0373デフォルトの名無しさん
2010/11/24(水) 22:06:39まぁ、ある種の隠蔽にはなるかもしれんが
0374デフォルトの名無しさん
2010/11/24(水) 22:24:26UAC が絡むとやばいことになる
しかも XP で開発してると気づかないからめんどい
0375デフォルトの名無しさん
2010/11/24(水) 23:22:07どういった計算式になるのでしょうか?
例えば、カメラがキャラクタのどの方向を移していてもカメラから見て上下左右自由に動けるような感じです
0376デフォルトの名無しさん
2010/11/24(水) 23:44:35カメラの視線ベクトルをいい感じに加工してキャラに足してみればよくね?
0377デフォルトの名無しさん
2010/11/24(水) 23:50:31カメラを考えない移動させたい方向(キーの入力方向)
例えば方向キーの入力値が
analog.x(-1.0〜1.0)
analog.y(-1.0〜1.0)で
XZ平面状を動くとしたら
進行方向を
D3DXVECTOR3 dir(analog.x,0,analog.y) ;
みたいにして
コイツにビュー行列の逆行列を掛ける
D3DXMATRIXA16 matInvView;
D3DXMatrixInverse ( &matInvView, NULL, &matView ) ;
D3DXVec3TransformNormal ( &dir, &dir, &matInvView ) ;// ベクトルなのでTransformNormalなことに注意
このときのdirがカメラから見た奥方向になる
ただしカメラが見下ろしてたりするとy方向にも移動しちゃうので
xz平面上で移動させたい場合は
dir.y = 0 ;
D3DXVec3Normalize ( &dir, &dir ) ;
みたいにしいてy方向の移動量を殺す必要がある
後はdirに適当なスピードを掛けて、現在座標に足せばOK
0378デフォルトの名無しさん
2010/11/25(木) 00:26:47面倒でなければ少し確認させてください
analog.x(-1.0〜1.0) xへの移動量
analog.z(-1.0〜1.0) zへの移動量
D3DXVECTOR3 dir(analog.x,0,analog.z); xとzへの力の強さ
この3つの関数と引数を調べてみましたが、どういった事をしているのでしょうか・・
D3DXMatrixInverse ( &matInvView, NULL, &matView ) ;
D3DXVec3TransformNormal ( &dir, &dir, &matInvView ) ;
D3DXVec3Normalize ( &dir, &dir ) ;
0379デフォルトの名無しさん
2010/11/25(木) 00:36:02まず、なんか入門書がほしいところだけどなんかいいのないの?>他の人
0380デフォルトの名無しさん
2010/11/25(木) 00:41:400381デフォルトの名無しさん
2010/11/25(木) 00:44:300382デフォルトの名無しさん
2010/11/25(木) 00:47:43ぶっちゃけ言うほど詳しくしらなくても、行列の役割とかベクトルの役割知ってればDirectX
は使えるけど、ただ知ってたほうがいいのよって感じ。
趣味グラマーなら役割しってて使えるだけでいいと思うけど
0383デフォルトの名無しさん
2010/11/25(木) 00:59:44analog.x(-1.0〜1.0)
analog.y(-1.0〜1.0)で
D3DXVECTOR3 dir(analog.x,0,analog.y) ;
http://loda.jp/vip2ch/?id=797
これが出来たということなのでしょうか・・
0384デフォルトの名無しさん
2010/11/25(木) 02:38:49スティックの向きというのはビュー空間上に存在する向き、
と考えられる。
ワールド空間からビュー空間へはビュー行列を掛け算だから
ビュー空間からワールド空間へはビュー行列の逆行列を掛け算だ
ビュー空間上でのスティックの向き * ビュー行列の逆
→ワールド空間上でのスティックの向き
0385デフォルトの名無しさん
2010/11/25(木) 03:37:48>dir.y = 0 ;
>D3DXVec3Normalize ( &dir, &dir ) ;
じゃダメだなぁ
XYZ移動ならそのままでいいんだが
純粋に計算済みビュー行列からXZ移動距離を算出するには一工夫いりそうだ
視線のY方向を0にしたベクトルから計算すればいけるけどなんか2度手間だし良い方法ないかな
0386デフォルトの名無しさん
2010/11/25(木) 04:29:05DirectXは基本的に始点と終点の位置・姿勢さえ分かれば中間の計算をしてくれる関数が用意されてるよね
0387デフォルトの名無しさん
2010/11/25(木) 06:51:35カメラの位置と視線の先情報はLookAt関数作るのにいるんだからあるだろ
そのベクトルをY情報消して単位ベクトル求めて使うだけやんけ
何1人でぶつぶつ言って混乱しとるんじゃ
0388デフォルトの名無しさん
2010/11/25(木) 07:19:47固定位置カメラなら何も問題ないけど
実用で考えたらカメラは常に移動回転してるものとして考えないといけない
だとすると回転移動後のカメラ位置から
またわざわざ視線を抜いてきてY抜いて再計算するなんて無駄以外のなにものでもないだろ?
まぁ、ビュー逆行列のY軸が天井方向になるように回転させて解決したけどな
0389デフォルトの名無しさん
2010/11/25(木) 07:29:11ベクトルと位置を分離したパラメータでもって、
必要なときにカメラ用の行列を作るなり進行方向に利用するなりすればいい。
なんでわざわざ混ぜたモノを使おうとするのか意味不明。
0390デフォルトの名無しさん
2010/11/25(木) 12:27:11D3DXCreatePolygonで作った板ポリゴンに貼ったら透明になったのでテクスチャは合ってると思うのですが
マテリアルの問題でしょうか?どうすれば良いのでしょうか?
0391デフォルトの名無しさん
2010/11/25(木) 12:34:45デバイス->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
0392デフォルトの名無しさん
2010/11/25(木) 12:44:30できました
ごめんなさい
0393デフォルトの名無しさん
2010/11/25(木) 12:46:40ありがとうございました
0394デフォルトの名無しさん
2010/11/25(木) 16:08:32全画面でDirectXを使っているアプリケーション(WindowsMediaPlayerや3Dゲーム)に文字や図形を重ね描きしたいのですが、
参考になるサイトを教えてもらえませんでしょうか?
イメージとしてはニコ動のコメントの様な感じです
(アレがDirectX使っているわけではなさそうですが)
0395デフォルトの名無しさん
2010/11/25(木) 16:21:02君がやりたいことを簡単に実現する方法はDirectX自体にはないよ
どうしてもやりたいなら
DirectX フック
でぐぐれ
0396デフォルトの名無しさん
2010/11/25(木) 16:48:48敷居が高すぎてちょっと先行き不透明すぎでした
とりあえず読んでます
ありがとうございました。
0397デフォルトの名無しさん
2010/11/25(木) 17:08:56せっかくトゥーンシェーダーにしたのに間抜けな感じになります
エッジの太さは調節するにしても、左はきめが細かくてアニメっぽいのに
右は荒くて間延びした感じに感じます。どうすれば左のようにできますか?
0398デフォルトの名無しさん
2010/11/25(木) 17:29:29現在のモデルのポリゴンの具合も輪郭の描画方法も分からないのに何を言えと
ぱっと見た感じ言えるのは輪郭の検出アルゴリズムがあまり良く無さそうなのと
輪郭の描画にフィルターが掛かってないからジャギジャギしてるくらいか
0399デフォルトの名無しさん
2010/11/25(木) 17:33:310400デフォルトの名無しさん
2010/11/25(木) 17:39:34ありがとうございます
モデルは全く同じです。具合とか輪郭の描画方法とかはよくわかりません
とにかく、どうしたら良いのか全くわからなかったので質問させて頂きました
「シェーダーを自分で考えて書く」ような話になると全く無理です
とにかくトゥーンシェーダにしたらそれっぽくなると思っていたので、そういうトゥーンシェーダとか、エッジフィルターとか
どういう技術によって左のようになるのか教えてもらおうと思いました。どうすれば良いのですか?何のフィルターをかけるのですか?
>>399
はい
0401デフォルトの名無しさん
2010/11/25(木) 17:49:19http://maverickproj.web.fc2.com/pg41.html
ので、エフェクトファイルはこれを使って描画してると思います
0402デフォルトの名無しさん
2010/11/25(木) 18:08:31・深度
・法線
・ID
深度や法線で精度を上げすぎると不必要な線が大量にできるからIDをうまく使うんだ
IDってのは頂点カラーと同じようにメッシュに持たせればいい
あとはマルチレンダーターゲットで深度・法線・ID・通常のレンダリングと出力し
2パス目でピクセルごとに隣接するピクセルの上記情報との差分が一定以上だったらエッジとかやるんだよ
まんまコピーじゃなくて少しはサンプルをいじって何がどうなってるか確認すべし
0403デフォルトの名無しさん
2010/11/25(木) 18:16:15はぁ?
カメラ座標上の0,0,1ベクトルをワールドに直してやるだけ(その後の加工は省く)の話ちゃうんか?
まったく話が見えない
無駄って何?その計算削ると処理軽くなったりするわけ?
0404デフォルトの名無しさん
2010/11/25(木) 18:20:280405デフォルトの名無しさん
2010/11/25(木) 18:22:21いちいち変換したら誤差も出るだろjk
0406デフォルトの名無しさん
2010/11/25(木) 18:25:23カメラ一個でか?
すごいな
どうぞ軽いカメラでも作っててください
(ああ、ほんとうに馬鹿なんだな・・・)
0407デフォルトの名無しさん
2010/11/25(木) 18:29:120408デフォルトの名無しさん
2010/11/25(木) 18:32:38ありがてぇ…ありがてぇ…
全く理解できません。専門的すぎます。シェーダーってサイトを見てもとっかかりから専門的すぎてついていけないんですよね…
精度ってのがキメの細かさですよね、http://maverickproj.web.fc2.com/pg41.htmlのソースで初期値的なものを若干変えたりするだけで実現できる物では無いんでしょうか?
サイトとか見ても変数や数値がバーっと載ってるだけで、頭で全然イメージできないんですよね。
>>404
すいません。急にハードルが上がったきがして、諦め状態です
0409デフォルトの名無しさん
2010/11/25(木) 19:29:160410デフォルトの名無しさん
2010/11/25(木) 19:38:270411デフォルトの名無しさん
2010/11/26(金) 00:04:00SetVertexShaderとか
SetPixelShaderとか
D3DXCompileShaderFromFileとか使えばいんでね?
0412デフォルトの名無しさん
2010/11/26(金) 02:19:19使い分けがイマイチわかりません。
msdnにはw除算が入るとありますが、
普通にモデルに張る時でもw除算によって遠近補正があるはずなのに、
なぜ二つのサンプル方法があるのでしょう?
また違いを探るために、
tex2D→そのままサンプル
tex2Dproj→w除算してサンプル
と考えたとき、sdkサンプルをいじってtex2Dをtex2Dprojに書き換えて
みたんですが、違いが見あたらず困っています。
0413デフォルトの名無しさん
2010/11/26(金) 04:47:16wに相当するテクスチャ座標は設定してる?
2次元のテクスチャ座標じゃダメだよ。
それと、そのwは遠近補正のwじゃない。
0414デフォルトの名無しさん
2010/11/26(金) 07:52:220415412
2010/11/26(金) 11:34:05これは遠近補正とはちがうんですか!
テクスチャ座標はBasicHLSLのサンプルの座標を
VS入力、出力、PS入力を4次元にしただけです。
なんのためのwなんでしょうか?
0416デフォルトの名無しさん
2010/11/26(金) 11:46:45ある意味遠近補正。
ただ、遠近の方向がカメラとは独立した向き。
0417412
2010/11/26(金) 11:55:49なるほど!
ということは
tex2D→自動で遠近補正
tex2Dproj→自分で設定したwで遠近補正
だからシャドウマップとかではライトからレンダリングした時のw
が必要で、そのwで割ることでうまくテクスチャが張られるということですね!
ありがとうございました!
0418デフォルトの名無しさん
2010/11/26(金) 19:39:30大学のPCはXPでdirectX9が入っていてdxdiagでテストしても問題は見つかりませんと表示されました。
以下のプログラムでエラーを調べると
ErrorDescription:Not available
ErrorString:D3DERR_NOTAVAILABLE
になります。
HRESULT hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWindow,
D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_D3DPP, &g_pD3DDevice);
if (FAILED(hr))
{
hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, g_hWindow,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &g_D3DPP, &g_pD3DDevice);
if (FAILED(hr))
return error("InitDXGraphics CreateDevice",hr);
}
0419デフォルトの名無しさん
2010/11/26(金) 19:45:41D3DCREATE_HARDWARE_VERTEXPROCESSINGじゃ作れないとかじゃ?
REFでトライする前に
D3DCREATE_SOFTWARE_VERTEXPROCESSING
でもトライしてみるとか
0420デフォルトの名無しさん
2010/11/26(金) 19:52:01http://www.falcom.co.jp/qanda/faqs/common15.html
0421デフォルトの名無しさん
2010/11/26(金) 20:02:33ありがとうございます。
試してみます。
0422デフォルトの名無しさん
2010/11/26(金) 20:26:36インストールされてないと使えないだろ。
D3DDEVTYPE_HAL+D3DCREATE_HARDWARE_VERTEXPROCESSINGが失敗したら
D3DDEVTYPE_HAL+D3DCREATE_SOFTWARE_VERTEXPROCESSINGを試行するのが正解。
0423デフォルトの名無しさん
2010/11/26(金) 20:34:440424デフォルトの名無しさん
2010/11/27(土) 00:38:120425デフォルトの名無しさん
2010/11/27(土) 00:48:26うーめらぬーめら
0426デフォルトの名無しさん
2010/11/27(土) 01:27:310427デフォルトの名無しさん
2010/11/27(土) 10:26:320428デフォルトの名無しさん
2010/11/28(日) 18:17:52そのなかにすべてのボーンの情報がはいっていたのですが、
(つまり、1つのXファイルに1つのMeshContainerしかなかった)
今、手元にあるXファイルは、FrameRootにMeshContainerがなく、
その子の子の子Frameあたりが、MeshContainerを持っています。
いくつかの別のフレームも同じように持っているっぽいです。
今まではメッシュデータからLockで取り出した頂点情報に、
そのままワールド変換行列をかけるだけで、あたり判定情報が取り出せたのですが、
この場合、メッシュデータから取り出した頂点情報は、
Frameの行列をかけたりしなければ、うまく取り出せないのでしょうか?
0429デフォルトの名無しさん
2010/11/28(日) 18:21:09ただそれだけの話だ。
0430デフォルトの名無しさん
2010/11/28(日) 18:26:26メッシュコンテナが持つ頂点情報は、つねに絶対的な座標(他の行列と計算済みでないか)ということも
知識として知っておきたいです
0431デフォルトの名無しさん
2010/11/28(日) 18:47:49>Frameの行列をかけたりしなければ、うまく取り出せないのでしょうか?
しらねーよ
やってみろよ
ダメだったらまたこい
0432デフォルトの名無しさん
2010/11/28(日) 19:05:23こっちが聞く項目多くなるからなんだよね
ボーンの話が出てるけど、>>428がもし、ボーンが入ってるモデルの当たり判定を言ってるなら
その方法でそもそもメッシュまでの階層があろうがなかろうがうまくいくわけないんだよね
それがうまくいってたっていうからまたややこしい
ボーンは関係なくて、単にモデルの中心からの判定やっててこのたび階層構造にして
当たりの位置が階層ついたフレームにのってて位置がアレなんですって話なら
今回のも相談もわかるんだけど・・・
ぶっちゃけ、
ボーンはまったく関係なくて
「普通の階層構造のあるXファイル」と
「フレームがルートだけのXファイル」の話なんじゃねーの?
って思わなくもないんだけどボーンボーンっていうからとりあえず問題の切り分けをやってみてほしいと思ったりして・・・
そんでそれってのはいくつか試せばはっきりわかるわけで・・・って話
0433デフォルトの名無しさん
2010/11/28(日) 19:28:17Meshが複数あるXファイルになった記憶がある
でも単に1つのモデルのなかに複数のモデルが入ってるのと同じ状態だから
メッシュコンテナの数だけ当たり判定をすれば今までと全く同じ方法でいけるんじゃない?
0434デフォルトの名無しさん
2010/11/28(日) 20:19:49そもそもスキンウエイトをかけないと当たり判定なんて出来ない。
0435デフォルトの名無しさん
2010/11/28(日) 20:25:44まずプログラム云々以前に理解していないと話にならない部分、
フレームとメッシュとボーンとスキンウエイトの関係を説明してみろ。
0436デフォルトの名無しさん
2010/11/28(日) 20:41:05サンプルのXファイルと、プログラムソースコードを UPするのが解決への近道。
データとコードは嘘つかない。
0437デフォルトの名無しさん
2010/11/28(日) 21:16:40相変わらず偉そうだよね
0438デフォルトの名無しさん
2010/11/29(月) 00:30:31スマートポインタもうまく使えなくてわけわからん
0439デフォルトの名無しさん
2010/11/29(月) 11:03:420440デフォルトの名無しさん
2010/11/29(月) 18:59:47Zバッファを使用した描画が正常に行えません。
Zバッファありでは表示が隠されるべき場所が、穴だらけになって激しく明滅します。
表示のNearZとFarZを変更しても特に変化がありません。
是非ご指摘をお願いします。
ちなみに、使用しているPCでは他のソフトウェアで3D表示に問題が発生したことはありません。
※短くするためインターフェース名(g_pD3DDevice)を省略しています。
//デバイス作成(成功)
.EnableAutoDepthStencil = true;
.AutoDepthStencilFormat = D3DFMT_D16及びD3DFMT_D24S8で同症状
//毎ループ実行
//Zバッファ
Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 127, 64, 0), 1.0f, 0);
BeginScene();
SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE);
SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
SetRenderState( D3DRS_ZWRITEENABLE, true);
※ビューポートと視点設定
sample_teapot->DrawSubset(0);
//頂点フォーマットの設定
SetFVF(D3DFVF_VERTEX);
//ストリームを使わないで直接データを渡して描画する
DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,12,vtx,sizeof(D3DVERTEX));
DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,12,vtx2,sizeof(D3DVERTEX));
EndScene();
0441デフォルトの名無しさん
2010/11/29(月) 19:26:590442デフォルトの名無しさん
2010/11/29(月) 20:16:43>>441
ご指摘のとおり、省略した視点設定に問題があったようです。
サンプルと視点設定を差し替えたら正常化しました。
GetClientRect(g_hWindow,&rect);
//透視変換の設定
D3DXMatrixPerspectiveFovLH(&matProj,D3DXToRadian(45.0f),(float)rect.right/(float)rect.bottom, 0.0f, 100.0f);
D3DXMATRIX CameraRotation;
D3DXVECTOR3 vEnvEyePt = D3DXVECTOR3( 0.0f, -5.0f, 25.0f);
D3DXVec3TransformNormal( &vEnvEyePt, &vEnvEyePt, D3DXMatrixRotationYawPitchRoll( &CameraRotation, timeGetTime()/10000.0f, 0.0f, 0.0f));
D3DXVECTOR3 vLookatPt, vUpVec;
vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f);//+vEnvEyePt
vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH( &matView, &vEnvEyePt, &vLookatPt, &vUpVec );
g_pD3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );
g_pD3DDevice->SetTransform( D3DTS_VIEW, &matView );
ちなみにどこに問題があったんだろう…。
0443デフォルトの名無しさん
2010/11/29(月) 20:44:08>D3DXMatrixPerspectiveFovLH(&matProj,D3DXToRadian(45.0f),(float)rect.right/(float)rect.bottom, 0.0f, 100.0f);
後ろから2番目は0ではダメ。
0444デフォルトの名無しさん
2010/11/29(月) 23:50:05あ、ありがとうございます。
確かに、近くが0だと後ろ前がわからずに後方の抜きがおかしくなる?的な事を読んだ気が。
うーん、おかしいなあ…試行錯誤してたときに1とかいれたとおもったのに。
0445デフォルトの名無しさん
2010/11/30(火) 19:46:14zの計算の性質上znを0にすると、
ビュー空間でのzがzn〜zfどの値をとっても
出力される値が必ず1になって、
0〜1のzバッファで絶対に最遠方と判断されてしまう
0446デフォルトの名無しさん
2010/11/30(火) 23:38:38全くカメラが動きません、この3Dモデルの動きとカメラを合わせるには何が足りないのでしょうか
少々省いていますが、このソースだけ見て何が問題あるのか教えてください。
D3DXMatrixRotationX(&mat_Rotation,-0.01f); //3Dモデルのローカル回転
D3DXMatrixRotationX(&mat_View,-0.01f); //カメラの回転
mat_world=mat_Rotation*mat_world; //ローカル座標からワールド座標へ変換
D3DXMatrixTranslation(&mat_work,0,0,0.2f); //3dモデルローカル座標移動
D3DXMatrixTranslation(&mat_View,0,0,0.2f); //カメラの座標移動
mat_world=mat_work*mat_world; //ローカルからワールドに変換
vAt.x=mat_world._41; //カメラの注視点X vAtはベクトルです
vAt.y=mat_world._42; //カメラの注視点Y
vAt.z=mat_world._43; //カメラの注視点X
後はデバイスにワールド行列とカメラ行列のセット
3Dモデルは完璧に動いています
0447デフォルトの名無しさん
2010/11/30(火) 23:39:51ワールド座標の0,0,0にしています
0448デフォルトの名無しさん
2010/11/30(火) 23:44:320449デフォルトの名無しさん
2010/11/30(火) 23:58:10省きすぎだと思われる。
ちゃんとビュー行列作って設定してる?
ちなみに、mat_Viewが何してるのかさっぱり分からない。
0450デフォルトの名無しさん
2010/12/01(水) 00:09:35D3DXMatrixRotationX(&mat_View,-0.01f); //カメラの回転
D3DXMatrixTranslation(&mat_View,0,0,0.2f); //カメラの座標移動
この2行以外はカメラの移動は出来ています。
0451デフォルトの名無しさん
2010/12/01(水) 00:14:56vAt.x=mat_world._41; //カメラの注視点X vAtはベクトルです
vAt.y=mat_world._42; //カメラの注視点Y
vAt.z=mat_world._43; //カメラの注視点X
ってことは注視点はモデルで
視点はキャラの後ろとかのTPS視点がやりたいってことでいいんだよね?
0452デフォルトの名無しさん
2010/12/01(水) 00:16:51視点と注視点を書いてくれ
0453デフォルトの名無しさん
2010/12/01(水) 00:17:10はい、常に3Dモデルの後ろにカメラを置きたいのですが、
3Dモデルを回転させるとついていかないのです・・
0454デフォルトの名無しさん
2010/12/01(水) 00:19:330455デフォルトの名無しさん
2010/12/01(水) 00:23:44D3DXMatrixIdentity(&mat_View);
D3DXVECTOR3 vEye(0,0,0); //カメラの位置
D3DXVECTOR3 vAt(0,0,0); //注視点
D3DXVECTOR3 vUp(0.0f, 1.0f,0.0f); //上向き
D3DXMatrixLookAtLH(&mat_View,&vEye,&vAt,&vUp);
//↑の5行は、1回のみです
device->SetTransform(D3DTS_VIEW,&mat_View ); //この文を毎ループ処理しています
0456デフォルトの名無しさん
2010/12/01(水) 00:31:28>>454も言っている通り、毎ループD3DXMatrixLookAtLHでビュー行列作り直さないと駄目。
そして移動や回転をさせるのはビュー行列自体ではなく vEye, vAt, vUp のほう。
このへんとか参考になると思う。
ttp://marupeke296.com/DXG_No36_DependenceCamera.html
0457デフォルトの名無しさん
2010/12/01(水) 00:32:36まず視点と注視点が一緒なのがおかしい
ビュー行列は毎フレーム作り直す
// キャラの後ろならZ軸方向に視点をずらす
D3DXVECTOR3 vEye(0, 0, -5) ;
D3DXVECTOR3 vAt(0, 0, 0) ;
D3DXVECTOR3 vUp(0, 1, 0) ;
//↑ここまでが1回
//以下を毎ループ
D3DXMatrixRotationX(&mat_Rotation,-0.01f); //3Dモデルのローカル回転
D3DXMatrixTranslation(&mat_World,0,0,0.2f); //3dモデルローカル座標移動
mat_World=mat_Rotation*mat_World; //ローカルからワールドに変換
//で、モデルのワールド行列が出来たら
// 注視点をモデルの位置へ
vAt.x=mat_world._41; //カメラの注視点X vAtはベクトルです
vAt.y=mat_world._42; //カメラの注視点Y
vAt.z=mat_world._43; //カメラの注視点X
// ※視点もモデルのワールド行列で回転移動させる※
D3DXVECTOR3 vWorldEye;
D3DXVec3TransformCoord(&vWorldEye, &vEye, &mat_World );
// ビュー行列を作る
D3DXMatrixLookAtLH ( &mat_View, &vWorldEye, &vAt, &vUp ) ;
0458デフォルトの名無しさん
2010/12/01(水) 05:12:00http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3
やっと更新来たよ
オフライン版とSDKはこれを書いてる時点ではまだ用意されてない
0460デフォルトの名無しさん
2010/12/01(水) 18:39:23D3DXVec3TransformCoord(&vWorldEye, &vEye, &mat_World );
つまり、 vWorldEye=mat_World*vEye;
3Dモデルに変化があった分が追加されたカメラの位置のベクトル=
更新された3Dモデルのワールド行列*更新前のカメラの位置のベクトル
という認識なのですがこの考え方は合っているのでしょうか。
0461デフォルトの名無しさん
2010/12/01(水) 18:55:52ベクトルじゃないよ(ベクトルだと回転だけで位置が変わらない)
ローカル空間での視点座標をワールド行列を使って座標変換している
つまり視点をモデルと同じだけ回転+移動させている
あと掛ける順番が逆
3Dモデルに変化があった分が追加されたカメラの位置「座標」=
ローカル空間のカメラの位置「座標」*更新された3Dモデルのワールド行列
0462デフォルトの名無しさん
2010/12/01(水) 22:29:000463デフォルトの名無しさん
2010/12/02(木) 17:40:35クリエイトエフェクトの行でエラーが出るのですが
エフェクトファイルのどの行のどの変数がおかしいか教えてくれません。どんな数字が入ってるかもわかりません
どうやって知ればいいですか?
0464デフォルトの名無しさん
2010/12/02(木) 18:05:110465デフォルトの名無しさん
2010/12/02(木) 18:15:36File:c\users\パス
Line:394
Error Code:E_FAIL(0x0004005)
Calling:D3DXCreateEffectFromFile(〜
Do you want to debug the applicatin?
はい いいえ
こんな感じです
0466デフォルトの名無しさん
2010/12/02(木) 18:23:41エフェクトを読み出す関数からエラーがとれるだろ。
0467デフォルトの名無しさん
2010/12/02(木) 18:26:06エラーを吐き出すようにフラグとバッファを設定するか
fxc.exeでコンパイルすればエラー表示されるよ
0468デフォルトの名無しさん
2010/12/02(木) 18:36:56ありがとうございます
エフェクトを読み出す関数とは何のことでしょうか?
デバッグを始めるとこのエラーが出て、逆アセンブルのタブの行に飛ばされるので読めません
>>467
ありがとうございます
フラグとバッファの設定はどのようにすれば良いのでしょうか?
fxc.exe…ありがとうございます。コマンドプロンプト…できればコンパイラのエラー一覧のところで見れるようにしたいです
0469デフォルトの名無しさん
2010/12/02(木) 20:41:090470デフォルトの名無しさん
2010/12/02(木) 20:44:58エフェクトを編集&確認するただのツール類を触ってるだけにすら見える
とりあえず D3DXCreateEffectFromFile をぐぐるだけでも
最後の引数に ppCompilationErrors ってあるだろう
0471デフォルトの名無しさん
2010/12/02(木) 21:02:55ID3DXBuffer* pErr = 0;
hr = D3DXCreateEffectFromFile(g_pDevice(),
"fxFiles/略.fx",
NULL,
NULL,
D3DXSHADER_DEBUG,
NULL,
略,
&pErr);
if(pErr){
const char* ErrMsg = (const char*)pErr->GetBufferPointer();
OutputDebugString(ErrMsg);
pErr->Release();
pErr = 0;
}
こんなんでできないか?
>>469
なんで>>1を確認しないんだよ?
0472デフォルトの名無しさん
2010/12/02(木) 21:17:57ソースと一緒にコンパイルして結果までアウトプットに出してくれる方法ありませんか?
と、こやつは聞いてるんでしょ
「そんなもの無い」と言ってやれ
0473デフォルトの名無しさん
2010/12/02(木) 23:50:000474デフォルトの名無しさん
2010/12/02(木) 23:51:56そういう方法あるけどね。
カスタムビルドを使えばいい。
それが便利なのかは微妙だけど。
0475デフォルトの名無しさん
2010/12/02(木) 23:53:410476デフォルトの名無しさん
2010/12/03(金) 00:19:410477デフォルトの名無しさん
2010/12/03(金) 01:45:591>エフェクトファイルをコンパイルしています。
1>*:\***********.fx(137,2): error X3000: unrecognized identifier 'afloat1'
1>compilation failed; no code produced
0478デフォルトの名無しさん
2010/12/03(金) 06:34:12それともドライブやメインメモリからちょっとづつバッファに読み込み&捨てつつ再生?
0479デフォルトの名無しさん
2010/12/03(金) 07:04:06なんでサウンドをビデオメモリにおくんですか?
0480デフォルトの名無しさん
2010/12/03(金) 07:06:520481デフォルトの名無しさん
2010/12/03(金) 07:13:32サウンドカードってなんですか?
0482デフォルトの名無しさん
2010/12/03(金) 07:26:29馬鹿の考えることは常人には理解できないと言うことだろう。
0483デフォルトの名無しさん
2010/12/03(金) 12:31:44ファイル自体は1度に1ファイル全てを読み込まないと使えないよ。部分的に使うとしても
0484デフォルトの名無しさん
2010/12/03(金) 12:32:400485デフォルトの名無しさん
2010/12/03(金) 13:01:240486デフォルトの名無しさん
2010/12/03(金) 13:11:210487デフォルトの名無しさん
2010/12/03(金) 13:20:200488デフォルトの名無しさん
2010/12/03(金) 13:27:420489デフォルトの名無しさん
2010/12/03(金) 14:00:420490デフォルトの名無しさん
2010/12/03(金) 14:05:280491デフォルトの名無しさん
2010/12/03(金) 14:59:43って警告が出まくります。どうすればいいでしょうか。
0492デフォルトの名無しさん
2010/12/03(金) 15:35:210493デフォルトの名無しさん
2010/12/03(金) 16:09:120494デフォルトの名無しさん
2010/12/03(金) 17:07:25みなさんこんにちは
頑張ってアンビエントとディフューズが影響するようにと、1テクセルのサイズが間違ってたのを直したら若干綺麗になって影もできました
深度エッジと法線エッジを使っているのですが、画像ではたまたま光が横から来てるので輪郭がわかりますが
いつもは左上の画像(メタセコのレンダラー)のように鼻に線ができないので輪郭がわかりません
線をできやすくすると線が太くなってしまいます
メタセコみたいに上手く尖ってる辺に細い線を引くにはどうすればいいですか?
法線エッジの部分
float4 NormalTableA = { dot( DepthNormal[0].xyz, DepthNormal[4].xyz ), dot( DepthNormal[1].xyz, DepthNormal[4].xyz ), dot( DepthNormal[2].xyz, DepthNormal[4].xyz ), dot( DepthNormal[5].xyz, DepthNormal[4].xyz ) };
float4 NormalTableB = { dot( DepthNormal[8].xyz, DepthNormal[4].xyz ), dot( DepthNormal[7].xyz, DepthNormal[4].xyz ), dot( DepthNormal[6].xyz, DepthNormal[4].xyz ), dot( DepthNormal[3].xyz, DepthNormal[4].xyz ) };
float4 NormalEdgeR = abs( NormalTableA - NormalTableB );
float NormalEdge = max( max( NormalEdgeR.x, NormalEdgeR.y ), max( NormalEdgeR.z, NormalEdgeR.w ) );
if ( NormalEdge > 0.4 ) EdgePower = 0.05;
return Col = TexColor * EdgePower;
0495デフォルトの名無しさん
2010/12/03(金) 17:14:58ttp://marupeke296.com/TIPS_No9_d3d9types_C4819Warning.html
0496デフォルトの名無しさん
2010/12/03(金) 17:38:15前もそうだけどなんでbmpをjpgに偽装してるの?
深い意味が無いのだとしてもあまり開きたくないんだけど
0497デフォルトの名無しさん
2010/12/03(金) 17:41:27ありがとうございます。
試してみます。
0498デフォルトの名無しさん
2010/12/03(金) 17:45:490499デフォルトの名無しさん
2010/12/03(金) 17:49:09>>498
すいません。拡張子について深い知識がありません。
スクショを取ってペイントで保存してロダに上げただけです
どうしたら綺麗なエッジができるんですか?
0500デフォルトの名無しさん
2010/12/03(金) 18:21:300501デフォルトの名無しさん
2010/12/03(金) 18:27:19Windowsの地域と言語設定を英語圏の国に変更する
0502デフォルトの名無しさん
2010/12/03(金) 18:36:30わかりません。ダウンロードしたら入ってるやつです。トゥーンにするかしないかと線の幅が選べます
ここいいるみなさんなら、画像を見ただけでどういう手法かわかるかなと思ったのですが
0503デフォルトの名無しさん
2010/12/03(金) 19:05:13・ハードウェアによってw除算を行ってもらうためにzをwに移動
・視野角によるズーム調整(90度で拡大縮小なし)
・zバッファに格納するために、zを最後にwで割られた後に0〜1になるように変換(偏りはすさまじい)
・アスペクト比の調整のためにちょっとxを小さくする
という理解で問題ないでしょうか?
0504デフォルトの名無しさん
2010/12/03(金) 19:11:590505デフォルトの名無しさん
2010/12/03(金) 19:55:50どうやったらいいか分からないのでサンプルとかありませんか?
下のURL見てもわかりませんでした。
http://msdn.microsoft.com/ja-jp/library/dd188489.aspx
0506デフォルトの名無しさん
2010/12/03(金) 20:31:46そこ明確にしないとダメじゃね。
メタセコイアのトゥーン処理はどういう手法でやってるのかを調べて
その処理方法を調べるのが良い。
いまのままだと、全部憶測になって時間の無駄かと。
0507デフォルトの名無しさん
2010/12/03(金) 20:42:43ありがとうございます
ちょっとメタセコのスレに行って聞いてきます
0508503
2010/12/03(金) 22:05:46ありがとうございます。
中身ブラックボックスで使ってたときは、
中ですごぉいことやってるかと思ったんですが、
開いてみればめっちゃシンプルで驚きです。
0509デフォルトの名無しさん
2010/12/04(土) 11:24:33簡単な動き、Xファイル毎(手だけ足だけ等)に描画してその箇所だけ角度を変えたり、移動させるという事で合っているのでしょうか
上級者になると1つのXファイルでその中に入っている情報を読み取って、メッシュ毎に回転、移動させているのでしょうか?
0510デフォルトの名無しさん
2010/12/04(土) 11:35:540511デフォルトの名無しさん
2010/12/04(土) 11:43:44ありがとうございます、ヤフーでぐぐったらいきなり詳しい解説している所を見つけました
勉強してきます
0512デフォルトの名無しさん
2010/12/04(土) 11:45:40SDKのサンプルにSkinnedMeshがあるからまずはそれを見てみるんだ
だがスキンメッシュは初心者には敷居がめちゃ高いから本当に挑戦するかは、
自分のスキルと相談してからがいいかも
0513デフォルトの名無しさん
2010/12/04(土) 11:54:510514デフォルトの名無しさん
2010/12/04(土) 11:57:320515デフォルトの名無しさん
2010/12/04(土) 12:26:24これでモデリングからスキンメッシュアニメーションまでやれば、
プログラム云々に入る前に必要な最低限の知識は身につくよ。
SDKのサンプルを見たって、前提知識がなければ、ほとんど役に立たない。
0516デフォルトの名無しさん
2010/12/04(土) 12:32:550517デフォルトの名無しさん
2010/12/04(土) 12:38:100518デフォルトの名無しさん
2010/12/04(土) 13:47:190519デフォルトの名無しさん
2010/12/04(土) 14:24:13CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM
);
↑これってpOutとpVに同じD3DXVECTOR3渡したら計算狂う?
0520デフォルトの名無しさん
2010/12/04(土) 14:30:32計算前を残さないのでいいのであれば問題ない
0521デフォルトの名無しさん
2010/12/04(土) 20:39:03float4 DifMedium = {0.6,0.6,0.6,0};
Col = TexColor;
Col = lerp(Col.xyz ,DifMedium.xyz,RegionB);
Col.w = 1.0f;
return Col;
こんにちは。なぜか真っ黒になります。どうしてでしょうか?
Col = lerp(Col.xyz ,DifMedium.xyz,RegionB);を消すと普通に表示されます
lerpってのはRegionBが0なので第一引数のCol をそのまま返して、何もしない時と同じだと思ってたのですがどこが間違ってるのでしょうか?
0522デフォルトの名無しさん
2010/12/04(土) 20:44:07ありがとうございました
0523デフォルトの名無しさん
2010/12/05(日) 02:06:34点の座標、壁のポリゴンの頂点座標、壁のポリゴンの法線がわかっています。
0524デフォルトの名無しさん
2010/12/05(日) 02:09:290525デフォルトの名無しさん
2010/12/05(日) 02:14:23外積は法線を求めるのに使うんじゃ
0526デフォルトの名無しさん
2010/12/05(日) 02:17:42内積の正負だった
0527デフォルトの名無しさん
2010/12/05(日) 02:30:430528デフォルトの名無しさん
2010/12/05(日) 09:47:100529523
2010/12/05(日) 10:10:26あ、なるほど…
壁の頂点座標 - 点の座標 = 点から壁の頂点への方向ベクトル で、
そのベクトルが法線ベクトルと向き合う(内積が負)なら、壁の前方、
同じ向き(内積が正)なら、壁の後方であることがわかる…ということですね
他の皆様も回答ありがとうございました m_ _)m
0530デフォルトの名無しさん
2010/12/05(日) 10:13:19法線を単位化してたら、頂点情報で平面と点から判定するのか正解かと
0531523
2010/12/05(日) 10:38:58すみません、少し説明が抜けてましたが、
今回の場合、法線はワールド変換した頂点から算出しており(ワールド空間における法線になっている)、
点も同じワールド空間にあるのですが、その作業って必要でしょうか?
0532デフォルトの名無しさん
2010/12/05(日) 10:57:45どういうシチュエーションになるか考えてみなよ
>>530のとおり面と点で判定するのがセオリー
http://msdn.microsoft.com/ja-jp/library/microsoft.directx_sdk.plane.xmplanedotcoord(v=VS.85).aspx
0533デフォルトの名無しさん
2010/12/05(日) 11:01:25逆に壁が必ず原点を通るなら(ワールド座標系ではなく、壁のローカル座標系なら)
壁を示す平面のwは必ず0になるから、法線だけで内外判定しても良い。
0534デフォルトの名無しさん
2010/12/05(日) 11:07:280535デフォルトの名無しさん
2010/12/05(日) 11:13:26523の言ってることは正しいし、基礎中の基礎。
0536デフォルトの名無しさん
2010/12/05(日) 11:18:34無限平面との表・裏判定でしかないので。
0537デフォルトの名無しさん
2010/12/05(日) 11:23:43これを基礎と言うことに違和感
基礎がないから、こんな変な方法を選ぶんじゃねーの
0538デフォルトの名無しさん
2010/12/05(日) 11:28:040539デフォルトの名無しさん
2010/12/05(日) 11:36:42>>529をやるためには、1面につき
頂点1つと法線1つ、合わせて6要素保持しなきゃならない。
6要素使うわりに出来ることが増える訳じゃない。
また、面と点の位置関係によっては精度が悪くなる。
0540デフォルトの名無しさん
2010/12/05(日) 12:31:15モデルデータとして既にある情報を使うって場合とかを真っ先に思いつくじゃん
判定したい頂点情報から、動的に外積で求めて使います
って感じで言えば、じゃ内積で
って終わりだったのに
後はついでに言えば
当たり判定のモデルと、描画用のモデルは分けるのがセオリー
(壁とかで板ポリと言える内容なら同じでも良いけど)
0541デフォルトの名無しさん
2010/12/05(日) 12:45:01掛ける前に引くか、掛けた後に引くかの違いだけで、やってることは一緒。
それを変な方法とか言ってる時点で、根本的に分かってない。
0542デフォルトの名無しさん
2010/12/05(日) 13:05:23V = 点座標
P = 面を構成する座標のひとつ
N = 面法線
>>529
( V - P ) ・ N >= 0
9個の変数
8個の命令
>>532
V ・ N - ( P ・ N ) >= 0
9個の変数
11個の命令
ただし、-( P ・ N )を事前計算するなら、
7個の変数
6個の命令
2.00000000000個の変数と
2.00000000000個の命令数も
違うじゃねーかゴラァ!
0543デフォルトの名無しさん
2010/12/05(日) 13:09:060544デフォルトの名無しさん
2010/12/05(日) 13:22:06その形で書くと、・Nを分配しただけで同じ式って分かりやすいな。
0545デフォルトの名無しさん
2010/12/05(日) 13:47:27不透明度のみを加算合成して、他のRGBはそのまま上書きされるような合成をしたいのですが
固定機能パイプラインで描画したいのでレンダーステートをどのように設定すればいいのか教えてください
0546デフォルトの名無しさん
2010/12/05(日) 13:58:38D3DRS_BLENDOPALPHA
D3DRS_SRCBLEND
D3DRS_DSTBLEND
全部試す
0547デフォルトの名無しさん
2010/12/05(日) 14:13:28ちょっと計算式書いてみろそれ
0548デフォルトの名無しさん
2010/12/05(日) 14:18:37それをアルファブレンドの式に当てはめると
SrcColor*(1,1,1,1)+DestColor*(0,0,0,1)
こういうこと。
(1,1,1,1)はD3DBLEND_ONEでいいが、(0,0,0,1)は定数では存在しないので
D3DBLEND_BLENDFACTORの力を借りる。
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_BLENDFACTOR);
SetRenderState(D3DRS_BLENDFACTOR, D3DCOLOR_COLORVALUE(0.0f,0.0f,0.0f,1.0f));
あるいは、D3DRS_SEPARATEALPHABLENDENABLEを使う方法もある。
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, TRUE);
SetRenderState(D3DRS_SRCBLENDALPHA, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLENDALPHA, D3DBLEND_ONE);
こちらの方が概念としては素直だけど、対応してる環境がBLENDFACTORよりも少ない。
0549デフォルトの名無しさん
2010/12/05(日) 14:22:10どういうふうに書けばいいの?
R = Rs
G = Gs
B = Bs
A = Ad + As
こういうこと?
0550デフォルトの名無しさん
2010/12/05(日) 14:26:20ありがとうございます
0551デフォルトの名無しさん
2010/12/05(日) 14:29:02最終出力にAなんてあるのか?
0552デフォルトの名無しさん
2010/12/05(日) 14:40:22出力用の仮バッファにレンダリングして完成テクスチャを作るのかで違いそうな
0553デフォルトの名無しさん
2010/12/05(日) 14:58:42おそらくやりたい計算式と自分の求める結果がまったくイメージできてない状態と思われるので
とりあえず計算式書いてみろって言ってみた
求める結果の主要な色の合成だけでもちょっと式に当てはめてみればなんか違うとわかるんじゃないかと・・・
0554デフォルトの名無しさん
2010/12/05(日) 15:54:50バックバッファにもA付きのフォーマット使えるよ。
ディスプレイフォーマットとしてはA付きはないが、バックバッファとしては有り。
DestAlphaを使ってステンシルマスク的なこともできる。
0555デフォルトの名無しさん
2010/12/05(日) 16:06:59直接描画しちゃったらαを書き重ねるごとに加算してくなんてできないでしょ
それがやりたいのかどうかは分からんけど
0556デフォルトの名無しさん
2010/12/05(日) 16:38:43マルチスレッドのプログラムで複数のスレッドから描画とかしたいんだけど
それぞれのスレッドごとにデバイスを作って描画したりするのはまずいですか?
0557デフォルトの名無しさん
2010/12/05(日) 16:54:08わかってるよ
この場の議論に関係ないことわざわざ書き込むな邪魔
0558デフォルトの名無しさん
2010/12/05(日) 17:05:07D3DCREATE_MULTITHREADED では駄目なのかな?
さすがにスレッドごとにデバイスを作ったことはないなぁ・・・。
0559デフォルトの名無しさん
2010/12/05(日) 17:10:06スレッド切り替える時間超かかるから
ワンフレ内に間に合わなくて動作不良な場合多いよ
1つの描画対象に複数スレッドから書き込むのはやめたほうがよさゲ
分かれてるなら別にいいかと
0560デフォルトの名無しさん
2010/12/05(日) 17:31:18送る感じがいいね。
0561デフォルトの名無しさん
2010/12/05(日) 17:34:54ウィンドウズのメッセージってそんなに早くないだろ
1msに1回とかそんなもんじゃねぇけ?
ゲームだと60Hzだとしたらワンフレ16msぐらいしかないんだぞ
往復2〜3回やりとりしたら処理落ちすんじゃねぇか?
0562デフォルトの名無しさん
2010/12/05(日) 17:47:49これは速い
>待ちって
設計のしかたにより
>ウィンドウズのメッセージ
この待ちは遅い。
>ゲームだと60Hzだとしたらワンフレ16msぐらいしかないんだぞ
>往復2〜3回やりとりしたら処理落ちすんじゃねぇか?
超クソ設計乙
0563デフォルトの名無しさん
2010/12/05(日) 18:20:11>これは速い
リアルタイムのアプリで実用化できるほどの速度なの?
少なくとも俺が前やった感じだと超遅かったんだけど?
何か気をつけることある?
もしかしてタイマー依存じゃね?とも考えたほどだけど・・・
0564デフォルトの名無しさん
2010/12/05(日) 18:23:14起動と切り替えを間違えてないか? 起動は遅い
0565デフォルトの名無しさん
2010/12/05(日) 18:26:33timeBeginPeriod(1)とかすると
システムクロックの割り込み間隔も短くなるのでスレッド切り替えの密度が上がる
timeBeginPeriodを読んでるアプリがあると
起動してる全てのアプリケーションの動作に影響が出るのはそのせい
0566デフォルトの名無しさん
2010/12/05(日) 18:31:57やっぱ、そうだよね>タイマー依存
これ、ゲームで使うのはうまくないよね
0567デフォルトの名無しさん
2010/12/05(日) 18:35:490568デフォルトの名無しさん
2010/12/05(日) 18:35:59タイマーの割り込み間隔の話なのか
スレッドのタイムスライスの話なのか
0569デフォルトの名無しさん
2010/12/05(日) 18:46:33なにそれ?
どれか速いの?
0570デフォルトの名無しさん
2010/12/05(日) 20:22:30DestroyFrameやDestroyMeshContainer、または両方を使えば良いのでしょうか?
やってみたのですがFrameのポインタを使うところなどでメモリ0を読み込むエラーが出ます
どうするのが良いのでしょうか?
0571デフォルトの名無しさん
2010/12/05(日) 21:04:25DirectX9のXファイルを使ったスキンメッシュの話だよね?
自分がやってる方法は、マテリアルをあらかじめ分けておいて
マテリアルごとにDrawSubsetする/しないを判断する方法。
他にもシェーダ使ってID制御するとか色々方法はあると思う。
Frameを削除しても、その部分が動かなくなるだけで
描画はされてしまうよ。
0572デフォルトの名無しさん
2010/12/05(日) 21:10:300573デフォルトの名無しさん
2010/12/05(日) 21:49:30>>572
ありがとうございます。そうなんですか
自分がやりたいことはゲームでよくある服や装備を選ぶ時に、それが装着された状態の画面を見ながら選ぶってのを作りたいのですがどうすればいいのでしょうか?
道具リストに入ってるメッシュのデータはどのタイミングで読めば良いでしょうか?この場合だとマテリアル毎じゃなくてメッシュコンテナーを消した方がいいですよね?
質問がわかりにくかったと思うので書き直すと、デストロイフレームを実装してフレームルート→フレームチャイルド→フレームチャイルド
の適当なフレームのポインタを削除した後、オブジェクトのインスタンスを作り直したのですが、その後アップデートの時に if( pFrame->pFrameSibling )と呼び出していくと
さっき消したのでイフをすり抜けて欲しいのですが、ここでポインタの読めない所を読んでますみたいなエラーが出るのです。
教えてください
0574デフォルトの名無しさん
2010/12/05(日) 22:06:390575デフォルトの名無しさん
2010/12/05(日) 22:15:36ごめん、質問が何個もあるし、何をやりたくてFrameをいじってるのかさっぱり分からない。
とりあえず、そのポインタ云々のエラーは、デバッガ出力の内容をよく見て解決して。
DirectXではなくてプログラミングの問題だから。
たぶんpFrameがNULLになってるんだと思うけど。
ちゃんと木構造が成立するようにポインタを消していないんだと思われる。
0576デフォルトの名無しさん
2010/12/05(日) 22:25:39自分で実装した方がよっぽど楽なのに、しがみつく理由がさっぱり理解できない。
0577デフォルトの名無しさん
2010/12/05(日) 22:34:27>>575
ありがとうございます
そういえばif( pFrame->pFrameSibling )はif( 構造体->メンバ )なのにif節に使えるっておかしいですね。呼び出しが成功したら1が返るみたいな仕組みがあるのでしょうか?
普段は何が返ってif節を通り抜けてるのでしょうか?elseを追加してブレークポイントを設定したのですがデバッグを開始するとブレークポイントが勝手に下にいってしまうので確認できません
消し方はこれです↓
if(pFrameToFree->Name)delete[] pFrameToFree->Name;
if(pFrameToFree->pMeshContainer)DestroyMeshContainer(pFrameToFree->pMeshContainer);
if(pFrameToFree->pFrameSibling)DestroyFrame(pFrameToFree->pFrameSibling);
if(pFrameToFree->pFrameFirstChild)DestroyFrame(pFrameToFree->pFrameFirstChild);
delete pFrameToFree;
これでデストロイフレーム(フレームルート→フレームチャイルド→フレームチャイルド)をしたのですが、何かおかしい消し方なのでしょうか?
したいことは>ゲームでよくある服や装備を選ぶ時に、それが装着された状態の画面を見ながら選ぶってのを作りたいです。定番の方法があるのでしたら教えてください
その時に、道具リストに入ってるメッシュのデータはどのタイミングで読めばいいのかも教えてください
0578デフォルトの名無しさん
2010/12/05(日) 22:58:140579デフォルトの名無しさん
2010/12/05(日) 23:12:21Frameを消したらメッシュの一部分が自動で消えると思っている?
そうだとしたら間違い。Frameは基本的にメッシュの各頂点の位置を決める構造を持っているだけだよ。
ポインタに対するif文評価についても再確認して。言語の問題。
あとD3DXのスキンメッシュ使いたいなら、コンテナの構造をきちんと理解すること。
装備やタイミング云々は、どちらもあなたが作っているゲームの構造に依存するものだから
一概にこれというものはないよ。
DirectXあんまり関係ないしね・・・。
0580デフォルトの名無しさん
2010/12/05(日) 23:25:140581デフォルトの名無しさん
2010/12/05(日) 23:45:140582デフォルトの名無しさん
2010/12/05(日) 23:47:13そう思ってました。アップデート毎にメッシュコンテナーから座標を取ってきて行列に掛けてると思ってたのですが違うのですか?
どうやって消すのが良いのでしょうか?
特に、道具を選んだらその道具を持ってる画面が逐一出るようにしたい場合は。
0583デフォルトの名無しさん
2010/12/05(日) 23:57:18>>571>>572>>580
0584デフォルトの名無しさん
2010/12/06(月) 00:02:42じゃあ道具の選択肢が10個あったら10個のメッシュコンテナーをDrawSubseでONOFF設定したり透明テクスチャ貼って描画処理するんですか?
なんか無限増殖しそうなんですが大丈夫なんですか?
0585デフォルトの名無しさん
2010/12/06(月) 00:22:32基本、そう。
条件分岐させるだけだから、簡単でしょ。
無限増殖とあるけど、何の無限増殖を心配してる?
こういった方法なら何の削除も作り直しも発生しないから、何かが増える心配は少ないと思うけど。
正しい管理が必要なのはどれも一緒。
でもなんか、話が微妙にすれ違ってる気がするなぁ・・・。
0586デフォルトの名無しさん
2010/12/06(月) 00:37:56ありがとうございます
デストロイフレーム(フレームルート→フレームチャイルド→フレームチャイルド)した後に
フレームルート→フレームチャイルド→フレームチャイルド=NULLをしたら一応エラーは無くなって表示されるようにはなりました。変な形になりましたが
0587デフォルトの名無しさん
2010/12/06(月) 01:06:57フレームルート→フレームチャイルド→フレームチャイルド=NULLだけにしたら完璧に消したい部分だけ消せました
本当に、ありがとうございました普通にフレーム消すだけで消えるだろ知ったかゴミカス
無駄な知識自慢のレスばっかしやがってゴミ
何が言語の問題。
あとD3DXのスキンメッシュ使いたいなら、コンテナの構造をきちんと理解すること。(キッ
やねんととっとと死ねゴミ
ポインタに対するif文評価についても再確認して。言語の問題。(キッ打つ暇あったらdeleteじゃなくてNULL代入しろぐらい打てやゴミ
死ね
0588デフォルトの名無しさん
2010/12/06(月) 01:53:50下記のようにするとスペキュラの値がおかしくなりました。
struct VS_OUTPUT{
float4 position :POSITION; //頂点座標
float4 color0 :COLOR0; //色
float4 color1 :COLOR1; //スペキュラ
float2 texCoord0 :TEXCOORD0; //テクスチャ座標0
float2 texCoord1 :TEXCOORD1; //テクスチャ座標1
float2 texCoord2 :TEXCOORD2; //テクスチャ座標2
float3 r :TEXCOORD3; //キューブテクスチャ座標3
float fog :FOG; //フォグ
};
そこで
下記のようにしたら正常に動くのですが、何か間違っているでしょうか?
struct VS_OUTPUT{
float4 position :POSITION; //頂点座標
float4 color0 :COLOR0; //色
float2 texCoord0 :TEXCOORD0; //テクスチャ座標0
float2 texCoord1 :TEXCOORD1; //テクスチャ座標1
float2 texCoord2 :TEXCOORD2; //テクスチャ座標2
float3 r :TEXCOORD3; //キューブテクスチャ座標3
float3 color1 :TEXCOORD4; //スペキュラ
float fog :FOG; //フォグ
};
0589デフォルトの名無しさん
2010/12/06(月) 02:01:47正常に動いてませんでした
出直してきます
0590デフォルトの名無しさん
2010/12/06(月) 02:13:060591デフォルトの名無しさん
2010/12/06(月) 07:08:39それが頂点シェーダの出力とピクセルシェーダの入力部分なんですけど
この部分って頂点宣言により結果変わったりするのでしょうか?
0592デフォルトの名無しさん
2010/12/06(月) 07:28:270593デフォルトの名無しさん
2010/12/06(月) 09:38:36SmartPtr<IDirectSound8> pDS8;
DirectSoundCreate8(NULL, pDS8.GetPtrPtr(), NULL);
pDS8->SetCooperativeLevel(hWnd, DSSCL_PRIORITY); //ここでエラーで止まってしまいます。
0x00412229 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
なぜでしょうか
0594デフォルトの名無しさん
2010/12/06(月) 09:50:10pDS8.GetPtrPtr()にちゃんとしたアドレスが入ってないからじゃね?
俺の経験上、 0xC0000005: 場所 0x00000000 とか出てきたら、ポインタにアドレスが入ってないことがある
0595デフォルトの名無しさん
2010/12/06(月) 11:07:34スレ違いだからC言語スレに行くか、その野良スマポを作った奴に聞け
0596デフォルトの名無しさん
2010/12/06(月) 11:24:19一旦画面を撮影した後、深度バッファを見ながら深度フォグかけたり、色々とポストエフェクトをかけたいのですが。
それとも深度は、テクスチャに素直に書きださないと取得できないでしょうか。
(画面のRGBAのAに入れる手もありますが、256段階ではさすがに精度が厳しいので)
0597デフォルトの名無しさん
2010/12/06(月) 11:45:430598デフォルトの名無しさん
2010/12/06(月) 12:06:13解像度が半分になってしまい、困っています。(画面全体が2ピクセルのブロック状になる)
おそらくビデオカードのユーティリティーの設定に誤りがあるのだと思うのですが、
ご存じの方いらっしゃいますでしょうか。
- Microsoft Windows 7 Ultimate 64 ビット
- メモリ 12_882_894_848 bytes
- CPU Intel(R) Core(TM) i7 CPU X 980 @ 3.33GHz
- ATI Radeon HD 5800 Series
ゲームのWindowは可変サイズで、リサイズすると
クライアント領域のサイズでフレームバッファをつくり直す仕様です。
0600デフォルトの名無しさん
2010/12/06(月) 12:31:35そこに限らずDirectXのAPIはあらゆる場面において
どんなエラーを返してくるか分からないので、
常に戻り値をチェックして、まずい場合は例外を飛ばすなりしたほうがいいよ。
C/C++ならマクロでくるんでしまうといい。
0601デフォルトの名無しさん
2010/12/06(月) 12:36:10あのさー
初心者相手なんだから
具体的なメソッドとか、調べ安いページとか、検索ワードとか教えてあげた方がいいよ
API,戻り値チェック、マクロでとか言われてもはいそうですか役に立ちましたとはならない
0602デフォルトの名無しさん
2010/12/06(月) 12:39:38与えられたヒントで調べることもできないのは初心者じゃなくてただの教えて君。
そもそもAPIってなに?戻り値のチェックって何?とか言ってるレベルならDirectX
で何か作るとか以前の問題だしな。
>>600の回答に不満があるならいちいち文句たれずにお前が教えてやれw
0603デフォルトの名無しさん
2010/12/06(月) 12:41:57馬鹿だなお前
レス汚すだけならもう来なくていいよ
0604デフォルトの名無しさん
2010/12/06(月) 12:49:460605デフォルトの名無しさん
2010/12/06(月) 12:59:13日本語理解できるか?
日本語も理解できないやつはただの無能。そんな馬鹿にはDirectXなんて無理ね。
って言われてもお前の役にはたたないだろ?
だからお前はダメなんだよ
0606デフォルトの名無しさん
2010/12/06(月) 13:15:47さあ今すぐ手を動かして成果を出すんだ
0607デフォルトの名無しさん
2010/12/06(月) 13:28:19HRESULTのエラーチェック方法なんて
DirectXのサンプルプロジェクトのソースコードを見ればわかるだろう。
0608デフォルトの名無しさん
2010/12/06(月) 13:39:090609デフォルトの名無しさん
2010/12/06(月) 13:43:32デバイス作成時とデバイスリセット時のコードが欲しい所だ
0610デフォルトの名無しさん
2010/12/06(月) 14:01:18HRESULT云々とか話し始めてなにこのひとこわい、みたいなー
0611デフォルトの名無しさん
2010/12/06(月) 14:19:330612デフォルトの名無しさん
2010/12/06(月) 14:20:36フルHDはつまり1920x1080なのですが、これですとテクスチャサイズは2048x2048となってしまいます。
なんだか下部56ドットのためだけに、消費量が2倍になってしまう(2048x1024に比べて2倍)のですが、
こんなものなんでしょうか。
それとも大抵は2048x1024を1920x1080にリサイズして表示しているのでしょうか?
0613デフォルトの名無しさん
2010/12/06(月) 14:29:222048x1024、2048x512、2048x256、2048x128の四つのテクスチャを用意して貼り合わせるとか?
0614デフォルトの名無しさん
2010/12/06(月) 14:31:30どういう加工を考えてるのかは分からないけど
あとは求められる精度とピクセルシェーダーの負荷を天秤に掛けてサイズを決めればいい
0615デフォルトの名無しさん
2010/12/06(月) 14:32:59動かすビデオカードの機能でPOW2のフラグが立ってたらどうしてもそうなる。
0616デフォルトの名無しさん
2010/12/06(月) 15:02:55馬鹿はてめぇだ
>>610
>>593が「アクセス違反になるのはなんで?」って言ってるから、ポインタがNULLなんじゃないの
戻り値チェックして確認しろよって言ってんでしょ。一体何を煽ってるんだ?w
0617デフォルトの名無しさん
2010/12/06(月) 18:37:03そのサーフェイスをSetRenderTagertで描画ターゲットにすると
デバイスロストから復帰させるときにResetが失敗して
D3DERR_INVALIDCALLが返されてしまいます
サーフェイスに描画したあとは元のバックバッファにターゲットを戻しているし
Resetを呼ぶ前にリソースの解放もしています
ちなみにサーフェイスを描画ターゲットに設定せず、GetSurfaceLevelで
テクスチャに関連づけただけならResetは成功します
0618デフォルトの名無しさん
2010/12/06(月) 18:44:03これが成功してるかチェック。
0619デフォルトの名無しさん
2010/12/06(月) 18:46:33D3DUSAGE_RENDERTARGETで作ったんならD3DPOOL_DEFAULTだろうから
リセット時に解放してサーフェイス自体を作り直さないとだめなんじゃないの?
0620デフォルトの名無しさん
2010/12/06(月) 18:51:17確認してみましたが、成功しているようです
>>619
もちろん解放してます
0621デフォルトの名無しさん
2010/12/06(月) 19:24:13バックバッファを得るためにGetRenderTargetを呼ぶだけでResetが失敗するようです
なぜでしょうか?
ちなみにGetRenderTargetは成功しています
0622デフォルトの名無しさん
2010/12/06(月) 19:30:54描画が終わったらすぐに元のRenderTargetに戻すべきだけど、それはやってる?
0623デフォルトの名無しさん
2010/12/06(月) 19:37:03戻す以前にSetRenderTargetで描画ターゲットの変更もしていません
GetRenderTargetでバックバッファのサーフェイスを得ただけで失敗してしまいます
0624デフォルトの名無しさん
2010/12/06(月) 19:40:36最小コードまで戻して原因突き止めたほうがいいんじゃない?
0625デフォルトの名無しさん
2010/12/06(月) 19:47:190626デフォルトの名無しさん
2010/12/06(月) 19:48:52シェーダのエフェクトもデバイスロスト処理が必要だったりするよ
0627デフォルトの名無しさん
2010/12/06(月) 19:53:46IDirect3DとIDirect3DDevice9だけにして、他のリソースは全部消してみたんですが
やはりGetRenderTargetを呼ぶとResetが失敗します
>>625
はい
0628デフォルトの名無しさん
2010/12/06(月) 20:01:59別スレッドから呼んだりはしてないよね?
0629デフォルトの名無しさん
2010/12/06(月) 20:07:050630デフォルトの名無しさん
2010/12/06(月) 20:12:52それでした・・・
ありがとうございます
0631デフォルトの名無しさん
2010/12/06(月) 20:19:06GetRenderTargetを呼び出した時点で参照カウンタが増えるんだが、その後始末はしてる?
0632デフォルトの名無しさん
2010/12/06(月) 21:10:00残念ながら、もう終わったはなしだよ
0633デフォルトの名無しさん
2010/12/06(月) 21:13:22何かしらの動作をさせる処理のですが、
Directxを使いこなしている人はどのような書き方をしているのでしょうか
参考程度に教えて頂けないでしょうか
自分の場合はifを繋げまくっているだけで見た目の悪い文章になってしまって・・
0634デフォルトの名無しさん
2010/12/06(月) 22:11:16最近でも2の累乗にしなきゃいけないグラボはあるよ
ネットブックとかだと特に
0635デフォルトの名無しさん
2010/12/06(月) 22:36:16今どきそんなの見たことないな。
ネットブックでも使える。
以前調べたときに、NONPOW2CONDITIONALすらダメだったのは
一番新しくてもi810あたりだったと思うが。
0636デフォルトの名無しさん
2010/12/06(月) 22:51:50デスクトップのオンボードだけど
D3DPTEXTURECAPS_POW2
D3DPTEXTURECAPS_NONPOW2CONDITIONAL
の両方ダメ
NVIDIA GeForce 6150SE nForce 430
一応VistaPCなのでいきなり切るのはどうかと・・・
0637デフォルトの名無しさん
2010/12/06(月) 23:13:30使えない環境だけで多少負荷が上がっても2の累乗にすればいいだけで
全部ソレ使わなきゃいけないわけじゃないし
0638デフォルトの名無しさん
2010/12/07(火) 01:13:45このページにあるサンプルでMIDIファイルを再生したいのですが
どうすればいいでしょうか。
0639デフォルトの名無しさん
2010/12/07(火) 01:16:460640デフォルトの名無しさん
2010/12/07(火) 01:21:31まぁがんばれ
0641デフォルトの名無しさん
2010/12/07(火) 01:45:24今はDirectMusicよりMIDIを再生するもっといい物があるんですか?
0642デフォルトの名無しさん
2010/12/07(火) 02:59:39環境で音が変わるんだから、oggとかにするべきじゃないか
0643デフォルトの名無しさん
2010/12/07(火) 09:24:42分かってないな
まあ、Windows上で動かすなら環境依存はない
0644デフォルトの名無しさん
2010/12/07(火) 10:35:560645デフォルトの名無しさん
2010/12/07(火) 12:41:43文句を言う筋合いはないだろ
0646デフォルトの名無しさん
2010/12/07(火) 12:52:060647デフォルトの名無しさん
2010/12/07(火) 21:33:05しかし、このソースではアスペクト比が変わると、画面の端に描画しているものほど、
実際に画面に描画される位置がズレてしまいます。
どんなアスペクト比であっても、指定した座標(下記ソースではx・y・z)で、狙った位置に描画するにはどのようにすれば良いでしょうか。
//2D板ポリゴン用頂点フォーマット定義
struct TEX_VERTEX
{
float x,y,z;
float u,v;
}
D3DXMATRIXA16 mWorld;
D3DXMatrixTranslation( &mWorld, 0, 0, 1);
g_pd3dDevice->SetTransform( D3DTS_WORLD, &mWorld );
//テクスチャードクアッドのレンダリング
TEX_VERTEX vPoint[4]=
{
{x, y, z, 0, 0}, //頂点1 左上
{x + width, y, z, 1, 0}, //頂点2 右上
{x, y, z - depth, 0, 1}, //頂点3 左下
{x + width, y, z - depth, 1, 1} //頂点4 右下
};
g_pd3dDevice->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
g_pd3dDevice->SetTexture(0, g_2DCgTexture[idx].mTexture);
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vPoint, sizeof(TEX_VERTEX));
0648デフォルトの名無しさん
2010/12/07(火) 22:05:16別にアス比が変わっても座標自体は変わって無いぞ
視野角が変わるから見掛けの表示位置が違うだけで
たぶんスクリーン座標で指定したいんだろうけど
座標変換済み頂点を使うか
正射影で描画すればいいんじゃね?
0649デフォルトの名無しさん
2010/12/07(火) 22:37:27ターゲットの解像度を変えずに引き延ばしているから表示が変になっているんだろ。
0650デフォルトの名無しさん
2010/12/07(火) 23:03:47>>視野角が変わるから見掛けの表示位置が違うだけで
この辺が分かっただけでも、だいぶ手がかりになります。
今、座標変換済み頂点や正射影と言われて「??」という感じです。
頂点座標変換周りの理解はかなり怪しいので、これを機に勉強しなおしてみます。
0651デフォルトの名無しさん
2010/12/08(水) 06:56:08原因(?)というか現象がわかりました
HLSLのpow関数で0乗を指定したときになるようです
PCによって起こる現象が違うみたいです
は?0乗って1じゃねーの?とか思いこんでいたのですが
pow関数を0乗で実行するとプログラムおかしくなってるみたいです
ってヘルプみたらちゃんと書いてあってビックリですw
0652デフォルトの名無しさん
2010/12/08(水) 07:07:210653デフォルトの名無しさん
2010/12/08(水) 10:05:04試してみればすぐに分かるじゃん。
0654デフォルトの名無しさん
2010/12/08(水) 10:22:39次の空いてる番号に作られるで合ってますか?
DXUTのUIってデバッガで見にくくないですか?CDXUTDialog型変数からIDやUIの形式をすぐ見るにはどこを開いていけば良いか教えてください
0655デフォルトの名無しさん
2010/12/08(水) 18:28:41Directx9でアニメーションをするXファイルを描画し続けたいのですが、
いざネットに上がっているソースコードを見ても、スキンメッシュアニメーション以外の
プログラムが沢山入っており、どれが必要でどれが必要ないのかといった事が全くわかりません・・
DXが用意している関数を使わずアニメーションをするといったプログラムで、紹介しているサイト様がありまして
それを参考に勉強していましたが、Xファイルを使わず自分で作った三角形を動かしており、
いざこれをXファイルに置き換えて考えるとなると、全く訳が分からず完全にお手上げ状態です
DXの関数を使って、Xファイルも使い最低限のプログラムで公開しているサイト様or
そういった参考書など、初心者向けな物はないでしょうか。
現在は、Xファイルの読み込み、3D空間上での動作、カメラの動き等は分かっています。
次のステップとしてアニメーションをさせたいと思っており、どうしても勉強したいです
0656デフォルトの名無しさん
2010/12/08(水) 18:31:38SkinnedMeshとかなんとか
0657デフォルトの名無しさん
2010/12/08(水) 18:55:46SDKのSkinnedMeshサンプルってスキンメッシュ以外何も入ってねーじゃん
おめ、ボーンの基本的な仕組みを理解してるのかよ?
理解してるかチェック
1.ワールド座標系→ローカル座標系変換ができる
2.ローカル座標系→ワールド座標系変換ができる
3.ローカル座標A系→ローカル座標B系変換(またその逆)ができる
4.Xファイルの構造がわかる(テキトーでもおk)
0658デフォルトの名無しさん
2010/12/08(水) 19:05:32お前は一体何を言っているんだ
0659デフォルトの名無しさん
2010/12/08(水) 19:11:320660デフォルトの名無しさん
2010/12/08(水) 19:17:39恥ずかしながら、SkinnedMeshを見てもウィンドウの作成、ビュー、ワールド、射影は置いといて
それ以外が何をしているのかが全く分からない状態です・・
理解してるかチェック
1.出来ます
2.出来ます
3.ローカルをローカルにはやった事はありませんが、アニメーションのプログラムで一度原点に戻してから、
計算しなおすといった事で使うものであってるのでしょうか。処理を軽くするためと書いていてそれじゃなければ出来ません
4.テキストで開いた文字列の事なのでしょうか・・直接数字をいじって色を変えたりも出来ません
0661デフォルトの名無しさん
2010/12/08(水) 19:29:35なんで1,2ができて3ができないのか?
ローカルA→ワールド→ローカルBでできるに決まってるじゃないか
とりあえず
ここ、よく解説してあるから勉強してみたら?
http://marupeke296.com/GameMain.html
0662デフォルトの名無しさん
2010/12/08(水) 21:14:24すみません、そのサイト様の「 その61 」
ttp://marupeke296.com/DXG_No61_WhiteBoxSkinMeshAnimation.html
で勉強していたのですが、Xファイルを使う場合はこの回を勉強しても
意味はないのでしょうか・・
今はXファイルでのアニメーションを最優先で行いたいと思っていまして、
質問されたという事は、やはりその質問の考え方が分かってからではないと無理
ということなのでしょうか
0663デフォルトの名無しさん
2010/12/08(水) 21:18:260664662
2010/12/08(水) 21:20:24申し訳ないです、つまり>>662の下の文章の通り、質問された内容がアニメーションでは必須で
これも分からなければそこからやり直せと言われたらそうします。
そうでなければ上の文章の「 その61 」URL を踏ませてまですみませんが
この回の内容が分かればDirectxの関数を使わずともアニメーション処理をする事が
可能になりますでしょうか
0665デフォルトの名無しさん
2010/12/08(水) 21:21:560667デフォルトの名無しさん
2010/12/08(水) 21:24:52結局何がやりたいのか分からん
Xファイルは使いたいけど
D3DXインターフェイスやヘルパー関数を使わずにやりたいってこと?
スキンメッシュの実装は貴方が思ってる以上に複雑なもので一朝一夕にやる方法は無いよ
SkinnedMeshのコードは素人目には必要なさそうなコードがいっぱいあるように見えるけどほ基本全部必要なものだから
1行1行追いながら何をやってるのか理解するしかない
0668662
2010/12/08(水) 21:28:03有難うございます、勉強していて違った方向へ進んでいたのかと思いました
そのサイトでは三角形の数が少なくかったので少しは分かりましたが
それがXファイル規模となると頂点の数すべて取り出せるのか? と思っていました。
0669デフォルトの名無しさん
2010/12/08(水) 21:28:100670デフォルトの名無しさん
2010/12/08(水) 21:32:01読み込みまではヘルパー関数使ったほうが良いな
自分で解析しようとすると読めないファイルがあるとか結構ある
0671デフォルトの名無しさん
2010/12/08(水) 21:32:14はい、最終的にはDirectxの関数を使わずやりたいと思っていまして
いきなりホワイトボックスから入っていました。
skinnedmeshとそのサイト様でのプログラムの量の差からskinnedmeshのソースには
アニメーションに必要な部分以外もあるのかなと思い込んでいました。
0672デフォルトの名無しさん
2010/12/08(水) 21:32:44これは自前で作ってもいいし、用意されているパーサを使ってもいい。
2 読み込んだデータを自前の構造体なり配列なりに格納
3 データをテキスト出力して、元ファイルと照合
4 ポリゴンを組み立てて自分で描画
5 フレームアニメーション要素の実装
6 スキンウエイトの適用
段階を踏んでいけば時間はかかるがそのうち出来るよ。
0673デフォルトの名無しさん
2010/12/08(水) 21:34:08構造が確認できたら複数のフレームに増やすようにする。
0674デフォルトの名無しさん
2010/12/08(水) 21:53:090675デフォルトの名無しさん
2010/12/08(水) 22:08:28DirectXは常に最先端だから、今どうしても使わないといけない層は3D職人レベル
一般のゲーム開発ならDXライブラリやゲームエンジン使った方がいい。DirectX9っていつのだよww
0676デフォルトの名無しさん
2010/12/08(水) 22:08:580677デフォルトの名無しさん
2010/12/08(水) 22:52:58http://hibari.2ch.net/test/read.cgi/gamedev/1006624202/
このスレの
http://hibari.2ch.net/test/read.cgi/gamedev/1006624202/118-120
とかどうだろうか?
0678デフォルトの名無しさん
2010/12/08(水) 23:03:39ああ、そこ勉強したら理解できるんじゃない?
俺の言ったことが理解できなきゃ
ボーンオフセット行列理解できないと思うけど
>>661読んでわかったならそれで十分だよ
ただ、1,2から3を想像できない辺りちょっと不馴れかな・・・と
自分が作りたいものにスキンメッシュが必要だからって
いきなりスキンメッシュやろうとしてるならもうちょっと経験積んだほうがいいかと・・・
まず、DirectXの関数使って組んでみて改めて自作してもいいんじゃない?
俺は根性時代の人間なのでSDKのスキンメッシュのサンプル全文書き取り(わかるまで何度でも)がいいと思うけどw
0679デフォルトの名無しさん
2010/12/08(水) 23:45:31今なら「ゲームエンジンアーキテクチャー」を読めばスキニングの解説がソース付きで乗っている。
あれ読んで理解できなかったら知識が足りないので補充すれば良い
0680デフォルトの名無しさん
2010/12/09(木) 06:11:240681デフォルトの名無しさん
2010/12/09(木) 07:09:17それはXファイルの〜なの?
0682デフォルトの名無しさん
2010/12/09(木) 07:16:500683デフォルトの名無しさん
2010/12/09(木) 07:42:32ttp://msdn.microsoft.com/ja-jp/library/cc677019(v=VS.85).aspx
ttp://msdn.microsoft.com/ja-jp/library/cc308017(v=VS.85).aspx
0684680
2010/12/09(木) 08:51:00サウンドバッファはどこに作られます?
サウンドカードやチップセットにそういう場所がある?
0685デフォルトの名無しさん
2010/12/09(木) 08:55:55OSによって変わるし、XP以前だとドライバ任せ。
Vista以降だと完全にソフト制御になって
ハードの支援が受けられないので、基本的にはもう使わないほうがいい。
0686デフォルトの名無しさん
2010/12/09(木) 08:58:41そうじゃね。そういうカードなら
ただ実際はメインメモリに置いてあるPCMデータを必要に応じてカード側にDMA転送とかされて
それで発声されんじゃね。 てかその辺はドライバの仕事でアプリケーション製作者が必ずしも関知する所じゃないんじゃね
0687デフォルトの名無しさん
2010/12/09(木) 09:43:41なるほど。大きいファイルだからPCによってはストリーミングにしないとバッファに入りきらないってことはなさそう?
0688デフォルトの名無しさん
2010/12/09(木) 10:21:43XAudio2の場合は最大でもSourceVoiceには2MBのバッファまでしか渡せない。
DirectSoundの場合の制限は分からないけど、
ある程度の長さ以上の音声ストリームはストリーミング再生するのが常識。
oggからのライブラリを介したデコード、ストリーミング再生、複数ストリーム合成。
この辺含めて500行かかんないので、グダグダ言わず実装したほうが早い。
0689デフォルトの名無しさん
2010/12/09(木) 11:36:12回線速度が遅く、全データの取得に時間がかかる場合、
ストリーミングなら、頭の部分を取得した時点で再生を開始できる
データサイズが巨大で、ずべてメモリに上げると、メモリの利用効率が
落ちる場合、ストリーミングなら、小さいバッファで再生できる
0690デフォルトの名無しさん
2010/12/09(木) 13:19:22DirectXで動かすプログラムでストリーミングデータが
ネット上から動的に落として来るってシチュエーションが存在するのか?
0691デフォルトの名無しさん
2010/12/09(木) 13:31:52ローカルかネットかは知らない (ローカルのような気がする) が、同じ手法でネットから再生するシチュエーションはありえそう
仮想空間内のTVに何かのリアルタイム中継を流すとか
0692デフォルトの名無しさん
2010/12/09(木) 14:42:160693デフォルトの名無しさん
2010/12/09(木) 14:44:07使われて無いと思いますよ
0694デフォルトの名無しさん
2010/12/09(木) 14:44:14いったいいつのことだか具体例を出してもらおう。
話はそれからだ。
0695デフォルトの名無しさん
2010/12/09(木) 17:55:070696デフォルトの名無しさん
2010/12/09(木) 17:56:59今はネットブックにもメモリ1G2Gが当たり前の時代なのに、CPUの負担を増やして圧縮ファイルからデコードする意味はある?
0697デフォルトの名無しさん
2010/12/09(木) 18:25:460698デフォルトの名無しさん
2010/12/09(木) 18:31:59まずは第一線で使えるフォーマットとな何なのかを明確にしろ。
0699デフォルトの名無しさん
2010/12/09(木) 18:39:25仕様が糞すぎて各3Dモデリング開発ソフト会社からそっぽ向かれた
0700デフォルトの名無しさん
2010/12/09(木) 19:30:33ロード時間
0701デフォルトの名無しさん
2010/12/09(木) 20:43:56法線がないときもある(笑)、あるかもしれない(笑)とかいい加減だし
また、マテリアル分割されてないからリアルタイムにも実はあんまり向いてないよね
そのままDrawPrimitiveにぶち込めるフォーマットにしてくれりゃよかったんだけど
それだとメモリ的な無駄(はぁ?なにがしたいの?)が多いとか馬鹿な人が考えちゃったんだろうねw
0702デフォルトの名無しさん
2010/12/09(木) 20:57:19仕方がないのでDirectX11では>>701が言っているとおり、
そのままぶち込めるもっと簡易的なフォーマットをSDKのサンプルで提供している。
しかし現実問題としてそんなフォーマットじゃサンプル以外に使い道がない状態。
つまり馬鹿に何を与えても無駄ということ。
0703デフォルトの名無しさん
2010/12/09(木) 20:58:48便利な関数揃ってるし
0704デフォルトの名無しさん
2010/12/09(木) 21:02:48自分でエクスポータが作れるのならあらゆるデータを含むことが出来る。
ただしD3DXを使わないと扱えない人間が使う限り糞フォーマットでしかない。
0705デフォルトの名無しさん
2010/12/09(木) 21:10:02>しかし現実問題としてそんなフォーマットじゃサンプル以外に使い道がない状態。
それってお前が馬鹿だからじゃないの?
0706デフォルトの名無しさん
2010/12/09(木) 21:14:05これが諸悪の根源
汎用の方向性が間違ってる
0707デフォルトの名無しさん
2010/12/09(木) 21:16:280708デフォルトの名無しさん
2010/12/09(木) 21:19:08デザイナから見たらめんどくさいことこの上ない
結局は作る人間に受けの良いフォーマットじゃないと受け入れられない
0709デフォルトの名無しさん
2010/12/09(木) 21:20:28誰も使わないけどなそんなもん
読めるモデリングソフトがあるわけでもなし
なんかメリットあるんだろか?
0710デフォルトの名無しさん
2010/12/09(木) 21:23:010711デフォルトの名無しさん
2010/12/09(木) 21:24:18だからエクスポータを自作できないレベルの人間に許されていることは、
不便でも既存の汎用フォーマットを使って不満を垂れ流すことだけ。
0712デフォルトの名無しさん
2010/12/09(木) 21:25:120713デフォルトの名無しさん
2010/12/09(木) 21:27:42高額モデリングソフトならどれでも、安いのならメタセコ+プラグイン(¥5000)でおk
でもこの小額すら惜しむ奴いるんだよな・・・
本も一冊も買わない、それでいて勉強した気になってるから困る
0714デフォルトの名無しさん
2010/12/09(木) 21:28:03各ゲームごとに独自実装で専用のエクスポータを作っているし、
汎用フォーマットをそのまま使っているものなんて皆無なんだよね。
0715デフォルトの名無しさん
2010/12/09(木) 21:30:10ここ数年Blenderしか使ってないな
0716デフォルトの名無しさん
2010/12/09(木) 21:34:050717デフォルトの名無しさん
2010/12/09(木) 21:34:15変態ツール使い乙
0718デフォルトの名無しさん
2010/12/09(木) 21:36:040719デフォルトの名無しさん
2010/12/09(木) 21:38:23使える使えないとか聞いてない
あまりにも操作が変態的過ぎていつも記憶から消える
一番安いソフトがメタセコだと脳みそで修正される
たとえ、それがタダであったとしても
0720デフォルトの名無しさん
2010/12/09(木) 21:42:45Blenderは何回か挫折したがあれはよいソフト
でも残念ながらこの話題はスレチ
0721デフォルトの名無しさん
2010/12/09(木) 21:50:27昔からタダなのに人気ないな
0722デフォルトの名無しさん
2010/12/09(木) 21:53:340723デフォルトの名無しさん
2010/12/09(木) 23:06:02同じテキスト同士なら。
0724デフォルトの名無しさん
2010/12/09(木) 23:10:550725デフォルトの名無しさん
2010/12/09(木) 23:41:06メタセコはLW互換に見せかけて全然別物だから操作キモいよ
0726デフォルトの名無しさん
2010/12/09(木) 23:46:15どこのスレでやっとんねんコラ?
0727デフォルトの名無しさん
2010/12/10(金) 00:53:15それってデザイナ的に?
メタセコはポジ確定してるけどBlenderはアニメーションまであるからデータの移行とかなさげだけどな
ゲーム作るってだけならプラグインでいいデータ吐けそうなんだけどな
もちろんスキンメッシュ付きXファイルも含めて
0728デフォルトの名無しさん
2010/12/10(金) 00:58:040729デフォルトの名無しさん
2010/12/10(金) 01:07:43"Blender"とか"ブレンダー"をNGワードに登録することを勧める
0730デフォルトの名無しさん
2010/12/10(金) 01:40:37そもそも、Xファイルが作られたとき、まだDrawPrimitiveはなかった気がする。
0731デフォルトの名無しさん
2010/12/10(金) 05:41:160732デフォルトの名無しさん
2010/12/10(金) 06:56:53単に自分の気に入らない話してるから叩き出したいだけって感じだしなw
負け犬臭くてよしw
0733デフォルトの名無しさん
2010/12/10(金) 09:10:27メタセコが勝ってる所は何もない。
0734デフォルトの名無しさん
2010/12/10(金) 09:13:48プラグイン開発環境とマニュアルも充実してて、半日もあればエクスポータくらい出来るって
0735デフォルトの名無しさん
2010/12/10(金) 10:08:46メタセコをNGワードにすると幸せ
0736デフォルトの名無しさん
2010/12/10(金) 10:32:270737デフォルトの名無しさん
2010/12/10(金) 10:37:50ReleaseとLoadにしたら読み込みで失敗します
他のリソースは全部Releaseして生成にしてるので、これも同じようにしたいんですが
なぜ失敗するんですか?
0738デフォルトの名無しさん
2010/12/10(金) 10:39:190739デフォルトの名無しさん
2010/12/10(金) 10:40:250740デフォルトの名無しさん
2010/12/10(金) 11:27:56あんまりこの話続くとスレチになっちゃうけど俺はXSI使ってるよ。
まったく知らないと難しそうに見えるけど、どれも大差ないと思う。
0741デフォルトの名無しさん
2010/12/10(金) 11:35:20DirectXはライブラリではなくて規格なので、
公式マニュアルに書いてあるとおりにやらないとダメ。
文句を言っても無駄。
0742デフォルトの名無しさん
2010/12/10(金) 11:41:19仕様としかいいようがない。
そもそも行列の並びの問題だから、最初から逆にしておけば転置する必要がなくなるし、
サンプル通りにやる必要性もないんだから、気になるなら逆でプログラムを組めばいいだけ。
0743デフォルトの名無しさん
2010/12/10(金) 11:49:42ありがとうございます。
0744デフォルトの名無しさん
2010/12/10(金) 11:49:51いったい何を言っているんだ?
プログラマだからこそどんなソフトでも、拡張する余地さえあれば、
プラグインなりスクリプトなりで簡単に扱えるようにできるだろう。
0745デフォルトの名無しさん
2010/12/10(金) 11:52:27たぶん、絵的センスが無くてもモデリングやアニメーションが上手く出来るソフトはないか?という意味じゃないの
0746デフォルトの名無しさん
2010/12/10(金) 12:10:300747デフォルトの名無しさん
2010/12/10(金) 12:32:26シェーダのベクトル×行列の命令が、転置行列を使うようになっているから。
行列を転置しておくと、ベクトルとの乗算に内積命令を使えて効率がいい。
内積ではなく積和演算(mad)を使えば転置しなくても同じ命令数で計算できるが、
アーキテクチャによっては内積を使うよりも遅くなってしまう。
0748デフォルトの名無しさん
2010/12/10(金) 14:17:560749デフォルトの名無しさん
2010/12/10(金) 14:20:28日本語サポートってだけで大抵の人には有利
>>734
日本にはPythonを使える人がいない
>>736
色々使っても結局四大CGツールに落ち着くんだよな
>>738
四大CGツールならそんなに難易度は高くないよ
マニュアルも資料も豊富
中でもLW3Dなら数値入力でガンガン作れるから数字に強い人向け
0750デフォルトの名無しさん
2010/12/10(金) 15:48:390751デフォルトの名無しさん
2010/12/10(金) 18:28:570752デフォルトの名無しさん
2010/12/10(金) 18:32:450753デフォルトの名無しさん
2010/12/10(金) 18:36:00Maxしか使えない人だとちょっと苦しい感じになってる
0754デフォルトの名無しさん
2010/12/10(金) 19:42:12BryceやTerragenだな
0755デフォルトの名無しさん
2010/12/10(金) 20:42:10>日本にはPythonを使える人がいない
問題発言
0756デフォルトの名無しさん
2010/12/10(金) 22:57:19そろそろ新しいの開発すべきじゃね
0757デフォルトの名無しさん
2010/12/10(金) 23:05:22新しいのは常に生まれて常に開発されて、それは延々と繰り返されてないか?
古いソフトにこだわってるんじゃなくて、デファクトの存在の話じゃないのか?
0758デフォルトの名無しさん
2010/12/10(金) 23:08:460759デフォルトの名無しさん
2010/12/10(金) 23:13:31独禁法に触れない程度にもっと頑張れと思う
開発側からすれば1社に独占してて貰った方がいろいろ楽だ
FBX関係をもうちょっとしっかりしろと言いたいが
0760デフォルトの名無しさん
2010/12/10(金) 23:15:210761デフォルトの名無しさん
2010/12/10(金) 23:29:02>日本にはPythonを使える人がいない
はぁ?
C言語できれば1週間でだいたいできるようになる(逆(Python→C)は無理だけどなw)
0762デフォルトの名無しさん
2010/12/10(金) 23:32:36リファレンスその他で1日で書けるぞ普通に。いやマジで。若干クセはあるけども
0763デフォルトの名無しさん
2010/12/10(金) 23:37:21でも括弧がない(インデントに意味なんてもたせやがって)のと
ポインタがないのは俺はあんまり好きじゃねぇなぁ・・・
0764デフォルトの名無しさん
2010/12/10(金) 23:38:490765デフォルトの名無しさん
2010/12/10(金) 23:48:16ポインタが丸裸になってる言語なんか、C/C++とその親戚を除いたらほとんどないぞ。
あるのはオブジェクトへの参照。
0766デフォルトの名無しさん
2010/12/11(土) 00:49:45そうなんだよなぁ
だからc/c++から離れられない
ポインタ隠れてるのってそんなにいいか?
むしろ面倒なだけだと思うんだけど・・・
0767デフォルトの名無しさん
2010/12/11(土) 01:23:350768デフォルトの名無しさん
2010/12/11(土) 02:14:510769k
2010/12/11(土) 02:55:14Direct3D 9 で2Dポリゴンを表示しようとしたんですが、ポリゴンの色が虹色では
なく単色になってしまい困っています。デヒューズカラーの指定してるのに・・・
どうも頂点の配列の始めの要素の色が反映されているらしく、頂点を点として描
画すると正しくその頂点ごとの色が反映されるのですが、多角形として描画する
と、その多角形がどうしても単色になってしまいます。さっきからデバッグした
り他人のソースと見比べたりしているのですがさっぱり・・・どなたかご教授願
います!
0770k
2010/12/11(土) 02:56:07続く
0771デフォルトの名無しさん
2010/12/11(土) 02:59:030772k
2010/12/11(土) 03:08:17struct VERTEX2D_COL { //頂点の構造体
float x, y, z, rhw;
D3DCOLOR color;
void set( float X, float Y, float Z, D3DCOLOR col ) { x = X; y = Y; z = Z; color = col; rhw = 0; }
} vt[6];
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
static IDirect3D9 *d3d;
static IDirect3DDevice9 *device;
D3DPRESENT_PARAMETERS param;
D3DDISPLAYMODE d3ddm;
switch (message) {
case WM_CREATE:
//DirectXを普通に初期化
d3d = Direct3DCreate9( D3D_SDK_VERSION );
d3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );
ZeroMemory( ¶m, sizeof(param) );
ここでまさかの3分割
0773k
2010/12/11(土) 03:14:19>>フラットシェーディング?
ソースを調べてみました。
シェーディングの設定は少しもしていないはずです。
塗りつぶしモードも
setRendState( D3DFILL_POINT, mode );
setRendState( D3DFILL_WIREFRAME, mode );
setRendState( D3DFILL_SOLID, mode );
とやってみましたが、ワイヤーフレームとPOINTに関しては表示すらできず、
SOLIDで単色という感じです。諦めるしかないのか・・・
0774デフォルトの名無しさん
2010/12/11(土) 03:14:580775k
2010/12/11(土) 03:28:540776k
2010/12/11(土) 03:32:24Win32空の新規プロジェクトのcppファイルに全選択⇒まるごと貼り付けでビルド
通ると思います。こんな夜中にすみません
http://anyhub.net/file/17ps-tt.cpp
0777k
2010/12/11(土) 03:38:39さっき編集して間違えたんだと思います。スペース挟んだらビルドできました。
ちょっとシェーディングの設定をしてみよう(`・ω・´)
0778デフォルトの名無しさん
2010/12/11(土) 03:59:06とりあえずCreateDeviceで
D3DCREATE_SOFTWARE_VERTEXPROCESSINGじゃなくて
D3DCREATE_HARDWARE_VERTEXPROCESSING
にしてみたら?
0779デフォルトの名無しさん
2010/12/11(土) 03:59:310780k
2010/12/11(土) 04:06:48device->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_GOURAUD );
⇒D3DPT_TRIANGLELIST色の違う頂点6個で、赤1色のぽりんごんに
md.setShade( D3DSHADE_FLAT);
⇒D3DPT_TRIANGLELIST色の違う頂点6個で、黄色と黄緑のポリゴンに
目星がついてきた
0781k
2010/12/11(土) 04:59:56いや〜寝ずに質問してよかったです。
にしてもrhwは謎の存在だ
0782k
2010/12/11(土) 05:04:57人のソースコードを眺めてるとD3DCREATE_SOFTWARE_VERTEXPROCESSINGの場合が
多かったからなんとなくそうしてました。
でもD3DCREATE_HARDWARE_VERTEXPROCESSINGのほうが速いらしいですね。それも
そうか。
0783デフォルトの名無しさん
2010/12/11(土) 06:30:05誰かのソースがこうだったからなんとなくそうする、っていうのは後々困るからやめたほうがいい。
ちゃんと理解して書かないと今回みたいなことが頻発するぞ。
例えばCreateDeviceはまずD3DCREATE_HARDWARE_VERTEXPROCESSINGで実行して
失敗したらD3DCREATE_SOFTWARE_VERTEXPROCESSING、それでも失敗したら
D3DCREATE_SOFTWARE_VERTEXPROCESSINGって書き方すればよっぽどショボい
環境じゃなきゃデバイス作成失敗はしない(マトモに動作するかどうかは別)。
あと設定するフラグの意味とかもちゃんと理解すべき。
0784k
2010/12/11(土) 07:12:55気をつけます(`・ω・´)
>>例えばCreateDeviceはまずD3DCREATE_HARDWARE_VERTEXPROCESSINGで実行して
>>失敗したらD3DCREATE_SOFTWARE_VERTEXPROCESSING、それでも失敗したら
>>D3DCREATE_SOFTWARE_VERTEXPROCESSINGって書き方すればよっぽどショボい
環境じゃなきゃデバイス作成失敗はしない(マトモに動作するかどうかは別)。
こうですねわかります。
if( D3D_OK == d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING , ¶m, &device) )
return 0;
if( D3D_OK == d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶m, &device) )
return 0;
if( D3D_OK == d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, ¶m, &device) )
return 0;
if( D3D_OK == d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶m, &device) )
return 0;
0785デフォルトの名無しさん
2010/12/11(土) 07:32:54return 0;
if( D3D_OK == d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶m, &device) )
return 0;
何でこの二つを同時に並べてるの?
馬鹿?
0786k
2010/12/11(土) 07:48:41本当だ
D3DADAPTER_DEFAULT と D3DCREATE_HARDWARE_VERTEXPROCESSING
の組合せはなしってドキュメントに書いてありました
あとrhwですが、float型ですがどうやらbool値っぽいです。0.01にしてみたり5.0に
してもポリゴンは不変でしたが、頂点によってrhw=0,rhw=1と変えてみたところ
rhw=0の頂点の色はグラデーションに反映されませんでした。ってきっとドキュメント
読めばちゃんと書いてあるんだろうな・・・読みます
0787デフォルトの名無しさん
2010/12/11(土) 09:10:38色々つっこみどころがあるけど、一番地味な点を指摘しておこう。
>This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE.
(CreateDeviceの説明より)
0788デフォルトの名無しさん
2010/12/11(土) 09:31:02ハンドルはあるけど実体化してないような感じだからね。
その段階ではDirect3Dデバイスに関連付けることはできない。
0789デフォルトの名無しさん
2010/12/11(土) 10:02:430790デフォルトの名無しさん
2010/12/11(土) 10:28:340791デフォルトの名無しさん
2010/12/11(土) 11:21:12ま、Vista以降だと無理してDirect3D9を使う理由もないから
最初から3D11に行っちゃうけどね。
0792デフォルトの名無しさん
2010/12/11(土) 11:39:520793デフォルトの名無しさん
2010/12/11(土) 11:43:42DirectX11の方が洗練されててハードウェア対応も旧機種向けに拡大した上、
対象OSも変わらずだったので
DirectX10を使う意味が全くなくなった。
0794デフォルトの名無しさん
2010/12/11(土) 13:32:46それとも.NETになってしまったんでしょうか
0795デフォルトの名無しさん
2010/12/11(土) 13:46:28DirectX SDKを落として中を見てから言え。基本はC/C++のみだ。
逆に去年辺りまで公式の.NETサポートは無かったくらい。(XNA除く)
というかオープンソースでラッパライブラリ作ったはいいが、
MSDNその他の公式フォーラムでの扱いは未だにされてないな。
0796デフォルトの名無しさん
2010/12/11(土) 13:47:23そういう疑問を持つ前に、SDKのインストールは終わっているのか?
0797デフォルトの名無しさん
2010/12/11(土) 13:48:270798デフォルトの名無しさん
2010/12/11(土) 16:32:40なぜelseを使わないのか
0799デフォルトの名無しさん
2010/12/11(土) 16:42:040800デフォルトの名無しさん
2010/12/11(土) 18:19:49いまだに守ってる人とかw
0801デフォルトの名無しさん
2010/12/11(土) 20:43:24あるサイトでは処理ごとに違うプロシージャのようなものがよばれるとか、
またあるサイトではメッセージがなかったらゲーム処理をするとか
DirectXではいつどのように処理をしているのですか?
0802デフォルトの名無しさん
2010/12/11(土) 21:01:240803デフォルトの名無しさん
2010/12/11(土) 21:04:46DirectXが処理するのはあくまで自分の持ち分である入出力の部分だけ
お前さんが見てる内容はDirectX関係なしに、単にwin32の領域の話
基礎としてWindowsの基本的な動き、メッセージ、ウィンドプロシジャの知識必須
そういう意味で、DirectXは単にwin32APIにおける各種関数やGDI関数のような立場
混同せずに順番に切り分けて理解すること
0804デフォルトの名無しさん
2010/12/11(土) 21:15:05なるほど、そうだったんですね
てっきりwin32APIなどとは別物と思ってました
0805デフォルトの名無しさん
2010/12/11(土) 23:10:510806デフォルトの名無しさん
2010/12/11(土) 23:33:27win32APIと完全に別物だから切り分けろ関係ない、と上の奴は言ってる
0807デフォルトの名無しさん
2010/12/12(日) 02:34:32試みた人居ますか?
0808デフォルトの名無しさん
2010/12/12(日) 02:57:300809デフォルトの名無しさん
2010/12/12(日) 03:10:54どうやるのですか
0810デフォルトの名無しさん
2010/12/12(日) 04:03:150811デフォルトの名無しさん
2010/12/12(日) 08:36:01ofxKinect と opencv でもググれ。それで得られた値を使って、DirectXで何かしたいような場合
またこのスレに来るといいぜ
0812デフォルトの名無しさん
2010/12/12(日) 11:43:010813デフォルトの名無しさん
2010/12/12(日) 12:30:160814デフォルトの名無しさん
2010/12/12(日) 17:08:11SDKのライセンスの文章に書いてある。
0815デフォルトの名無しさん
2010/12/12(日) 21:16:170816デフォルトの名無しさん
2010/12/12(日) 21:43:520817デフォルトの名無しさん
2010/12/12(日) 22:59:46// VIDEOINFOHEADERの取得
hr=pC->GetFormat(&pmtConfig);
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER *)(pmtConfig->pbFormat);
pVih->AvgTimePerFrame = 500000; // 20FPSに設定
// キャストして代入
pmtConfig->pbFormat=(BYTE*)pVih;
//SetFormatでpbFormatの変更を適用
pC->SetFormat(pmtConfig);
設定方法が間違っているのでしょうか?
0818デフォルトの名無しさん
2010/12/13(月) 03:04:01pCとか意味わからんし。
DirectShowと戦うスレ Part 4
http://hibari.2ch.net/test/read.cgi/tech/1214127501/
0819デフォルトの名無しさん
2010/12/13(月) 03:47:490820デフォルトの名無しさん
2010/12/13(月) 06:00:17DirectX 再頒布パッケージのことを言っているのなら、話は逆だ。
DirectX を使用しているプログラムを配布するときは、
使用しているDirectXのバージョンに合わせた再頒布パッケージを
「必ず」同梱しないといけない。
0821デフォルトの名無しさん
2010/12/13(月) 10:13:23これなんですか?
angle = acos(D3DXVec3Dot(&now_vec,&eye_vec));
っていう計算をしたら、angleに入ってきます。
ちなみに、now_vecとeye_vecは小数第3位あたりまでほぼ同じ数値が入っていて
この場合、0が入ってきてほしいんですが…
if(angle == -1.#IND00) angle = 0;
とかしてみようとしましたが、数値ではないらしいのでエラー吐きます
0822デフォルトの名無しさん
2010/12/13(月) 10:26:510823デフォルトの名無しさん
2010/12/13(月) 10:29:23少なくとも 「if(angle == -1.#IND00)」 は通るはずが無いとまず思って欲しいが、
とりあえずその値は 「数値計算上、ありえない状態」 って意味。 要はエラー、INF みたいな物
0824デフォルトの名無しさん
2010/12/13(月) 10:31:10「INF みたいな物」 ってのは、つまり数値表現の中の特殊な状態って意味で、みたいな物ってこと
0825デフォルトの名無しさん
2010/12/13(月) 10:31:28三角関数について勉強しなおせ。
浮動小数点演算で例外が発生してるのでそれ以上計算しても無駄。
対策としては、そもそもそのような値が出てこない用に呼び出し前に場合分けをする。
0826821
2010/12/13(月) 11:22:56dot = D3DXVec3Dot(&now_vec,&eye_vec);
angle = acos(dot);
とすると、今のところ問題なく動くようになりました(・_・
ちなみに、dotには1.000000が入ってきていました
0828821
2010/12/13(月) 12:15:00桁落ちしていたようです
回りくどい対策をするのはいやなので、とりあえずfloatをdoubleに変えて対策してみます
0829デフォルトの名無しさん
2010/12/13(月) 12:17:54そんな場当たり的な対応をしてないで、ちゃんと場合分けしなさい。
0830821
2010/12/13(月) 13:16:19angledot = 0;
else
angledot = D3DXVec3Dot(&now_vec,&eye_vec);
とりあえず、こんな感じにしてみました...
0831821
2010/12/13(月) 13:27:48↓
angledot = 1.0 でした
0832デフォルトの名無しさん
2010/12/13(月) 21:53:06走っているモーションの値が維持されたままで、次にまた走るアニメーションを呼び出すと
途中から走っているアニメーションになってしまいます。
アニメーションの初期化はどうすれば出来るのでしょうか
0833デフォルトの名無しさん
2010/12/13(月) 21:55:380834デフォルトの名無しさん
2010/12/13(月) 22:05:37融通の利かないコンピュータのプログラムを書こうなど、到底無理な話だ。
0835デフォルトの名無しさん
2010/12/13(月) 23:21:290836デフォルトの名無しさん
2010/12/13(月) 23:36:58後日またそのアニメーションを再生したら5秒の所から再会しました。
0秒から開始するにはどうすればいいですか。
という質問だと思う。俺はDirectX知らないから後はまかせた。
0837デフォルトの名無しさん
2010/12/13(月) 23:54:230838デフォルトの名無しさん
2010/12/13(月) 23:57:273Dの概念は大体いっしょだけど
ちょいちょい仕様の違いがあって引っかかる
0839デフォルトの名無しさん
2010/12/14(火) 00:14:16BulletやPhysXなんかは座標系がOpenGL仕様なので、
DirectXで使いたい場合は変換噛ませないといけない
0840デフォルトの名無しさん
2010/12/14(火) 00:53:343Dの概念は同じだし座標系が右手か左手かの違いだけ(だけっていうと言いすぎかもしれない)
どっちも使ってるけどGLのほうが覚えやすい印象はある。
でもGLはただのグラフィックライブラリだから、ゲーム楽に作りたいならDirectXのほうがいいと思う。
例えば行列にしろベクトルにしろ、DirectXはD3DXMATRIXとかD3DXVECTOR型が用意されてるけど
GLにはマトリックス型もベクトル型もないから自分で作らないといけない感じ。
0841デフォルトの名無しさん
2010/12/14(火) 01:40:10ありがとうございます。
参考になりました。
0842デフォルトの名無しさん
2010/12/14(火) 02:13:333Dモデル描画にSDK Sampleの加工品を使っています。
不透明モーション付きモデルはそれで事足りていましが、
半透明モーション付きモデルの再生を行いたく思い問題に。
真っ当に行くならVertex、IndexBufferなどからポリゴン情報を取得して全ソートして描画すべきなのでしょうが、
そこまでせずに「大体半透明」にしつつモデル制作の手間が肥大しない、良い簡略化(騙し)の手法は無いでしょうか?
また、わざわざ全ソートしている作品をあまり見かけない気がするのですが、
(透けているものの、同一Objectらしき部分は裏面が消えうせている作品が多い気がします)
半透明はどう描画するのが定番なのでしょうか・・?
0843デフォルトの名無しさん
2010/12/14(火) 02:25:560844デフォルトの名無しさん
2010/12/14(火) 04:11:12全てのポリゴンをソートではなく、オブジェクト単位でのソートとか
0845デフォルトの名無しさん
2010/12/14(火) 04:27:59超適当でいいなら、不透明なものを全部描画してから半透明なものをZバッファ書き込み禁止で描画とか
0846デフォルトの名無しさん
2010/12/14(火) 04:36:23DXUTより抜粋
http://codepad.org/CRAlCRJ6
つまり
マテリアルの不透明部分を先に描画して
半透明部分を後から描画
0847デフォルトの名無しさん
2010/12/14(火) 09:14:56そういう意味じゃないと思うぞ。
例えばキャラクター丸ごと半透明にした場合、オブジェクト単位でソートしても
重なる部分(腕->胴体)の描画順によってはきれいな半透明にならないので
ポリゴン単位でソートしないとまずいよねって話。
で、普通やらない。背面カリングして後はあきらめる。
半透明の描画は色々提案はされてるけど、根本的には現在のテクノロジーの限界だね。
http://hak.wablog.com/62.html
0848デフォルトの名無しさん
2010/12/14(火) 09:17:43GLUTと対応するのはDXUTの3D周りのみ(3D以外を扱うDXUTってあったかどうか忘れた)
--
win32+DirectX(割と全般)に対応するのはSDL(OpenGL含む)
※ただしSDLはLGPL
0849デフォルトの名無しさん
2010/12/14(火) 09:43:14その問題は厄介そうだなぁ。
例えばいったん別のRenderingTargetに不透明で描画した後、
本来のフレームバッファに2D処理で合成すれば綺麗になるけど、
Zオーダーの処理が難しくなるね。
RenderTarget側で別のZバッファを持たせたとしても、
2枚のZバッファをうまく使って合成する処理なんて書けるものなの?
0850デフォルトの名無しさん
2010/12/14(火) 13:04:55自前なのか何使ってるか分からないから概念だけ説明すると
歩きと走りはモーションが一周する速度が違うので、双方の再生速度を同時に変化させつつブレンドする必要がある
>>839
PhysXは変換かます必要ない
0851デフォルトの名無しさん
2010/12/14(火) 13:08:37Aバッファの実装はまだですか
>>849
ZバッファのほかにマルチレンダーターゲットでZ値を書き出せば不可能ではないね
0852デフォルトの名無しさん
2010/12/14(火) 13:13:480853デフォルトの名無しさん
2010/12/14(火) 13:21:520854デフォルトの名無しさん
2010/12/14(火) 14:51:13エフェクトファイル内のグローバル変数にテクスチャを渡す形で描画したいんだけど
デバイス->SetMaterial();
デバイス->SetTexture();
テクスチャ->DrawSubset();
の最後の「テクスチャ->DrawSubset();」は必要?
これやらないとテクスチャが描画されないけど、文献の多くには「デバイス->SetTexture();」がテクスチャ描画だとしている。
0855デフォルトの名無しさん
2010/12/14(火) 14:57:19なんて存在しないでしょ
メッシュ->DrawSubset();
ならあるけど
とりあえずエフェクトつかってやるなら
デバイス->SetMaterial();
デバイス->SetTexture();
は要らない(というかシェーダーに直接渡しているはず)
DrawSubsetはどちらにしても要る
DrawSubsetは内部で
頂点ストリームのセット、インデックスバッファのセット
DrawIndexPrimitiveを呼び出して描画している
0856デフォルトの名無しさん
2010/12/14(火) 15:10:42デバイス->SetMaterial();
デバイス->SetTexture();
はクラス設計の問題でシェーダーに直接渡さないようにしてるんだけど問題あるかな?
0857デフォルトの名無しさん
2010/12/14(火) 15:18:32半透明は1パス目でzだけレンダリングしてzバッファーx4枚で手前4つのオブジェクトを検出して
2パス目で見えている物体だけレンダリングすれば良い気がする。
シェーダー使えば今でもできると思うんだけど、このアルゴリズムではダメかな?
0858デフォルトの名無しさん
2010/12/14(火) 15:37:264つの根拠は?
0859デフォルトの名無しさん
2010/12/14(火) 15:50:03え、マジで?
ネットワークで配布するときも同様?
0860842
2010/12/14(火) 21:08:32色々な情報ありがとうございます。勉強になりそこそこの解決方法の目処が付きそうです。
ご助言ありがとうございました。
0861デフォルトの名無しさん
2010/12/14(火) 21:50:04Vertex/IndexBufferを内部に一本で持って、各オブジェクトはそのバッファ内のオフセットで管理して、
単純に透過指定のマテリアルでまとめて描画で普通にクリアした
見た目のオブジェクト、管理上のオブジェクトが別だからって、バッファまで物理的に別にする必要無いので
その観点でさくっと解決した。そんな感じ。 ただし自前でモデル管理してないならお疲れ、としか言えない
0862デフォルトの名無しさん
2010/12/14(火) 22:08:09ID3DXMesh使ったサンプルって
マテリアルごとのDrawSubsetが一般的だけど
実はもう1つアトリビュートテーブルってのを持ってて
ここにDrawIndexedPrimitivesに必要な頂点オフセットや面数やらが格納される
面倒な読み込みまでをID3DXMeshに任せて
そこからそのアトリビュートテーブルやら
頂点バッファインデックスバッファを抜いてきて使うと結構柔軟に対応できる
0863デフォルトの名無しさん
2010/12/14(火) 23:40:53アニメーションコントローラーで実現できますか?
(最終的には戻したり進めたりで、プルプルした動きをさせたい
0864デフォルトの名無しさん
2010/12/15(水) 09:06:170865デフォルトの名無しさん
2010/12/15(水) 09:14:560866デフォルトの名無しさん
2010/12/15(水) 10:08:47重なる部分が発生しないレベルまで細分化する前提の話なのかな
0867デフォルトの名無しさん
2010/12/15(水) 11:46:290868デフォルトの名無しさん
2010/12/16(木) 01:11:01ID3DXAnimationController::AdvanceTime(
DOUBLE TimeDelta,
LPD3DXANIMATIONCALLBACKHANDLER pCallbackHandler
);
ここでアニメーションを進めていますが、SDKのサンプルのskinnedmesh.cpp内で
どの変数に値を加算していっているのでしょうか
0869デフォルトの名無しさん
2010/12/16(木) 01:27:19AdvanceTimeは絶対時間指定じゃなくて相対時間指定だからね
AdvanceTimeの内部を知りたいって話なら無理な相談
0870デフォルトの名無しさん
2010/12/16(木) 01:32:05更新しているアニメーションを初期化(また1からアニメーション)したいのです
そこでアドバンスタイムの第一引数の値をいじれれば出来るのかなと思いまして・・
0871デフォルトの名無しさん
2010/12/16(木) 01:40:27SetTrackPosition
0872デフォルトの名無しさん
2010/12/16(木) 01:47:28関数名的にResetTimeなのかなと思っていました
0873デフォルトの名無しさん
2010/12/16(木) 01:57:44わからないことがあったらまたおいで
0874デフォルトの名無しさん
2010/12/16(木) 02:10:520875デフォルトの名無しさん
2010/12/17(金) 03:28:22あの、D3D9 のテクスチャフォーマットなんですけど。ナニ使うのがベストなんですか。
なんか色々調べてみたんだけども、DX上位バージョンではRGBはGBRに統一されたんですよね?
古いのはサポート終了しただの、そこはDX内部の話だろうからどうでもいいんです。
ただ、新ハードGPUも古いフォーマットは切り捨てたとかあったので、さっぱり何がなんだか分からなくなりまして。
256色がとっくの昔に使えないのは知ってますけど、なんか Rgb16 Rgb32 も廃止ってあったので…。
たとえば、R5B6G5って新機種じゃもう使えないですか。一番ありそうな、A8R8G8B8 も無理?
どうせDX上位バージョンがD3D9の旧形式から変換を勝手にやってくれると思うんですけど(たぶん)
でも、RGBを自前でビット操作しているアプリは、BGRに並べ替えないとアウトって書いてあったので、そこでつまずいてます。
新しいフォーマットを旧DXから選択肢に選べるわけもなく、何をどうやって互換の判定をしたらいいんでしょう。
一度何か書き込んで、取り出して、色成分を調べてから処理を切り替えればよい?つーかそんな面倒が本当に必要?
それとも、なにか思いっきり勘違いというか見当違いな心配をしていますか?
長い質問すいません。読んでくれた方、助けてください。
0876デフォルトの名無しさん
2010/12/17(金) 03:56:310877デフォルトの名無しさん
2010/12/17(金) 09:41:43テクスチャーの移植
欲しいのはこれかい?
0878875
2010/12/17(金) 15:02:01でもたぶん聞きたい事がそれとちょっと違うんです。
たぶん、それはDX9から10への「移植」ですよね。つまりDX9自体を使わずにDX10デバイスで作りなおす場合の。
個人的に作り直す気はないんです。DX9のまま、HEL上で動いてくれればいいんです。
HALなら当然デバイスに依存するのは分かるんですけど、HELでもバイト順序は新しいハードに依存するんでしょうか。
あくまでDX9のDLLさえ入れておけば、古い形式で指定できて、HEL上にテクスチャをロードした場合
バイト順序も古いまま、オリジナルで保持されますか。
自PCはもちろん、周囲にも会社にもVistaとWindows7が一人もおらず全員XPなので、確認できないんです。
あればとっくに自己解決するんですけど・・・
0879デフォルトの名無しさん
2010/12/17(金) 15:49:23いったいどれだけタイムスリップしているんだ?
Direct3D8、9、10、11にもHELなんて存在していないぞ。
0880デフォルトの名無しさん
2010/12/17(金) 16:56:46普通に作って動かなかったらそのとき考えればいいじゃない
0881デフォルトの名無しさん
2010/12/17(金) 17:03:02何のためのDirectXだと思ってるんだ
0882デフォルトの名無しさん
2010/12/17(金) 20:10:244年前のPC使ってる俺に謝れ
0883デフォルトの名無しさん
2010/12/17(金) 20:21:57いや、買い換えろよ。
0884875
2010/12/17(金) 20:42:01えっ?それはどういうこと??HELはHELで普通にありますよ。初心者だからってバカにしてます?
ちなみに俺のPCはオンボードのショボイやつなんで、9.0cでさえDirectDraw以外は完全にHELですけど何か。
Windows7でも、一旦HELで吸収してソフトウェアレンダリングされてるから2Dが重くなったんですよね(たしか)
俺がタイムスリップしてるんですか?テキトーに言ってませんか?
0885デフォルトの名無しさん
2010/12/17(金) 20:48:090886デフォルトの名無しさん
2010/12/17(金) 21:06:380887デフォルトの名無しさん
2010/12/17(金) 21:29:43間違ったことをさも当然のようにかつ挑発的に書くことで
豚オタどもが鬼の首とったかのように本当のことを教えてくれるとか思ってる輩だな。
0888875
2010/12/17(金) 21:31:43そうです。ハードウェアアクセラレータをOFFにした場合の。
初期化コードで、HARDWAREとSOFTWAREとVERTEXHARD/SOFTをtry〜catchで選択設定するでしょ。
HALとHELの分岐処理。それをせずにコード組んでる人なんていないと思うし、
なのに「無い」とか「おかしい」とか言われちゃうしなぁ。
なんか、ちゃんと知ってる人々がちゃんと答えてくれると思ってたから、がっかり。
ちゃんとした場所の人々に聞くことにします。
0889デフォルトの名無しさん
2010/12/17(金) 21:39:500890デフォルトの名無しさん
2010/12/17(金) 21:41:07そっちを目的で組む人は早々いないから、答えられないんじゃない?
全力で作ったらHELだと重すぎるでしょ。
ま、君が最初の人柱だ。ってことかもね。
0891デフォルトの名無しさん
2010/12/17(金) 22:30:45なんか突っ込むのも恥ずかしいが、それはHELじゃない
0892デフォルトの名無しさん
2010/12/17(金) 22:39:050893デフォルトの名無しさん
2010/12/17(金) 22:51:42頂点計算をCPU側に行わせる設定をHELと言ったり、さっぱり意味不明。
0894デフォルトの名無しさん
2010/12/17(金) 23:06:07フォーマットの保証がついたのはDirect3D10以降から。
0895デフォルトの名無しさん
2010/12/17(金) 23:08:360896デフォルトの名無しさん
2010/12/17(金) 23:10:380898デフォルトの名無しさん
2010/12/18(土) 00:00:510899デフォルトの名無しさん
2010/12/18(土) 00:44:330900デフォルトの名無しさん
2010/12/18(土) 01:09:120901デフォルトの名無しさん
2010/12/18(土) 01:53:100902デフォルトの名無しさん
2010/12/18(土) 04:45:500903デフォルトの名無しさん
2010/12/18(土) 09:33:30両面描画モードと D3DRS_ALPHATESTENABLE のTRUEで行っているのですが、
モデルが輝く様に真っ白になってしまいます。(何かの設定を勘違いしてるハズですよね・・)
これをテクスチャの色や模様が“出来るだけ”しっかり見えるようにするにはどうすれば良いでしょうか?
ググって自己解決を目指していますが中々良い情報を見つけきれず、ご助言頂けますと幸いです。
0904デフォルトの名無しさん
2010/12/18(土) 09:41:570905デフォルトの名無しさん
2010/12/18(土) 09:45:310906903
2010/12/18(土) 10:02:25light.Type = D3DLIGHT_DIRECTIONAL; light.Direction = D3DXVECTOR3(-1, -20, 0);
light.Diffuse.r = 1.0f; light.Diffuse.g = 0.5f; ight.Diffuse.b = 0.5f; という設定になっておりました。
>>905
はい。他のモデルはライトでの影などは描画しておらず、テクスチャ色だけで正常描画されています。
輝くように真っ白になっていたのですが調べていると「アルファブレンド係数」の設定で
D3DBLEND_SRCALPHA、D3DBLEND_DESTALPHAだと輝く様に真っ白
D3DBLEND_INVSRCALPHAだとモデルが全く見えず(完全透明?)
D3DBLEND_SRCCOLORだと輝く程ではない加算ぎみに半透明 という結果でした。
加算合成ではなく色合いを後ろのモデルと色と足して2で割った色にしたい という感じでしょうか…もう少し色々試してみます。
0907デフォルトの名無しさん
2010/12/18(土) 10:12:540908デフォルトの名無しさん
2010/12/18(土) 10:47:20アルファは計算式わかってるのか?
0909デフォルトの名無しさん
2010/12/18(土) 10:49:06他色々考えられるけど面倒臭くて聞けねぇ確認項目が多すぎる
すでに動いてるサンプルを手本にして自分でなんとかしろ
0910デフォルトの名無しさん
2010/12/18(土) 11:44:210911デフォルトの名無しさん
2010/12/18(土) 11:53:240912デフォルトの名無しさん
2010/12/18(土) 12:09:33頂点カラー?
マテリアル?
テクスチャ?
とりあえず、コレをやって結果をみてくれ
デバイス->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
デバイス->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
デバイス->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
0913デフォルトの名無しさん
2010/12/18(土) 19:34:01正規化はしといたほうがいい
0914デフォルトの名無しさん
2010/12/18(土) 22:19:400915デフォルトの名無しさん
2010/12/18(土) 22:41:580916デフォルトの名無しさん
2010/12/18(土) 23:00:33両面描画すると
面の描画順の問題でZバッファの整合性が取れなくなることはあるけど
法線云々なんて聞いたこと無いわ
0917デフォルトの名無しさん
2010/12/18(土) 23:27:38固定シェーダだとうまくやってくれんのかな?
0918デフォルトの名無しさん
2010/12/19(日) 03:00:20>理解って、高校で習った筈だろ。
>数Cだっけ?
「行列」は旧数�Uの中の「代数・幾何」の中に入ってた記憶がある。
「基礎解析」(正関数までの微積)の方ではない。
0919903
2010/12/19(日) 03:14:23>>908 久しぶりに描画関係を触りテクスチャステージステートの存在すら忘れておりました…orz
>>909 他のα抜きモデルはテクスチャでしており、SetRenderStateは触っていないと気付きました;
>>910 両面でライティングは駄目なのですね;
>>912 やってみた所普通に不透明描画でした。モデルのDiffuseのaを変えても変化は無く…色々勉強不足を実感しました;
>>913 >>914 ご指摘ありがとうございます。ライトを正規化するよう書き換えました。
>>915 >>916 その様な事になる?のですね。今後ライトを触る場合頭に入れて用心します。
>>917 HLSLと固定シェーダ両方混在気味なので気になりますが…注意しようと思います。
今回はテクスチャに透明度を埋め込んで一応の解決に至りました。
(αの不要なテクスチャまでα計算してるのかもと思うと少々気が重いですが…)
沢山のご助言ありがとうございました。TextureStageStateから復習しなければ・・ですね。
色々と勉強になるお話、ありがとうございました。
0920デフォルトの名無しさん
2010/12/19(日) 09:33:08固定シェーダで動かしたときのチェックリストが必要だな
どうせしばらくは使う奴減らないだろうし
>>907-917までのような項目を躓くたびに確認しないといけない
開発効率悪すぎ
何が起こってるのかわからなすぎ
0921デフォルトの名無しさん
2010/12/19(日) 10:11:550922デフォルトの名無しさん
2010/12/19(日) 11:54:31(D3D11_USAGE_DYNAMICとD3D11_CPU_ACCESS_WRITE)
頂点が
typedef struct{
Vector4 Pos;
Vector2 Tex;
}Vertex;(16 + 8 = 24バイト)
で、毎フレームロックしてアンロックを繰り返しました
※描画はしていない
三角形を
500個作った場合 fps700前後
1000個作った場合 fps360前後
2000個作った場合 fps150前後
何もしないでclearとpresentだけ fps8000前後
ずいぶん遅いなという印象になったのですが、
これは変な値ですか?
それとも頂点のロックはdynamic設定でもこのくらい重いものですか?
Drawの回数を減らして3角形を描画したいためにロックしてまとめてdrawしようとしたのが
目的です
0923デフォルトの名無しさん
2010/12/19(日) 11:55:020924922
2010/12/19(日) 11:59:49http://codepad.org/FZ5gAO6I
0925922
2010/12/19(日) 12:25:56win7
メモリ2G
CPU Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz (2 CPUs), ~3.0GHz
NVIDIA GeForce GTX 460
です
0926デフォルトの名無しさん
2010/12/19(日) 12:46:07キューに投入するときにバッファのインデックスを指定すればいい。
0927922
2010/12/19(日) 14:05:57ありがとうございます。
しかし今は頂点バッファがひとつだけなのでそれ以前の箇所なのです・・・
インデックスを指定は
ID3D11DeviceContext::Draw
ID3D11DeviceContext::DrawIndexed
などのStartIndexLocation、StartVertexLocation
での指定ですよね?
0928デフォルトの名無しさん
2010/12/19(日) 14:30:041フレームに1Lockだけなら
いくら大量の頂点データをコピーしたとしても
その数値ありえないからどっかおかしい
0929デフォルトの名無しさん
2010/12/19(日) 14:53:510930デフォルトの名無しさん
2010/12/19(日) 14:55:44確かにそれ以前の問題だ。
0931922
2010/12/19(日) 15:34:19ロックは1フレームに1回です
0933922
2010/12/19(日) 16:02:17最強にバカだったようです
ちょっと別スレ逝ってきます
ちなみに
2000頂点ロックしても
1000fpsでました
答えてくださった方々に感謝申し上げます
0934922
2010/12/19(日) 17:51:37そこそこのパフォーマンスを出せました。ありがとうございました
ttp://up3.viploader.net/ippan/src/vlippan175652.jpg
0935デフォルトの名無しさん
2010/12/19(日) 18:47:320936デフォルトの名無しさん
2010/12/19(日) 18:51:09後々、やりたい事が増えた時のために
GPUに投げられる部分は投げちゃってCPUの空き時間を増やした方がいいよ
0937デフォルトの名無しさん
2010/12/19(日) 20:44:12CPUとGPUが具体的に何なのか分からないのに答えられるわけがない。
間抜けな質問を書く前に、その程度のことも考えられないのか?
0938デフォルトの名無しさん
2010/12/19(日) 21:58:59そんな厳密に答えなくていいんだよ。
質問者もそこまで求めてないの。
自閉症かなんかで理解出来ない病気なの?
>>935
この時期は外でやると寒いしお勧めしない。
0939デフォルトの名無しさん
2010/12/19(日) 22:17:100940デフォルトの名無しさん
2010/12/19(日) 22:39:26スキンメッシュで描画する個数分だけ頂点をグラボに流し込まないといけないけど
その対象の環境と動かしてるゲームで測ってみないとなんともいえないな
大してたくさん描画してないんじゃ気にするだけ無駄だしね
○○無双系のもん作ったら超遅くなるだろうけどね
0941デフォルトの名無しさん
2010/12/20(月) 00:49:39じゃあどこですればいいのよ
0942デフォルトの名無しさん
2010/12/20(月) 00:52:480943デフォルトの名無しさん
2010/12/20(月) 01:06:40いってきます
0944デフォルトの名無しさん
2010/12/20(月) 01:45:460945デフォルトの名無しさん
2010/12/20(月) 02:40:03次スレはゲ製作板でいいよな?
0946デフォルトの名無しさん
2010/12/20(月) 02:43:09統合されて(向こうが自然消滅して)ココだけになった
ここが板違いならム板の半数のスレが板違いになるぞ
0947デフォルトの名無しさん
2010/12/20(月) 05:30:01どうも 「DirectX」 でかつ 「初心者」 と付くとコーディング以外の話に興味があるような怪しい人が
集まって来やすいとは思う。 だからゲ製行け、みたいな話になる
ライブラリ以前の言語初心者とかはここ来るより前にするべき事あるよな、みたいなのも
0948デフォルトの名無しさん
2010/12/20(月) 05:45:26そもそも純粋にプログラムの話題はこっちでいいだろう
あっちはゲームが絡んでこその板だろうし
0949デフォルトの名無しさん
2010/12/20(月) 15:24:380950デフォルトの名無しさん
2010/12/20(月) 20:20:10スマポ使わずに SAFE_RELEASE マクロとかだし。 単純な文字列さえMSマクロのまんまだし。
なんとなく不思議な感じだ
0951デフォルトの名無しさん
2010/12/20(月) 20:25:10ちなみに今夜24:15にNHK総合で再放送だ
0952デフォルトの名無しさん
2010/12/20(月) 20:40:13俺も当たり前に使ってるけど、例えばこんな感じのスマポを自分で書いた所でたいした手間じゃないので、
template<typename T>
class DXPtr {
T *ptr;
public:
DXPtr(T *p) { ptr = p; }
~DXPtr() { ptr->Release(); delete ptr; ptr = NULL; }
T* operator->() { return ptr; }
};
//IDirect3DVertexBuffer9* vb; の代わりに
//DXPtr<IDirect3DVertexBuffer9> vb を使う
みたいにしてもいいし、std::vectorにぶち込む時には、カスタムデリータ付きの既存のスマポ使ってもいいしと思った
0953デフォルトの名無しさん
2010/12/20(月) 20:45:49スマポとか向いてないんだろうな
0954デフォルトの名無しさん
2010/12/20(月) 20:49:370955デフォルトの名無しさん
2010/12/20(月) 20:58:520956デフォルトの名無しさん
2010/12/20(月) 20:59:560957デフォルトの名無しさん
2010/12/21(火) 00:00:53普通はサンプルとして載せるコードには、API以外の知識が必要がないように気を使って書く。
行数は短く、処理の流れは可能な限り上から下に順番に流れるようにするので、classの使用も控えて、
グローバル変数を多用するようになる。
サンプルコードを見る人はコピペしたいんじゃなくて、APIを呼ぶタイミングや順番を見たいだけだから、
必要のない情報は可能な限り排除すべき。
それを分かってない奴が、猫でもわかる〜とかのコードにケチ付けてるけど、APIの使い方の例としての
コードはあれでいい。
あと、Direct3DのCOMの使い方だと、スマートポインタってあんまり恩恵ないと思う。
0958デフォルトの名無しさん
2010/12/21(火) 00:49:210959デフォルトの名無しさん
2010/12/21(火) 01:09:52intrusive_ptr とかまさに
0960デフォルトの名無しさん
2010/12/21(火) 01:26:280961デフォルトの名無しさん
2010/12/21(火) 01:58:51ある程度分かってる人が「あぁ、なるほど」って思える記事が多いんじゃないか?
0962デフォルトの名無しさん
2010/12/21(火) 03:12:13簡単簡潔にするためのものなんだから
0963デフォルトの名無しさん
2010/12/21(火) 04:29:55中級者向けって例えばどんなの?
0964デフォルトの名無しさん
2010/12/21(火) 04:31:09Direct3D9でいえば
xファイル読み書きしてぼちぼちライティング処理やったり、
関節処理実装したり、
デバイスロスト問題でヒーヒー言ったりが中級じゃないかね。
0965デフォルトの名無しさん
2010/12/21(火) 04:48:49確認する方法ってありますか?
0966デフォルトの名無しさん
2010/12/21(火) 05:00:13シェーダーの出力を真っ黒にしてみる
1行加えるだけでできるだろう
0967デフォルトの名無しさん
2010/12/21(火) 07:36:17D3DXMatrixPerspectiveFovLHで描画したオブジェクトと
D3DXMatrixOrthoLHで描画したオブジェクトが
同じシーンに混在してても問題ってないでしょうか?(Zバッファとか)
0968デフォルトの名無しさん
2010/12/21(火) 08:16:29>普通はサンプルとして載せるコードには、API以外の知識が必要がないように気を使って書く。
実際、これに尽きるんだけどな。ただスマポの恩恵無いってのはあり得ないけども
0969デフォルトの名無しさん
2010/12/21(火) 08:21:45演算子とか組み方とか載ってるようなやつ
0970デフォルトの名無しさん
2010/12/21(火) 08:35:18それは無い。std::cout や std::string みたいな物しか想像してないとそうも思えるけど、
実際標準ライブラリや準標準の boost とかスマポやイテレータ/ストリームだけじゃないから
それらの挙動を理解しないで、最終的に生の内容に取り出すような時、あるいは駆使したロジックを書くとき、
それらのテンプレートライブラリの挙動をある程度理解せずに変な記述すると、あっと言う間に意味フなエラーが何百も吐き出されて
入門者じゃ手に負えなくなると思うよ。 普段使ってる人間なら過去に何度も見ているはず。それを思えばその台詞は間違っても言えない
0971デフォルトの名無しさん
2010/12/21(火) 08:50:03ありません
0972デフォルトの名無しさん
2010/12/21(火) 09:37:03大丈夫だ、問題ない
途中の行列演算が変化するだけ。
射影後はすべて、
最終的なクリップ座標系(-1 < x < 1,-1 < y < 1,0 < z < 1の空間)
に移動する。2Dのものならzをznにしておけばzテストで落ちることはない
0973デフォルトの名無しさん
2010/12/21(火) 09:39:22ちょっと古いが入門にはいい
ttp://www.amazon.co.jp/DirectX-9-シェーダプログラミングブック-今給黎-隆/dp/4839912475
0974デフォルトの名無しさん
2010/12/21(火) 12:12:26boostやそれ以外はSTLに関係無いだろ
0975デフォルトの名無しさん
2010/12/21(火) 18:06:42ありがとうございます
安心して使えます
0976デフォルトの名無しさん
2010/12/21(火) 21:49:52日本語でおk
0977デフォルトの名無しさん
2010/12/22(水) 01:14:520978デフォルトの名無しさん
2010/12/22(水) 01:22:04ここで言うサンプルよか簡単なのは
あたり前
0979デフォルトの名無しさん
2010/12/22(水) 07:43:370980デフォルトの名無しさん
2010/12/22(水) 08:16:20www
0981デフォルトの名無しさん
2010/12/22(水) 12:50:46テンプレに何を追加すればおk?
0982デフォルトの名無しさん
2010/12/22(水) 13:25:51HLSLでテクスチャを張るポリゴンと張らないポリゴンを切り替えるには、
パスを切り替えるしかありませんか?
float4 PS(PS_INPUT In) : SV_Target
{
return In.Color;
}
float4 PSTex(PS_INPUT In) : SV_Target
{
return txDiffuse.Sample(samLinear,In.Tex) * In.Color;
}
と二つピクセルシェーダを用意しなければならいのは仕方ないですか?
0983デフォルトの名無しさん
2010/12/22(水) 14:02:19if文つかえば定数を変更するだけでできるんではないかな?
0984デフォルトの名無しさん
2010/12/22(水) 14:15:050985982
2010/12/22(水) 16:02:07また状況が変わればifを使うのも一つと考えておきます。
ありがとうございました。
0986デフォルトの名無しさん
2010/12/22(水) 18:15:210987デフォルトの名無しさん
2010/12/22(水) 19:16:07シェーダーでは分岐もループも静的に展開される。
0988デフォルトの名無しさん
2010/12/22(水) 20:16:07http://hibari.2ch.net/test/read.cgi/tech/1293016261/
とりあえず、C/C++、ゲーム製作についての質問はスレ違いなので注意のことを
勝手に追加してみた いらなかったら次は消してください
0989デフォルトの名無しさん
2010/12/22(水) 21:28:59ルールを変えるときは次スレ立てる前に確認するっていうのも追加しといて
0990デフォルトの名無しさん
2010/12/23(木) 02:33:050991デフォルトの名無しさん
2010/12/23(木) 09:33:24ルールにしたがってたって気に入らないレスには解答しないし
ルールから逸脱してても自分が気に入る話題には解答するし
本当に困ったちゃんは役に立たないルールを指摘して
自分の気に入らないやりとりを止めてしまう育ちの悪い糞ガキ
0992デフォルトの名無しさん
2010/12/23(木) 09:35:33個人がテキトーに追加できるこんな形ではあっても喧嘩の材料になるだけ
0993デフォルトの名無しさん
2010/12/23(木) 09:56:450994デフォルトの名無しさん
2010/12/23(木) 10:15:20前はいなかったから最近来た奴
0995デフォルトの名無しさん
2010/12/23(木) 14:06:320996デフォルトの名無しさん
2010/12/23(木) 17:34:100997デフォルトの名無しさん
2010/12/23(木) 19:34:46そういう根回しが出来ないからコミュ能力がないって言われるんだよ
0998デフォルトの名無しさん
2010/12/24(金) 07:34:270999デフォルトの名無しさん
2010/12/24(金) 07:42:551000デフォルトの名無しさん
2010/12/24(金) 07:45:3510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。