【C++】 DirectX初心者質問スレ Part32 【C】at TECH
【C++】 DirectX初心者質問スレ Part32 【C】 - 暇つぶし2ch1:デフォルトの名無しさん
10/10/29 01:08:02
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

前スレ
【C++】 DirectX初心者質問スレ Part31 【C】
スレリンク(tech板)

2:デフォルトの名無しさん
10/10/29 02:06:16
DirectX SDK チュートリアル
URLリンク(msdn.microsoft.com)

3:デフォルトの名無しさん
10/10/29 03:39:18
>>1
苦労を労って虎のxファイルをやろう

4:デフォルトの名無しさん
10/10/29 10:22:42
そういや、DirectX10からXファイルが無くなってるんだが、皆はモデルデータを
どのようにして扱ってるのですか?


5:デフォルトの名無しさん
10/10/29 10:35:19
今後10年くらいはDirectX9が主流だ。
だからXファイルで十分。

マイクロソフトがWindowsXpを越えるOSを出せるのだろうか、
その可能性は少ない。

6:デフォルトの名無しさん
10/10/29 11:14:24
9のヘルパー関数で読み込んで
頂点バッファやインデックスバッファ、アニメーションデータをそのままバイナリで保存しなおせば
直に扱えるデータの出来上がりじゃない

7:4
10/10/29 11:22:39
なるほど、ありがとうございました

8:デフォルトの名無しさん
10/10/29 22:50:36
あれ?いつの間にDirectX SDKからX-File Viewerがなくなっちゃったのかな?
OS再インストールして最新のSDK入れたらビューアがない…
今でも入手できる?

9:デフォルトの名無しさん
10/10/29 22:59:24
>>8
9だよね?
あるよバグってるけどw
DirectXViewerになってね?

でもバグってるんだ
正常なはずのXFileが読めない(ときがある!)

10:デフォルトの名無しさん
10/10/29 23:05:49
DirectXのDirectGraphicsで3Dゲームを開発しております。
下記URLの某ゲーム画面は牌や卓の輪郭がとても滑らかに表示されています。
URLリンク(blog-imgs-18-origin.fc2.com)

私は「DirectXゲームグラフィックスプログラミングVer2.0」という本を参考に作ってみたのですが、
本の通りにXファイルから読み込んで表示させていますが、
輪郭が滑らかにならず、ぼかしがないギザギザな感じで表示されてしまいます。
一応オプションで
SetRenderState( D3DRS_DITHERENABLE, TRUE);//高品質描画
SetRenderState(D3DRS_ANTIALIASEDLINEENABLE,TRUE);//アンチエイリアス
ということはやっております。
どうやったら滑らかになるでしょうか。

11:デフォルトの名無しさん
10/10/29 23:30:11
>>10
それらのステートはアンタの環境で
サポートされてるの?
まずそっからでしょ

12:デフォルトの名無しさん
10/10/29 23:47:04
>>10
それ以前にそれらのレンダリングステートはポリゴンのジャギを消すのに役立たないでしょ

とりあえず手っ取り速くアンチエイリアスを掛けたいなら
CreateDeice時にフルシーン マルチサンプリングを有効にする
URLリンク(msdn.microsoft.com)(VS.85).aspx
でも、かなり負荷がかかるしそれほど望むほど綺麗にはならないかもしれない


そのゲーム知らないからなんとも言えないけど
まずその牌はほんとに3Dなのだろうか?
ライティングもしてないようだし3Dっぽく描かれた2D絵のようにもみえる

3Dだとしたら

・牌のポリゴン数を見た目以上にたくさん使ってるとか
・シェーダーで輪郭線に対してぼかしをかけてるとか
・ざっくりやるなら一度バックバッファよりも2倍程度大きいレンダリングターゲットに描画してから
 そのテクスチャをフィルター付き縮小してバックバッファに転送するとか

レンダリングステートのオンオフだけではなんとも出来ないなんらかの工夫をしてると思われ

13:デフォルトの名無しさん
10/10/30 02:04:52
>>12
事前にCheckDeviceMultiSampleTypeでチェック
OKならば
d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
でCreateDeviceして
滑らかになったよ。ありがとう!

14:デフォルトの名無しさん
10/10/30 16:31:20
D3Dを扱う上で速度低下を招かないようにするためのTIPS集みたいのは無いでしょうか?
頂点バッファをLockしてアクセスする場合はSYSTEMメモリに確保しろというような。

Helpにも有る程度書いてあるのですが、書いてある箇所が分散しているので
速度に関係ある部分のみのまとめが無いかなと。

15:デフォルトの名無しさん
10/10/30 16:59:01
>>14
嘘はいっちゃいかん

URLリンク(msdn.microsoft.com)(VS.85).aspx

16:デフォルトの名無しさん
10/10/30 23:00:35
前スレのID3DXSpriteつかった奴って
使わないで自前でやるとどれくらいの速度がでるものなの?

17:デフォルトの名無しさん
10/10/30 23:54:24
自分ではかれや

18:デフォルトの名無しさん
10/10/31 00:41:52
>>17
同意
初心者スレだからって調子に乗りすぎだよな

19:デフォルトの名無しさん
10/10/31 02:16:00
>>16
まぁ、興味が無くもないから今日の夜時間あったらコード書くよ

20:デフォルトの名無しさん
10/10/31 02:47:55
Direct2Dでシェーダーは利用できますか?

21:デフォルトの名無しさん
10/10/31 03:18:26
Direct2Dはそういう使い方をするものじゃないです

22:デフォルトの名無しさん
10/10/31 03:34:01
>>21
thx. そうみたいですね…

Windows7SDKのサンプル見てたんですが、D3Dと併用すれば可能って感じですかね…

23:デフォルトの名無しさん
10/10/31 07:17:21
>>19
んで、書き込んだからには報告でもするのかと思いきや音信不通になるんだろ?
そのくせ回答者にいつも文句ばっかり言ってる類でしょ?
根っからの糞だよねw君w

24:デフォルトの名無しさん
10/10/31 10:13:14
これで本当に書き込まれたらなんて言い訳するつもりなんだろう

25:デフォルトの名無しさん
10/10/31 10:16:27
安心しろ。それはありえない。

26:デフォルトの名無しさん
10/10/31 10:24:35
directxってバージョン色々あるみたいだけどどれ勉強したら良いんだろう…
入門サイト見てたらdirectx9で2dからやると良いって書いてあるけど、
他のバージョンで仕様が変わっても勉強が無駄になりませんでしょうか?



27:デフォルトの名無しさん
10/10/31 10:26:02
Direct3D11からDirect3D9デバイスを使うように作ればいい。
その後の移行も楽になる。

28:デフォルトの名無しさん
10/10/31 11:47:53
>>26
9から始めるにしても固定機能は忘れてシェーダーのみでやれば
11と比べて資料も豊富だし、HLSLやプログラマブルシェーダーの知識は無駄にはならないと思う

でも全体でみると大幅に変わってるから
11が出来る環境があって今から勉強始めるなら11でもいいかもね

29:デフォルトの名無しさん
10/10/31 12:11:27
だろ。の人は相変わらず人に文句つける割に役に立つレスつけないなぁ

30:デフォルトの名無しさん
10/10/31 12:54:14
>>15
ありがとうございます。
MSDNではなくmhtの方しか見てませんでした。

31:デフォルトの名無しさん
10/10/31 15:02:04
11は確かXPでは動かなかったよね?
d3dx11.dllがないとかで。(これどっかからダウンロードしてきて入れたらいいのかね。それでも無理そうだが)
まぁXPを切り捨てるはめになるが、今から覚えるなら11の方がいい。9を覚えても無駄になる。
シェーダの書き方も変わってるから。

32:デフォルトの名無しさん
10/10/31 15:17:56
知らないならレスしなければいいのに

33:デフォルトの名無しさん
10/10/31 15:51:57
9でこれ覚えるだけ無駄っていうのあります?

34:デフォルトの名無しさん
10/10/31 16:17:54
人間が生きている事が無駄です。あなたは無駄を削除しますか

35:デフォルトの名無しさん
10/10/31 16:22:04
>>33
9でやる以上無駄なことなんて無い
有益無益で判断するくらいならおとなしく11でやりなさい

36:デフォルトの名無しさん
10/10/31 16:52:57
Windows7では11が標準でついてるみたいだけど、11に対応した
グラフィックボードが少ない、というのは11特有の機能を使う
ことができないという意味?

9相当の機能だけでいいのなら、11に対応してないグラフィック
ボードでも11は一応動かすことができるの?

37:デフォルトの名無しさん
10/10/31 17:00:37
>>36
URLリンク(msdn.microsoft.com)

38:デフォルトの名無しさん
10/10/31 17:05:09
11の制約はVistaであってGPUではない
多少はGPUもあるけど

39:デフォルトの名無しさん
10/10/31 17:05:57
ちょっと日本語になってないな

40:デフォルトの名無しさん
10/10/31 17:08:25
>>37

ありがとう

41:デフォルトの名無しさん
10/10/31 20:30:57
ちょっと質問です。XP、DirectX 9.0 SDK (October 2004)、GeForce 9600GT を使っています。
今、ビューポートを画面と同じサイズにして3Dモデルを描画しています。
これを、例えばそのまま 100px 左にずらして描画したいのですが、方法がわかりません…。

単純にモデルの位置をずらしても、カメラとの角度が変わってしまうため、見た目が変わります。
奥行き自体は表現したいので、平行投影にすることはできません。

単純にビューポートを左にずらした場合、つまり D3DVIEWPORT9::x = -100 とした場合、何も描画されなくなりました。
(SetViewport で D3DERR_INVALIDCALL が返ってくると思ったのですが、エラーは返って来ませんでした。)

一度、テクスチャに描画してからあらためて D3DFVF_XYZRHW でそのテクスチャを描画すればうまく行くのですが、
これだけのために2段階描画にするのも…と思いますし、他のモデルとの奥行きを考えるのが難しくなります。

今考えてるのは、射影行列を頑張って作る方法(左右対称ではなく、右に偏ったカメラを作る)ですが、
なかなか上手くいきません…。

もっと単純にずらす方法はないでしょうか?
よろしくお願いします。

42:デフォルトの名無しさん
10/10/31 21:22:32
>>41
ビューポートはスクリーンサイズを越えて指定はできないはず

モデルを横にずらして
ビルボードと同じ要領でカメラの方に回転させればいいじゃない

43:デフォルトの名無しさん
10/10/31 22:16:27
カメラ座標に変換するマトリックスを細工したらできそうな気がする

計算は・・・・だれかお願いっ!

44:41
10/10/31 22:23:34
>>42
説明が下手で申し訳ないのですが…。

例えば長方形の板ポリを2枚置きます。

(A)
1枚目はカメラ正面、カメラ向き。2枚目は1枚目と同じ向きで、カメラより右よりに置きます。
この場合は、2枚ともZ座標が4頂点で全て同じになり、そのまま長方形として描画されます。

(B)
ところが、Y軸を中心に90度回転させた場合、正面に置いた板ポリはちょうど見えなくなりますが、
右に置いた板ポリは角度がついて見えてしまいます。

ビルボードのようにカメラの方を向けてしまうと、(A)の段階で既に角度がついてしまい、台形になります。

>>43
射影行列で、例えば x 座標を x' = m(x + n) のような式にできる場合、同時座標を使った行列変形できるのですが
そう単純な結果にならず…苦労しています

45:デフォルトの名無しさん
10/10/31 22:30:48
一枚目と二枚目の それぞれをビルボードとして設定しなさい。
それをそれぞれ90°回転するのですね
グローバルから見て、Y角度は異なりますね
カメラの画角によりますが周囲の歪みが出るかもしれません、それは仕方ない。

46:デフォルトの名無しさん
10/10/31 22:35:01
>>44

// カメラから求められたビュー行列
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;
                      ↑
                    ココに掛ける

これでダメなら知らない

47:デフォルトの名無しさん
10/10/31 23:09:33
>射影行列を頑張って作る方法(左右対称ではなく、右に偏ったカメラを作る)
D3DXMatrixPerspectiveOffCenterLHじゃだめ?

48:デフォルトの名無しさん
10/10/31 23:12:18
>>46
ビルボードでしょうか?
うーん、やはり上手くいかないです…

49:デフォルトの名無しさん
10/10/31 23:36:20
上手くいかなそうですね…

50:デフォルトの名無しさん
10/10/31 23:36:58
>>47
おお、行けそうです…
まだ理解できてなくてサイズがおかしいことになっていますが、位置が違う物体が同じ向きで回ってる…
希望が見えてきました!!!

51:デフォルトの名無しさん
10/11/01 00:18:09
>>47
時間かかりましたができました!!!!
行列でうまくできたんですね…まだまだ行列の理解も足りないようです。
ありがとうございます!!

52:デフォルトの名無しさん
10/11/01 00:37:52
理解って、高校で習った筈だろ。
数Cだっけ?

53:デフォルトの名無しさん
10/11/01 01:27:37
習った!=使える

それに文系とか、理系でも選択してないとかでCやってない人も多い

54:デフォルトの名無しさん
10/11/01 01:46:50
うーん、行列は習いましたが、掛け算とか逆行列とかまでです。
複素数平面世代なので、一次変換すら習っていません。何に使うかとかには一切触れませんでした。
3Dへの応用とかは全く別分野だと思います…。

55:デフォルトの名無しさん
10/11/01 03:27:16
ウィンドウのクライアント領域と同じサイズのDDBを用意して、
BitBltでそのままウィンドウのデバイスコンテキストに転送して計測したfpsと、
Direct3D9で単純にBeginScene→EndScene→Presentしただけのfpsとでは、
前者の方が早いのですね。

こんなものですかね?

56:デフォルトの名無しさん
10/11/01 04:06:00
転送しただけで更新命令が出てないから画面書き換えは起きてないってオチじゃなくて?

57:デフォルトの名無しさん
10/11/01 04:13:32
そのBitBltするピクセル領域に、
DXで描画するのと同じレンダリング結果になる処理を自前でしてみなよ
(頂点情報からライスライズしてポリゴンを描画、そのポリゴンにテクスチャマッピングやライティング等のシェーディング処理)

ちょっとしたレンダラをWinAPIだけで作った事あるが、
スキニング無しで単純なモデルを自前レンダリングするだけの描画でDXに完敗だったよ
GPUとそのドライバ(HAL)が使えないのは、ゆくゆくの実際の使用に耐えられないよ

今のメニーコアで、並列処理とSIMD命令使いまくりのコードかけば、少しは行けるかも知れないけどw

58:デフォルトの名無しさん
10/11/01 04:14:58
DirectXの方が垂直同期取ってるだけとか

59:デフォルトの名無しさん
10/11/01 04:16:55
>>55
まずは、実際のFPSの数値を出さないと。

60:>>55
10/11/01 04:30:28
PresentationIntervalはD3DPRESENT_INTERVAL_IMMEDIATEなので垂直同期はなしの筈。
画面サイズによってはD3D9のほうが早かったりする…

61:デフォルトの名無しさん
10/11/01 04:34:42
で、いくつなんだよ

62:デフォルトの名無しさん
10/11/01 04:38:01
>>56
DDBを直接ウィンドウのDCにBitbltしてるので即座に画面に結果が表示されてるので、それはないかと。

>>57
それはごもっともです。

>>59
          DDB   D3D9
256 x 256 =   4,500   3,600
600 x 480 =  850    1,000

あれ~…サイズによって違うし…

63:デフォルトの名無しさん
10/11/01 04:43:26
なんにせよ何の意味もない比較だな

64:デフォルトの名無しさん
10/11/01 04:44:39
妥当なFPSだと思うね。
しかしだ、色々表示した場合のDXのスピードに驚く必要がある。
多くのオブジェクトをDCに描画する遅さを気がつくべきだ。
毎回一枚絵だったら別だが、それはビデオ映像しかないしな。

65:デフォルトの名無しさん
10/11/01 04:46:12
          DDB   D3D9
300 x 300 =   3,300   3,000
1280 x 700 =    220     90

>>63
意味はないねw

>>64
ごもっともです

66:デフォルトの名無しさん
10/11/01 04:50:02
その90って、何か間違ってると思うが、いかに。

67:デフォルトの名無しさん
10/11/01 04:53:53
open glとだったらどっかが速いの?

68:デフォルトの名無しさん
10/11/01 05:00:38
なんか計測方法に問題がありそう

69:デフォルトの名無しさん
10/11/01 07:56:46
ほとんど使ってなかったけどBBX無くなったのね

70:>>55
10/11/01 12:03:49
あぁ記述漏れしてた。
D3D9の方はバックバッファ一つで、ウィンドウのクライアントサイズにしての結果です。

71:>>55
10/11/01 13:24:39
一応テスト用ソース
URLリンク(codepad.org)

72:デフォルトの名無しさん
10/11/02 00:05:56
ゲーム画面の解像度ってどんな比率と大きさでやるのがトレンド?
いまって4:3のディスプレイのが少ないよね?16:9?
800x600で組んでたけどもう時代遅れかなぁ・・・とかちょっと思ってる

73:デフォルトの名無しさん
10/11/02 03:33:19
PCは16:10も多い

74:デフォルトの名無しさん
10/11/02 04:22:51
>>72
1280x720がトレンドだと思い込んでみる
問題は1024x768のモニタだと横が足りないところだな

75:デフォルトの名無しさん
10/11/02 06:11:01
>>70 & >>71 & >>55
応答おそくなったよ。なかなか人のソフトの動作確認は、ちょい面倒だから。

            D3D9
1280 x 700 =     1994   これはグラフィックボードがN6600GTで6年前ので性能悪いやつ
1280 x 700 =      200   これはヘボイノートPCの性能

実験しているPCはノートでしょ。それも俺のより性能悪い物かな
ソフト的には問題ないよ、90はグラフィックボードの問題。
性能いいグラフィックボードなら、10000いくと思う。


76:デフォルトの名無しさん
10/11/02 06:15:50
追記、そのノートPCで3D表示を多く出すのは厳しいだろうね。
俺もノートPCで作ってるけど、重いときはデスクトップでやってるから。

77:デフォルトの名無しさん
10/11/02 06:33:27
>>74
>問題は1024x768のモニタだと横が足りないところだな
まだ、そんなのあるの?

78:デフォルトの名無しさん
10/11/02 06:46:52
>>73
多いな
16:9はなんか申し訳程度にサポートされてる感が強い

79:>>50
10/11/02 08:34:52
>>75-76
うおぉぉぉーーー!!!!
お忙しいでしょうに丁寧に検証して下さいましてありがとうございます!!!
まさかまさか検証してもらえるとは思ってなかったのでw

ご明察の通り、しょぼいノートPCです。
hpのG62(三ヶ月前で8万円くらい)ですww

3D表示を多く出すのはちゃんとしたマシンでやればよさそうですね。
とりあえずノートでは256x256でレンダリングして512x512に引き伸ばしてやれば、
実用に耐えれそうなのでそれでやってみます。

ほんとにありがとうございました。

80:>>79訂正
10/11/02 08:35:48
うっ…   >>50>>55

81:デフォルトの名無しさん
10/11/02 11:33:33
>>71
DirectXの方は毎フレームIDirect3DDevice9::Clearしてるのに
DDBの方は転送するだけってフェナな計測方法じゃないな
単純にVRAMがオンボとかでClearが遅いだけとかじゃね

82:デフォルトの名無しさん
10/11/02 17:54:31
>フェナ
URLリンク(animal.myds.jp)

83:デフォルトの名無しさん
10/11/02 20:00:30
>>78
16:9がメインストリームだろ

84:デフォルトの名無しさん
10/11/02 20:17:04
家電はそうなんじゃね? PCは4:3が伝統的だし変える動機も無いと思う。640*480とか。

85:デフォルトの名無しさん
10/11/02 21:36:14
>>83
俺のPCだとなんかもうしわけ程度に1280x720(60Hzのみ他の解像度は75Hzはある)だけが
サポートされてて他の16:9はないんよ
なのでPCだと16:10が主流なのかな?と
こっち(16:10)は結構ある1440x900まである

86:デフォルトの名無しさん
10/11/02 21:43:42
横に縮むより伸びるほうがまだ許せるから4:3かなぁ
3Dならアス比が変わっても大丈夫なように作る
よこに伸びたり視野が広がることでゲーム性が変わっちゃうようなゲームなら
中央部分だけ使うようにするかな

87:デフォルトの名無しさん
10/11/02 21:51:04
>>86
4:3だとなんかしょっぱく見えるんだよ(目が肥えた)
引き伸ばすとキャラがデブっちくなるからはじめから横にしておいたほうがいい感じ

88:デフォルトの名無しさん
10/11/02 21:53:12
デブくなるのはダメだがやせっぽっちになるのは許せるのか?

89:デフォルトの名無しさん
10/11/02 21:56:09
4:3にして両側に黒枠を付けるだけジャン

90:デフォルトの名無しさん
10/11/02 21:56:11
>>88
うん
そんなディスプレイ使ってる奴はきっとアス比が変わっても気にならない
てか、フルスクリーンモードで起動しないんじゃね?的な予想

91:デフォルトの名無しさん
10/11/02 21:58:18
ノートはハイエンドクラスだとワイドサイズが増えてきたけど
ミドルレンジだとまだ4:3が多いからなぁ

92:デフォルトの名無しさん
10/11/02 22:01:21
>>91
ぜってーゲームなんかやんねーよそいつ
みたいな奴のこと気にするな

93:デフォルトの名無しさん
10/11/02 22:04:16
16:10とかワイドになったらエロゲの女の子のヨガスキルがさらにアップするな

94:デフォルトの名無しさん
10/11/02 22:14:26
>>92
おま、サポートに寄せられる苦情とか見たことないの?

95:デフォルトの名無しさん
10/11/02 22:21:46
URLリンク(pc.watch.impress.co.jp)

スクエアからワイドへの移行は目に見えて明らかだけど、
16:10から16:9へも緩やかに移行してるとか。

96:デフォルトの名無しさん
10/11/02 23:13:58
うちのは16:10だけど最近どこ見ても16:9だしなぁ

97:デフォルトの名無しさん
10/11/03 00:45:03
>>79
安めのノートPCでDXを使う場合の注意事項と利点。
 まず基本的に、グラフックの表示チップにDX3D機能ををハードで実装していない
場合が多い、この時はドライバー内でDX機能をエミュレートしている。
 だから、単なるべた塗りはプログラム側でやってもDXでやっても似たようなスピードに
なりやすい。
 問題はドライバーによるソフトエミュレーションにいくつかの機能制限が多いことだ。
なおかつ、DXの機能問い合わせで機能有り返るが、正しく動かなかったりする。
 だから、動くはずだが動かないと悩む可能性でつまずくはずだ。
今回の単なる最小ループの更新も、スピードが変わらないとつまずいたはずだが、
ソフトエミュレーションのノートPCグラフィックなら当然そうなる。
 検証用のPCが必要だ。しかし、そのノートPCで動くようなら、多くのPC上でも
問題なく動作する可能性が高いため、ユーザー上で動作しない問題を回避できる。
性能の良すぎるPC上で開発すると、他のPCで動作しない危険をつかみやすい。

98:デフォルトの名無しさん
10/11/03 02:12:59
こんにちは。
URLリンク(akiba-pc.watch.impress.co.jp)
を見て気になったんですが、2枚刺しのビデオカードを利用した場合、
ビデオメモリが12GBになると書いてありますが、実際にプログラムからも
12GBのメモリとして使えるのでしょうか?
ATIのボード2枚刺し、nVIDIA+ATIで2枚と組み合わせでいろいろ変わってくると
思いますが、とりあえずnVIDIA2枚刺しの場合どうなるのでしょうか。

99:デフォルトの名無しさん
10/11/03 08:24:42
>>95-96
マジか

でもググッタら16:9になったわけが・・・
URLリンク(www.labornetjp.org)

よし、俺は当初の予定通り黄金比(16:10)に合わせて16:9には黒枠いれることにしよう
きっと黄金比がなんとかしてくれる

100:デフォルトの名無しさん
10/11/03 08:35:41
指定したクライアント領域ぴったりのウィンドウを作るにはどうしたらいいでしょうか?

101:デフォルトの名無しさん
10/11/03 09:04:36
>>100
AdjustWindowRectEx

102:>>55
10/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

103:>>55
10/11/03 09:26:50
あああ、AdjustWindowRect だった/(^o^)\

104:デフォルトの名無しさん
10/11/03 09:36:08
>>71
>g_D3D9Params.AutoDepthStencilFormat = D3DFMT_D16;
これ
D3DFMT_D24X8
にしろよ

105:デフォルトの名無しさん
10/11/03 12:37:47
>>100
ウィンドウレクトとってクライアントレクトとって引き算してウインドウの縁を取って、
縁に好みの大きさのクライアントの幅と高さを足してウインドウ変更という手もあるよ。

106:デフォルトの名無しさん
10/11/03 12:53:17
横からだけどその二つの手法ぐらいしか知らないんだがどちらが優れているか等はないよね?

107:105
10/11/03 12:56:37
自分の手は、メニューがどうだろうとウインドウスタイルがどうだろうと気にしないで変更できる。
が、物理的にモニタからはみ出す場合はさらに計算しないといけない。

108:>>55
10/11/03 13:14:21
>>104
それに指定するとfpsが低下しますたorz

実は2Dゲームを想定しておりまして、
Zバッファのビット深度は特に気にする必要もないかと思われますので、
EnableAutoDepthStencil = FALSE;
AutoDepthStencilFormat = D3DFMT_UNKNOWN;
でやろうと思います。

これだけでfpsが256サイズだと400位の差が出ました。
EnableAutoDepthStencil = FALSE にしてるのに、
AutoDepthStencilFormat は D3DFMT_D16 や D3DFMT_D24X8 よりも D3DFMT_UNKNOWN の方が早いのですね…

109:デフォルトの名無しさん
10/11/05 11:24:54
ハード側のメモリに頂点情報やインデックス情報を持たせても、
Lockのコスト > 転送コストの場合、
実行速度は DrawIndexedPrimitiveUP > DrawIndexedPrimitive になる。

この認識でおk?

110:デフォルトの名無しさん
10/11/05 11:46:09
1フレームに相当回数Lockしないと逆転しないと思うが…
普通はやっちゃいけない実装だが
1フレームに数百回Lockするような仕様ならUPの方が速くなるかもね

111:デフォルトの名無しさん
10/11/05 12:34:00
>>110
㌧クス。

IndexBufferのインデックス作成は事前に行い、1フレームにVertexBufferをLockするのは一回だけ。
これでテストしてみたんですがね、マイPCだとどうにもUPの方が早いんですよね…
相当キワモノなグラフィックカードなのかなorz=3

112:デフォルトの名無しさん
10/11/05 12:36:58
静的頂点バッファをLockしてるとか

113:デフォルトの名無しさん
10/11/05 12:44:05
VRAMとシステムメモリ共用のビデオカードとか

114:デフォルトの名無しさん
10/11/05 13:12:00
>>113
Mobile Intel(R) 4 Series Express Chipset Family というビデオカードなのでそれかな!
と思ってたら…

>>112
VertexBuffer.Lock()で 0 指定してますた…
D3DLOCK_DISCARD で DrawIndexedPrimitiveUP より早くなりましたw

どうもお騒がわせして申し訳ありませんでした。

115:>>55
10/11/05 15:57:30
おかしいな~…

>>71 なんですけど、
デスクトップ領域の左上や左下にウィンドウを持っていった時にfpsが激減するんですよね。
他の領域に持っていくと早くなる(元に戻る)。
何も処理してないってのに…

Win7使ってまして、Areoはオフ(Windowsクラシック)にしてるし、
AeroSnapもオフ(コンピューターの簡単操作センターにて)にしてるから
DWMが悪さしてるとは思えないんですけどね。

で、DwmIsCompositionEnabled で調べたらちゃんと 0(FALSE) 帰ってくるし、謎だ…

7ではおとなしくDirectX10 or 11にするべきなのかな…

116:>>55
10/11/05 18:14:49
C#でSlimDXのD3D11を使って、Stopwatchでfps計測してみたコードがあるんで、
それを実行してみたら…

同じ現象が発生した/(^o^)\

117:デフォルトの名無しさん
10/11/05 22:28:09
>>116
意味ないからやめろ
実際にゲーム作ったうえで計測しないと本当に無意味だぞ

同じもんを複数回描画したときと
違うもんをたくさん描画したときって描画の仕方によっても違うし

118:デフォルトの名無しさん
10/11/06 02:00:32
ぶっちゃけ環境のせいだと思われ

119:>>55
10/11/06 12:21:57
>>117
自分のコードが拙いのか環境なのか判断したくて色々調べたけど、
おっしゃるとおりですね。とりあえず後回しにします。
一応>>71のコードはテスト用にシンプルにしたものでして、
自分のゲームにのっとった形式でのテストはしております( ´∀`)ノ

>>118
色々弄ってみましたがね、多分そうなんでしょうね。
C#のStopwatchもQueryPerformanceCounter使ってるって話みたいですし、
ソコかDirectX(DWM含む)の中の方なのかなと。

120:デフォルトの名無しさん
10/11/06 18:21:50
ビューポート分割と、それに伴なうビュー設定に関して質問です。

「640x480」の画面を2分割し、「320x480」の画面を左右に2個置くようにビューポートを分割した後、(『ぷよぷよ』のイメージ)
それぞれのビューポートに対して全く同じビュー変換・射影変換処理をして描画したところ、
後に設定した方のビューは、先に設定した方の2倍に引き伸ばされて描画されてしまっています。
これを、左右の画面で全く同じ描画が行われるようにしたいのですが、どうすればよいでしょうか。

普段作業しているPCでは、現状のコードでも左右で同じ画面が描画されるのですが、
別のPCでは上記のようになってしまい、困っております。

121:デフォルトの名無しさん
10/11/06 18:43:14
>>120

D3DVIEWPORT9 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;
でないといけない

スクリーンから+方向にはみ出た指定をした場合
スクリーンに収まるように勝手に補正してくれるハードも有れば
してくれないハードもあったはず

122:デフォルトの名無しさん
10/11/06 19:33:39
>>121
言われた通りにして、治りました!すごい!
完全にSetViewportメソッドの仕様を勘違いしてました。
半日悩んでましたが、スッキリ解決して良かったです。
ありがとうございました。

123:デフォルトの名無しさん
10/11/06 20:51:17
エスパーすごいな

124:デフォルトの名無しさん
10/11/06 21:03:09
これはすばらしい
経験の賜物だな

125:デフォルトの名無しさん
10/11/06 21:11:37
>スクリーンから+方向にはみ出た指定をした場合
>スクリーンに収まるように勝手に補正してくれるハードも有れば
>してくれないハードもあったはず
これを知ってないとわからないよね

126:デフォルトの名無しさん
10/11/06 21:29:48
ビューポートはちゃんと指定しないと駄目なんだね。

127:121
10/11/06 23:00:16
ごめ、ハードによって違うみたいな書き方しちゃったけどちゃんと調べたら嘘でした

D3DCREATE_HARDWARE_VERTEXPROCESSING
でデバイスを作った場合は
ちゃんとスクリーンに収まるように変換されるくさい
(座標変換済み頂点の場合はちゃんと指定してないとおかしくなる)

D3DCREATE_SOFTWARE_VERTEXPROCESSING
だとはみ出た分も計算されちゃうみたいで横にのびるようだ

おそらく、デバイス作成のところに
頂点シェーダーのバージョンが1.1以下ならソフトウェア計算に切り替えるみたいなのが仕込んであって
不具合が出たほうはそれにひっかかったのだと思われ

128:デフォルトの名無しさん
10/11/07 00:14:59
まぁしょぼいVGAだと駄目という意味でならハード依存に間違いあるまい
どちらにしてもちゃんと範囲内で指定しろってこったな

129:デフォルトの名無しさん
10/11/07 00:18:22
ビューポートっていったい何なんですか?

130:デフォルトの名無しさん
10/11/07 00:29:50
>>129
頂点の座標変換は
IDirect3DDevice9::SetTransformやシェーダーで指定する
ワールド、ビュー、射影変換の3つで終了ではなく
実はこの後、射影空間上の頂点をスクリーン空間座標に変換するビューポート変換が存在する

これはDirectX9以前ではデバイスにセットされてるビューポートに従って自動で行われる
通常はデフォルトでバックスクリーンと同サイズのビューポートが設定されてるので
変わったことをしようとしないかぎり気にしなくて良い

131:デフォルトの名無しさん
10/11/07 01:07:10
>>130
ありがとうございます。理解できました。

132:デフォルトの名無しさん
10/11/07 07:11:42
シェーダを使ってSSAOを実装しようとしています。
少し大きなサイズの「法線とデプスを持つテクスチャ(1024*1024)」を用いて
「SSAO影マップ(256*256)」を作りたいのですが、「SSAO影マップ」のサイズが
1024*1024でない場合、ぐちゃぐちゃなテクスチャを読み込んだようになってしまいます。
(たまに他のゲームなどで使われたテクスチャが出ることがあるので、変な所を参照しているようです)

レンダリングターゲットを超えるサイズのテクスチャを使うことは出来ないのかとも思いましたが、
探してもそのような記述は見つかりませんでした。
どなたか分かる方がいらっしゃいましたら、よろしくお願い致します。

133:デフォルトの名無しさん
10/11/07 10:09:14
縮小したことにより遮蔽テストにノイズが混じることはあるけど
全然違うテクスチャを参照してるというならどこか根本的な所でミスがあると思われ
そもそも「他のゲームなどで使われたテクスチャが出ることがある」と何故判断したわけ?
深度マップが正常に書き出されてるのは確認してるんだよね?

134:デフォルトの名無しさん
10/11/07 10:13:18
>>132
MipMapが有効になってるとか?

135:132
10/11/07 15:43:28
ご返信ありがとうございます!

>>133
深度マップは正常に書き出されていました。
他のゲームで使われた~~~というのは、その少し前に起動していた
他の市販のゲームのテクスチャが見えたからです。

>>134
よく分かりませんが、特にそのような指定はしていないと思います。
nVidiaコントロールパネルのmipmaを強制するは「なし」ですし、
サンプラの設定のMinfilterなどの部分は色々いじってみましたが、変わりませんでした。

136:デフォルトの名無しさん
10/11/07 15:48:02
>>135
深度マップ用のテクスチャをCreateTextureするときに
引数でMipレベルを0を指定してるから自動でMipMapが作られてるんじゃない?
縮小してるので作っただけで何も書き込まれてないミップレベルの領域が参照されてるのだと思われ

137:132
10/11/07 16:42:20
>>136
言われた通り、CreateTextureでMipレベルを1にしてみたら正常になりました!
ずっと悩んでいたので、本当に助かりました。ありがとうございました。

138:デフォルトの名無しさん
10/11/07 16:46:48
お礼は>>134に言ってくれ
俺はそれをみて「あぁ、これだな」と思っただけだ

139:デフォルトの名無しさん
10/11/08 00:29:01
この処理をこう纏めたら、呼び出すのは楽なんだけど、
パフォーマンス的にはちょっと無駄がある、

という状況はありふれていますよね?
こういう場合たとえば10000回読んで時間計測して、
これくらいなら許容範囲か・・・もしくはこれはまずいな・・・
という感じで決めていくしかありませんか?

140:デフォルトの名無しさん
10/11/08 00:38:15
なんて答えたらいいのか全っ然わかんねえ

141:デフォルトの名無しさん
10/11/08 07:09:04
>>139
ターゲットPC(もしくはハード)を決めてそのPCで動くかどうかのみ

10000回の計測とか同じ処理を何度も繰り返すのは
キャッシュのヒット率100%なのでなんの参考にもならない

142:デフォルトの名無しさん
10/11/08 10:34:36
>>141
あ、そうか・・・それもそうですよね
ありがとうございます

143:デフォルトの名無しさん
10/11/08 14:40:30
プロポーショナルフォントを高速に描画するにはどうしたら良いですか?


144:デフォルトの名無しさん
10/11/08 14:43:56
DirectWrite

145:デフォルトの名無しさん
10/11/08 16:47:49
あの、あまり環境に依存しないほうほうがよいです、、、

146:デフォルトの名無しさん
10/11/08 16:49:41
GDI

147:デフォルトの名無しさん
10/11/08 16:56:38
>>143
プロポーショナルフォントって指定してるってことは
等幅フォントではもう既にできてるんだよね?
あとは文字ピッチを1文字ごとに変えるだけじゃん

148:デフォルトの名無しさん
10/11/08 20:43:50
August 2007のSDKでXAudio2を使おうとするとエラー落ちするバイナリができあがる。
IXAudio2::Initializeの引数の数がヘッダとDLLで食い違うため。
----- ここまでチラシの裏

何故IXAudio2VoiceってIUnknown派生じゃないんでしょ?
CComPtrが使えなくて悲しい・・・

149:デフォルトの名無しさん
10/11/08 23:19:58
unique_ptrとかにカスタムデリータでいいんでない

150:デフォルトの名無しさん
10/11/10 15:49:01
>>143

Direct3D11にフォント描画機能がなくて実装中
必要な文字だけテクスチャに焼いて使うしかないんじゃね?

151:デフォルトの名無しさん
10/11/10 17:21:17
テクスチャに焼く作業文字変更する時焼きなおさないとだからマジめんどい

152:150
10/11/10 17:39:32
一度使った文字を自動的に部品として追加していくと楽
2014x2048のR8G8B8A8テクスチャに16x16の文字を焼くとしたら1枚にwide charの全文字が収まるからアクセスも超早くなる予定

フォントスタイルを変えたらもう一枚必要だけど

153:デフォルトの名無しさん
10/11/10 18:46:23
DirectSoundなんだけど、プライマリバッファのSetVolume()を使うと
ボリュームコントロールのWAVが動くんですよ
これってつまり、全部の音の音量を増減をしようと思ったら全セカンドバッファ
を一度に変更しないといけないってことですかね

154:デフォルトの名無しさん
10/11/10 22:51:45
>>153
プライマリバッファのボリューム弄ればいいじゃん
セカンダリのって個々の音のフェードインとかアウトで弄るから
あんまちょっかい出さねーほうがいいだろそうでもない?

155:デフォルトの名無しさん
10/11/11 01:21:08
質問させてください。
DXSDK9サンプルの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を使っている行をコメントアウトするとビルド正常終了。もちろん正しく動作はしません)。


156:155
10/11/11 01:30:58
むっちゃすみません。>>155ですが自己解決しました。

SimpleSampleにおいて、V_RETURN()のマクロが使われている箇所は、必ずその前に
HRESULT hr;
と宣言がなされていました。
つまりV_RETURNを使う箇所は必ず前もってHRESULT hr;を書いておくべしということですね。

てっきりマクロは単体で動き得るものと思い込んでいて、SimpleSample側で
原因を追っていく際にもV_RETURNの宣言(DXUT.h)から上位にしか注目していませんでした。
お騒がせしてすみませんでした。

157:質問です
10/11/11 15:06:32
DirectX9 にて、D3DXCreateFont() して作成した LPD3DXFONT の DrawText() でフォントを表示できているのですが、
DrawText() の戻り値でエラーコードが返されます。
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)

158:>>157
10/11/11 15:09:02
一部、コードが抜けてました…失礼。

RECT rect = { 0, 0, 0, 0 }; // { 0, 0, 200, 50 }等にしても同じ結果でした。

159:デフォルトの名無しさん
10/11/11 15:36:54
>>157
ID3DXFont::DrawTextの戻り値はそもそもHRESULTじゃない

URLリンク(msdn.microsoft.com)
>戻り値
>成功した場合、テキストの高さを論理単位で返します。
>DT_VCENTER または DT_BOTTOM が指定されている場合は、
>描画されたテキストの pRect から (上側から下側まで) のオフセットを返します。
>失敗した場合、戻り値は 0 です。



160:>>157
10/11/11 15:56:17
>>159
うわはぁ… ありがとうございましたorz

161:デフォルトの名無しさん
10/11/11 21:12:45
>>154
音楽はDirectSoundじゃないんで影響受けますからね
効果音再生に使うからフェード処理はやらないんじゃないかな?
まぁとにかくセカンダリ全部変更するようにしますわ。というか質問前する前に作っちゃったしw
レスありがとうございました

162:デフォルトの名無しさん
10/11/12 10:47:04
質問です
世の中にはデスクトップマスコットなるものがあるようでして
そいつがアクティブなウィンドウのタイトルバーのどっかに腰かけるor走りまわるわけです

画面にマスコットが重なると
ゲームがものすごく遅くなるのですがなにか回避策はあるでしょうか?

できれば○○ちゃんといっしょにゲームをやりたいのでマスコットを終了したくないとか寝言を申しております

163:デフォルトの名無しさん
10/11/12 11:04:01
ハイエンドなグラボでSLIとかやってみれば

164:デフォルトの名無しさん
10/11/12 11:10:56
タスクの優先度を下げるとか
てかDirectX関係無い

165:デフォルトの名無しさん
10/11/12 12:01:46
もうしわけありませんでした他所で聞いてみます

166:デフォルトの名無しさん
10/11/12 13:58:48
バックバッファのサイズよりウィンドウのクライアント領域が大きい(小さい)場合、
拡大(縮小)されますが、この処理はどこのどいつが行っているのでしょうか?

1) ウィンドウがやっている
2) DirectXがやっている
3) その他

167:デフォルトの名無しさん
10/11/12 14:16:53
具体的に何のインタフェイスのどのAPIかぐらい書けよ。

168:デフォルトの名無しさん
10/11/12 14:23:45
IDirect3DDevice9::Presentでいんじゃね?

URLリンク(msdn.microsoft.com)
>必要に応じて、引き伸ばし操作を適用して、ソース矩形内のピクセルを
>ターゲット ウィンドウのクライアント領域のデスティネーション矩形に転送します。

ってある

169:デフォルトの名無しさん
10/11/12 14:38:44
>>167
申し訳ありません。Present()の話でした。

>>168
ありがとうございます。

170:デフォルトの名無しさん
10/11/12 15:01:54
>バックバッファのサイズよりウィンドウのクライアント領域が大きい(小さい)場合、
>拡大(縮小)されますが、この処理はどこのどいつが行っているのでしょうか?

そもそもサイズ変更はパラメータ次第なので、「される」わけではないし、
自分でそのように指定して「させている」だけ。

171:デフォルトの名無しさん
10/11/12 15:16:30
>>170
自分の無知を晒しちゃってるぞ

172:デフォルトの名無しさん
10/11/12 15:36:37
IDirect3DDevice9::Presentはサイズを変更したくなければ、
出力サイズを明確に指定すればいいだけの話。

173:デフォルトの名無しさん
10/11/12 16:25:50
>この値は NULL でなければなりません
って多くね?
本当に設定できるのか?

174:デフォルトの名無しさん
10/11/12 16:32:36
すみません
D3DXFONTの設定でフォントの文字間隔(縦、横)はどこで決めるのでしょうか?

175:デフォルトの名無しさん
10/11/12 17:12:49
すみません
やっぱりいいです

176:デフォルトの名無しさん
10/11/12 18:04:39
>>175
他人になりきるの止めてもらえますか?
こういうところで育ちの悪さが出てしまうんですよ

177:デフォルトの名無しさん
10/11/12 18:27:49
>>176
ここでそういう観念が役に立たないのには気づかないのか。
郷に入らばなんだっけ?

178:デフォルトの名無しさん
10/11/12 18:35:53
成りすましが嫌ならトリップ使えばいいじゃない

179:デフォルトの名無しさん
10/11/12 18:54:08
>>175-176は私(>>174)ではないです
まだ>>174は解決していません
よろしくお願いします

180:デフォルトの名無しさん
10/11/12 18:55:28
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
馬鹿の方が多いって、世も末だよな。

181:デフォルトの名無しさん
10/11/12 19:20:49
>>179
ピッチと改行幅は変えられない

182:デフォルトの名無しさん
10/11/12 20:23:28
>>181
そうですか
ありがとうございました
自力でなんとかするしかないのですね

183:デフォルトの名無しさん
10/11/12 20:55:03
一文字ずつ描けばピッチは変えられるぞな

184:デフォルトの名無しさん
10/11/12 22:58:32
9の話。動的なリソースってロストに対応するために常にシステムメモリにバックアップ作っておかなきゃいけないですか?

185:デフォルトの名無しさん
10/11/12 23:07:36
必要なら

186:デフォルトの名無しさん
10/11/12 23:29:32
>>184
毎フレーム作ってるもんに関してはいらないんじゃない?一瞬だし
ロード時に作ったもんは復旧時に読み直せばいらないし
特定の場面でしかできない特殊なもんぐらいしか考えられないのかな?

187:デフォルトの名無しさん
10/11/14 12:13:36
>>185-186
ありがとうございました


188:デフォルトの名無しさん
10/11/14 18:08:57
注視点を中心にカメラを回転させるには
D3DXMatrixLookAtLHのカメラの位置のxとzを
どのようにかえればいいんでしょうか?

189:デフォルトの名無しさん
10/11/14 18:23:10
>>188
こんなん

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;

190:デフォルトの名無しさん
10/11/14 18:40:13
>>189
ありがとうございました

191:デフォルトの名無しさん
10/11/14 21:29:26
Visual Studio 2008を使っていて、ソリューションのビルドをしようとすると

'LPDIRECT3DDEVICE9' : 不明なオーバーライド指定子です

というエラーが出てしまいます。
DirectX SDKもPlatform SDKも落として、ネットで検索したりしながら
実行ファイルもインクルードファイルもライブラリファイルも設定し、
追加の依存ファイルもちゃんと設定しました。

今書いているのは本のサンプルを手打ちで移したもので、
打ち間違いを考慮して該当部分をコピーしたりしたのですが状況が変わりません。
このエラーはどうして出るのでしょうか?

192:デフォルトの名無しさん
10/11/14 21:38:42
>>191
エスパーすると
LPDIRECT3DDEVICE9の行より前に何か問題がある
拡張子が.cになってたり
1行前に;を忘れてたり
どっかが全角になってたり
たぶんDirectX以前の問題だ

193:デフォルトの名無しさん
10/11/14 21:40:58
>>191
そんなの原因考えるの面倒臭ぇからまず動くSDKのプロジェクトを拝借して
それをベースに構築して改めて動くもんと動かないもんを比べてみたらどうよ?

194:デフォルトの名無しさん
10/11/14 21:47:22
>>191
ところで本のサンプル(CDついてる?)はコンパイルして実行できるの?

195:デフォルトの名無しさん
10/11/14 22:09:55
昔はc言語の練習本を一つ一つタイプしてはミスタイプで長い事悩んでたな…

196:191
10/11/14 22:16:51
>>192
ありがとうございます。直前の宣言で ; が抜けてましたorz
で、オーバーライド指定子は無くなりましたが、
LPDIRECT3DDEVICE9 で宣言した変数が「定義されていない識別子です」というエラーで引っかかりました。

>>194
納得いかないくらいすんなりと実行できました。(リンカの設定とか適当なのに)
・・・もっかい打ち直してみる事にします。

197:デフォルトの名無しさん
10/11/14 22:22:22
>>196
ソース何べん打ち直しても設定腐ってたらダメじゃん
とりあえずベースはサンプルソースの奴使えよ

198:デフォルトの名無しさん
10/11/15 17:09:37
サンプルのソースこそ独自ライブラリ使いまくりで腐ってるわwww

199:デフォルトの名無しさん
10/11/15 19:27:11
違うだろ
ベースってのはライブラリじゃなくて
プロジェクトの設定とかそういうのだよ
話わからないくせに横から口出して自爆してんじゃねーよキチガイ

200:デフォルトの名無しさん
10/11/15 19:31:15
「ベース」という単語だけでそんなの察せるとかどんだけエスパーだよ

201:デフォルトの名無しさん
10/11/15 19:32:16
おっと触ってはいけない生物だった

202:デフォルトの名無しさん
10/11/15 19:36:52
>>200
だから流れわからなきゃ口出さなきゃいーのに
誰も頼んでないのに間違えて恥かしい奴だなお前はw

203:デフォルトの名無しさん
10/11/15 19:45:46
すぐに煽って雰囲気悪くするやつ何なの?
よっぽどリアルがさみしいの?の?

204:デフォルトの名無しさん
10/11/15 19:56:03
>>198が馬鹿なのに口出ししなければよかった

205:デフォルトの名無しさん
10/11/16 10:11:38
今からDirectXを本格的に勉強しようと思うのですが、DirectX9とDitrectX11どっちで勉強すればいいのでしょうか?
あるいは、DirectX9をやっておけば11にスムースに移行できますか?

206:デフォルトの名無しさん
10/11/16 10:25:33
>>205
>>26-38

207:デフォルトの名無しさん
10/11/16 10:52:12
なるほど・・・今からやるならDirectX11なんですね
ありがとうございます

208:デフォルトの名無しさん
10/11/16 15:22:06
>>207
シェーダがきつそうだったら9で固定機能で遊んでみるのも
道のひとつかもしれない
それもきつそうだったらDXライブラリとかででも多少慣れるのも
道のひとつかもしれない

209:デフォルトの名無しさん
10/11/16 15:37:11
でも遠回りな道かもしれないぞ
遠回りのなだらかな道と、急勾配の近道だったら、俺なら・・・・・・遠回りでいいや (´∀`)

210:デフォルトの名無しさん
10/11/16 17:26:12
な~に、急勾配の道でだって一休みできるものさ

211:デフォルトの名無しさん
10/11/16 18:30:54
後から来たのに追い越され泣くのが嫌ならさあ歩け

212:デフォルトの名無しさん
10/11/16 20:36:00
買った本がDirectX9にしか対応してなかったでござる・・・
ようやくポリゴンが表示できて喜んでいたのだが、これが無駄になるのか・・・

「DirectX11 3Dプログラミング」ってのでも買うか・・・

213:デフォルトの名無しさん
10/11/16 20:44:08
>>208
DXライブラリではもうローポリ3Dゲームを完成させているので、DirectXを直で触ろうと思って聞きました
……DirextX11の資料がなさすぎて心が折れそうです

214:デフォルトの名無しさん
10/11/16 20:57:33
WindowsXpが半分以上を占めている。
だから
あなたがプログラムを作って、友達が使ってくれますか?

DirectX9を使えばほとんどの人が可能です。
DirectX11の場合はほとんどの人が使えない。

将来がどのようになるかわからないけど、
あまり変化がないとおもうよ


215:デフォルトの名無しさん
10/11/16 21:22:17
>>214
XPが半分以上って、それ企業で使うPCとか含めてるだろ。
そうじゃなくてもPC保有者の大半はゲーマーじゃねぇ。

ゲーマーじゃない奴をゲーム市場に引き込むってんなら大したもんだが、
もともと相手にしてるのはごく一部に過ぎない。

216:デフォルトの名無しさん
10/11/16 23:27:39
しっ構っちゃいけません

217:デフォルトの名無しさん
10/11/17 02:15:20
>>212
まぁ無駄ではないよ
3Dやポリゴンの表示とか基本的な考え方は一緒だ
そこさえわかってればプログラムを書き直すなんて楽だろ

218:デフォルトの名無しさん
10/11/17 02:22:30
COMインターフェースポインタってダウンキャストできるんですか?

219:デフォルトの名無しさん
10/11/17 07:17:44
何のためにクエリーをかけると思っているんだ?

220:デフォルトの名無しさん
10/11/17 15:33:25
>>215
同人ゲーム作ってるけど、購買層の大半がXP。いまだに2000なんて使ってるやつもいる
Vistaや7を買ってPCゲームやっちゃってるぜ!っていう層を狙うなら11でもいいが、それってプロだろう
プロならDirectX11でいい

素人で、ちょっとゲームつくってフリーで公開したり、同人で売ったりと考えてるなら9以外の選択肢は今のところ無い

221:デフォルトの名無しさん
10/11/17 16:01:52
完成予定日が明確ならバージョンも調整しやすいね。
個人で初めてゲーム作るってのなら出来るだけ未来を見据えたほうがいいと思う。
バージョンの違いをサクッと吸収できる実装を作れるなら自由にすればいいと思うけど。

222:デフォルトの名無しさん
10/11/17 20:14:55
DirectX10, 11は空振り。

で、評判が悪いのでMSもDirectX12では9の仕様に戻すんじゃないの?

223:デフォルトの名無しさん
10/11/17 21:01:59
ゲームユーザーから見ても、DirectX11で導入されたテッセレーションもいまいち効果分からんしな。


224:デフォルトの名無しさん
10/11/17 21:24:51
DirectX9の3Dプログラミングについてですが、
かなり初歩的な事からの考え方の解説をしているサイトや参考書はありませんか?
>>2の解説ですら4x4の行列の所で詰まりました、どこでこれを使っているのかすら・・、2Dは画像の表示、貼り付け、移動処理など出来ますが・・

DirectXが用意してくれている関数に頼りすぎていて、3Dモデルを表示はできたのですが、全く仕組みが分かりません
(必要な関数をつなぎ合わせた感じです)


225:デフォルトの名無しさん
10/11/17 21:45:08
DirectX12は未だ影も形も見えて来ないので、
DirectX9時代の次は恐らくDirectX11時代が長く続く
DirectXは奇数世代の寿命が長い

>>224
MSDN

226:デフォルトの名無しさん
10/11/17 22:18:14
>>224
msdnもいいが、
大型書店でもいって立ち読みをして、
自分と相性のよさそうな本を探したほうがいいかも
もしC++があやしいくらいに初心者ならそっちを片付けるべきだ

227:デフォルトの名無しさん
10/11/17 22:24:37
同次座標系という概念を含めることでテクスチャが歪まず張られる、
というのをちらほら聞くのですが、これはどういう仕組みですか?

228:デフォルトの名無しさん
10/11/17 22:43:30
まずはどこでそんな情報をちらほら聞いたのかを明確にしろ

229:デフォルトの名無しさん
10/11/17 22:57:14
テクスチャが歪まず貼られるといったらパースペクティブコレクトだな
DirectXでフラグをONにするときに名前は見るけど原理は俺もまったく知らんがな

230:デフォルトの名無しさん
10/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'がいい感じになって正しいパースで貼れる

231:デフォルトの名無しさん
10/11/17 23:09:50
>>230
>テクスチャ座標を4要素で扱うんだ
ここからすでにわかんね
テクスチャ座標はuは横でvが縦ってところが俺の限界だ

232:デフォルトの名無しさん
10/11/17 23:18:54
ヒント:
3次元テクスチャの座標は3次元
x, y, z, w の w

233:デフォルトの名無しさん
10/11/17 23:31:22
久しぶりにプログラミングをしようと思ったら
d3dx9d_43.dllが見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。

というエラーが出ます
ビルドはできてるのですが、デバッグで開始をしようとするとエラーが出ます。どうしたら良いでしょうか?

234:デフォルトの名無しさん
10/11/17 23:43:48
クリーンしたらできました
ほんとうにありがとうごいました

235:デフォルトの名無しさん
10/11/18 03:32:56
SDKをインストールしたりして最新版のをアンインストールしたからだと思うのですが
xファイルの関連付けか無くなってたので、関連付けようしようとしてDxViewerを使おうとすると
MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした
と出ます
DxViewerのソリューションをクリーンしてビルドしてもさっきみたいに治りません。
どうすれば良いでしょうか?

236:デフォルトの名無しさん
10/11/18 04:04:25
VisualC++2008ランタイムをインストールする

237:デフォルトの名無しさん
10/11/18 04:25:08
>>236
URLリンク(www.microsoft.com)
ありがとうございます
これをやりましたができませんでした

238:デフォルトの名無しさん
10/11/18 10:46:27
/MTでビルドする

239:デフォルトの名無しさん
10/11/18 10:50:49
>>238
ありがとうございます
それをするとLIBCMT.libと競合して未解決のエラー等がたくさん出ます
というかそもそもビルドせずとも使えてたEXEなのですがどうなってしまったのでしょうか


240:デフォルトの名無しさん
10/11/18 10:55:45
新しくビルドした方のexeにちゃんと関連付けされてないんじゃないの?

241:デフォルトの名無しさん
10/11/18 10:58:10
>>240
いえ、リリースでビルドしてリリースフォルダからDxViewer.exeを起動しても
「MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした」
とエラーが出ます

242:デフォルトの名無しさん
10/11/18 11:31:16
とりあえず開発環境を再インストールしなよ
どっか別のPCのインストールフォルダをそのままコピって使ってるとかじゃないの?

243:227
10/11/18 13:23:49
とりあえず新しく教えていただいた用語でぐぐったところ、
少し理解が深まりました
ありがとうございます

244:デフォルトの名無しさん
10/11/19 10:51:48
XAudio2で同時に複数の音源を再生する、というのが上手くいかないです。

なんどか試しましたが、ノイズだらけの爆音になってしまいます。

XAudioエンジン:マスタリングボイス:ソースボイスを1:1:1で複数個用意して同時に再生した場合は
普通にできるのですが、これだと正規の方法ではない気がします。

XAudio2のサンプルコードは一通り理解はしましたが、このような複数音源の例が無いため
どうすればいいのか分かりません。

ご教示ください。

245:デフォルトの名無しさん
10/11/19 13:27:38
頂点数6000で
三角+四角面が1800なら
1800ポリゴンのローポリですよね?


246:デフォルトの名無しさん
10/11/19 13:28:34
DirectXに四角面は無いです

247:デフォルトの名無しさん
10/11/19 13:30:35
まーたはじまった

248:デフォルトの名無しさん
10/11/19 13:47:48
ゲームについてなんですが、セガサターンエミュのSSFが起動前に落ちてしまいます。
インストールしたストリートファイター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)

249:デフォルトの名無しさん
10/11/19 14:11:50
>>248
何かこう板の名前を見ずに質問する輩が多いな
スレチどころか板違いだ
ここはDirectX"プログラミング"質問スレ

250:227
10/11/19 14:41:21
>>244
普通にマスタリングボイス1、ソースボイス2で出来るはず
めちゃくちゃな音が出るってことは
フォーマットデータとか不正なメモリ書き込みでデータが壊れてるんじゃないか?

251:250
10/11/19 14:48:50
名前ミスでござる

252:248
10/11/19 14:58:23
>>249
プログラミングスレだったんですか!
失礼しました。

253:デフォルトの名無しさん
10/11/19 15:36:50
インデックスちゃんっていらない子なの?

254:デフォルトの名無しさん
10/11/19 16:09:50
LOD使いたい場合は自分でシェーダー書くしかないですか?

255:デフォルトの名無しさん
10/11/19 16:46:01
>>248
サターンなんか1000円で売ってるよ

256:デフォルトの名無しさん
10/11/19 17:06:10
>>250
1個だと普通に鳴るのですが、
全く同じソースボイスの作り方で2個同時だと鳴らないのです。

257:デフォルトの名無しさん
10/11/19 17:25:56
>>256
言語は何だろ?
.NETでGC働いてリリースされてるとかないよね。

258:デフォルトの名無しさん
10/11/19 21:35:39
>>256
2つの入力のサンプルレートが違うんじゃない?

259:デフォルトの名無しさん
10/11/19 23:03:03
DirectXSDKってkinnectに対応していますか?

260:デフォルトの名無しさん
10/11/19 23:11:30
>>254
プログレッシブメッシュ

261:デフォルトの名無しさん
10/11/19 23:14:36
>>259
してないんじゃない。
KinectはKinect SDKが別で出るでしょ。多分。

262:デフォルトの名無しさん
10/11/19 23:17:03
>>259
kinnectはXBOXが主だから、XNAが先でしょ

263:デフォルトの名無しさん
10/11/19 23:32:29
現在DirectX11を勉強しようと思っています。
DirectX11関連本を探したところ、「ちょっとだけDirectX11」「DirectX11 3Dプログラミング」の2つくらいしか出てないみたいなのですが、
これらの本の評価はどんな感じなんでしょうか?

264:デフォルトの名無しさん
10/11/20 00:06:52
>>963
洋書が読めないのなら、DirectX9にしとけ

265:デフォルトの名無しさん
10/11/20 05:17:14
>>263
後者持ってるけど、全くのゼロからだと厳しいかもしれない。
もしDX9を勉強してないならそちらからやった方がいいかもしれない。

266:デフォルトの名無しさん
10/11/20 05:32:48
とりあえずネット上で解説しているサイトを見ていけそうだったらそのまま11で行って
無理そうだったら9へいけば
9より解説しているサイトは少ないがそれでもなんこか11の解説サイトあったから(携帯なのでアドレスまでは面倒なので載せないが)


267:デフォルトの名無しさん
10/11/20 13:12:05
URLリンク(ichigo-up.com)
そこまで物体との距離は近くないように感じるのですが
カメラに近づくとこんな感じになってしまいます。なぜでしょうか?
DXUTを使ってます。

268:デフォルトの名無しさん
10/11/20 13:22:45
>>267
D3DXMatrixPerspectiveFovLHの第4引数で、カメラの写る範囲を指定できるんだよ
>>268
ありがとうございました

269:デフォルトの名無しさん
10/11/21 10:19:26
>>267>>268は自演なのか?
で、お礼のレスを誤爆して268に書いちまったとw

270:デフォルトの名無しさん
10/11/21 10:32:51
自己解決です

271:デフォルトの名無しさん
10/11/21 11:03:34
こんにちは。
業務アプリでちょっとした3Dデータを描画することになりました。
(ちょっとしたと言いましたがDirect3Dは初めてなので大変ですが)

Direct3D10のサンプルを見ながらなんとか3Dデータは描画することは
できました。さらにラインストリップで全体を四角で囲みたいのですが、
そのときに奥の角も3Dデータに隠れないようにとのことで、処理としては
Zを無視して描画ができるようなことは分かったのですが、実際にZを
無視して描画するためにどのような設定をすればよろしいのでしょうか。


272:デフォルトの名無しさん
10/11/21 11:24:30
>>269
さすがに>>258辺りに言うつもりだったのを番号間違えただけだと思うがw

273:デフォルトの名無しさん
10/11/21 13:48:56
3Dモデルを中心にカメラを移動させたいのですが、
右周りさせた場合カメラの位置をx、y、zにどのような値を加算すれば
360度(一周)した時に元の位置に戻ってくることが出来るのでしょうか

274:デフォルトの名無しさん
10/11/21 14:01:12
>>273
最初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θ

θを適当に増やすと回転する
三角関数が分からなければ
URLリンク(www.nicovideo.jp)
が面白かった


275:デフォルトの名無しさん
10/11/21 14:10:35
>>271
深度テストを無効にする。
URLリンク(msdn.microsoft.com)(VS.85).aspx

シェーダ側で設定してもOK

276:デフォルトの名無しさん
10/11/21 14:23:21
>>275
271ではないですけど、
シェーダー内からの設定はどうすればいいんですか?


277:デフォルトの名無しさん
10/11/21 14:23:45
カメラを回したいときは
どうせ横だけじゃなくて縦にも回そうとしたときに詰むんだから
カメラの初期姿勢を行列で拡縮・回転・移動すれば楽だと思うの
視点を変えたい場合でも初期姿勢を入れ替えるだけでイイしね

278:デフォルトの名無しさん
10/11/21 14:49:50
>>276
パス内に記載する。
例えばこんな感じ。

pass Pass1
{
  VertexShader = compile vs_1_1 vertexshader();
  PixelShader = compile ps_2_0 pixelshader();

  ZEnable= True;
  AlphaBlendEnable = True;
  CullMode = CCW;
}

279:デフォルトの名無しさん
10/11/21 15:29:35
>>278
ありがとうございます
こういう書き方できたんですね!

280:デフォルトの名無しさん
10/11/21 15:57:52
>>277
>>273じゃないけどkwsk

281:デフォルトの名無しさん
10/11/21 17:06:33
>>280
ほい、これでカメラ回したい放題
最低限のことしか書いてないから後は使いやすいようにカスタマイズすればいいと思うよ

URLリンク(codepad.org)

282:デフォルトの名無しさん
10/11/21 18:32:58
>>273
ローカル座標とワールド座標を理解して
ローカル座標Aにあるものをローカル座標Bに、
ワールド座標Bにあるものをローカル座標Aに自由に移動できるようになれ

そうすれば
ワールド座標-3Dモデル座標-ゲタ(横用)座標A-ゲタ(縦用)座標B-カメラ座標
としてゲタをまわしても楽だぞ

283:デフォルトの名無しさん
10/11/21 23:02:33
>>275
>>278
271です。
シェーダー側でもできるんですね。
ありがとうございます。大変参考になりました。



284:デフォルトの名無しさん
10/11/22 11:13:01
あるモデルを、指定した座標(pointdata.pos)に向ける処理でつまづいています。
なにが問題なのか、原因がわかる方はお教えください 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)を描画に使用してもうまくいかない。

285:284
10/11/22 11:14:52
// !↓以下は、Draw()関数を書き換えずに、角度だけを求めてモデルに渡すための追記述

// クォータニオンから回転行列を求める
D3DXMatrixRotationQuaternion(&rot_mat,&ans_q);
// 回転行列からオイラー角を求める(URLリンク(marupeke296.com)参照)
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));

286:デフォルトの名無しさん
10/11/22 11:23:59
ゲームパッド入力はどのAPIを使うべきでしょうか?
DirectInputはサポートしなくなったしXInputは専用ゲームパッドしか動かないみたいだし

287:デフォルトの名無しさん
10/11/22 11:25:35
XInputってキーボード・マウスは動かないのか
これからどうやっていけばいいんだろ?

288:デフォルトの名無しさん
10/11/22 11:34:55
特殊な入力方法を使わないならWin32APIで十分

289:デフォルトの名無しさん
10/11/22 12:10:32
あるモデルAの行列 a_mat が、あるモデルBの行列 b_mat にたいして、
左にあるか(a_mat._41 < 0)、右にあるか(a_mat._41 >= 0)、の判定は、
どのようにしておこなえますか?

290:デフォルトの名無しさん
10/11/22 12:15:46
DirectInputってもう使えないの?それとも使えるけど、バグがあっても修正しないよってだけ?

291:289
10/11/22 12:18:53
質問内容が微妙でしたので、書き換えます。
あるモデルAの行列を原点としたときの、ある行列Bの位置づけは、どのようにしたら取得できますか?
行列Aと行列Bは等しいワールドに置かれているものとします。

292:デフォルトの名無しさん
10/11/22 12:26:52
行列の位置という言葉の意味がよくわからんが
vをゼロベクトルとして v*B - v*A とか?

293:292
10/11/22 12:29:43
分かると思うけどvは全部ゼロじゃなくて(0,0,0,1)ね

294:デフォルトの名無しさん
10/11/22 12:39:15
>>290
DirectInputとかDirectSoundってDirectx8でしょ?
今売ってるGPUとかはDirectx8~11ってのが多いから、これがDirectx9~ってなったらGPUとかOSでも認識しなくなるんじゃない?

295:デフォルトの名無しさん
10/11/22 12:43:20
>>284
angle_velとか意味不明な変数が出て来てるからよくわからんが
D3DXQuaternionSlerpの使い方が良くない気がする
これはnow_q→eye_qを0→1.0で変化させるものなので
毎フレーム動かすのはq_velだけでnow_qとeye_qは移動し始めのものを使わないと固定量移動にはならない

この方法毎フレーム計算するなら
now_vecとeye_vecの法線を外積で求めてそいつを回転軸にして
D3DXQuaternionRotationAxisでnow_vecを固定角度回転させたほうがいい気がする

296:デフォルトの名無しさん
10/11/22 12:54:01
>>291
Aの逆行列にBをかければよいのでは

297:デフォルトの名無しさん
10/11/23 10:20:50
ステージを作ろうと思ってフリー素材のお城を取ってきたんですけど10万ポリゴンぐらいあって読み込むだけで2分ぐらい掛かります
ゲームの街のポリゴン数ってもっと少ないですか?
それとも分割して表示するとかで一お城のポリゴン数自体はこんなものなのでしょうか?
お城はこれですURLリンク(sketchup.google.com)

298:デフォルトの名無しさん
10/11/23 10:46:20
directX9で作ってるんですがdirect MusicよりXAudio2を使った方がいいんですか?

299:デフォルトの名無しさん
10/11/23 10:47:45
マップのポリゴン数で10万ポリゴンくらいは普通です。
影響するのがメモリサイズであって、ティクスチャに大きく影響されるでしょう。
.jpgを使うと極端に遅くなるかもしれない。
そのまま使う事はほとんど無く、
ゲームエンジンに合わせて最適化するだろうし、構造を変えるかもしれない。
また、ターゲットPCを基準にして大きすぎるか小さいかの判断がされる。

ティクスチャ無しで読み込んで どの程度なのか確認するのもひとつの方法。


300:デフォルトの名無しさん
10/11/23 10:48:56
>>298
DirectSound使ってますぅ
動かないPCは死ねですぅ

301:デフォルトの名無しさん
10/11/23 10:50:57
>>299
ありがとうございます
やってみます

302:298
10/11/23 11:08:41
XAudio2ってMIDI再生できないのか
使う意味なかった

303:デフォルトの名無しさん
10/11/23 11:30:47
>>299
やってみました。
全部jpgだったのでマテリアルからテクスチャの項を消してやりました。
若干早くなった気もしますが2分ぐらい掛かりました。拡張子は何でするのが良いのでしょうか?

ということでまず何をすれば良いのでしょうか?
URLリンク(www.nicovideo.jp)
昔たまたま見つけたこれが印象的なのですがどうでしょうか?

304:デフォルトの名無しさん
10/11/23 11:44:47
ポリゴンのファイル形式が何であって
ゲームエンジンの要求するファイル形式があるはず

相性があるから、調べてみ
ティクスチャにjpgを使わない。DDSかTGA

2分くらいなら遅くないと思いますが、メモリ消費の方が心配。

305:デフォルトの名無しさん
10/11/23 11:45:05
既存のコードはともかく、今更新規でDirectMusicはないな

306:デフォルトの名無しさん
10/11/23 12:13:24
>>304
ありがとうございます
ポリゴンのファイル形式はxファイルでゲームエンジンはbulletで、要求する形式はわかりませんが普通に他のはxファイルでやってます
2分で遅くないのですか…つまりどのみちファイルを読み込む処理は絶対に必要だからファイルのサイズに比例する。早くしたいならポリゴンを減らすしかないみたいな感じですか?>>303の処理は読み込んだ後動かしてる時のメモリを減らす処理ということですね
それと、メモリはタスクマネージャーで見ると、お城があるときは152308Kで、コメントアウトすると67000kでした

307:デフォルトの名無しさん
10/11/23 12:35:40
>>306
2分が遅くないってことはないでしょう・・・少なくともゲームだと遅いと思いますよ。
あなたのPCスペックがわからないので、一概には早い遅いと言えないですが。

また、巨大なマップでもドカっと読み込むのではなく、エリアごとに分割しておいて最初に必要な
場所だけロードし、他の処理中に読み込むとかいう方法もあります。
物体が小さいのに、ポリゴン数が多いモデルデータはそもそもゲーム向けではない気もしますし。

308:デフォルトの名無しさん
10/11/23 12:42:20
もしX-Fileがテキスト形式だったらぶっ殺しものだが、まさかそんなことはないよな。

309:デフォルトの名無しさん
10/11/23 12:49:24
>>307
ありがとうございます
>>308
はい。
バイナリでやってみます

310:デフォルトの名無しさん
10/11/23 12:51:53
>>306
うーん、それじゃあね
そのXファイル3DデータをアップローダーででもUPしてくれれば、調べる。
これ以上は具体的に最適化を考えないと 答えにならない。

読み込みが遅くとも、最初の1回だけだから大きい問題ではない。


311:デフォルトの名無しさん
10/11/23 13:00:06
エンジンが別スレッドで裏読みしてるのを完了復帰で待っているオチとか

312:デフォルトの名無しさん
10/11/23 13:03:21

イナリにする方法がわかりません教えてください

313:デフォルトの名無しさん
10/11/23 13:04:04
ホントにロードだけで時間食ってるのかが怪しいところでもあるよね。
とりあえず>>310

314:デフォルトの名無しさん
10/11/23 13:09:16
Xファイルがあまり速くない、バイナリにしても変化無いよ
大きいマップなんかは5分くらい待たせるから、2分だと速い方


315:デフォルトの名無しさん
10/11/23 13:22:18
URLリンク(www1.axfc.net)
とりあえずこれです
URLリンク(marupeke296.com)バイナリ変換ツールのソースを見つけましたが組み立てるのが面倒臭いので誰か下さい

316:デフォルトの名無しさん
10/11/23 13:33:36
DirectXビュワで20秒で開けるよ
Core2Duo3GHz
GeForce9600

317:デフォルトの名無しさん
10/11/23 13:36:50
コード書くの面倒だから俺もDirectXViewerで開いた。

15秒で開けた@C2D Q9550/RAM4GB/9800GT

318:デフォルトの名無しさん
10/11/23 13:44:35
そういえば自分もDxビューワだと15秒ぐらいで開けます
でもプログラム中で開いたら、普段は5秒ぐらいで窓が開くのに
お城があると2分はかかります。もしかしてそっちのミスでしょうか


319:デフォルトの名無しさん
10/11/23 13:50:08
バイナリと言っていたのにテキストじゃないか。
遅いのは当たり前、死ねよ。

320:デフォルトの名無しさん
10/11/23 13:50:32
むしろ何でxファイルに変換したのか知りたい

321:デフォルトの名無しさん
10/11/23 13:54:12
ビューワもDirectXプログラムだから内部でオブジェクトを置いてカメラをセットして・・・ってやってる
同じような時間で開けないなら何かしら理由があるはず

322:デフォルトの名無しさん
10/11/23 13:54:14
もうとりあえずソース晒しちゃえよ

323:デフォルトの名無しさん
10/11/23 13:57:05
>>319
すいません。バイナリとは言ってません。はい(その通り、テキスト形式でした)。バイナリでやってみます。というニュアンスでした。
>>320
他に何か良いのがあったら教えてください。

それから虎のに入れたら3分ぐらい掛かりました
今、一生懸命バイナリツールを組みた立てますが、クリエイトデバイスとかで未解決のエラーが一杯出て全然できません。誰か下さい。

324:デフォルトの名無しさん
10/11/23 14:00:35
プログラムに問題がありそうなのにバイナリにしようとするのは筋違い。
仕事増やすだけで根本的な解決をしようとしてない。

325:デフォルトの名無しさん
10/11/23 14:01:32
虎のってなんだ。エスパーしてtiger.xか。
それで3分とか異常だろ、バイナリ/テキストどうのこうの言うレベルじゃない。

あとやる気が感じられない。面倒くさいだの誰か下さいだの。死ねよ

326:デフォルトの名無しさん
10/11/23 14:06:25
使用しているエクスポータでバイナリを吐けばいいだけの話。
何で変換が必要なのか意味不明。

327:デフォルトの名無しさん
10/11/23 14:14:58
>>321
>>324
ありがとうございます。エスパーしてください。どうしてでしょうか。
>>325
そうです。チュートリアル6のタイガーにそのまま入れたところ2分ぐらい掛かりました。
それから今必死にバイナリのプロジェクトを作ってるのです。しかしプログラム経験自体浅いのでなかなかできないのです。
サンプルのエンプティープロジェクトに組み込もうと思ったのですが
ImeUi.obj : error LNK2019: 未解決の外部シンボル _ImmSetConversionStatus@12 が関数 "long __cdecl ImeUi_ProcessMessage(s
こんなエラーが20個ぐらい出てます。プロパティで追加の依存ファイルの設定と、ユニコード文字の設定としたのですが他に何かしないといけませんでしたっけ?
>>326
バイナリで出力する設定がありません。


328:デフォルトの名無しさん
10/11/23 14:34:45
バイナリ変換ツールコンパイルできました
URLリンク(www1.axfc.net)
虎に入れたのと一緒に入れときます
やはり2分はかかります。何かおかしいのでしょうか?

329:デフォルトの名無しさん
10/11/23 15:00:27
D3DXのヘルパーでロードしてくるのがクソ遅いのは判ったけど・・・
さすがにコレは繋がった1つのマップとしてはポリゴン数多すぎ(118019ポリ)。
そもそもゲーム考慮してつくってないんだろうしこのモデル。
XSIで開いてみたけど開くのもクソ時間かかった。

早くしたければ
1:どうしてもこのMAP使いたければ自分でポリゴン削るか適当に分割する。
2:独自形式つくって変換して自分でローダー作って速度比べる
3:諦めろ

ところでなんでこのオブジェクト、デフォ姿勢が垂直に突き刺さってんの?

330:デフォルトの名無しさん
10/11/23 15:23:33
この3Dデータ、壊れてる感じがする。
変換するときに狂ったのかな
何を使ってデータ変換したの?

変なXファイルだ、動くから間違いではない。
独自形式ならば一瞬で読み込める。

331:デフォルトの名無しさん
10/11/23 15:42:28
デバッグビルドで動かしてるとかw
リンクするLIBがリリース版なのと、自分のプロジェクトの設定がデバッグ情報無しになってるよね?

332:デフォルトの名無しさん
10/11/23 16:27:57
>>329
わかりました。ありがとうございます。デフォ姿勢は適当に出力したからです
>>330
壊れてるかはわかりませんが、ちょっと変なところに飛んでるのはただの消し忘れです。
モデリングツールはBlenderです
>>331
すいません。理解できません。具体的にどうすれば良いのでしょうか?

333:デフォルトの名無しさん
10/11/23 16:55:25
>>331
デバッグ無しで開始にしたらとても早くできました
ありがとうございました
>>329
>>330
素人乙wwwwwwwwwwwwww

334:デフォルトの名無しさん
10/11/23 17:03:44
二度と来なくていいぞクズ

335:デフォルトの名無しさん
10/11/23 17:08:46
>>333
それが協力しようとしてくれた人に対する態度か。
お前もド素人だろ(笑)

336:デフォルトの名無しさん
10/11/23 17:08:47
BlenderのXファイルは腐ってるさ

337:デフォルトの名無しさん
10/11/23 17:12:18
挨拶すらできない奴は登校拒否の中学生と相場が決まっている。相手にするな

338:デフォルトの名無しさん
10/11/23 17:20:47
PC質問版ってやたら>>337みたいな奴いるよな
全角がダメだの、挨拶がどうだの

ITドカタは先輩に土下座して情報教えてもらうのかもしれんが、今時PCなんて趣味レベルなのに俺らの常識がPC界の常識(キッ
みたいにイキりたっててうざい。肩のPawer抜けよ

339:デフォルトの名無しさん
10/11/23 17:24:44
(キッ ってなに?w
Pawer?wwwww

釣り針でけぇから食いついちゃうけど、
お前みたいなやつの、教えてもらって当然みたいな考えがウザイんだよ。

340:331
10/11/23 18:37:09
まあ、自分のDXViewerで早く開けてるのに、
同じような自前プログラムで、開けるけど遅いって言えば、
デバッグ実行してるから?って思っただけなんだけど…

これは玄人だから素人だからは関係ない
どっちかって言うとエスパー力かな、と思うw

因みにエスパー伊藤と江頭2:50が好きな芸人

お前ら肩の力を抜け、333が本人とも限らないだろう、
30分ほど前の一つ前のレスでデバッグビルドを理解出来ないと言ってるし
まあ、それだと解決してないことにもなるけどw

341:デフォルトの名無しさん
10/11/23 19:06:00
真ん中に明らかに必要ない情報があるな

342:デフォルトの名無しさん
10/11/23 19:26:40
いや 333 が本人のわけないだろ…

343:デフォルトの名無しさん
10/11/23 21:45:43
zバッファの計算を練習していたのですが、
ニアクリップ2、
ファークリップ1000の時、

ビュー空間でのZが
たった30で、すでにZバッファに入る値が0.94
120でもうZバッファは0.99
になってしまいます

偏りが出ることは聞いたことがあったのですが、
Zバッファって実際こんなに偏りがあるものですか?

グラフにしたものは
URLリンク(up3.viploader.net)
です


344:デフォルトの名無しさん
10/11/23 21:50:41
そんなもんです
ニアクリップの2倍近辺で0.5

345:デフォルトの名無しさん
10/11/23 21:52:07
>>344
あまりの衝撃に開いた口がふさがりません

346:デフォルトの名無しさん
10/11/23 21:56:57
>>344
ありがとうございました
口が開いたままでお礼を忘れてました

347:デフォルトの名無しさん
10/11/23 22:10:18
URLリンク(msdn.microsoft.com)


>近くの平面の距離に対する遠くの平面の距離の比率を 100% とした場合、
>深度バッファ範囲の 90% がシーンの深度範囲の最初の 10% に費やされる。
>娯楽や風景のシミュレーション用の典型的なアプリケーションでは、比率 (遠くの平面 / 近くの平面) がどこでも 1000 から 10000 の間である必要がある。
>比率が 1000 の場合、深度バッファ範囲の 98% が深度範囲の最初の 2% に費やされ、比率が高くなるにつれて分布状態が悪くなる。

348:デフォルトの名無しさん
10/11/24 00:05:20
なんだ、またあいつが出没したのか。

349:デフォルトの名無しさん
10/11/24 07:03:33
モーションデータっていうのは、
全部自分の手で座標などを打って実現するものなのでしょうか?

関数一つで便利に扱えたりするものではないのでしょうか?

350:デフォルトの名無しさん
10/11/24 07:16:40
普通はモデリングツールでやる。

351:デフォルトの名無しさん
10/11/24 08:31:14
>>349
モデリングツールでモーション作って、出力したファイルから必要なデータを読み込んで計算する。
言ってるモーションっていうのは恐らくスキンメッシュアニメーションのことだと思うけど、
その場合はボーンデータ(頂点を動かすための行列)を使って、その行列の動きが適応される
部分の頂点を変換(拡大・回転・移動)する。

って書いたとこでそれDirectX関係ないよねってことに気づいた

352:デフォルトの名無しさん
10/11/24 12:38:06
別にいいんでね

353:デフォルトの名無しさん
10/11/24 12:47:01
ツールで作ったボーン・スキンのウェイトってそのままXで反映される?

354:デフォルトの名無しさん
10/11/24 12:53:22
それDirectX関係ないよね

355:デフォルトの名無しさん
10/11/24 13:09:13
反映されるかどうかはエクスポータがどうなっているか次第
そもそも何を使っているかも書かずに情報が得られると思っているんだろうか?

356:デフォルトの名無しさん
10/11/24 13:10:09
blender

357:デフォルトの名無しさん
10/11/24 13:13:49
どのツールかというより
Xファイルにウェイトの情報はあるのかとか

358:デフォルトの名無しさん
10/11/24 13:24:59
いつもの荒しか?

359:デフォルトの名無しさん
10/11/24 13:42:36
blenderなんてスクリプトかんたんに組めるんだし自前のエクスポーター作っちゃえYO!

360:デフォルトの名無しさん
10/11/24 13:43:48
Xファイルはもう推奨されてないしなぁ。。。

361:デフォルトの名無しさん
10/11/24 13:44:38
じゃあ何が推奨されてるんですか?

362:デフォルトの名無しさん
10/11/24 14:31:29
最終的にはビデオメモリに直接転送して使えるバイナリデータが最強だと思う

363:デフォルトの名無しさん
10/11/24 14:38:02
ファイルって全部.exeの中に入れてしまいたいんだけど
どうやればいいの?

364:デフォルトの名無しさん
10/11/24 15:12:30
ウン百MもあるようなEXEファイルを実行したくはないけどな…

リソースとして取り込むか
ファイルなんて基本ただのバイナリ列なんだから
ファイルをヘッダーにコンバートするツールでも作ってincludeしとけばいいんじゃね?

365:デフォルトの名無しさん
10/11/24 17:44:17
どうやって?

366:デフォルトの名無しさん
10/11/24 17:48:03
とりあえずXファイル使いたいなら
メタセコに5000円払うとプラグインにkeynoteってのがあってそれが使える
複数アニメーションも対応してるしとりあえず不満はない感じ

メタセコ+rokdeboneって組み合わせもいい
こっちはタダ

367:デフォルトの名無しさん
10/11/24 19:37:55
DirectXってXファイル以外の形式になにか対応してたっけ?

368:デフォルトの名無しさん
10/11/24 19:50:54
>>367
用意された関数でロードって意味ではXファイルだけ
自分でロードしたらなんでもいけるんちゃう?

369:デフォルトの名無しさん
10/11/24 20:29:35
>>365
それぐらい自分でいろいろ考えようや

10分くらいで書いた超適当コンバート
独自形式とかではなく、ただバイナリ列にしてるだけ、汎用性はあまり考えてないよ!
URLリンク(codepad.org)
出来上がったexeに変換したいファイルをドロップすると
それぞれのファイルに対応したヘッダーと
そのフォルダ内にあるデータ用ヘッダーを全て統括するfile.hが出来上がる
それらを全部使用先にコピペしてfile.hをインクルードすると元ファイル名からデータを検索できる

コレをつかって虎のチュートリアル
URLリンク(www5b.biglobe.ne.jp)
EXEだけで動くはず?

370:デフォルトの名無しさん
10/11/24 20:37:37
3Dツールを自前で作る猛者はおらんのか、最近のジャップは。

371:デフォルトの名無しさん
10/11/24 21:12:51
市販のモデリングソフトに自前のエクスポータという組み合わせが一番効率がいい。

372:デフォルトの名無しさん
10/11/24 22:00:17
>>369
ワンダーウィッチみたいだな

373:デフォルトの名無しさん
10/11/24 22:06:39
しかしそこまでしてExeに含める意味はあるのかと
まぁ、ある種の隠蔽にはなるかもしれんが

374:デフォルトの名無しさん
10/11/24 22:24:26
exe が極端にでかいと、セキュリティソフトのチェックが長引いて起動に時間がかかることがある
UAC が絡むとやばいことになる
しかも XP で開発してると気づかないからめんどい

375:デフォルトの名無しさん
10/11/24 23:22:07
カメラが向いている方向にキャラクターを移動させたいのですが、
どういった計算式になるのでしょうか?

例えば、カメラがキャラクタのどの方向を移していてもカメラから見て上下左右自由に動けるような感じです

376:デフォルトの名無しさん
10/11/24 23:44:35
>>375
カメラの視線ベクトルをいい感じに加工してキャラに足してみればよくね?

377:デフォルトの名無しさん
10/11/24 23:50:31
>>376
カメラを考えない移動させたい方向(キーの入力方向)
例えば方向キーの入力値が
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

378:デフォルトの名無しさん
10/11/25 00:26:47
すみません、3Dを始めたばかりで関数で何をしているのかがいまいち分かりません
面倒でなければ少し確認させてください

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 ) ;


379:デフォルトの名無しさん
10/11/25 00:36:02
単位ベクトルも知らんレベルとなると
まず、なんか入門書がほしいところだけどなんかいいのないの?>他の人

380:デフォルトの名無しさん
10/11/25 00:41:40
とりあえず行列とベクトルについてググってみるといいと思う

381:デフォルトの名無しさん
10/11/25 00:44:30
やっぱdirectXって高校の数ⅢCやってない人には難しいっぽいね

382:デフォルトの名無しさん
10/11/25 00:47:43
高校のとき数I・Aしかやんなかったけど、普通にDirectX使ってゲーム作ってますん。
ぶっちゃけ言うほど詳しくしらなくても、行列の役割とかベクトルの役割知ってればDirectX
は使えるけど、ただ知ってたほうがいいのよって感じ。
趣味グラマーなら役割しってて使えるだけでいいと思うけど

383:デフォルトの名無しさん
10/11/25 00:59:44
申し訳ないです、つまりこの3行で
analog.x(-1.0~1.0)
analog.y(-1.0~1.0)で
D3DXVECTOR3 dir(analog.x,0,analog.y) ;

URLリンク(loda.jp)

これが出来たということなのでしょうか・・

384:デフォルトの名無しさん
10/11/25 02:38:49
今回、
スティックの向きというのはビュー空間上に存在する向き、
と考えられる。
ワールド空間からビュー空間へはビュー行列を掛け算だから
ビュー空間からワールド空間へはビュー行列の逆行列を掛け算だ

ビュー空間上でのスティックの向き * ビュー行列の逆
→ワールド空間上でのスティックの向き


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch