【C++】 DirectX初心者質問スレ Part32 【C】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
※回答する人も、質問する人も必ず読んでください

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

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

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

前スレ
【C++】 DirectX初心者質問スレ Part31 【C】
http://hibari.2ch.net/test/read.cgi/tech/1285850721/
2デフォルトの名無しさん:2010/10/29(金) 02:06:16
3デフォルトの名無しさん:2010/10/29(金) 03:39:18
>>1
苦労を労って虎のxファイルをやろう
4デフォルトの名無しさん:2010/10/29(金) 10:22:42
そういや、DirectX10からXファイルが無くなってるんだが、皆はモデルデータを
どのようにして扱ってるのですか?
5デフォルトの名無しさん:2010/10/29(金) 10:35:19
今後10年くらいはDirectX9が主流だ。
だからXファイルで十分。

マイクロソフトがWindowsXpを越えるOSを出せるのだろうか、
その可能性は少ない。
6デフォルトの名無しさん:2010/10/29(金) 11:14:24
9のヘルパー関数で読み込んで
頂点バッファやインデックスバッファ、アニメーションデータをそのままバイナリで保存しなおせば
直に扱えるデータの出来上がりじゃない
74:2010/10/29(金) 11:22:39
なるほど、ありがとうございました
8デフォルトの名無しさん:2010/10/29(金) 22:50:36
あれ?いつの間にDirectX SDKからX-File Viewerがなくなっちゃったのかな?
OS再インストールして最新のSDK入れたらビューアがない…
今でも入手できる?
9デフォルトの名無しさん:2010/10/29(金) 22:59:24
>>8
9だよね?
あるよバグってるけどw
DirectXViewerになってね?

でもバグってるんだ
正常なはずのXFileが読めない(ときがある!)
10デフォルトの名無しさん:2010/10/29(金) 23:05:49
DirectXのDirectGraphicsで3Dゲームを開発しております。
下記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);//アンチエイリアス
ということはやっております。
どうやったら滑らかになるでしょうか。
11デフォルトの名無しさん:2010/10/29(金) 23:30:11
>>10
それらのステートはアンタの環境で
サポートされてるの?
まずそっからでしょ
12デフォルトの名無しさん:2010/10/29(金) 23:47:04
>>10
それ以前にそれらのレンダリングステートはポリゴンのジャギを消すのに役立たないでしょ

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


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

3Dだとしたら

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

レンダリングステートのオンオフだけではなんとも出来ないなんらかの工夫をしてると思われ
13デフォルトの名無しさん:2010/10/30(土) 02:04:52
>>12
事前にCheckDeviceMultiSampleTypeでチェック
OKならば
d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
でCreateDeviceして
滑らかになったよ。ありがとう!
14デフォルトの名無しさん:2010/10/30(土) 16:31:20
D3Dを扱う上で速度低下を招かないようにするためのTIPS集みたいのは無いでしょうか?
頂点バッファをLockしてアクセスする場合はSYSTEMメモリに確保しろというような。

Helpにも有る程度書いてあるのですが、書いてある箇所が分散しているので
速度に関係ある部分のみのまとめが無いかなと。
15デフォルトの名無しさん:2010/10/30(土) 16:59:01
>>14
嘘はいっちゃいかん

ttp://msdn.microsoft.com/ja-jp/library/bb147263(VS.85).aspx
16デフォルトの名無しさん:2010/10/30(土) 23:00:35
前スレのID3DXSpriteつかった奴って
使わないで自前でやるとどれくらいの速度がでるものなの?
17デフォルトの名無しさん:2010/10/30(土) 23:54:24
自分ではかれや
18デフォルトの名無しさん:2010/10/31(日) 00:41:52
>>17
同意
初心者スレだからって調子に乗りすぎだよな
19デフォルトの名無しさん:2010/10/31(日) 02:16:00
>>16
まぁ、興味が無くもないから今日の夜時間あったらコード書くよ
20デフォルトの名無しさん:2010/10/31(日) 02:47:55
Direct2Dでシェーダーは利用できますか?
21デフォルトの名無しさん:2010/10/31(日) 03:18:26
Direct2Dはそういう使い方をするものじゃないです
22デフォルトの名無しさん:2010/10/31(日) 03:34:01
>>21
thx. そうみたいですね…

Windows7SDKのサンプル見てたんですが、D3Dと併用すれば可能って感じですかね…
23デフォルトの名無しさん:2010/10/31(日) 07:17:21
>>19
んで、書き込んだからには報告でもするのかと思いきや音信不通になるんだろ?
そのくせ回答者にいつも文句ばっかり言ってる類でしょ?
根っからの糞だよねw君w
24デフォルトの名無しさん:2010/10/31(日) 10:13:14
これで本当に書き込まれたらなんて言い訳するつもりなんだろう
25デフォルトの名無しさん:2010/10/31(日) 10:16:27
安心しろ。それはありえない。
26デフォルトの名無しさん:2010/10/31(日) 10:24:35
directxってバージョン色々あるみたいだけどどれ勉強したら良いんだろう…
入門サイト見てたらdirectx9で2dからやると良いって書いてあるけど、
他のバージョンで仕様が変わっても勉強が無駄になりませんでしょうか?

27デフォルトの名無しさん:2010/10/31(日) 10:26:02
Direct3D11からDirect3D9デバイスを使うように作ればいい。
その後の移行も楽になる。
28デフォルトの名無しさん:2010/10/31(日) 11:47:53
>>26
9から始めるにしても固定機能は忘れてシェーダーのみでやれば
11と比べて資料も豊富だし、HLSLやプログラマブルシェーダーの知識は無駄にはならないと思う

でも全体でみると大幅に変わってるから
11が出来る環境があって今から勉強始めるなら11でもいいかもね
29デフォルトの名無しさん:2010/10/31(日) 12:11:27
だろ。の人は相変わらず人に文句つける割に役に立つレスつけないなぁ
30デフォルトの名無しさん:2010/10/31(日) 12:54:14
>>15
ありがとうございます。
MSDNではなくmhtの方しか見てませんでした。
31デフォルトの名無しさん:2010/10/31(日) 15:02:04
11は確かXPでは動かなかったよね?
d3dx11.dllがないとかで。(これどっかからダウンロードしてきて入れたらいいのかね。それでも無理そうだが)
まぁXPを切り捨てるはめになるが、今から覚えるなら11の方がいい。9を覚えても無駄になる。
シェーダの書き方も変わってるから。
32デフォルトの名無しさん:2010/10/31(日) 15:17:56
知らないならレスしなければいいのに
33デフォルトの名無しさん:2010/10/31(日) 15:51:57
9でこれ覚えるだけ無駄っていうのあります?
34デフォルトの名無しさん:2010/10/31(日) 16:17:54
人間が生きている事が無駄です。あなたは無駄を削除しますか
35デフォルトの名無しさん:2010/10/31(日) 16:22:04
>>33
9でやる以上無駄なことなんて無い
有益無益で判断するくらいならおとなしく11でやりなさい
36デフォルトの名無しさん:2010/10/31(日) 16:52:57
Windows7では11が標準でついてるみたいだけど、11に対応した
グラフィックボードが少ない、というのは11特有の機能を使う
ことができないという意味?

9相当の機能だけでいいのなら、11に対応してないグラフィック
ボードでも11は一応動かすことができるの?
37デフォルトの名無しさん:2010/10/31(日) 17:00:37
38デフォルトの名無しさん:2010/10/31(日) 17:05:09
11の制約はVistaであってGPUではない
多少はGPUもあるけど
39デフォルトの名無しさん:2010/10/31(日) 17:05:57
ちょっと日本語になってないな
40デフォルトの名無しさん:2010/10/31(日) 17:08:25
>>37

ありがとう
41デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/10/31(日) 21:22:32
>>41
ビューポートはスクリーンサイズを越えて指定はできないはず

モデルを横にずらして
ビルボードと同じ要領でカメラの方に回転させればいいじゃない
43デフォルトの名無しさん:2010/10/31(日) 22:16:27
カメラ座標に変換するマトリックスを細工したらできそうな気がする

計算は・・・・だれかお願いっ!
4441:2010/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デフォルトの名無しさん:2010/10/31(日) 22:30:48
一枚目と二枚目の それぞれをビルボードとして設定しなさい。
それをそれぞれ90°回転するのですね
グローバルから見て、Y角度は異なりますね
カメラの画角によりますが周囲の歪みが出るかもしれません、それは仕方ない。
46デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/10/31(日) 23:09:33
>射影行列を頑張って作る方法(左右対称ではなく、右に偏ったカメラを作る)
D3DXMatrixPerspectiveOffCenterLHじゃだめ?
48デフォルトの名無しさん:2010/10/31(日) 23:12:18
>>46
ビルボードでしょうか?
うーん、やはり上手くいかないです…
49デフォルトの名無しさん:2010/10/31(日) 23:36:20
上手くいかなそうですね…
50デフォルトの名無しさん:2010/10/31(日) 23:36:58
>>47
おお、行けそうです…
まだ理解できてなくてサイズがおかしいことになっていますが、位置が違う物体が同じ向きで回ってる…
希望が見えてきました!!!
51デフォルトの名無しさん:2010/11/01(月) 00:18:09
>>47
時間かかりましたができました!!!!
行列でうまくできたんですね…まだまだ行列の理解も足りないようです。
ありがとうございます!!
52デフォルトの名無しさん:2010/11/01(月) 00:37:52
理解って、高校で習った筈だろ。
数Cだっけ?
53デフォルトの名無しさん:2010/11/01(月) 01:27:37
習った!=使える

それに文系とか、理系でも選択してないとかでCやってない人も多い
54デフォルトの名無しさん:2010/11/01(月) 01:46:50
うーん、行列は習いましたが、掛け算とか逆行列とかまでです。
複素数平面世代なので、一次変換すら習っていません。何に使うかとかには一切触れませんでした。
3Dへの応用とかは全く別分野だと思います…。
55デフォルトの名無しさん:2010/11/01(月) 03:27:16
ウィンドウのクライアント領域と同じサイズのDDBを用意して、
BitBltでそのままウィンドウのデバイスコンテキストに転送して計測したfpsと、
Direct3D9で単純にBeginScene→EndScene→Presentしただけのfpsとでは、
前者の方が早いのですね。

こんなものですかね?
56デフォルトの名無しさん:2010/11/01(月) 04:06:00
転送しただけで更新命令が出てないから画面書き換えは起きてないってオチじゃなくて?
57デフォルトの名無しさん:2010/11/01(月) 04:13:32
そのBitBltするピクセル領域に、
DXで描画するのと同じレンダリング結果になる処理を自前でしてみなよ
(頂点情報からライスライズしてポリゴンを描画、そのポリゴンにテクスチャマッピングやライティング等のシェーディング処理)

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

今のメニーコアで、並列処理とSIMD命令使いまくりのコードかけば、少しは行けるかも知れないけどw
58デフォルトの名無しさん:2010/11/01(月) 04:14:58
DirectXの方が垂直同期取ってるだけとか
59デフォルトの名無しさん:2010/11/01(月) 04:16:55
>>55
まずは、実際のFPSの数値を出さないと。
60>>55:2010/11/01(月) 04:30:28
PresentationIntervalはD3DPRESENT_INTERVAL_IMMEDIATEなので垂直同期はなしの筈。
画面サイズによってはD3D9のほうが早かったりする…
61デフォルトの名無しさん:2010/11/01(月) 04:34:42
で、いくつなんだよ
62デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/01(月) 04:43:26
なんにせよ何の意味もない比較だな
64デフォルトの名無しさん:2010/11/01(月) 04:44:39
妥当なFPSだと思うね。
しかしだ、色々表示した場合のDXのスピードに驚く必要がある。
多くのオブジェクトをDCに描画する遅さを気がつくべきだ。
毎回一枚絵だったら別だが、それはビデオ映像しかないしな。
65デフォルトの名無しさん:2010/11/01(月) 04:46:12
          DDB   D3D9
300 x 300 =   3,300   3,000
1280 x 700 =    220     90

>>63
意味はないねw

>>64
ごもっともです
66デフォルトの名無しさん:2010/11/01(月) 04:50:02
その90って、何か間違ってると思うが、いかに。
67デフォルトの名無しさん:2010/11/01(月) 04:53:53
open glとだったらどっかが速いの?
68デフォルトの名無しさん:2010/11/01(月) 05:00:38
なんか計測方法に問題がありそう
69デフォルトの名無しさん:2010/11/01(月) 07:56:46
ほとんど使ってなかったけどBBX無くなったのね
70>>55:2010/11/01(月) 12:03:49
あぁ記述漏れしてた。
D3D9の方はバックバッファ一つで、ウィンドウのクライアントサイズにしての結果です。
71>>55:2010/11/01(月) 13:24:39
一応テスト用ソース
ttp://codepad.org/LYYwNeh2
72デフォルトの名無しさん:2010/11/02(火) 00:05:56
ゲーム画面の解像度ってどんな比率と大きさでやるのがトレンド?
いまって4:3のディスプレイのが少ないよね?16:9?
800x600で組んでたけどもう時代遅れかなぁ・・・とかちょっと思ってる
73デフォルトの名無しさん:2010/11/02(火) 03:33:19
PCは16:10も多い
74デフォルトの名無しさん:2010/11/02(火) 04:22:51
>>72
1280x720がトレンドだと思い込んでみる
問題は1024x768のモニタだと横が足りないところだな
75デフォルトの名無しさん:2010/11/02(火) 06:11:01
>>70 & >>71 & >>55
応答おそくなったよ。なかなか人のソフトの動作確認は、ちょい面倒だから。

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

実験しているPCはノートでしょ。それも俺のより性能悪い物かな
ソフト的には問題ないよ、90はグラフィックボードの問題。
性能いいグラフィックボードなら、10000いくと思う。
76デフォルトの名無しさん:2010/11/02(火) 06:15:50
追記、そのノートPCで3D表示を多く出すのは厳しいだろうね。
俺もノートPCで作ってるけど、重いときはデスクトップでやってるから。
77デフォルトの名無しさん:2010/11/02(火) 06:33:27
>>74
>問題は1024x768のモニタだと横が足りないところだな
まだ、そんなのあるの?
78デフォルトの名無しさん:2010/11/02(火) 06:46:52
>>73
多いな
16:9はなんか申し訳程度にサポートされてる感が強い
79>>50:2010/11/02(火) 08:34:52
>>75-76
うおぉぉぉーーー!!!!
お忙しいでしょうに丁寧に検証して下さいましてありがとうございます!!!
まさかまさか検証してもらえるとは思ってなかったのでw

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

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

ほんとにありがとうございました。
80>>79訂正:2010/11/02(火) 08:35:48
うっ…   >>50>>55
81デフォルトの名無しさん:2010/11/02(火) 11:33:33
>>71
DirectXの方は毎フレームIDirect3DDevice9::Clearしてるのに
DDBの方は転送するだけってフェナな計測方法じゃないな
単純にVRAMがオンボとかでClearが遅いだけとかじゃね
82デフォルトの名無しさん:2010/11/02(火) 17:54:31
83デフォルトの名無しさん:2010/11/02(火) 20:00:30
>>78
16:9がメインストリームだろ
84デフォルトの名無しさん:2010/11/02(火) 20:17:04
家電はそうなんじゃね? PCは4:3が伝統的だし変える動機も無いと思う。640*480とか。
85デフォルトの名無しさん:2010/11/02(火) 21:36:14
>>83
俺のPCだとなんかもうしわけ程度に1280x720(60Hzのみ他の解像度は75Hzはある)だけが
サポートされてて他の16:9はないんよ
なのでPCだと16:10が主流なのかな?と
こっち(16:10)は結構ある1440x900まである
86デフォルトの名無しさん:2010/11/02(火) 21:43:42
横に縮むより伸びるほうがまだ許せるから4:3かなぁ
3Dならアス比が変わっても大丈夫なように作る
よこに伸びたり視野が広がることでゲーム性が変わっちゃうようなゲームなら
中央部分だけ使うようにするかな
87デフォルトの名無しさん:2010/11/02(火) 21:51:04
>>86
4:3だとなんかしょっぱく見えるんだよ(目が肥えた)
引き伸ばすとキャラがデブっちくなるからはじめから横にしておいたほうがいい感じ
88デフォルトの名無しさん:2010/11/02(火) 21:53:12
デブくなるのはダメだがやせっぽっちになるのは許せるのか?
89デフォルトの名無しさん:2010/11/02(火) 21:56:09
4:3にして両側に黒枠を付けるだけジャン
90デフォルトの名無しさん:2010/11/02(火) 21:56:11
>>88
うん
そんなディスプレイ使ってる奴はきっとアス比が変わっても気にならない
てか、フルスクリーンモードで起動しないんじゃね?的な予想
91デフォルトの名無しさん:2010/11/02(火) 21:58:18
ノートはハイエンドクラスだとワイドサイズが増えてきたけど
ミドルレンジだとまだ4:3が多いからなぁ
92デフォルトの名無しさん:2010/11/02(火) 22:01:21
>>91
ぜってーゲームなんかやんねーよそいつ
みたいな奴のこと気にするな
93デフォルトの名無しさん:2010/11/02(火) 22:04:16
16:10とかワイドになったらエロゲの女の子のヨガスキルがさらにアップするな
94デフォルトの名無しさん:2010/11/02(火) 22:14:26
>>92
おま、サポートに寄せられる苦情とか見たことないの?
95デフォルトの名無しさん:2010/11/02(火) 22:21:46
http://pc.watch.impress.co.jp/docs/news/20100604_372238.html

スクエアからワイドへの移行は目に見えて明らかだけど、
16:10から16:9へも緩やかに移行してるとか。
96デフォルトの名無しさん:2010/11/02(火) 23:13:58
うちのは16:10だけど最近どこ見ても16:9だしなぁ
97デフォルトの名無しさん:2010/11/03(水) 00:45:03
>>79
安めのノートPCでDXを使う場合の注意事項と利点。
 まず基本的に、グラフックの表示チップにDX3D機能ををハードで実装していない
場合が多い、この時はドライバー内でDX機能をエミュレートしている。
 だから、単なるべた塗りはプログラム側でやってもDXでやっても似たようなスピードに
なりやすい。
 問題はドライバーによるソフトエミュレーションにいくつかの機能制限が多いことだ。
なおかつ、DXの機能問い合わせで機能有り返るが、正しく動かなかったりする。
 だから、動くはずだが動かないと悩む可能性でつまずくはずだ。
今回の単なる最小ループの更新も、スピードが変わらないとつまずいたはずだが、
ソフトエミュレーションのノートPCグラフィックなら当然そうなる。
 検証用のPCが必要だ。しかし、そのノートPCで動くようなら、多くのPC上でも
問題なく動作する可能性が高いため、ユーザー上で動作しない問題を回避できる。
性能の良すぎるPC上で開発すると、他のPCで動作しない危険をつかみやすい。
98デフォルトの名無しさん:2010/11/03(水) 02:12:59
こんにちは。
ttp://akiba-pc.watch.impress.co.jp/hotline/20101106/newitem.html
を見て気になったんですが、2枚刺しのビデオカードを利用した場合、
ビデオメモリが12GBになると書いてありますが、実際にプログラムからも
12GBのメモリとして使えるのでしょうか?
ATIのボード2枚刺し、nVIDIA+ATIで2枚と組み合わせでいろいろ変わってくると
思いますが、とりあえずnVIDIA2枚刺しの場合どうなるのでしょうか。
99デフォルトの名無しさん:2010/11/03(水) 08:24:42
>>95-96
マジか

でもググッタら16:9になったわけが・・・
http://www.labornetjp.org/news/2010/0702tideji/

よし、俺は当初の予定通り黄金比(16:10)に合わせて16:9には黒枠いれることにしよう
きっと黄金比がなんとかしてくれる
100デフォルトの名無しさん:2010/11/03(水) 08:35:41
指定したクライアント領域ぴったりのウィンドウを作るにはどうしたらいいでしょうか?
101デフォルトの名無しさん:2010/11/03(水) 09:04:36
>>100
AdjustWindowRectEx
102>>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
103>>55:2010/11/03(水) 09:26:50
あああ、AdjustWindowRect だった/(^o^)\
104デフォルトの名無しさん:2010/11/03(水) 09:36:08
>>71
>g_D3D9Params.AutoDepthStencilFormat = D3DFMT_D16;
これ
D3DFMT_D24X8
にしろよ
105デフォルトの名無しさん:2010/11/03(水) 12:37:47
>>100
ウィンドウレクトとってクライアントレクトとって引き算してウインドウの縁を取って、
縁に好みの大きさのクライアントの幅と高さを足してウインドウ変更という手もあるよ。
106デフォルトの名無しさん:2010/11/03(水) 12:53:17
横からだけどその二つの手法ぐらいしか知らないんだがどちらが優れているか等はないよね?
107105:2010/11/03(水) 12:56:37
自分の手は、メニューがどうだろうとウインドウスタイルがどうだろうと気にしないで変更できる。
が、物理的にモニタからはみ出す場合はさらに計算しないといけない。
108>>55:2010/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デフォルトの名無しさん:2010/11/05(金) 11:24:54
ハード側のメモリに頂点情報やインデックス情報を持たせても、
Lockのコスト > 転送コストの場合、
実行速度は DrawIndexedPrimitiveUP > DrawIndexedPrimitive になる。

この認識でおk?
110デフォルトの名無しさん:2010/11/05(金) 11:46:09
1フレームに相当回数Lockしないと逆転しないと思うが…
普通はやっちゃいけない実装だが
1フレームに数百回Lockするような仕様ならUPの方が速くなるかもね
111デフォルトの名無しさん:2010/11/05(金) 12:34:00
>>110
dクス。

IndexBufferのインデックス作成は事前に行い、1フレームにVertexBufferをLockするのは一回だけ。
これでテストしてみたんですがね、マイPCだとどうにもUPの方が早いんですよね…
相当キワモノなグラフィックカードなのかなorz=3
112デフォルトの名無しさん:2010/11/05(金) 12:36:58
静的頂点バッファをLockしてるとか
113デフォルトの名無しさん:2010/11/05(金) 12:44:05
VRAMとシステムメモリ共用のビデオカードとか
114デフォルトの名無しさん:2010/11/05(金) 13:12:00
>>113
Mobile Intel(R) 4 Series Express Chipset Family というビデオカードなのでそれかな!
と思ってたら…

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

どうもお騒がわせして申し訳ありませんでした。
115>>55:2010/11/05(金) 15:57:30
おかしいな〜…

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

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

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

7ではおとなしくDirectX10 or 11にするべきなのかな…
116>>55:2010/11/05(金) 18:14:49
C#でSlimDXのD3D11を使って、Stopwatchでfps計測してみたコードがあるんで、
それを実行してみたら…

同じ現象が発生した/(^o^)\
117デフォルトの名無しさん:2010/11/05(金) 22:28:09
>>116
意味ないからやめろ
実際にゲーム作ったうえで計測しないと本当に無意味だぞ

同じもんを複数回描画したときと
違うもんをたくさん描画したときって描画の仕方によっても違うし
118デフォルトの名無しさん:2010/11/06(土) 02:00:32
ぶっちゃけ環境のせいだと思われ
119>>55:2010/11/06(土) 12:21:57
>>117
自分のコードが拙いのか環境なのか判断したくて色々調べたけど、
おっしゃるとおりですね。とりあえず後回しにします。
一応>>71のコードはテスト用にシンプルにしたものでして、
自分のゲームにのっとった形式でのテストはしております( ´∀`)ノ

>>118
色々弄ってみましたがね、多分そうなんでしょうね。
C#のStopwatchもQueryPerformanceCounter使ってるって話みたいですし、
ソコかDirectX(DWM含む)の中の方なのかなと。
120デフォルトの名無しさん:2010/11/06(土) 18:21:50
ビューポート分割と、それに伴なうビュー設定に関して質問です。

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

普段作業しているPCでは、現状のコードでも左右で同じ画面が描画されるのですが、
別のPCでは上記のようになってしまい、困っております。
121デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/06(土) 19:33:39
>>121
言われた通りにして、治りました!すごい!
完全にSetViewportメソッドの仕様を勘違いしてました。
半日悩んでましたが、スッキリ解決して良かったです。
ありがとうございました。
123デフォルトの名無しさん:2010/11/06(土) 20:51:17
エスパーすごいな
124デフォルトの名無しさん:2010/11/06(土) 21:03:09
これはすばらしい
経験の賜物だな
125デフォルトの名無しさん:2010/11/06(土) 21:11:37
>スクリーンから+方向にはみ出た指定をした場合
>スクリーンに収まるように勝手に補正してくれるハードも有れば
>してくれないハードもあったはず
これを知ってないとわからないよね
126デフォルトの名無しさん:2010/11/06(土) 21:29:48
ビューポートはちゃんと指定しないと駄目なんだね。
127121:2010/11/06(土) 23:00:16
ごめ、ハードによって違うみたいな書き方しちゃったけどちゃんと調べたら嘘でした

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

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

おそらく、デバイス作成のところに
頂点シェーダーのバージョンが1.1以下ならソフトウェア計算に切り替えるみたいなのが仕込んであって
不具合が出たほうはそれにひっかかったのだと思われ
128デフォルトの名無しさん:2010/11/07(日) 00:14:59
まぁしょぼいVGAだと駄目という意味でならハード依存に間違いあるまい
どちらにしてもちゃんと範囲内で指定しろってこったな
129デフォルトの名無しさん:2010/11/07(日) 00:18:22
ビューポートっていったい何なんですか?
130デフォルトの名無しさん:2010/11/07(日) 00:29:50
>>129
頂点の座標変換は
IDirect3DDevice9::SetTransformやシェーダーで指定する
ワールド、ビュー、射影変換の3つで終了ではなく
実はこの後、射影空間上の頂点をスクリーン空間座標に変換するビューポート変換が存在する

これはDirectX9以前ではデバイスにセットされてるビューポートに従って自動で行われる
通常はデフォルトでバックスクリーンと同サイズのビューポートが設定されてるので
変わったことをしようとしないかぎり気にしなくて良い
131デフォルトの名無しさん:2010/11/07(日) 01:07:10
>>130
ありがとうございます。理解できました。
132デフォルトの名無しさん:2010/11/07(日) 07:11:42
シェーダを使ってSSAOを実装しようとしています。
少し大きなサイズの「法線とデプスを持つテクスチャ(1024*1024)」を用いて
「SSAO影マップ(256*256)」を作りたいのですが、「SSAO影マップ」のサイズが
1024*1024でない場合、ぐちゃぐちゃなテクスチャを読み込んだようになってしまいます。
(たまに他のゲームなどで使われたテクスチャが出ることがあるので、変な所を参照しているようです)

レンダリングターゲットを超えるサイズのテクスチャを使うことは出来ないのかとも思いましたが、
探してもそのような記述は見つかりませんでした。
どなたか分かる方がいらっしゃいましたら、よろしくお願い致します。
133デフォルトの名無しさん:2010/11/07(日) 10:09:14
縮小したことにより遮蔽テストにノイズが混じることはあるけど
全然違うテクスチャを参照してるというならどこか根本的な所でミスがあると思われ
そもそも「他のゲームなどで使われたテクスチャが出ることがある」と何故判断したわけ?
深度マップが正常に書き出されてるのは確認してるんだよね?
134デフォルトの名無しさん:2010/11/07(日) 10:13:18
>>132
MipMapが有効になってるとか?
135132:2010/11/07(日) 15:43:28
ご返信ありがとうございます!

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

>>134
よく分かりませんが、特にそのような指定はしていないと思います。
nVidiaコントロールパネルのmipmaを強制するは「なし」ですし、
サンプラの設定のMinfilterなどの部分は色々いじってみましたが、変わりませんでした。
136デフォルトの名無しさん:2010/11/07(日) 15:48:02
>>135
深度マップ用のテクスチャをCreateTextureするときに
引数でMipレベルを0を指定してるから自動でMipMapが作られてるんじゃない?
縮小してるので作っただけで何も書き込まれてないミップレベルの領域が参照されてるのだと思われ
137132:2010/11/07(日) 16:42:20
>>136
言われた通り、CreateTextureでMipレベルを1にしてみたら正常になりました!
ずっと悩んでいたので、本当に助かりました。ありがとうございました。
138デフォルトの名無しさん:2010/11/07(日) 16:46:48
お礼は>>134に言ってくれ
俺はそれをみて「あぁ、これだな」と思っただけだ
139デフォルトの名無しさん:2010/11/08(月) 00:29:01
この処理をこう纏めたら、呼び出すのは楽なんだけど、
パフォーマンス的にはちょっと無駄がある、

という状況はありふれていますよね?
こういう場合たとえば10000回読んで時間計測して、
これくらいなら許容範囲か・・・もしくはこれはまずいな・・・
という感じで決めていくしかありませんか?
140デフォルトの名無しさん:2010/11/08(月) 00:38:15
なんて答えたらいいのか全っ然わかんねえ
141デフォルトの名無しさん:2010/11/08(月) 07:09:04
>>139
ターゲットPC(もしくはハード)を決めてそのPCで動くかどうかのみ

10000回の計測とか同じ処理を何度も繰り返すのは
キャッシュのヒット率100%なのでなんの参考にもならない
142デフォルトの名無しさん:2010/11/08(月) 10:34:36
>>141
あ、そうか・・・それもそうですよね
ありがとうございます
143デフォルトの名無しさん:2010/11/08(月) 14:40:30
プロポーショナルフォントを高速に描画するにはどうしたら良いですか?
144デフォルトの名無しさん:2010/11/08(月) 14:43:56
DirectWrite
145デフォルトの名無しさん:2010/11/08(月) 16:47:49
あの、あまり環境に依存しないほうほうがよいです、、、
146デフォルトの名無しさん:2010/11/08(月) 16:49:41
GDI
147デフォルトの名無しさん:2010/11/08(月) 16:56:38
>>143
プロポーショナルフォントって指定してるってことは
等幅フォントではもう既にできてるんだよね?
あとは文字ピッチを1文字ごとに変えるだけじゃん
148デフォルトの名無しさん:2010/11/08(月) 20:43:50
August 2007のSDKでXAudio2を使おうとするとエラー落ちするバイナリができあがる。
IXAudio2::Initializeの引数の数がヘッダとDLLで食い違うため。
----- ここまでチラシの裏

何故IXAudio2VoiceってIUnknown派生じゃないんでしょ?
CComPtrが使えなくて悲しい・・・
149デフォルトの名無しさん:2010/11/08(月) 23:19:58
unique_ptrとかにカスタムデリータでいいんでない
150デフォルトの名無しさん:2010/11/10(水) 15:49:01
>>143

Direct3D11にフォント描画機能がなくて実装中
必要な文字だけテクスチャに焼いて使うしかないんじゃね?
151デフォルトの名無しさん:2010/11/10(水) 17:21:17
テクスチャに焼く作業文字変更する時焼きなおさないとだからマジめんどい
152150:2010/11/10(水) 17:39:32
一度使った文字を自動的に部品として追加していくと楽
2014x2048のR8G8B8A8テクスチャに16x16の文字を焼くとしたら1枚にwide charの全文字が収まるからアクセスも超早くなる予定

フォントスタイルを変えたらもう一枚必要だけど
153デフォルトの名無しさん:2010/11/10(水) 18:46:23
DirectSoundなんだけど、プライマリバッファのSetVolume()を使うと
ボリュームコントロールのWAVが動くんですよ
これってつまり、全部の音の音量を増減をしようと思ったら全セカンドバッファ
を一度に変更しないといけないってことですかね
154デフォルトの名無しさん:2010/11/10(水) 22:51:45
>>153
プライマリバッファのボリューム弄ればいいじゃん
セカンダリのって個々の音のフェードインとかアウトで弄るから
あんまちょっかい出さねーほうがいいだろそうでもない?
155デフォルトの名無しさん:2010/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を使っている行をコメントアウトするとビルド正常終了。もちろん正しく動作はしません)。
156155:2010/11/11(木) 01:30:58
むっちゃすみません。>>155ですが自己解決しました。

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

てっきりマクロは単体で動き得るものと思い込んでいて、SimpleSample側で
原因を追っていく際にもV_RETURNの宣言(DXUT.h)から上位にしか注目していませんでした。
お騒がせしてすみませんでした。
157質問です:2010/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:2010/11/11(木) 15:09:02
一部、コードが抜けてました…失礼。

RECT rect = { 0, 0, 0, 0 }; // { 0, 0, 200, 50 }等にしても同じ結果でした。
159デフォルトの名無しさん:2010/11/11(木) 15:36:54
>>157
ID3DXFont::DrawTextの戻り値はそもそもHRESULTじゃない

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

160>>157:2010/11/11(木) 15:56:17
>>159
うわはぁ… ありがとうございましたorz
161デフォルトの名無しさん:2010/11/11(木) 21:12:45
>>154
音楽はDirectSoundじゃないんで影響受けますからね
効果音再生に使うからフェード処理はやらないんじゃないかな?
まぁとにかくセカンダリ全部変更するようにしますわ。というか質問前する前に作っちゃったしw
レスありがとうございました
162デフォルトの名無しさん:2010/11/12(金) 10:47:04
質問です
世の中にはデスクトップマスコットなるものがあるようでして
そいつがアクティブなウィンドウのタイトルバーのどっかに腰かけるor走りまわるわけです

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

できれば○○ちゃんといっしょにゲームをやりたいのでマスコットを終了したくないとか寝言を申しております
163デフォルトの名無しさん:2010/11/12(金) 11:04:01
ハイエンドなグラボでSLIとかやってみれば
164デフォルトの名無しさん:2010/11/12(金) 11:10:56
タスクの優先度を下げるとか
てかDirectX関係無い
165デフォルトの名無しさん:2010/11/12(金) 12:01:46
もうしわけありませんでした他所で聞いてみます
166デフォルトの名無しさん:2010/11/12(金) 13:58:48
バックバッファのサイズよりウィンドウのクライアント領域が大きい(小さい)場合、
拡大(縮小)されますが、この処理はどこのどいつが行っているのでしょうか?

1) ウィンドウがやっている
2) DirectXがやっている
3) その他
167デフォルトの名無しさん:2010/11/12(金) 14:16:53
具体的に何のインタフェイスのどのAPIかぐらい書けよ。
168デフォルトの名無しさん:2010/11/12(金) 14:23:45
IDirect3DDevice9::Presentでいんじゃね?

http://msdn.microsoft.com/ja-jp/library/bb174423%28VS.85%29.aspx
>必要に応じて、引き伸ばし操作を適用して、ソース矩形内のピクセルを
>ターゲット ウィンドウのクライアント領域のデスティネーション矩形に転送します。

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

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

そもそもサイズ変更はパラメータ次第なので、「される」わけではないし、
自分でそのように指定して「させている」だけ。
171デフォルトの名無しさん:2010/11/12(金) 15:16:30
>>170
自分の無知を晒しちゃってるぞ
172デフォルトの名無しさん:2010/11/12(金) 15:36:37
IDirect3DDevice9::Presentはサイズを変更したくなければ、
出力サイズを明確に指定すればいいだけの話。
173デフォルトの名無しさん:2010/11/12(金) 16:25:50
>この値は NULL でなければなりません
って多くね?
本当に設定できるのか?
174デフォルトの名無しさん:2010/11/12(金) 16:32:36
すみません
D3DXFONTの設定でフォントの文字間隔(縦、横)はどこで決めるのでしょうか?
175デフォルトの名無しさん:2010/11/12(金) 17:12:49
すみません
やっぱりいいです
176デフォルトの名無しさん:2010/11/12(金) 18:04:39
>>175
他人になりきるの止めてもらえますか?
こういうところで育ちの悪さが出てしまうんですよ
177デフォルトの名無しさん:2010/11/12(金) 18:27:49
>>176
ここでそういう観念が役に立たないのには気づかないのか。
郷に入らばなんだっけ?
178デフォルトの名無しさん:2010/11/12(金) 18:35:53
成りすましが嫌ならトリップ使えばいいじゃない
179デフォルトの名無しさん:2010/11/12(金) 18:54:08
>>175-176は私(>>174)ではないです
まだ>>174は解決していません
よろしくお願いします
180デフォルトの名無しさん:2010/11/12(金) 18:55:28
181デフォルトの名無しさん:2010/11/12(金) 19:20:49
>>179
ピッチと改行幅は変えられない
182デフォルトの名無しさん:2010/11/12(金) 20:23:28
>>181
そうですか
ありがとうございました
自力でなんとかするしかないのですね
183デフォルトの名無しさん:2010/11/12(金) 20:55:03
一文字ずつ描けばピッチは変えられるぞな
184デフォルトの名無しさん:2010/11/12(金) 22:58:32
9の話。動的なリソースってロストに対応するために常にシステムメモリにバックアップ作っておかなきゃいけないですか?
185デフォルトの名無しさん:2010/11/12(金) 23:07:36
必要なら
186デフォルトの名無しさん:2010/11/12(金) 23:29:32
>>184
毎フレーム作ってるもんに関してはいらないんじゃない?一瞬だし
ロード時に作ったもんは復旧時に読み直せばいらないし
特定の場面でしかできない特殊なもんぐらいしか考えられないのかな?
187デフォルトの名無しさん:2010/11/14(日) 12:13:36
>>185-186
ありがとうございました
188デフォルトの名無しさん:2010/11/14(日) 18:08:57
注視点を中心にカメラを回転させるには
D3DXMatrixLookAtLHのカメラの位置のxとzを
どのようにかえればいいんでしょうか?
189デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/14(日) 18:40:13
>>189
ありがとうございました
191デフォルトの名無しさん:2010/11/14(日) 21:29:26
Visual Studio 2008を使っていて、ソリューションのビルドをしようとすると

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

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

今書いているのは本のサンプルを手打ちで移したもので、
打ち間違いを考慮して該当部分をコピーしたりしたのですが状況が変わりません。
このエラーはどうして出るのでしょうか?
192デフォルトの名無しさん:2010/11/14(日) 21:38:42
>>191
エスパーすると
LPDIRECT3DDEVICE9の行より前に何か問題がある
拡張子が.cになってたり
1行前に;を忘れてたり
どっかが全角になってたり
たぶんDirectX以前の問題だ
193デフォルトの名無しさん:2010/11/14(日) 21:40:58
>>191
そんなの原因考えるの面倒臭ぇからまず動くSDKのプロジェクトを拝借して
それをベースに構築して改めて動くもんと動かないもんを比べてみたらどうよ?
194デフォルトの名無しさん:2010/11/14(日) 21:47:22
>>191
ところで本のサンプル(CDついてる?)はコンパイルして実行できるの?
195デフォルトの名無しさん:2010/11/14(日) 22:09:55
昔はc言語の練習本を一つ一つタイプしてはミスタイプで長い事悩んでたな…
196191:2010/11/14(日) 22:16:51
>>192
ありがとうございます。直前の宣言で ; が抜けてましたorz
で、オーバーライド指定子は無くなりましたが、
LPDIRECT3DDEVICE9 で宣言した変数が「定義されていない識別子です」というエラーで引っかかりました。

>>194
納得いかないくらいすんなりと実行できました。(リンカの設定とか適当なのに)
・・・もっかい打ち直してみる事にします。
197デフォルトの名無しさん:2010/11/14(日) 22:22:22
>>196
ソース何べん打ち直しても設定腐ってたらダメじゃん
とりあえずベースはサンプルソースの奴使えよ
198デフォルトの名無しさん:2010/11/15(月) 17:09:37
サンプルのソースこそ独自ライブラリ使いまくりで腐ってるわwww
199デフォルトの名無しさん:2010/11/15(月) 19:27:11
違うだろ
ベースってのはライブラリじゃなくて
プロジェクトの設定とかそういうのだよ
話わからないくせに横から口出して自爆してんじゃねーよキチガイ
200デフォルトの名無しさん:2010/11/15(月) 19:31:15
「ベース」という単語だけでそんなの察せるとかどんだけエスパーだよ
201デフォルトの名無しさん:2010/11/15(月) 19:32:16
おっと触ってはいけない生物だった
202デフォルトの名無しさん:2010/11/15(月) 19:36:52
>>200
だから流れわからなきゃ口出さなきゃいーのに
誰も頼んでないのに間違えて恥かしい奴だなお前はw
203デフォルトの名無しさん:2010/11/15(月) 19:45:46
すぐに煽って雰囲気悪くするやつ何なの?
よっぽどリアルがさみしいの?の?
204デフォルトの名無しさん:2010/11/15(月) 19:56:03
>>198が馬鹿なのに口出ししなければよかった
205デフォルトの名無しさん:2010/11/16(火) 10:11:38
今からDirectXを本格的に勉強しようと思うのですが、DirectX9とDitrectX11どっちで勉強すればいいのでしょうか?
あるいは、DirectX9をやっておけば11にスムースに移行できますか?
206デフォルトの名無しさん:2010/11/16(火) 10:25:33
207デフォルトの名無しさん:2010/11/16(火) 10:52:12
なるほど・・・今からやるならDirectX11なんですね
ありがとうございます
208デフォルトの名無しさん:2010/11/16(火) 15:22:06
>>207
シェーダがきつそうだったら9で固定機能で遊んでみるのも
道のひとつかもしれない
それもきつそうだったらDXライブラリとかででも多少慣れるのも
道のひとつかもしれない
209デフォルトの名無しさん:2010/11/16(火) 15:37:11
でも遠回りな道かもしれないぞ
遠回りのなだらかな道と、急勾配の近道だったら、俺なら・・・・・・遠回りでいいや (´∀`)
210デフォルトの名無しさん:2010/11/16(火) 17:26:12
な〜に、急勾配の道でだって一休みできるものさ
211デフォルトの名無しさん:2010/11/16(火) 18:30:54
後から来たのに追い越され泣くのが嫌ならさあ歩け
212デフォルトの名無しさん:2010/11/16(火) 20:36:00
買った本がDirectX9にしか対応してなかったでござる・・・
ようやくポリゴンが表示できて喜んでいたのだが、これが無駄になるのか・・・

「DirectX11 3Dプログラミング」ってのでも買うか・・・
213デフォルトの名無しさん:2010/11/16(火) 20:44:08
>>208
DXライブラリではもうローポリ3Dゲームを完成させているので、DirectXを直で触ろうと思って聞きました
……DirextX11の資料がなさすぎて心が折れそうです
214デフォルトの名無しさん:2010/11/16(火) 20:57:33
WindowsXpが半分以上を占めている。
だから
あなたがプログラムを作って、友達が使ってくれますか?

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

将来がどのようになるかわからないけど、
あまり変化がないとおもうよ
215デフォルトの名無しさん:2010/11/16(火) 21:22:17
>>214
XPが半分以上って、それ企業で使うPCとか含めてるだろ。
そうじゃなくてもPC保有者の大半はゲーマーじゃねぇ。

ゲーマーじゃない奴をゲーム市場に引き込むってんなら大したもんだが、
もともと相手にしてるのはごく一部に過ぎない。
216デフォルトの名無しさん:2010/11/16(火) 23:27:39
しっ構っちゃいけません
217デフォルトの名無しさん:2010/11/17(水) 02:15:20
>>212
まぁ無駄ではないよ
3Dやポリゴンの表示とか基本的な考え方は一緒だ
そこさえわかってればプログラムを書き直すなんて楽だろ
218デフォルトの名無しさん:2010/11/17(水) 02:22:30
COMインターフェースポインタってダウンキャストできるんですか?
219デフォルトの名無しさん:2010/11/17(水) 07:17:44
何のためにクエリーをかけると思っているんだ?
220デフォルトの名無しさん:2010/11/17(水) 15:33:25
>>215
同人ゲーム作ってるけど、購買層の大半がXP。いまだに2000なんて使ってるやつもいる
Vistaや7を買ってPCゲームやっちゃってるぜ!っていう層を狙うなら11でもいいが、それってプロだろう
プロならDirectX11でいい

素人で、ちょっとゲームつくってフリーで公開したり、同人で売ったりと考えてるなら9以外の選択肢は今のところ無い
221デフォルトの名無しさん:2010/11/17(水) 16:01:52
完成予定日が明確ならバージョンも調整しやすいね。
個人で初めてゲーム作るってのなら出来るだけ未来を見据えたほうがいいと思う。
バージョンの違いをサクッと吸収できる実装を作れるなら自由にすればいいと思うけど。
222デフォルトの名無しさん:2010/11/17(水) 20:14:55
DirectX10, 11は空振り。

で、評判が悪いのでMSもDirectX12では9の仕様に戻すんじゃないの?
223デフォルトの名無しさん:2010/11/17(水) 21:01:59
ゲームユーザーから見ても、DirectX11で導入されたテッセレーションもいまいち効果分からんしな。
224デフォルトの名無しさん:2010/11/17(水) 21:24:51
DirectX9の3Dプログラミングについてですが、
かなり初歩的な事からの考え方の解説をしているサイトや参考書はありませんか?
>>2の解説ですら4x4の行列の所で詰まりました、どこでこれを使っているのかすら・・、2Dは画像の表示、貼り付け、移動処理など出来ますが・・

DirectXが用意してくれている関数に頼りすぎていて、3Dモデルを表示はできたのですが、全く仕組みが分かりません
(必要な関数をつなぎ合わせた感じです)
225デフォルトの名無しさん:2010/11/17(水) 21:45:08
DirectX12は未だ影も形も見えて来ないので、
DirectX9時代の次は恐らくDirectX11時代が長く続く
DirectXは奇数世代の寿命が長い

>>224
MSDN
226デフォルトの名無しさん:2010/11/17(水) 22:18:14
>>224
msdnもいいが、
大型書店でもいって立ち読みをして、
自分と相性のよさそうな本を探したほうがいいかも
もしC++があやしいくらいに初心者ならそっちを片付けるべきだ
227デフォルトの名無しさん:2010/11/17(水) 22:24:37
同次座標系という概念を含めることでテクスチャが歪まず張られる、
というのをちらほら聞くのですが、これはどういう仕組みですか?
228デフォルトの名無しさん:2010/11/17(水) 22:43:30
まずはどこでそんな情報をちらほら聞いたのかを明確にしろ
229デフォルトの名無しさん:2010/11/17(水) 22:57:14
テクスチャが歪まず貼られるといったらパースペクティブコレクトだな
DirectXでフラグをONにするときに名前は見るけど原理は俺もまったく知らんがな
230デフォルトの名無しさん: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'がいい感じになって正しいパースで貼れる
231デフォルトの名無しさん:2010/11/17(水) 23:09:50
>>230
>テクスチャ座標を4要素で扱うんだ
ここからすでにわかんね
テクスチャ座標はuは横でvが縦ってところが俺の限界だ
232デフォルトの名無しさん:2010/11/17(水) 23:18:54
ヒント:
3次元テクスチャの座標は3次元
x, y, z, w の w
233デフォルトの名無しさん:2010/11/17(水) 23:31:22
久しぶりにプログラミングをしようと思ったら
d3dx9d_43.dllが見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。

というエラーが出ます
ビルドはできてるのですが、デバッグで開始をしようとするとエラーが出ます。どうしたら良いでしょうか?
234デフォルトの名無しさん:2010/11/17(水) 23:43:48
クリーンしたらできました
ほんとうにありがとうごいました
235デフォルトの名無しさん:2010/11/18(木) 03:32:56
SDKをインストールしたりして最新版のをアンインストールしたからだと思うのですが
xファイルの関連付けか無くなってたので、関連付けようしようとしてDxViewerを使おうとすると
MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした
と出ます
DxViewerのソリューションをクリーンしてビルドしてもさっきみたいに治りません。
どうすれば良いでしょうか?
236デフォルトの名無しさん:2010/11/18(木) 04:04:25
VisualC++2008ランタイムをインストールする
237デフォルトの名無しさん:2010/11/18(木) 04:25:08
>>236
http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=ja
ありがとうございます
これをやりましたができませんでした
238デフォルトの名無しさん:2010/11/18(木) 10:46:27
/MTでビルドする
239デフォルトの名無しさん:2010/11/18(木) 10:50:49
>>238
ありがとうございます
それをするとLIBCMT.libと競合して未解決のエラー等がたくさん出ます
というかそもそもビルドせずとも使えてたEXEなのですがどうなってしまったのでしょうか
240デフォルトの名無しさん:2010/11/18(木) 10:55:45
新しくビルドした方のexeにちゃんと関連付けされてないんじゃないの?
241デフォルトの名無しさん:2010/11/18(木) 10:58:10
>>240
いえ、リリースでビルドしてリリースフォルダからDxViewer.exeを起動しても
「MSVCR90.dllが見つからなかったため,このアプリケーションを開始できませんでした」
とエラーが出ます
242デフォルトの名無しさん:2010/11/18(木) 11:31:16
とりあえず開発環境を再インストールしなよ
どっか別のPCのインストールフォルダをそのままコピって使ってるとかじゃないの?
243227:2010/11/18(木) 13:23:49
とりあえず新しく教えていただいた用語でぐぐったところ、
少し理解が深まりました
ありがとうございます
244デフォルトの名無しさん:2010/11/19(金) 10:51:48
XAudio2で同時に複数の音源を再生する、というのが上手くいかないです。

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

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

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

ご教示ください。
245デフォルトの名無しさん:2010/11/19(金) 13:27:38
頂点数6000で
三角+四角面が1800なら
1800ポリゴンのローポリですよね?
246デフォルトの名無しさん:2010/11/19(金) 13:28:34
DirectXに四角面は無いです
247デフォルトの名無しさん:2010/11/19(金) 13:30:35
まーたはじまった
248デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/19(金) 14:11:50
>>248
何かこう板の名前を見ずに質問する輩が多いな
スレチどころか板違いだ
ここはDirectX"プログラミング"質問スレ
250227:2010/11/19(金) 14:41:21
>>244
普通にマスタリングボイス1、ソースボイス2で出来るはず
めちゃくちゃな音が出るってことは
フォーマットデータとか不正なメモリ書き込みでデータが壊れてるんじゃないか?
251250:2010/11/19(金) 14:48:50
名前ミスでござる
252248:2010/11/19(金) 14:58:23
>>249
プログラミングスレだったんですか!
失礼しました。
253デフォルトの名無しさん:2010/11/19(金) 15:36:50
インデックスちゃんっていらない子なの?
254デフォルトの名無しさん:2010/11/19(金) 16:09:50
LOD使いたい場合は自分でシェーダー書くしかないですか?
255デフォルトの名無しさん:2010/11/19(金) 16:46:01
>>248
サターンなんか1000円で売ってるよ
256デフォルトの名無しさん:2010/11/19(金) 17:06:10
>>250
1個だと普通に鳴るのですが、
全く同じソースボイスの作り方で2個同時だと鳴らないのです。
257デフォルトの名無しさん:2010/11/19(金) 17:25:56
>>256
言語は何だろ?
.NETでGC働いてリリースされてるとかないよね。
258デフォルトの名無しさん:2010/11/19(金) 21:35:39
>>256
2つの入力のサンプルレートが違うんじゃない?
259デフォルトの名無しさん:2010/11/19(金) 23:03:03
DirectXSDKってkinnectに対応していますか?
260デフォルトの名無しさん:2010/11/19(金) 23:11:30
>>254
プログレッシブメッシュ
261デフォルトの名無しさん:2010/11/19(金) 23:14:36
>>259
してないんじゃない。
KinectはKinect SDKが別で出るでしょ。多分。
262デフォルトの名無しさん:2010/11/19(金) 23:17:03
>>259
kinnectはXBOXが主だから、XNAが先でしょ
263デフォルトの名無しさん:2010/11/19(金) 23:32:29
現在DirectX11を勉強しようと思っています。
DirectX11関連本を探したところ、「ちょっとだけDirectX11」「DirectX11 3Dプログラミング」の2つくらいしか出てないみたいなのですが、
これらの本の評価はどんな感じなんでしょうか?
264デフォルトの名無しさん:2010/11/20(土) 00:06:52
>>963
洋書が読めないのなら、DirectX9にしとけ
265デフォルトの名無しさん:2010/11/20(土) 05:17:14
>>263
後者持ってるけど、全くのゼロからだと厳しいかもしれない。
もしDX9を勉強してないならそちらからやった方がいいかもしれない。
266デフォルトの名無しさん:2010/11/20(土) 05:32:48
とりあえずネット上で解説しているサイトを見ていけそうだったらそのまま11で行って
無理そうだったら9へいけば
9より解説しているサイトは少ないがそれでもなんこか11の解説サイトあったから(携帯なのでアドレスまでは面倒なので載せないが)
267デフォルトの名無しさん:2010/11/20(土) 13:12:05
http://ichigo-up.com/cgi/up/qqq/nm27902.jpg
そこまで物体との距離は近くないように感じるのですが
カメラに近づくとこんな感じになってしまいます。なぜでしょうか?
DXUTを使ってます。
268デフォルトの名無しさん:2010/11/20(土) 13:22:45
>>267
D3DXMatrixPerspectiveFovLHの第4引数で、カメラの写る範囲を指定できるんだよ
>>268
ありがとうございました
269デフォルトの名無しさん:2010/11/21(日) 10:19:26
>>267>>268は自演なのか?
で、お礼のレスを誤爆して268に書いちまったとw
270デフォルトの名無しさん:2010/11/21(日) 10:32:51
自己解決です
271デフォルトの名無しさん:2010/11/21(日) 11:03:34
こんにちは。
業務アプリでちょっとした3Dデータを描画することになりました。
(ちょっとしたと言いましたがDirect3Dは初めてなので大変ですが)

Direct3D10のサンプルを見ながらなんとか3Dデータは描画することは
できました。さらにラインストリップで全体を四角で囲みたいのですが、
そのときに奥の角も3Dデータに隠れないようにとのことで、処理としては
Zを無視して描画ができるようなことは分かったのですが、実際にZを
無視して描画するためにどのような設定をすればよろしいのでしょうか。
272デフォルトの名無しさん:2010/11/21(日) 11:24:30
>>269
さすがに>>258辺りに言うつもりだったのを番号間違えただけだと思うがw
273デフォルトの名無しさん:2010/11/21(日) 13:48:56
3Dモデルを中心にカメラを移動させたいのですが、
右周りさせた場合カメラの位置をx、y、zにどのような値を加算すれば
360度(一周)した時に元の位置に戻ってくることが出来るのでしょうか
274デフォルトの名無しさん:2010/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θ

θを適当に増やすと回転する
三角関数が分からなければ
ttp://www.nicovideo.jp/watch/sm12492903
が面白かった
275デフォルトの名無しさん:2010/11/21(日) 14:10:35
>>271
深度テストを無効にする。
ttp://msdn.microsoft.com/ja-jp/library/bb205074(VS.85).aspx

シェーダ側で設定してもOK
276デフォルトの名無しさん:2010/11/21(日) 14:23:21
>>275
271ではないですけど、
シェーダー内からの設定はどうすればいいんですか?
277デフォルトの名無しさん:2010/11/21(日) 14:23:45
カメラを回したいときは
どうせ横だけじゃなくて縦にも回そうとしたときに詰むんだから
カメラの初期姿勢を行列で拡縮・回転・移動すれば楽だと思うの
視点を変えたい場合でも初期姿勢を入れ替えるだけでイイしね
278デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/21(日) 15:29:35
>>278
ありがとうございます
こういう書き方できたんですね!
280デフォルトの名無しさん:2010/11/21(日) 15:57:52
>>277
>>273じゃないけどkwsk
281デフォルトの名無しさん:2010/11/21(日) 17:06:33
>>280
ほい、これでカメラ回したい放題
最低限のことしか書いてないから後は使いやすいようにカスタマイズすればいいと思うよ

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

そうすれば
ワールド座標−3Dモデル座標−ゲタ(横用)座標A−ゲタ(縦用)座標B−カメラ座標
としてゲタをまわしても楽だぞ
283デフォルトの名無しさん:2010/11/21(日) 23:02:33
>>275
>>278
271です。
シェーダー側でもできるんですね。
ありがとうございます。大変参考になりました。

284デフォルトの名無しさん:2010/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)を描画に使用してもうまくいかない。
285284:2010/11/22(月) 11:14:52
// !↓以下は、Draw()関数を書き換えずに、角度だけを求めてモデルに渡すための追記述

// クォータニオンから回転行列を求める
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));
286デフォルトの名無しさん:2010/11/22(月) 11:23:59
ゲームパッド入力はどのAPIを使うべきでしょうか?
DirectInputはサポートしなくなったしXInputは専用ゲームパッドしか動かないみたいだし
287デフォルトの名無しさん:2010/11/22(月) 11:25:35
XInputってキーボード・マウスは動かないのか
これからどうやっていけばいいんだろ?
288デフォルトの名無しさん:2010/11/22(月) 11:34:55
特殊な入力方法を使わないならWin32APIで十分
289デフォルトの名無しさん:2010/11/22(月) 12:10:32
あるモデルAの行列 a_mat が、あるモデルBの行列 b_mat にたいして、
左にあるか(a_mat._41 < 0)、右にあるか(a_mat._41 >= 0)、の判定は、
どのようにしておこなえますか?
290デフォルトの名無しさん:2010/11/22(月) 12:15:46
DirectInputってもう使えないの?それとも使えるけど、バグがあっても修正しないよってだけ?
291289:2010/11/22(月) 12:18:53
質問内容が微妙でしたので、書き換えます。
あるモデルAの行列を原点としたときの、ある行列Bの位置づけは、どのようにしたら取得できますか?
行列Aと行列Bは等しいワールドに置かれているものとします。
292デフォルトの名無しさん:2010/11/22(月) 12:26:52
行列の位置という言葉の意味がよくわからんが
vをゼロベクトルとして v*B - v*A とか?
293292:2010/11/22(月) 12:29:43
分かると思うけどvは全部ゼロじゃなくて(0,0,0,1)ね
294デフォルトの名無しさん:2010/11/22(月) 12:39:15
>>290
DirectInputとかDirectSoundってDirectx8でしょ?
今売ってるGPUとかはDirectx8〜11ってのが多いから、これがDirectx9〜ってなったらGPUとかOSでも認識しなくなるんじゃない?
295デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/22(月) 12:54:01
>>291
Aの逆行列にBをかければよいのでは
297デフォルトの名無しさん:2010/11/23(火) 10:20:50
ステージを作ろうと思ってフリー素材のお城を取ってきたんですけど10万ポリゴンぐらいあって読み込むだけで2分ぐらい掛かります
ゲームの街のポリゴン数ってもっと少ないですか?
それとも分割して表示するとかで一お城のポリゴン数自体はこんなものなのでしょうか?
お城はこれですhttp://sketchup.google.com/3dwarehouse/details?mid=3c144b8c49657ea4892861a071be7a12&prevstart=96
298デフォルトの名無しさん:2010/11/23(火) 10:46:20
directX9で作ってるんですがdirect MusicよりXAudio2を使った方がいいんですか?
299デフォルトの名無しさん:2010/11/23(火) 10:47:45
マップのポリゴン数で10万ポリゴンくらいは普通です。
影響するのがメモリサイズであって、ティクスチャに大きく影響されるでしょう。
.jpgを使うと極端に遅くなるかもしれない。
そのまま使う事はほとんど無く、
ゲームエンジンに合わせて最適化するだろうし、構造を変えるかもしれない。
また、ターゲットPCを基準にして大きすぎるか小さいかの判断がされる。

ティクスチャ無しで読み込んで どの程度なのか確認するのもひとつの方法。
300デフォルトの名無しさん:2010/11/23(火) 10:48:56
>>298
DirectSound使ってますぅ
動かないPCは死ねですぅ
301デフォルトの名無しさん:2010/11/23(火) 10:50:57
>>299
ありがとうございます
やってみます
302298:2010/11/23(火) 11:08:41
XAudio2ってMIDI再生できないのか
使う意味なかった
303デフォルトの名無しさん:2010/11/23(火) 11:30:47
>>299
やってみました。
全部jpgだったのでマテリアルからテクスチャの項を消してやりました。
若干早くなった気もしますが2分ぐらい掛かりました。拡張子は何でするのが良いのでしょうか?

ということでまず何をすれば良いのでしょうか?
http://www.nicovideo.jp/watch/sm9661189
昔たまたま見つけたこれが印象的なのですがどうでしょうか?
304デフォルトの名無しさん:2010/11/23(火) 11:44:47
ポリゴンのファイル形式が何であって
ゲームエンジンの要求するファイル形式があるはず

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

2分くらいなら遅くないと思いますが、メモリ消費の方が心配。
305デフォルトの名無しさん:2010/11/23(火) 11:45:05
既存のコードはともかく、今更新規でDirectMusicはないな
306デフォルトの名無しさん:2010/11/23(火) 12:13:24
>>304
ありがとうございます
ポリゴンのファイル形式はxファイルでゲームエンジンはbulletで、要求する形式はわかりませんが普通に他のはxファイルでやってます
2分で遅くないのですか…つまりどのみちファイルを読み込む処理は絶対に必要だからファイルのサイズに比例する。早くしたいならポリゴンを減らすしかないみたいな感じですか?>>303の処理は読み込んだ後動かしてる時のメモリを減らす処理ということですね
それと、メモリはタスクマネージャーで見ると、お城があるときは152308Kで、コメントアウトすると67000kでした
307デフォルトの名無しさん:2010/11/23(火) 12:35:40
>>306
2分が遅くないってことはないでしょう・・・少なくともゲームだと遅いと思いますよ。
あなたのPCスペックがわからないので、一概には早い遅いと言えないですが。

また、巨大なマップでもドカっと読み込むのではなく、エリアごとに分割しておいて最初に必要な
場所だけロードし、他の処理中に読み込むとかいう方法もあります。
物体が小さいのに、ポリゴン数が多いモデルデータはそもそもゲーム向けではない気もしますし。
308デフォルトの名無しさん:2010/11/23(火) 12:42:20
もしX-Fileがテキスト形式だったらぶっ殺しものだが、まさかそんなことはないよな。
309デフォルトの名無しさん:2010/11/23(火) 12:49:24
>>307
ありがとうございます
>>308
はい。
バイナリでやってみます
310デフォルトの名無しさん:2010/11/23(火) 12:51:53
>>306
うーん、それじゃあね
そのXファイル3DデータをアップローダーででもUPしてくれれば、調べる。
これ以上は具体的に最適化を考えないと 答えにならない。

読み込みが遅くとも、最初の1回だけだから大きい問題ではない。
311デフォルトの名無しさん:2010/11/23(火) 13:00:06
エンジンが別スレッドで裏読みしてるのを完了復帰で待っているオチとか
312デフォルトの名無しさん:2010/11/23(火) 13:03:21

イナリにする方法がわかりません教えてください
313デフォルトの名無しさん:2010/11/23(火) 13:04:04
ホントにロードだけで時間食ってるのかが怪しいところでもあるよね。
とりあえず>>310
314デフォルトの名無しさん:2010/11/23(火) 13:09:16
Xファイルがあまり速くない、バイナリにしても変化無いよ
大きいマップなんかは5分くらい待たせるから、2分だと速い方
315デフォルトの名無しさん:2010/11/23(火) 13:22:18
316デフォルトの名無しさん:2010/11/23(火) 13:33:36
DirectXビュワで20秒で開けるよ
Core2Duo3GHz
GeForce9600
317デフォルトの名無しさん:2010/11/23(火) 13:36:50
コード書くの面倒だから俺もDirectXViewerで開いた。

15秒で開けた@C2D Q9550/RAM4GB/9800GT
318デフォルトの名無しさん:2010/11/23(火) 13:44:35
そういえば自分もDxビューワだと15秒ぐらいで開けます
でもプログラム中で開いたら、普段は5秒ぐらいで窓が開くのに
お城があると2分はかかります。もしかしてそっちのミスでしょうか
319デフォルトの名無しさん:2010/11/23(火) 13:50:08
バイナリと言っていたのにテキストじゃないか。
遅いのは当たり前、死ねよ。
320デフォルトの名無しさん:2010/11/23(火) 13:50:32
むしろ何でxファイルに変換したのか知りたい
321デフォルトの名無しさん:2010/11/23(火) 13:54:12
ビューワもDirectXプログラムだから内部でオブジェクトを置いてカメラをセットして・・・ってやってる
同じような時間で開けないなら何かしら理由があるはず
322デフォルトの名無しさん:2010/11/23(火) 13:54:14
もうとりあえずソース晒しちゃえよ
323デフォルトの名無しさん:2010/11/23(火) 13:57:05
>>319
すいません。バイナリとは言ってません。はい(その通り、テキスト形式でした)。バイナリでやってみます。というニュアンスでした。
>>320
他に何か良いのがあったら教えてください。

それから虎のに入れたら3分ぐらい掛かりました
今、一生懸命バイナリツールを組みた立てますが、クリエイトデバイスとかで未解決のエラーが一杯出て全然できません。誰か下さい。
324デフォルトの名無しさん:2010/11/23(火) 14:00:35
プログラムに問題がありそうなのにバイナリにしようとするのは筋違い。
仕事増やすだけで根本的な解決をしようとしてない。
325デフォルトの名無しさん:2010/11/23(火) 14:01:32
虎のってなんだ。エスパーしてtiger.xか。
それで3分とか異常だろ、バイナリ/テキストどうのこうの言うレベルじゃない。

あとやる気が感じられない。面倒くさいだの誰か下さいだの。死ねよ
326デフォルトの名無しさん:2010/11/23(火) 14:06:25
使用しているエクスポータでバイナリを吐けばいいだけの話。
何で変換が必要なのか意味不明。
327デフォルトの名無しさん:2010/11/23(火) 14:14:58
>>321
>>324
ありがとうございます。エスパーしてください。どうしてでしょうか。
>>325
そうです。チュートリアル6のタイガーにそのまま入れたところ2分ぐらい掛かりました。
それから今必死にバイナリのプロジェクトを作ってるのです。しかしプログラム経験自体浅いのでなかなかできないのです。
サンプルのエンプティープロジェクトに組み込もうと思ったのですが
ImeUi.obj : error LNK2019: 未解決の外部シンボル _ImmSetConversionStatus@12 が関数 "long __cdecl ImeUi_ProcessMessage(s
こんなエラーが20個ぐらい出てます。プロパティで追加の依存ファイルの設定と、ユニコード文字の設定としたのですが他に何かしないといけませんでしたっけ?
>>326
バイナリで出力する設定がありません。
328デフォルトの名無しさん:2010/11/23(火) 14:34:45
バイナリ変換ツールコンパイルできました
http://www1.axfc.net/uploader/C/so/125598
虎に入れたのと一緒に入れときます
やはり2分はかかります。何かおかしいのでしょうか?
329デフォルトの名無しさん:2010/11/23(火) 15:00:27
D3DXのヘルパーでロードしてくるのがクソ遅いのは判ったけど・・・
さすがにコレは繋がった1つのマップとしてはポリゴン数多すぎ(118019ポリ)。
そもそもゲーム考慮してつくってないんだろうしこのモデル。
XSIで開いてみたけど開くのもクソ時間かかった。

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

ところでなんでこのオブジェクト、デフォ姿勢が垂直に突き刺さってんの?
330デフォルトの名無しさん:2010/11/23(火) 15:23:33
この3Dデータ、壊れてる感じがする。
変換するときに狂ったのかな
何を使ってデータ変換したの?

変なXファイルだ、動くから間違いではない。
独自形式ならば一瞬で読み込める。
331デフォルトの名無しさん:2010/11/23(火) 15:42:28
デバッグビルドで動かしてるとかw
リンクするLIBがリリース版なのと、自分のプロジェクトの設定がデバッグ情報無しになってるよね?
332デフォルトの名無しさん:2010/11/23(火) 16:27:57
>>329
わかりました。ありがとうございます。デフォ姿勢は適当に出力したからです
>>330
壊れてるかはわかりませんが、ちょっと変なところに飛んでるのはただの消し忘れです。
モデリングツールはBlenderです
>>331
すいません。理解できません。具体的にどうすれば良いのでしょうか?
333デフォルトの名無しさん:2010/11/23(火) 16:55:25
>>331
デバッグ無しで開始にしたらとても早くできました
ありがとうございました
>>329
>>330
素人乙wwwwwwwwwwwwww
334デフォルトの名無しさん:2010/11/23(火) 17:03:44
二度と来なくていいぞクズ
335デフォルトの名無しさん:2010/11/23(火) 17:08:46
>>333
それが協力しようとしてくれた人に対する態度か。
お前もド素人だろ(笑)
336デフォルトの名無しさん:2010/11/23(火) 17:08:47
BlenderのXファイルは腐ってるさ
337デフォルトの名無しさん:2010/11/23(火) 17:12:18
挨拶すらできない奴は登校拒否の中学生と相場が決まっている。相手にするな
338デフォルトの名無しさん:2010/11/23(火) 17:20:47
PC質問版ってやたら>>337みたいな奴いるよな
全角がダメだの、挨拶がどうだの

ITドカタは先輩に土下座して情報教えてもらうのかもしれんが、今時PCなんて趣味レベルなのに俺らの常識がPC界の常識(キッ
みたいにイキりたっててうざい。肩のPawer抜けよ
339デフォルトの名無しさん:2010/11/23(火) 17:24:44
(キッ ってなに?w
Pawer?wwwww

釣り針でけぇから食いついちゃうけど、
お前みたいなやつの、教えてもらって当然みたいな考えがウザイんだよ。
340331:2010/11/23(火) 18:37:09
まあ、自分のDXViewerで早く開けてるのに、
同じような自前プログラムで、開けるけど遅いって言えば、
デバッグ実行してるから?って思っただけなんだけど…

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

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

お前ら肩の力を抜け、333が本人とも限らないだろう、
30分ほど前の一つ前のレスでデバッグビルドを理解出来ないと言ってるし
まあ、それだと解決してないことにもなるけどw
341デフォルトの名無しさん:2010/11/23(火) 19:06:00
真ん中に明らかに必要ない情報があるな
342デフォルトの名無しさん:2010/11/23(火) 19:26:40
いや 333 が本人のわけないだろ…
343デフォルトの名無しさん:2010/11/23(火) 21:45:43
zバッファの計算を練習していたのですが、
ニアクリップ2、
ファークリップ1000の時、

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

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

グラフにしたものは
ttp://up3.viploader.net/ippan/src/vlippan170142.jpg
です
344デフォルトの名無しさん:2010/11/23(火) 21:50:41
そんなもんです
ニアクリップの2倍近辺で0.5
345デフォルトの名無しさん:2010/11/23(火) 21:52:07
>>344
あまりの衝撃に開いた口がふさがりません
346デフォルトの名無しさん:2010/11/23(火) 21:56:57
>>344
ありがとうございました
口が開いたままでお礼を忘れてました
347デフォルトの名無しさん:2010/11/23(火) 22:10:18
http://msdn.microsoft.com/ja-jp/library/cc324546.aspx


>近くの平面の距離に対する遠くの平面の距離の比率を 100% とした場合、
>深度バッファ範囲の 90% がシーンの深度範囲の最初の 10% に費やされる。
>娯楽や風景のシミュレーション用の典型的なアプリケーションでは、比率 (遠くの平面 / 近くの平面) がどこでも 1000 から 10000 の間である必要がある。
>比率が 1000 の場合、深度バッファ範囲の 98% が深度範囲の最初の 2% に費やされ、比率が高くなるにつれて分布状態が悪くなる。
348デフォルトの名無しさん:2010/11/24(水) 00:05:20
なんだ、またあいつが出没したのか。
349デフォルトの名無しさん:2010/11/24(水) 07:03:33
モーションデータっていうのは、
全部自分の手で座標などを打って実現するものなのでしょうか?

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

って書いたとこでそれDirectX関係ないよねってことに気づいた
352デフォルトの名無しさん:2010/11/24(水) 12:38:06
別にいいんでね
353デフォルトの名無しさん:2010/11/24(水) 12:47:01
ツールで作ったボーン・スキンのウェイトってそのままXで反映される?
354デフォルトの名無しさん:2010/11/24(水) 12:53:22
それDirectX関係ないよね
355デフォルトの名無しさん:2010/11/24(水) 13:09:13
反映されるかどうかはエクスポータがどうなっているか次第
そもそも何を使っているかも書かずに情報が得られると思っているんだろうか?
356デフォルトの名無しさん:2010/11/24(水) 13:10:09
blender
357デフォルトの名無しさん:2010/11/24(水) 13:13:49
どのツールかというより
Xファイルにウェイトの情報はあるのかとか
358デフォルトの名無しさん:2010/11/24(水) 13:24:59
いつもの荒しか?
359デフォルトの名無しさん:2010/11/24(水) 13:42:36
blenderなんてスクリプトかんたんに組めるんだし自前のエクスポーター作っちゃえYO!
360デフォルトの名無しさん:2010/11/24(水) 13:43:48
Xファイルはもう推奨されてないしなぁ。。。
361デフォルトの名無しさん:2010/11/24(水) 13:44:38
じゃあ何が推奨されてるんですか?
362デフォルトの名無しさん:2010/11/24(水) 14:31:29
最終的にはビデオメモリに直接転送して使えるバイナリデータが最強だと思う
363デフォルトの名無しさん:2010/11/24(水) 14:38:02
ファイルって全部.exeの中に入れてしまいたいんだけど
どうやればいいの?
364デフォルトの名無しさん:2010/11/24(水) 15:12:30
ウン百MもあるようなEXEファイルを実行したくはないけどな…

リソースとして取り込むか
ファイルなんて基本ただのバイナリ列なんだから
ファイルをヘッダーにコンバートするツールでも作ってincludeしとけばいいんじゃね?
365デフォルトの名無しさん:2010/11/24(水) 17:44:17
どうやって?
366デフォルトの名無しさん:2010/11/24(水) 17:48:03
とりあえずXファイル使いたいなら
メタセコに5000円払うとプラグインにkeynoteってのがあってそれが使える
複数アニメーションも対応してるしとりあえず不満はない感じ

メタセコ+rokdeboneって組み合わせもいい
こっちはタダ
367デフォルトの名無しさん:2010/11/24(水) 19:37:55
DirectXってXファイル以外の形式になにか対応してたっけ?
368デフォルトの名無しさん:2010/11/24(水) 19:50:54
>>367
用意された関数でロードって意味ではXファイルだけ
自分でロードしたらなんでもいけるんちゃう?
369デフォルトの名無しさん:2010/11/24(水) 20:29:35
>>365
それぐらい自分でいろいろ考えようや

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

コレをつかって虎のチュートリアル
http://www5b.biglobe.ne.jp/~mya_a/dx/Meshes.zip
EXEだけで動くはず?
370デフォルトの名無しさん:2010/11/24(水) 20:37:37
3Dツールを自前で作る猛者はおらんのか、最近のジャップは。
371デフォルトの名無しさん:2010/11/24(水) 21:12:51
市販のモデリングソフトに自前のエクスポータという組み合わせが一番効率がいい。
372デフォルトの名無しさん:2010/11/24(水) 22:00:17
>>369
ワンダーウィッチみたいだな
373デフォルトの名無しさん:2010/11/24(水) 22:06:39
しかしそこまでしてExeに含める意味はあるのかと
まぁ、ある種の隠蔽にはなるかもしれんが
374デフォルトの名無しさん:2010/11/24(水) 22:24:26
exe が極端にでかいと、セキュリティソフトのチェックが長引いて起動に時間がかかることがある
UAC が絡むとやばいことになる
しかも XP で開発してると気づかないからめんどい
375デフォルトの名無しさん:2010/11/24(水) 23:22:07
カメラが向いている方向にキャラクターを移動させたいのですが、
どういった計算式になるのでしょうか?

例えば、カメラがキャラクタのどの方向を移していてもカメラから見て上下左右自由に動けるような感じです
376デフォルトの名無しさん:2010/11/24(水) 23:44:35
>>375
カメラの視線ベクトルをいい感じに加工してキャラに足してみればよくね?
377デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/11/25(木) 00:36:02
単位ベクトルも知らんレベルとなると
まず、なんか入門書がほしいところだけどなんかいいのないの?>他の人
380デフォルトの名無しさん:2010/11/25(木) 00:41:40
とりあえず行列とベクトルについてググってみるといいと思う
381デフォルトの名無しさん:2010/11/25(木) 00:44:30
やっぱdirectXって高校の数VCやってない人には難しいっぽいね
382デフォルトの名無しさん:2010/11/25(木) 00:47:43
高校のとき数I・Aしかやんなかったけど、普通にDirectX使ってゲーム作ってますん。
ぶっちゃけ言うほど詳しくしらなくても、行列の役割とかベクトルの役割知ってればDirectX
は使えるけど、ただ知ってたほうがいいのよって感じ。
趣味グラマーなら役割しってて使えるだけでいいと思うけど
383デフォルトの名無しさん:2010/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) ;

http://loda.jp/vip2ch/?id=797

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

ビュー空間上でのスティックの向き * ビュー行列の逆
→ワールド空間上でのスティックの向き
385デフォルトの名無しさん:2010/11/25(木) 03:37:48
よく考えたらXZ平面で移動させるには
>dir.y = 0 ;
>D3DXVec3Normalize ( &dir, &dir ) ;
じゃダメだなぁ
XYZ移動ならそのままでいいんだが
純粋に計算済みビュー行列からXZ移動距離を算出するには一工夫いりそうだ
視線のY方向を0にしたベクトルから計算すればいけるけどなんか2度手間だし良い方法ないかな
386デフォルトの名無しさん:2010/11/25(木) 04:29:05
よく分からんけどクオータニアン関係の関数使えばいいんじゃないの?
DirectXは基本的に始点と終点の位置・姿勢さえ分かれば中間の計算をしてくれる関数が用意されてるよね
387デフォルトの名無しさん:2010/11/25(木) 06:51:35
>>385
カメラの位置と視線の先情報はLookAt関数作るのにいるんだからあるだろ
そのベクトルをY情報消して単位ベクトル求めて使うだけやんけ
何1人でぶつぶつ言って混乱しとるんじゃ
388デフォルトの名無しさん:2010/11/25(木) 07:19:47
んなことはわかっとるわボケ
固定位置カメラなら何も問題ないけど
実用で考えたらカメラは常に移動回転してるものとして考えないといけない
だとすると回転移動後のカメラ位置から
またわざわざ視線を抜いてきてY抜いて再計算するなんて無駄以外のなにものでもないだろ?

まぁ、ビュー逆行列のY軸が天井方向になるように回転させて解決したけどな
389デフォルトの名無しさん:2010/11/25(木) 07:29:11
そもそも行列で管理しようとするのが間違いなんだよ。
ベクトルと位置を分離したパラメータでもって、
必要なときにカメラ用の行列を作るなり進行方向に利用するなりすればいい。
なんでわざわざ混ぜたモノを使おうとするのか意味不明。
390デフォルトの名無しさん:2010/11/25(木) 12:27:11
全て透明のテクスチャを貼ったのですが真っ白になってしまいます
D3DXCreatePolygonで作った板ポリゴンに貼ったら透明になったのでテクスチャは合ってると思うのですが
マテリアルの問題でしょうか?どうすれば良いのでしょうか?
391デフォルトの名無しさん:2010/11/25(木) 12:34:45
>>390
デバイス->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
392デフォルトの名無しさん:2010/11/25(木) 12:44:30
すいません
できました
ごめんなさい
393デフォルトの名無しさん:2010/11/25(木) 12:46:40
>>391
ありがとうございました
394デフォルトの名無しさん:2010/11/25(木) 16:08:32
当方DirectX初心者です
全画面でDirectXを使っているアプリケーション(WindowsMediaPlayerや3Dゲーム)に文字や図形を重ね描きしたいのですが、
参考になるサイトを教えてもらえませんでしょうか?

イメージとしてはニコ動のコメントの様な感じです
(アレがDirectX使っているわけではなさそうですが)
395デフォルトの名無しさん:2010/11/25(木) 16:21:02
初心者にどうこう出来るレベルの話じゃない
君がやりたいことを簡単に実現する方法はDirectX自体にはないよ

どうしてもやりたいなら
DirectX フック
でぐぐれ
396デフォルトの名無しさん:2010/11/25(木) 16:48:48
ggってきましたが
敷居が高すぎてちょっと先行き不透明すぎでした
とりあえず読んでます

ありがとうございました。
397デフォルトの名無しさん:2010/11/25(木) 17:08:56
http://up3.viploader.net/pic2d/src/viploader2d674702.jpg
せっかくトゥーンシェーダーにしたのに間抜けな感じになります
エッジの太さは調節するにしても、左はきめが細かくてアニメっぽいのに
右は荒くて間延びした感じに感じます。どうすれば左のようにできますか?
398デフォルトの名無しさん:2010/11/25(木) 17:29:29
どうしたらって言われても
現在のモデルのポリゴンの具合も輪郭の描画方法も分からないのに何を言えと

ぱっと見た感じ言えるのは輪郭の検出アルゴリズムがあまり良く無さそうなのと
輪郭の描画にフィルターが掛かってないからジャギジャギしてるくらいか
399デフォルトの名無しさん:2010/11/25(木) 17:33:31
この情報小出しな感じは、いつものトゥーン君じゃないのか?
400デフォルトの名無しさん:2010/11/25(木) 17:39:34
>>398
ありがとうございます
モデルは全く同じです。具合とか輪郭の描画方法とかはよくわかりません
とにかく、どうしたら良いのか全くわからなかったので質問させて頂きました
「シェーダーを自分で考えて書く」ような話になると全く無理です
とにかくトゥーンシェーダにしたらそれっぽくなると思っていたので、そういうトゥーンシェーダとか、エッジフィルターとか
どういう技術によって左のようになるのか教えてもらおうと思いました。どうすれば良いのですか?何のフィルターをかけるのですか?
>>399
はい
401デフォルトの名無しさん:2010/11/25(木) 17:49:19
そういえばエッジフィルターはこれのまんまコピーです
http://maverickproj.web.fc2.com/pg41.html
ので、エフェクトファイルはこれを使って描画してると思います
402デフォルトの名無しさん:2010/11/25(木) 18:08:31
エッジフィルターは俺の知ってる範囲では3種類くらいあって
・深度
・法線
・ID

深度や法線で精度を上げすぎると不必要な線が大量にできるからIDをうまく使うんだ
IDってのは頂点カラーと同じようにメッシュに持たせればいい

あとはマルチレンダーターゲットで深度・法線・ID・通常のレンダリングと出力し
2パス目でピクセルごとに隣接するピクセルの上記情報との差分が一定以上だったらエッジとかやるんだよ

まんまコピーじゃなくて少しはサンプルをいじって何がどうなってるか確認すべし
403デフォルトの名無しさん:2010/11/25(木) 18:16:15
>>388
はぁ?
カメラ座標上の0,0,1ベクトルをワールドに直してやるだけ(その後の加工は省く)の話ちゃうんか?
まったく話が見えない
無駄って何?その計算削ると処理軽くなったりするわけ?
404デフォルトの名無しさん:2010/11/25(木) 18:20:28
自分でシェーダー書けないんじゃ話にならない
405デフォルトの名無しさん:2010/11/25(木) 18:22:21
いちいち変換したら処理が増えるだろjk
いちいち変換したら誤差も出るだろjk
406デフォルトの名無しさん:2010/11/25(木) 18:25:23
>>405
カメラ一個でか?
すごいな
どうぞ軽いカメラでも作っててください

(ああ、ほんとうに馬鹿なんだな・・・)
407デフォルトの名無しさん:2010/11/25(木) 18:29:12
誰と戦ってるの?
408デフォルトの名無しさん:2010/11/25(木) 18:32:38
>>402
ありがてぇ…ありがてぇ…
全く理解できません。専門的すぎます。シェーダーってサイトを見てもとっかかりから専門的すぎてついていけないんですよね…
精度ってのがキメの細かさですよね、http://maverickproj.web.fc2.com/pg41.htmlのソースで初期値的なものを若干変えたりするだけで実現できる物では無いんでしょうか
サイトとか見ても変数や数値がバーっと載ってるだけで、頭で全然イメージできないんですよね。
>>404
すいません。急にハードルが上がったきがして、諦め状態です

409デフォルトの名無しさん:2010/11/25(木) 19:29:16
ID3DXEffectって使い辛くないですか?
410デフォルトの名無しさん:2010/11/25(木) 19:38:27
別に
411デフォルトの名無しさん:2010/11/26(金) 00:04:00
不満だったら
SetVertexShaderとか
SetPixelShaderとか
D3DXCompileShaderFromFileとか使えばいんでね?
412デフォルトの名無しさん:2010/11/26(金) 02:19:19
シェーダーでのtex2Dとtex2Dprojなんですが、
使い分けがイマイチわかりません。
msdnにはw除算が入るとありますが、
普通にモデルに張る時でもw除算によって遠近補正があるはずなのに、
なぜ二つのサンプル方法があるのでしょう?

また違いを探るために、
tex2D→そのままサンプル
tex2Dproj→w除算してサンプル
と考えたとき、sdkサンプルをいじってtex2Dをtex2Dprojに書き換えて
みたんですが、違いが見あたらず困っています。
413デフォルトの名無しさん:2010/11/26(金) 04:47:16
>>412
wに相当するテクスチャ座標は設定してる?
2次元のテクスチャ座標じゃダメだよ。

それと、そのwは遠近補正のwじゃない。
414デフォルトの名無しさん:2010/11/26(金) 07:52:22
FBX SDKってメモリから読み込むための関数って用意されてる?
415412:2010/11/26(金) 11:34:05
>>413
これは遠近補正とはちがうんですか!
テクスチャ座標はBasicHLSLのサンプルの座標を
VS入力、出力、PS入力を4次元にしただけです。
なんのためのwなんでしょうか?
416デフォルトの名無しさん:2010/11/26(金) 11:46:45
>>415
ある意味遠近補正。
ただ、遠近の方向がカメラとは独立した向き。
417412:2010/11/26(金) 11:55:49
>>416
なるほど!
ということは
tex2D→自動で遠近補正
tex2Dproj→自分で設定したwで遠近補正
だからシャドウマップとかではライトからレンダリングした時のw
が必要で、そのwで割ることでうまくテクスチャが張られるということですね!
ありがとうございました!
418デフォルトの名無しさん:2010/11/26(金) 19:39:30
他のPCでは実行できるのですが大学のPCだとCreateDeviceが実行出来ません。
大学の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);
}
419デフォルトの名無しさん:2010/11/26(金) 19:45:41
頂点シェーダーが使えないPCだから
D3DCREATE_HARDWARE_VERTEXPROCESSINGじゃ作れないとかじゃ?
REFでトライする前に
D3DCREATE_SOFTWARE_VERTEXPROCESSING
でもトライしてみるとか
420デフォルトの名無しさん:2010/11/26(金) 19:52:01
421デフォルトの名無しさん:2010/11/26(金) 20:02:33
>>419
ありがとうございます。
試してみます。
422デフォルトの名無しさん:2010/11/26(金) 20:26:36
D3DDEVTYPE_REFのリファレンスラスタライザはSDKのデバッグランタイムが
インストールされてないと使えないだろ。
D3DDEVTYPE_HAL+D3DCREATE_HARDWARE_VERTEXPROCESSINGが失敗したら
D3DDEVTYPE_HAL+D3DCREATE_SOFTWARE_VERTEXPROCESSINGを試行するのが正解。
423デフォルトの名無しさん:2010/11/26(金) 20:34:44
だろ。
424デフォルトの名無しさん:2010/11/27(土) 00:38:12
だろだろ。
425デフォルトの名無しさん:2010/11/27(土) 00:48:26
だろだっでーにーなーなら
うーめらぬーめら
426デフォルトの名無しさん:2010/11/27(土) 01:27:31
で?
427デフォルトの名無しさん:2010/11/27(土) 10:26:32
でっていう
428デフォルトの名無しさん:2010/11/28(日) 18:17:52
今まで触ってきたXファイルは、FrameRootにMeshContainerがついてて、
そのなかにすべてのボーンの情報がはいっていたのですが、
(つまり、1つのXファイルに1つのMeshContainerしかなかった)

今、手元にあるXファイルは、FrameRootにMeshContainerがなく、
その子の子の子Frameあたりが、MeshContainerを持っています。
いくつかの別のフレームも同じように持っているっぽいです。

今まではメッシュデータからLockで取り出した頂点情報に、
そのままワールド変換行列をかけるだけで、あたり判定情報が取り出せたのですが、
この場合、メッシュデータから取り出した頂点情報は、
Frameの行列をかけたりしなければ、うまく取り出せないのでしょうか?
429デフォルトの名無しさん:2010/11/28(日) 18:21:09
元のデータが気に入らないのなら、自分で好きな形式に直せ。
ただそれだけの話だ。
430デフォルトの名無しさん:2010/11/28(日) 18:26:26
ごめんなさい、それができないから聞いています・・・

メッシュコンテナが持つ頂点情報は、つねに絶対的な座標(他の行列と計算済みでないか)ということも
知識として知っておきたいです
431デフォルトの名無しさん:2010/11/28(日) 18:47:49
>>428
>Frameの行列をかけたりしなければ、うまく取り出せないのでしょうか?
しらねーよ
やってみろよ
ダメだったらまたこい
432デフォルトの名無しさん:2010/11/28(日) 19:05:23
っていうのはいつもの質問者馬鹿にして遊んでるわけじゃなくて
こっちが聞く項目多くなるからなんだよね

ボーンの話が出てるけど、>>428がもし、ボーンが入ってるモデルの当たり判定を言ってるなら
その方法でそもそもメッシュまでの階層があろうがなかろうがうまくいくわけないんだよね
それがうまくいってたっていうからまたややこしい

ボーンは関係なくて、単にモデルの中心からの判定やっててこのたび階層構造にして
当たりの位置が階層ついたフレームにのってて位置がアレなんですって話なら
今回のも相談もわかるんだけど・・・

ぶっちゃけ、
ボーンはまったく関係なくて
「普通の階層構造のあるXファイル」と
「フレームがルートだけのXファイル」の話なんじゃねーの?
って思わなくもないんだけどボーンボーンっていうからとりあえず問題の切り分けをやってみてほしいと思ったりして・・・
そんでそれってのはいくつか試せばはっきりわかるわけで・・・って話
433デフォルトの名無しさん:2010/11/28(日) 19:28:17
MAXの某プラグインで吐き出したXファイルが
Meshが複数あるXファイルになった記憶がある
でも単に1つのモデルのなかに複数のモデルが入ってるのと同じ状態だから
メッシュコンテナの数だけ当たり判定をすれば今までと全く同じ方法でいけるんじゃない?
434デフォルトの名無しさん:2010/11/28(日) 20:19:49
フレームがボーンになっているのなら、
そもそもスキンウエイトをかけないと当たり判定なんて出来ない。
435デフォルトの名無しさん:2010/11/28(日) 20:25:44
>>428
まずプログラム云々以前に理解していないと話にならない部分、
フレームとメッシュとボーンとスキンウエイトの関係を説明してみろ。
436デフォルトの名無しさん:2010/11/28(日) 20:41:05
説明できないほどの素人ならば、
サンプルのXファイルと、プログラムソースコードを UPするのが解決への近道。

データとコードは嘘つかない。
437デフォルトの名無しさん:2010/11/28(日) 21:16:40
つまんねーことには
相変わらず偉そうだよね
438デフォルトの名無しさん:2010/11/29(月) 00:30:31
XAudio2ってIUnknownじゃないんだな
スマートポインタもうまく使えなくてわけわからん
439デフォルトの名無しさん:2010/11/29(月) 11:03:42
IXAudio2だけがIUnknownだったかな
440デフォルトの名無しさん:2010/11/29(月) 18:59:47
ご指摘お願いします。
Zバッファを使用した描画が正常に行えません。
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();
441デフォルトの名無しさん:2010/11/29(月) 19:26:59
そこに書いてあるソース部分以外の問題だと思われ
442デフォルトの名無しさん: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 );
ちなみにどこに問題があったんだろう…。
443デフォルトの名無しさん:2010/11/29(月) 20:44:08
>>442
>D3DXMatrixPerspectiveFovLH(&matProj,D3DXToRadian(45.0f),(float)rect.right/(float)rect.bottom, 0.0f, 100.0f);

後ろから2番目は0ではダメ。
444デフォルトの名無しさん:2010/11/29(月) 23:50:05
>>443
あ、ありがとうございます。
確かに、近くが0だと後ろ前がわからずに後方の抜きがおかしくなる?的な事を読んだ気が。
うーん、おかしいなあ…試行錯誤してたときに1とかいれたとおもったのに。
445デフォルトの名無しさん:2010/11/30(火) 19:46:14
>>444
zの計算の性質上znを0にすると、
ビュー空間でのzがzn〜zfどの値をとっても
出力される値が必ず1になって、
0〜1のzバッファで絶対に最遠方と判断されてしまう
446デフォルトの名無しさん:2010/11/30(火) 23:38:38
3Dモデルの移動と回転に合わせて、カメラにも同じ動作をさせているのですが
全くカメラが動きません、この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モデルは完璧に動いています
447デフォルトの名無しさん:2010/11/30(火) 23:39:51
すみません、書き忘れていましたが3Dモデルとカメラの初期位置は
ワールド座標の0,0,0にしています
448デフォルトの名無しさん:2010/11/30(火) 23:44:32
カメラにもワールド変換するんじゃないか
449デフォルトの名無しさん:2010/11/30(火) 23:58:10
>>446
省きすぎだと思われる。
ちゃんとビュー行列作って設定してる?

ちなみに、mat_Viewが何してるのかさっぱり分からない。
450デフォルトの名無しさん:2010/12/01(水) 00:09:35
すみません、mat_View がビュー行列です

D3DXMatrixRotationX(&mat_View,-0.01f);   //カメラの回転
D3DXMatrixTranslation(&mat_View,0,0,0.2f); //カメラの座標移動

この2行以外はカメラの移動は出来ています。
451デフォルトの名無しさん:2010/12/01(水) 00:14:56
ビュー行列を回したり移動しちゃだめでしょ

vAt.x=mat_world._41; //カメラの注視点X vAtはベクトルです
vAt.y=mat_world._42; //カメラの注視点Y
vAt.z=mat_world._43; //カメラの注視点X

ってことは注視点はモデルで
視点はキャラの後ろとかのTPS視点がやりたいってことでいいんだよね?
452デフォルトの名無しさん:2010/12/01(水) 00:16:51
とりあえず移動回転してない状態の
視点と注視点を書いてくれ
453デフォルトの名無しさん:2010/12/01(水) 00:17:10
>>451
はい、常に3Dモデルの後ろにカメラを置きたいのですが、
3Dモデルを回転させるとついていかないのです・・
454デフォルトの名無しさん:2010/12/01(水) 00:19:33
ビュー行列を作り直さないといけないんじゃ
455デフォルトの名無しさん:2010/12/01(水) 00:23:44
D3DXMATRIX mat_View;
D3DXMatrixIdentity(&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 );  //この文を毎ループ処理しています
456デフォルトの名無しさん:2010/12/01(水) 00:31:28
>>455

>>454も言っている通り、毎ループD3DXMatrixLookAtLHでビュー行列作り直さないと駄目。
そして移動や回転をさせるのはビュー行列自体ではなく vEye, vAt, vUp のほう。

このへんとか参考になると思う。
ttp://marupeke296.com/DXG_No36_DependenceCamera.html
457デフォルトの名無しさん:2010/12/01(水) 00:32:36
>>455
まず視点と注視点が一緒なのがおかしい
ビュー行列は毎フレーム作り直す


// キャラの後ろなら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 ) ;
458デフォルトの名無しさん:2010/12/01(水) 05:12:00
Download details: DirectX End-User Runtime Web Installer
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3
やっと更新来たよ
オフライン版とSDKはこれを書いてる時点ではまだ用意されてない
459446:2010/12/01(水) 06:26:51
質問に答えてくださった方々、ありがとうございました

>>456 >>457の方のものを参考に作り直すことにします
460デフォルトの名無しさん:2010/12/01(水) 18:39:23
>>457さんの、この1行で行列にどのような計算がされているのかが、詳しく知りたいです。

D3DXVec3TransformCoord(&vWorldEye, &vEye, &mat_World );
つまり、 vWorldEye=mat_World*vEye;

3Dモデルに変化があった分が追加されたカメラの位置のベクトル=
更新された3Dモデルのワールド行列*更新前のカメラの位置のベクトル

という認識なのですがこの考え方は合っているのでしょうか。
461デフォルトの名無しさん:2010/12/01(水) 18:55:52
>>460
ベクトルじゃないよ(ベクトルだと回転だけで位置が変わらない)
ローカル空間での視点座標をワールド行列を使って座標変換している
つまり視点をモデルと同じだけ回転+移動させている
あと掛ける順番が逆

3Dモデルに変化があった分が追加されたカメラの位置「座標」=
ローカル空間のカメラの位置「座標」*更新された3Dモデルのワールド行列
462デフォルトの名無しさん:2010/12/01(水) 22:29:00
行列は魔法ではありません
463デフォルトの名無しさん:2010/12/02(木) 17:40:35
エフェクトファイルをいじってるとデバッグでエラーのとき
クリエイトエフェクトの行でエラーが出るのですが
エフェクトファイルのどの行のどの変数がおかしいか教えてくれません。どんな数字が入ってるかもわかりません
どうやって知ればいいですか?
464デフォルトの名無しさん:2010/12/02(木) 18:05:11
エラーメッセージを受け取って表示しろ
465デフォルトの名無しさん:2010/12/02(木) 18:15:36
コピペできないのですがこんな感じです
File:c\users\パス
Line:394
Error Code:E_FAIL(0x0004005)
Calling:D3DXCreateEffectFromFile(〜
Do you want to debug the applicatin?
                      はい  いいえ

こんな感じです
466デフォルトの名無しさん:2010/12/02(木) 18:23:41
そっちじゃない。
エフェクトを読み出す関数からエラーがとれるだろ。
467デフォルトの名無しさん:2010/12/02(木) 18:26:06
D3DXCreateEffectFromFileで
エラーを吐き出すようにフラグとバッファを設定するか
fxc.exeでコンパイルすればエラー表示されるよ
468デフォルトの名無しさん:2010/12/02(木) 18:36:56
>>466
ありがとうございます
エフェクトを読み出す関数とは何のことでしょうか?
デバッグを始めるとこのエラーが出て、逆アセンブルのタブの行に飛ばされるので読めません

>>467
ありがとうございます
フラグとバッファの設定はどのようにすれば良いのでしょうか?
fxc.exe…ありがとうございます。コマンドプロンプト…できればコンパイラのエラー一覧のところで見れるようにしたいです
469デフォルトの名無しさん:2010/12/02(木) 20:41:09
何でヘルプを確認しないんだよ?
470デフォルトの名無しさん:2010/12/02(木) 20:44:58
本当に C++ を触ってるのか
エフェクトを編集&確認するただのツール類を触ってるだけにすら見える

とりあえず D3DXCreateEffectFromFile をぐぐるだけでも
最後の引数に ppCompilationErrors ってあるだろう
471デフォルトの名無しさん:2010/12/02(木) 21:02:55
>>468
ID3DXBuffer* 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を確認しないんだよ?
472デフォルトの名無しさん:2010/12/02(木) 21:17:57
そういう地味な方法じゃなくて
ソースと一緒にコンパイルして結果までアウトプットに出してくれる方法ありませんか?
と、こやつは聞いてるんでしょ

「そんなもの無い」と言ってやれ
473デフォルトの名無しさん:2010/12/02(木) 23:50:00
そんなもの無い
474デフォルトの名無しさん:2010/12/02(木) 23:51:56
>>472
そういう方法あるけどね。
カスタムビルドを使えばいい。

それが便利なのかは微妙だけど。
475デフォルトの名無しさん:2010/12/02(木) 23:53:41
D3DXCreateEffectFromFileこれと同じ機能実装するとしたらコンパイラの知識必要だよね
476デフォルトの名無しさん:2010/12/03(金) 00:19:41
カスタムビルドにしたってエラーの内容までは表示できないでしょ
477デフォルトの名無しさん:2010/12/03(金) 01:45:59
でるよ

1>エフェクトファイルをコンパイルしています。
1>*:\***********.fx(137,2): error X3000: unrecognized identifier 'afloat1'
1>compilation failed; no code produced
478デフォルトの名無しさん:2010/12/03(金) 06:34:12
DirectSoundのストリーミング再生ってビデオメモリに全部読み込んでから小出しにしてる?
それともドライブやメインメモリからちょっとづつバッファに読み込み&捨てつつ再生?
479デフォルトの名無しさん:2010/12/03(金) 07:04:06
>>478
なんでサウンドをビデオメモリにおくんですか?
480デフォルトの名無しさん:2010/12/03(金) 07:06:52
?そこにバッファつくってるんじゃないの?
481デフォルトの名無しさん:2010/12/03(金) 07:13:32
>>480
サウンドカードってなんですか?
482デフォルトの名無しさん:2010/12/03(金) 07:26:29
ビデオメモリにデータを置いてもサウンドカードからは読めないが、
馬鹿の考えることは常人には理解できないと言うことだろう。
483デフォルトの名無しさん:2010/12/03(金) 12:31:44
まずストリーミングを分かってない。
ファイル自体は1度に1ファイル全てを読み込まないと使えないよ。部分的に使うとしても
484デフォルトの名無しさん:2010/12/03(金) 12:32:40
480がマジでいってるならこえぇええ
485デフォルトの名無しさん:2010/12/03(金) 13:01:24
nVidia厨には一生理解できないんだろうな
486デフォルトの名無しさん:2010/12/03(金) 13:11:21
atiのカードはHDMI用のサウンドユニットを持ってる気がするけど、どういう構造なのかはみたことないな。
487デフォルトの名無しさん:2010/12/03(金) 13:20:20
ビデオチップとサウンドチップは独立していて、HDMIに出力するときに合流させているだけ。
488デフォルトの名無しさん:2010/12/03(金) 13:27:42
ビデオメモリに置くとメリットあるんですか?
489デフォルトの名無しさん:2010/12/03(金) 14:00:42
何かGPGPUで高度なサウンドエフェクトでもかけてるんじゃね
490デフォルトの名無しさん:2010/12/03(金) 14:05:28
そういえばGPGPUでソフトシンセしましたってのが昔あったような
491デフォルトの名無しさん:2010/12/03(金) 14:59:43
c:\program files\microsoft directx 9.0 sdk (december 2004)\include\d3d9types.h(1385) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
って警告が出まくります。どうすればいいでしょうか。
492デフォルトの名無しさん:2010/12/03(金) 15:35:21
メモ帳で開いてユニコードで保存しなおす
493デフォルトの名無しさん:2010/12/03(金) 16:09:12
警告を無効にするかsdkを更新する
494デフォルトの名無しさん:2010/12/03(金) 17:07:25
http://up3.viploader.net/pic2d/src/viploader2d675290.jpg
みなさんこんにちは
頑張ってアンビエントとディフューズが影響するようにと、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;

495デフォルトの名無しさん:2010/12/03(金) 17:14:58
496デフォルトの名無しさん:2010/12/03(金) 17:38:15
>>494
前もそうだけどなんでbmpをjpgに偽装してるの?
深い意味が無いのだとしてもあまり開きたくないんだけど
497デフォルトの名無しさん:2010/12/03(金) 17:41:27
>>492>>493>>495
ありがとうございます。
試してみます。
498デフォルトの名無しさん:2010/12/03(金) 17:45:49
bmp を jpg って名前にするだけで jpg ファイルになると思ってるんじゃね
499デフォルトの名無しさん:2010/12/03(金) 17:49:09
>>496
>>498
すいません。拡張子について深い知識がありません。
スクショを取ってペイントで保存してロダに上げただけです
どうしたら綺麗なエッジができるんですか?
500デフォルトの名無しさん:2010/12/03(金) 18:21:30
そのメタセコのレンダラーってのは、どういう方法でエッジ表示してるの?
501デフォルトの名無しさん:2010/12/03(金) 18:27:19
>>491
Windowsの地域と言語設定を英語圏の国に変更する
502デフォルトの名無しさん:2010/12/03(金) 18:36:30
>>500
わかりません。ダウンロードしたら入ってるやつです。トゥーンにするかしないかと線の幅が選べます
ここいいるみなさんなら、画像を見ただけでどういう手法かわかるかなと思ったのですが
503デフォルトの名無しさん:2010/12/03(金) 19:05:13
パースペクティブ行列は頂点を、
・ハードウェアによってw除算を行ってもらうためにzをwに移動
・視野角によるズーム調整(90度で拡大縮小なし)
・zバッファに格納するために、zを最後にwで割られた後に0〜1になるように変換(偏りはすさまじい)
・アスペクト比の調整のためにちょっとxを小さくする
という理解で問題ないでしょうか?
504デフォルトの名無しさん:2010/12/03(金) 19:11:59
うん
505デフォルトの名無しさん:2010/12/03(金) 19:55:50
暗号化されたmidiをdirectmusicで読み込みたいのですが
どうやったらいいか分からないのでサンプルとかありませんか?
下のURL見てもわかりませんでした。
http://msdn.microsoft.com/ja-jp/library/dd188489.aspx
506デフォルトの名無しさん:2010/12/03(金) 20:31:46
>>502
そこ明確にしないとダメじゃね。
メタセコイアのトゥーン処理はどういう手法でやってるのかを調べて
その処理方法を調べるのが良い。

いまのままだと、全部憶測になって時間の無駄かと。
507デフォルトの名無しさん:2010/12/03(金) 20:42:43
>>506
ありがとうございます
ちょっとメタセコのスレに行って聞いてきます
508503:2010/12/03(金) 22:05:46
>>504
ありがとうございます。
中身ブラックボックスで使ってたときは、
中ですごぉいことやってるかと思ったんですが、
開いてみればめっちゃシンプルで驚きです。
509デフォルトの名無しさん:2010/12/04(土) 11:24:33
3Dモデルのアニメーションについて教えてください
簡単な動き、Xファイル毎(手だけ足だけ等)に描画してその箇所だけ角度を変えたり、移動させるという事で合っているのでしょうか

上級者になると1つのXファイルでその中に入っている情報を読み取って、メッシュ毎に回転、移動させているのでしょうか?
510デフォルトの名無しさん:2010/12/04(土) 11:35:54
「スキンメッシュ」でググりなされ
511デフォルトの名無しさん:2010/12/04(土) 11:43:44
>>510
ありがとうございます、ヤフーでぐぐったらいきなり詳しい解説している所を見つけました
勉強してきます
512デフォルトの名無しさん:2010/12/04(土) 11:45:40
>>509
SDKのサンプルにSkinnedMeshがあるからまずはそれを見てみるんだ

だがスキンメッシュは初心者には敷居がめちゃ高いから本当に挑戦するかは、
自分のスキルと相談してからがいいかも
513デフォルトの名無しさん:2010/12/04(土) 11:54:51
プログラム以前にまともなモデリングツールを使うところからだろう。
514デフォルトの名無しさん:2010/12/04(土) 11:57:32
お前の意見は聞いてないよ
515デフォルトの名無しさん:2010/12/04(土) 12:26:24
http://www.autodesk.co.jp/adsk/servlet/pc/index?siteID=1169823&id=15063729
これでモデリングからスキンメッシュアニメーションまでやれば、
プログラム云々に入る前に必要な最低限の知識は身につくよ。
SDKのサンプルを見たって、前提知識がなければ、ほとんど役に立たない。
516デフォルトの名無しさん:2010/12/04(土) 12:32:55
スレ違い
517デフォルトの名無しさん:2010/12/04(土) 12:38:10
どうでもいいが「ヤフーでぐぐる」っていうのはおかしい
518デフォルトの名無しさん:2010/12/04(土) 13:47:19
>>517ちょっとゼロックスしといて
519デフォルトの名無しさん:2010/12/04(土) 14:24:13
D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord( D3DXVECTOR3 *pOut,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM
);

↑これってpOutとpVに同じD3DXVECTOR3渡したら計算狂う?
520デフォルトの名無しさん:2010/12/04(土) 14:30:32
それぐらい試せばすくが分かるだろうと言いたいが
計算前を残さないのでいいのであれば問題ない
521デフォルトの名無しさん:2010/12/04(土) 20:39:03
float3 RegionB = {0.0,0.0,0.0};
float4 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 をそのまま返して、何もしない時と同じだと思ってたのですがどこが間違ってるのでしょうか?
522デフォルトの名無しさん:2010/12/04(土) 20:44:07
Col.xyz = lerp(Col.xyz ,DifMedium.xyz,RegionB);にしたらできました
ありがとうございました
523デフォルトの名無しさん:2010/12/05(日) 02:06:34
3次元における、ある点が、ある壁の内側にいるか外側にいるか(法線の方向にいるか、法線の逆方向にいるか)は、どうやって判定したらいいですか?
点の座標、壁のポリゴンの頂点座標、壁のポリゴンの法線がわかっています。
524デフォルトの名無しさん:2010/12/05(日) 02:09:29
外積だろうね
525デフォルトの名無しさん:2010/12/05(日) 02:14:23
法線が既に分かってるなら内積でしょ
外積は法線を求めるのに使うんじゃ
526デフォルトの名無しさん:2010/12/05(日) 02:17:42
ごめん
内積の正負だった
527デフォルトの名無しさん:2010/12/05(日) 02:30:43
余弦定理
528デフォルトの名無しさん:2010/12/05(日) 09:47:10
直線を引いてね、 ポリゴンとの交差の数が奇数ならば 物体の内部にいる。 偶数ならば物体の外側にいる。
529523:2010/12/05(日) 10:10:26
>>526
あ、なるほど…
壁の頂点座標 - 点の座標 = 点から壁の頂点への方向ベクトル で、
そのベクトルが法線ベクトルと向き合う(内積が負)なら、壁の前方、
同じ向き(内積が正)なら、壁の後方であることがわかる…ということですね

他の皆様も回答ありがとうございました m_ _)m
530デフォルトの名無しさん:2010/12/05(日) 10:13:19
法線情報が位置ベクトルも兼ねてるなんて保障はあったっけ?
法線を単位化してたら、頂点情報で平面と点から判定するのか正解かと
531523:2010/12/05(日) 10:38:58
>>530
すみません、少し説明が抜けてましたが、
今回の場合、法線はワールド変換した頂点から算出しており(ワールド空間における法線になっている)、
点も同じワールド空間にあるのですが、その作業って必要でしょうか?
532デフォルトの名無しさん:2010/12/05(日) 10:57:45
法線じゃ駄目、実際やったとして
どういうシチュエーションになるか考えてみなよ
>>530のとおり面と点で判定するのがセオリー
http://msdn.microsoft.com/ja-jp/library/microsoft.directx_sdk.plane.xmplanedotcoord(v=VS.85).aspx
533デフォルトの名無しさん:2010/12/05(日) 11:01:25
>>531
逆に壁が必ず原点を通るなら(ワールド座標系ではなく、壁のローカル座標系なら)
壁を示す平面のwは必ず0になるから、法線だけで内外判定しても良い。
534デフォルトの名無しさん:2010/12/05(日) 11:07:28
壁の頂点を引くことで壁ローカルになってるので>>529で大丈夫
535デフォルトの名無しさん:2010/12/05(日) 11:13:26
523を擁護しようとしたら、先を越されてた。
523の言ってることは正しいし、基礎中の基礎。
536デフォルトの名無しさん:2010/12/05(日) 11:18:34
529の計算は合っているけど、それだけで>>523の目的は果たせないと思うけどね。
無限平面との表・裏判定でしかないので。
537デフォルトの名無しさん:2010/12/05(日) 11:23:43
>基礎中の基礎
これを基礎と言うことに違和感
基礎がないから、こんな変な方法を選ぶんじゃねーの
538デフォルトの名無しさん:2010/12/05(日) 11:28:04
平面の法線との内積で裏表の判定は変な方法じゃないだろ。なにが気に食わないの?
539デフォルトの名無しさん:2010/12/05(日) 11:36:42
>>538
>>529をやるためには、1面につき
頂点1つと法線1つ、合わせて6要素保持しなきゃならない。
6要素使うわりに出来ることが増える訳じゃない。
また、面と点の位置関係によっては精度が悪くなる。
540デフォルトの名無しさん:2010/12/05(日) 12:31:15
法線情報が予め分かっているなんて言ってるから混乱してるんじゃね?
モデルデータとして既にある情報を使うって場合とかを真っ先に思いつくじゃん

判定したい頂点情報から、動的に外積で求めて使います
って感じで言えば、じゃ内積で
って終わりだったのに

後はついでに言えば
当たり判定のモデルと、描画用のモデルは分けるのがセオリー
(壁とかで板ポリと言える内容なら同じでも良いけど)
541デフォルトの名無しさん:2010/12/05(日) 12:45:01
529の計算と、532の関数の計算が等価だということが分からない人がいるようだな。
掛ける前に引くか、掛けた後に引くかの違いだけで、やってることは一緒。
それを変な方法とか言ってる時点で、根本的に分かってない。
542デフォルトの名無しさん:2010/12/05(日) 13:05:23
>>541
V = 点座標
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個の命令数も
違うじゃねーかゴラァ!
543デフォルトの名無しさん:2010/12/05(日) 13:09:06
ゆるさん! ぬっころす!
544デフォルトの名無しさん:2010/12/05(日) 13:22:06
>>542
その形で書くと、・Nを分配しただけで同じ式って分かりやすいな。
545デフォルトの名無しさん:2010/12/05(日) 13:47:27
DirectX9で質問です

不透明度のみを加算合成して、他のRGBはそのまま上書きされるような合成をしたいのですが
固定機能パイプラインで描画したいのでレンダーステートをどのように設定すればいいのか教えてください
546デフォルトの名無しさん:2010/12/05(日) 13:58:38
D3DRS_BLENDOP
D3DRS_BLENDOPALPHA
D3DRS_SRCBLEND
D3DRS_DSTBLEND
全部試す
547デフォルトの名無しさん:2010/12/05(日) 14:13:28
>>545
ちょっと計算式書いてみろそれ
548デフォルトの名無しさん:2010/12/05(日) 14:18:37
>>545
それをアルファブレンドの式に当てはめると
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よりも少ない。
549デフォルトの名無しさん:2010/12/05(日) 14:22:10
>>547
どういうふうに書けばいいの?
R = Rs
G = Gs
B = Bs
A = Ad + As
こういうこと?
550デフォルトの名無しさん:2010/12/05(日) 14:26:20
>>548
ありがとうございます
551デフォルトの名無しさん:2010/12/05(日) 14:29:02
>>549
最終出力にAなんてあるのか?
552デフォルトの名無しさん:2010/12/05(日) 14:40:22
バックバッファにレンダリングするのか
出力用の仮バッファにレンダリングして完成テクスチャを作るのかで違いそうな
553デフォルトの名無しさん:2010/12/05(日) 14:58:42
仮バッファなんて使える奴ならこんな質問しないだろ

おそらくやりたい計算式と自分の求める結果がまったくイメージできてない状態と思われるので
とりあえず計算式書いてみろって言ってみた
求める結果の主要な色の合成だけでもちょっと式に当てはめてみればなんか違うとわかるんじゃないかと・・・
554デフォルトの名無しさん:2010/12/05(日) 15:54:50
>>551,552
バックバッファにもA付きのフォーマット使えるよ。
ディスプレイフォーマットとしてはA付きはないが、バックバッファとしては有り。

DestAlphaを使ってステンシルマスク的なこともできる。
555デフォルトの名無しさん:2010/12/05(日) 16:06:59
A付きフォーマットが使えたとしても
直接描画しちゃったらαを書き重ねるごとに加算してくなんてできないでしょ
それがやりたいのかどうかは分からんけど
556デフォルトの名無しさん:2010/12/05(日) 16:38:43
DirectX9使ってます
マルチスレッドのプログラムで複数のスレッドから描画とかしたいんだけど
それぞれのスレッドごとにデバイスを作って描画したりするのはまずいですか?
557デフォルトの名無しさん:2010/12/05(日) 16:54:08
>>554
わかってるよ
この場の議論に関係ないことわざわざ書き込むな邪魔
558デフォルトの名無しさん:2010/12/05(日) 17:05:07
>>556
D3DCREATE_MULTITHREADED では駄目なのかな?

さすがにスレッドごとにデバイスを作ったことはないなぁ・・・。
559デフォルトの名無しさん:2010/12/05(日) 17:10:06
>>556
スレッド切り替える時間超かかるから
ワンフレ内に間に合わなくて動作不良な場合多いよ
1つの描画対象に複数スレッドから書き込むのはやめたほうがよさゲ
分かれてるなら別にいいかと
560デフォルトの名無しさん:2010/12/05(日) 17:31:18
描画専用のスレッドをつくって、そのスレッドに他のスレッドから描画命令を
送る感じがいいね。
561デフォルトの名無しさん:2010/12/05(日) 17:34:54
てか、OSのスレッドの切替やら待ちってワンフレ内に余裕で終わるほどの早さなのか?
ウィンドウズのメッセージってそんなに早くないだろ
1msに1回とかそんなもんじゃねぇけ?
ゲームだと60Hzだとしたらワンフレ16msぐらいしかないんだぞ
往復2〜3回やりとりしたら処理落ちすんじゃねぇか?
562デフォルトの名無しさん:2010/12/05(日) 17:47:49
>OSのスレッドの切替
これは速い
>待ちって
設計のしかたにより
>ウィンドウズのメッセージ
この待ちは遅い。

>ゲームだと60Hzだとしたらワンフレ16msぐらいしかないんだぞ
>往復2〜3回やりとりしたら処理落ちすんじゃねぇか?
超クソ設計乙
563デフォルトの名無しさん:2010/12/05(日) 18:20:11
>>562
>これは速い
リアルタイムのアプリで実用化できるほどの速度なの?
少なくとも俺が前やった感じだと超遅かったんだけど?

何か気をつけることある?
もしかしてタイマー依存じゃね?とも考えたほどだけど・・・
564デフォルトの名無しさん:2010/12/05(日) 18:23:14
>>562
起動と切り替えを間違えてないか? 起動は遅い
565デフォルトの名無しさん:2010/12/05(日) 18:26:33
スレッドの切り替えはタイマーの精度依存だよ
timeBeginPeriod(1)とかすると
システムクロックの割り込み間隔も短くなるのでスレッド切り替えの密度が上がる
timeBeginPeriodを読んでるアプリがあると
起動してる全てのアプリケーションの動作に影響が出るのはそのせい
566デフォルトの名無しさん:2010/12/05(日) 18:31:57
>>565
やっぱ、そうだよね>タイマー依存
これ、ゲームで使うのはうまくないよね
567デフォルトの名無しさん:2010/12/05(日) 18:35:49
ビジネスアプリでもスレッドをボコボコ立てる奴の作るものは出来が異常に悪い
568デフォルトの名無しさん:2010/12/05(日) 18:35:59
スレッドのコンテキスト切り替え処理の速度の話なのか
タイマーの割り込み間隔の話なのか
スレッドのタイムスライスの話なのか
569デフォルトの名無しさん:2010/12/05(日) 18:46:33
>>568
なにそれ?
どれか速いの?
570デフォルトの名無しさん:2010/12/05(日) 20:22:30
頭だけ削除(見えなくするだけ?)をしたいのですが
DestroyFrameやDestroyMeshContainer、または両方を使えば良いのでしょうか?
やってみたのですがFrameのポインタを使うところなどでメモリ0を読み込むエラーが出ます
どうするのが良いのでしょうか?
571デフォルトの名無しさん:2010/12/05(日) 21:04:25
>>570
DirectX9のXファイルを使ったスキンメッシュの話だよね?

自分がやってる方法は、マテリアルをあらかじめ分けておいて
マテリアルごとにDrawSubsetする/しないを判断する方法。
他にもシェーダ使ってID制御するとか色々方法はあると思う。

Frameを削除しても、その部分が動かなくなるだけで
描画はされてしまうよ。
572デフォルトの名無しさん:2010/12/05(日) 21:10:30
頭のテクスチャを透明に
573デフォルトの名無しさん:2010/12/05(日) 21:49:30
>>571
>>572
ありがとうございます。そうなんですか
自分がやりたいことはゲームでよくある服や装備を選ぶ時に、それが装着された状態の画面を見ながら選ぶってのを作りたいのですがどうすればいいのでしょうか?
道具リストに入ってるメッシュのデータはどのタイミングで読めば良いでしょうか?この場合だとマテリアル毎じゃなくてメッシュコンテナーを消した方がいいですよね?
質問がわかりにくかったと思うので書き直すと、デストロイフレームを実装してフレームルート→フレームチャイルド→フレームチャイルド
の適当なフレームのポインタを削除した後、オブジェクトのインスタンスを作り直したのですが、その後アップデートの時に if( pFrame->pFrameSibling )と呼び出していくと
さっき消したのでイフをすり抜けて欲しいのですが、ここでポインタの読めない所を読んでますみたいなエラーが出るのです。
教えてください
574デフォルトの名無しさん:2010/12/05(日) 22:06:39
関数だったら戻り値設定しないとif文で評価出来ないんじゃないのかな
575デフォルトの名無しさん:2010/12/05(日) 22:15:36
>>573
ごめん、質問が何個もあるし、何をやりたくてFrameをいじってるのかさっぱり分からない。

とりあえず、そのポインタ云々のエラーは、デバッガ出力の内容をよく見て解決して。
DirectXではなくてプログラミングの問題だから。
たぶんpFrameがNULLになってるんだと思うけど。
ちゃんと木構造が成立するようにポインタを消していないんだと思われる。
576デフォルトの名無しさん:2010/12/05(日) 22:25:39
D3DXじゃ融通が利かないんだから、変則的なことをするなら、
自分で実装した方がよっぽど楽なのに、しがみつく理由がさっぱり理解できない。
577デフォルトの名無しさん:2010/12/05(日) 22:34:27
>>574
>>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;
これでデストロイフレーム(フレームルート→フレームチャイルド→フレームチャイルド)をしたのですが、何かおかしい消し方なのでしょうか?
したいことは>ゲームでよくある服や装備を選ぶ時に、それが装着された状態の画面を見ながら選ぶってのを作りたいです。定番の方法があるのでしたら教えてください
その時に、道具リストに入ってるメッシュのデータはどのタイミングで読めばいいのかも教えてください
578デフォルトの名無しさん:2010/12/05(日) 22:58:14
メッシュクラス使ったことねーけどvisibleってねーの?
579デフォルトの名無しさん:2010/12/05(日) 23:12:21
>>577
Frameを消したらメッシュの一部分が自動で消えると思っている?
そうだとしたら間違い。Frameは基本的にメッシュの各頂点の位置を決める構造を持っているだけだよ。

ポインタに対するif文評価についても再確認して。言語の問題。
あとD3DXのスキンメッシュ使いたいなら、コンテナの構造をきちんと理解すること。

装備やタイミング云々は、どちらもあなたが作っているゲームの構造に依存するものだから
一概にこれというものはないよ。
DirectXあんまり関係ないしね・・・。
580デフォルトの名無しさん:2010/12/05(日) 23:25:14
まぁ普通にファイルをパーツ毎に分割した方が手っ取り早そうだよな。
581デフォルトの名無しさん:2010/12/05(日) 23:45:14
D3DXで使えるのはテクスチャ作成するやつだけじゃね?
582デフォルトの名無しさん:2010/12/05(日) 23:47:13
>>579
そう思ってました。アップデート毎にメッシュコンテナーから座標を取ってきて行列に掛けてると思ってたのですが違うのですか?
どうやって消すのが良いのでしょうか?
特に、道具を選んだらその道具を持ってる画面が逐一出るようにしたい場合は。
583デフォルトの名無しさん:2010/12/05(日) 23:57:18
584デフォルトの名無しさん:2010/12/06(月) 00:02:42
>>583
じゃあ道具の選択肢が10個あったら10個のメッシュコンテナーをDrawSubseでONOFF設定したり透明テクスチャ貼って描画処理するんですか?
なんか無限増殖しそうなんですが大丈夫なんですか?
585デフォルトの名無しさん:2010/12/06(月) 00:22:32
>>584
基本、そう。
条件分岐させるだけだから、簡単でしょ。

無限増殖とあるけど、何の無限増殖を心配してる?
こういった方法なら何の削除も作り直しも発生しないから、何かが増える心配は少ないと思うけど。
正しい管理が必要なのはどれも一緒。

でもなんか、話が微妙にすれ違ってる気がするなぁ・・・。
586デフォルトの名無しさん:2010/12/06(月) 00:37:56
>>585
ありがとうございます
デストロイフレーム(フレームルート→フレームチャイルド→フレームチャイルド)した後に
フレームルート→フレームチャイルド→フレームチャイルド=NULLをしたら一応エラーは無くなって表示されるようにはなりました。変な形になりましたが
587デフォルトの名無しさん:2010/12/06(月) 01:06:57
フレームルート→フレームチャイルド→フレームチャイルド→フレームシブリング=NULLを消して
フレームルート→フレームチャイルド→フレームチャイルド=NULLだけにしたら完璧に消したい部分だけ消せました
本当に、ありがとうございました普通にフレーム消すだけで消えるだろ知ったかゴミカス
無駄な知識自慢のレスばっかしやがってゴミ
何が言語の問題。
あとD3DXのスキンメッシュ使いたいなら、コンテナの構造をきちんと理解すること。(キッ
やねんととっとと死ねゴミ
ポインタに対するif文評価についても再確認して。言語の問題。(キッ打つ暇あったらdeleteじゃなくてNULL代入しろぐらい打てやゴミ
死ね
588デフォルトの名無しさん: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; //フォグ
};
589デフォルトの名無しさん:2010/12/06(月) 02:01:47
すいません
正常に動いてませんでした
出直してきます
590デフォルトの名無しさん:2010/12/06(月) 02:13:06
シェーダより頂点宣言になにか問題ありそうな予感
591デフォルトの名無しさん:2010/12/06(月) 07:08:39
>>590
それが頂点シェーダの出力とピクセルシェーダの入力部分なんですけど
この部分って頂点宣言により結果変わったりするのでしょうか?
592デフォルトの名無しさん:2010/12/06(月) 07:28:27
エスパーじゃないと今出てる情報だけで判断することはできない
593デフォルトの名無しさん:2010/12/06(月) 09:38:36
スマートポインタでDirectSoundを設計しようとしています。

SmartPtr<IDirectSound8> pDS8;
DirectSoundCreate8(NULL, pDS8.GetPtrPtr(), NULL);
pDS8->SetCooperativeLevel(hWnd, DSSCL_PRIORITY); //ここでエラーで止まってしまいます。

0x00412229 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。

なぜでしょうか
594デフォルトの名無しさん:2010/12/06(月) 09:50:10
>>593
pDS8.GetPtrPtr()にちゃんとしたアドレスが入ってないからじゃね?
俺の経験上、 0xC0000005: 場所 0x00000000 とか出てきたら、ポインタにアドレスが入ってないことがある
595デフォルトの名無しさん:2010/12/06(月) 11:07:34
そりゃそーなるわな
スレ違いだからC言語スレに行くか、その野良スマポを作った奴に聞け
596デフォルトの名無しさん:2010/12/06(月) 11:24:19
深度バッファに書きこまれている値を取得する方法ってありますでしょうか?
一旦画面を撮影した後、深度バッファを見ながら深度フォグかけたり、色々とポストエフェクトをかけたいのですが。

それとも深度は、テクスチャに素直に書きださないと取得できないでしょうか。
(画面のRGBAのAに入れる手もありますが、256段階ではさすがに精度が厳しいので)
597デフォルトの名無しさん:2010/12/06(月) 11:45:43
深度バッファをロックですか
598デフォルトの名無しさん:2010/12/06(月) 12:06:13
自作のゲームプログラム(DirectX9/9EX)が一部の環境で
解像度が半分になってしまい、困っています。(画面全体が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は可変サイズで、リサイズすると
クライアント領域のサイズでフレームバッファをつくり直す仕様です。
599593:2010/12/06(月) 12:29:04
>>594
これでした
600デフォルトの名無しさん:2010/12/06(月) 12:31:35
>>599
そこに限らずDirectXのAPIはあらゆる場面において
どんなエラーを返してくるか分からないので、
常に戻り値をチェックして、まずい場合は例外を飛ばすなりしたほうがいいよ。
C/C++ならマクロでくるんでしまうといい。
601デフォルトの名無しさん:2010/12/06(月) 12:36:10
>>600
あのさー
初心者相手なんだから
具体的なメソッドとか、調べ安いページとか、検索ワードとか教えてあげた方がいいよ
API,戻り値チェック、マクロでとか言われてもはいそうですか役に立ちましたとはならない
602デフォルトの名無しさん:2010/12/06(月) 12:39:38
>>601
与えられたヒントで調べることもできないのは初心者じゃなくてただの教えて君。
そもそもAPIってなに?戻り値のチェックって何?とか言ってるレベルならDirectX
で何か作るとか以前の問題だしな。

>>600の回答に不満があるならいちいち文句たれずにお前が教えてやれw
603デフォルトの名無しさん:2010/12/06(月) 12:41:57
>>602
馬鹿だなお前
レス汚すだけならもう来なくていいよ
604デフォルトの名無しさん:2010/12/06(月) 12:49:46
言いだしっぺの法則って知ってるか?
605デフォルトの名無しさん:2010/12/06(月) 12:59:13
>>604
日本語理解できるか?
日本語も理解できないやつはただの無能。そんな馬鹿にはDirectXなんて無理ね。
って言われてもお前の役にはたたないだろ?
だからお前はダメなんだよ
606デフォルトの名無しさん:2010/12/06(月) 13:15:47
言いたいことはそれだけか?
さあ今すぐ手を動かして成果を出すんだ
607デフォルトの名無しさん:2010/12/06(月) 13:28:19
正論をちょっと書いただけなのになんでそんなに荒れるんだ。
HRESULTのエラーチェック方法なんて
DirectXのサンプルプロジェクトのソースコードを見ればわかるだろう。
608デフォルトの名無しさん:2010/12/06(月) 13:39:09
600の回答は十分親切だと思うけどな。
609デフォルトの名無しさん:2010/12/06(月) 13:43:32
とりあえず
デバイス作成時とデバイスリセット時のコードが欲しい所だ
610デフォルトの名無しさん:2010/12/06(月) 14:01:18
や、この件って俺様スマぽの実装がタコってただけなのに
HRESULT云々とか話し始めてなにこのひとこわい、みたいなー
611デフォルトの名無しさん:2010/12/06(月) 14:19:33
GetPtrPtr
612デフォルトの名無しさん:2010/12/06(月) 14:20:36
フルHD用の画像をテクスチャに出力し、その後加工したあとディスプレイに描画したいと考えています。
フルHDはつまり1920x1080なのですが、これですとテクスチャサイズは2048x2048となってしまいます。

なんだか下部56ドットのためだけに、消費量が2倍になってしまう(2048x1024に比べて2倍)のですが、
こんなものなんでしょうか。
それとも大抵は2048x1024を1920x1080にリサイズして表示しているのでしょうか?
613デフォルトの名無しさん:2010/12/06(月) 14:29:22
>>612
2048x1024、2048x512、2048x256、2048x128の四つのテクスチャを用意して貼り合わせるとか?
614デフォルトの名無しさん:2010/12/06(月) 14:31:30
いまのハードなら別に2の累乗にこだわらなくても良いとは思うよ
どういう加工を考えてるのかは分からないけど
あとは求められる精度とピクセルシェーダーの負荷を天秤に掛けてサイズを決めればいい
615デフォルトの名無しさん:2010/12/06(月) 14:32:59
>>612
動かすビデオカードの機能でPOW2のフラグが立ってたらどうしてもそうなる。
616デフォルトの名無しさん:2010/12/06(月) 15:02:55
>>603>>605
馬鹿はてめぇだ

>>610
>>593が「アクセス違反になるのはなんで?」って言ってるから、ポインタがNULLなんじゃないの
戻り値チェックして確認しろよって言ってんでしょ。一体何を煽ってるんだ?w
617デフォルトの名無しさん:2010/12/06(月) 18:37:03
DirectX9でIDirect3DSurface9のサーフェイスを作り
そのサーフェイスをSetRenderTagertで描画ターゲットにすると
デバイスロストから復帰させるときにResetが失敗して
D3DERR_INVALIDCALLが返されてしまいます

サーフェイスに描画したあとは元のバックバッファにターゲットを戻しているし
Resetを呼ぶ前にリソースの解放もしています
ちなみにサーフェイスを描画ターゲットに設定せず、GetSurfaceLevelで
テクスチャに関連づけただけならResetは成功します
618デフォルトの名無しさん:2010/12/06(月) 18:44:03
>サーフェイスに描画したあとは元のバックバッファにターゲットを戻しているし
これが成功してるかチェック。
619デフォルトの名無しさん:2010/12/06(月) 18:46:33
>>617
D3DUSAGE_RENDERTARGETで作ったんならD3DPOOL_DEFAULTだろうから
リセット時に解放してサーフェイス自体を作り直さないとだめなんじゃないの?
620デフォルトの名無しさん:2010/12/06(月) 18:51:17
>>618
確認してみましたが、成功しているようです

>>619
もちろん解放してます
621デフォルトの名無しさん:2010/12/06(月) 19:24:13
いろいろ弄っていて、サーフェイスは原因ではないことに気付きました
バックバッファを得るためにGetRenderTargetを呼ぶだけでResetが失敗するようです
なぜでしょうか?
ちなみにGetRenderTargetは成功しています
622デフォルトの名無しさん:2010/12/06(月) 19:30:54
>>621
描画が終わったらすぐに元のRenderTargetに戻すべきだけど、それはやってる?
623デフォルトの名無しさん:2010/12/06(月) 19:37:03
>>622
戻す以前にSetRenderTargetで描画ターゲットの変更もしていません
GetRenderTargetでバックバッファのサーフェイスを得ただけで失敗してしまいます
624デフォルトの名無しさん:2010/12/06(月) 19:40:36
なんか全然違うところに問題がありそうな予感
最小コードまで戻して原因突き止めたほうがいいんじゃない?
625デフォルトの名無しさん:2010/12/06(月) 19:47:19
GetRenderTarget をコメントアウトすると Reset は成功するの?
626デフォルトの名無しさん:2010/12/06(月) 19:48:52
関係あるか知らんけど
シェーダのエフェクトもデバイスロスト処理が必要だったりするよ
627デフォルトの名無しさん:2010/12/06(月) 19:53:46
コードを消していって、とりあえずDirectXに関係するオブジェクトは
IDirect3DとIDirect3DDevice9だけにして、他のリソースは全部消してみたんですが
やはりGetRenderTargetを呼ぶとResetが失敗します

>>625
はい
628デフォルトの名無しさん:2010/12/06(月) 20:01:59
じゃあ、もうResetを呼び出す場所がわるいんじゃないの?
別スレッドから呼んだりはしてないよね?
629デフォルトの名無しさん:2010/12/06(月) 20:07:05
GetRenderTargetしたものをReleaseしていないとか。
630デフォルトの名無しさん:2010/12/06(月) 20:12:52
>>629
それでした・・・
ありがとうございます
631デフォルトの名無しさん:2010/12/06(月) 20:19:06
>>623
GetRenderTargetを呼び出した時点で参照カウンタが増えるんだが、その後始末はしてる?
632デフォルトの名無しさん:2010/12/06(月) 21:10:00
>>631
残念ながら、もう終わったはなしだよ
633デフォルトの名無しさん:2010/12/06(月) 21:13:22
トリガーキーを使って2回何秒以内に、スペースキーを押されたら(ダブルクリックのような感じ)
何かしらの動作をさせる処理のですが、
Directxを使いこなしている人はどのような書き方をしているのでしょうか

参考程度に教えて頂けないでしょうか
自分の場合はifを繋げまくっているだけで見た目の悪い文章になってしまって・・
634デフォルトの名無しさん:2010/12/06(月) 22:11:16
>>614
最近でも2の累乗にしなきゃいけないグラボはあるよ
ネットブックとかだと特に
635デフォルトの名無しさん:2010/12/06(月) 22:36:16
>>634
今どきそんなの見たことないな。
ネットブックでも使える。

以前調べたときに、NONPOW2CONDITIONALすらダメだったのは
一番新しくてもi810あたりだったと思うが。
636デフォルトの名無しさん:2010/12/06(月) 22:51:50
>>635
デスクトップのオンボードだけど
D3DPTEXTURECAPS_POW2
D3DPTEXTURECAPS_NONPOW2CONDITIONAL
の両方ダメ

NVIDIA GeForce 6150SE nForce 430
一応VistaPCなのでいきなり切るのはどうかと・・・
637デフォルトの名無しさん:2010/12/06(月) 23:13:30
べつに全切りする必要はないじゃん?
使えない環境だけで多少負荷が上がっても2の累乗にすればいいだけで
全部ソレ使わなきゃいけないわけじゃないし
638デフォルトの名無しさん:2010/12/07(火) 01:13:45
http://msdn.microsoft.com/ja-jp/library/dd188489.aspx
このページにあるサンプルでMIDIファイルを再生したいのですが
どうすればいいでしょうか。
639デフォルトの名無しさん:2010/12/07(火) 01:16:46
まず服を脱ぎます
640デフォルトの名無しさん:2010/12/07(火) 01:21:31
いまどきDirectMusicか・・・
まぁがんばれ
641デフォルトの名無しさん:2010/12/07(火) 01:45:24
>>640
今はDirectMusicよりMIDIを再生するもっといい物があるんですか?
642デフォルトの名無しさん:2010/12/07(火) 02:59:39
MIDIが古い
環境で音が変わるんだから、oggとかにするべきじゃないか
643デフォルトの名無しさん:2010/12/07(火) 09:24:42
環境で音が変わるからこそMIDIがいいんじゃないか
分かってないな

まあ、Windows上で動かすなら環境依存はない
644デフォルトの名無しさん:2010/12/07(火) 10:35:56
高性能のハードMIDIシーケンサもってりゃそうかもしれないけど、普通はMIDIだとしょぼいよね
645デフォルトの名無しさん:2010/12/07(火) 12:41:43
まあやりたいならやりゃいいんじゃない
文句を言う筋合いはないだろ
646デフォルトの名無しさん:2010/12/07(火) 12:52:06
サウンドプログラムって面白そう
647デフォルトの名無しさん: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));
648デフォルトの名無しさん:2010/12/07(火) 22:05:16
3D空間に配置してるなら
別にアス比が変わっても座標自体は変わって無いぞ
視野角が変わるから見掛けの表示位置が違うだけで

たぶんスクリーン座標で指定したいんだろうけど
座標変換済み頂点を使うか
正射影で描画すればいいんじゃね?
649デフォルトの名無しさん:2010/12/07(火) 22:37:27
アスペクト比がどうこう以前に、ウインドウサイズが変わったのに、
ターゲットの解像度を変えずに引き延ばしているから表示が変になっているんだろ。
650デフォルトの名無しさん:2010/12/07(火) 23:03:47
おふたりとも、ありがとうございます。
>>視野角が変わるから見掛けの表示位置が違うだけで
この辺が分かっただけでも、だいぶ手がかりになります。

今、座標変換済み頂点や正射影と言われて「??」という感じです。
頂点座標変換周りの理解はかなり怪しいので、これを機に勉強しなおしてみます。
651デフォルトの名無しさん:2010/12/08(水) 06:56:08
>>588です
原因(?)というか現象がわかりました
HLSLのpow関数で0乗を指定したときになるようです
PCによって起こる現象が違うみたいです
は?0乗って1じゃねーの?とか思いこんでいたのですが
pow関数を0乗で実行するとプログラムおかしくなってるみたいです

ってヘルプみたらちゃんと書いてあってビックリですw
652デフォルトの名無しさん:2010/12/08(水) 07:07:21
DXUTのUIで既にあるIDで新しいUIをAddしたらどうなりますか?
653デフォルトの名無しさん:2010/12/08(水) 10:05:04
>>652
試してみればすぐに分かるじゃん。
654デフォルトの名無しさん:2010/12/08(水) 10:22:39
>>653
次の空いてる番号に作られるで合ってますか?
DXUTのUIってデバッガで見にくくないですか?CDXUTDialog型変数からIDやUIの形式をすぐ見るにはどこを開いていけば良いか教えてください
655デフォルトの名無しさん:2010/12/08(水) 18:28:41
スキンメッシュアニメーションについて教えてください
Directx9でアニメーションをするXファイルを描画し続けたいのですが、
いざネットに上がっているソースコードを見ても、スキンメッシュアニメーション以外の
プログラムが沢山入っており、どれが必要でどれが必要ないのかといった事が全くわかりません・・

DXが用意している関数を使わずアニメーションをするといったプログラムで、紹介しているサイト様がありまして
それを参考に勉強していましたが、Xファイルを使わず自分で作った三角形を動かしており、
いざこれをXファイルに置き換えて考えるとなると、全く訳が分からず完全にお手上げ状態です

DXの関数を使って、Xファイルも使い最低限のプログラムで公開しているサイト様or
そういった参考書など、初心者向けな物はないでしょうか。

現在は、Xファイルの読み込み、3D空間上での動作、カメラの動き等は分かっています。
次のステップとしてアニメーションをさせたいと思っており、どうしても勉強したいです
656デフォルトの名無しさん:2010/12/08(水) 18:31:38
SDKにサンプル付いてなかったっけ
SkinnedMeshとかなんとか
657デフォルトの名無しさん:2010/12/08(水) 18:55:46
>>655
SDKのSkinnedMeshサンプルってスキンメッシュ以外何も入ってねーじゃん
おめ、ボーンの基本的な仕組みを理解してるのかよ?

理解してるかチェック
1.ワールド座標系→ローカル座標系変換ができる
2.ローカル座標系→ワールド座標系変換ができる
3.ローカル座標A系→ローカル座標B系変換(またその逆)ができる
4.Xファイルの構造がわかる(テキトーでもおk)
658デフォルトの名無しさん:2010/12/08(水) 19:05:32
理解してないから聞いてるんだろ
お前は一体何を言っているんだ
659デフォルトの名無しさん:2010/12/08(水) 19:11:32
うるせーーー!
660デフォルトの名無しさん:2010/12/08(水) 19:17:39
>>656>>657
恥ずかしながら、SkinnedMeshを見てもウィンドウの作成、ビュー、ワールド、射影は置いといて
それ以外が何をしているのかが全く分からない状態です・・

理解してるかチェック
1.出来ます
2.出来ます
3.ローカルをローカルにはやった事はありませんが、アニメーションのプログラムで一度原点に戻してから、
   計算しなおすといった事で使うものであってるのでしょうか。処理を軽くするためと書いていてそれじゃなければ出来ません
4.テキストで開いた文字列の事なのでしょうか・・直接数字をいじって色を変えたりも出来ません

661デフォルトの名無しさん:2010/12/08(水) 19:29:35
>>660
なんで1,2ができて3ができないのか?
ローカルA→ワールド→ローカルBでできるに決まってるじゃないか

とりあえず
ここ、よく解説してあるから勉強してみたら?
http://marupeke296.com/GameMain.html
662デフォルトの名無しさん:2010/12/08(水) 21:14:24
>>661
すみません、そのサイト様の「 その61 」
ttp://marupeke296.com/DXG_No61_WhiteBoxSkinMeshAnimation.html
で勉強していたのですが、Xファイルを使う場合はこの回を勉強しても
意味はないのでしょうか・・

今はXファイルでのアニメーションを最優先で行いたいと思っていまして、
質問されたという事は、やはりその質問の考え方が分かってからではないと無理
ということなのでしょうか

663デフォルトの名無しさん:2010/12/08(水) 21:18:26
まずは自分で厳密に計算して、ポリゴンを目的の場所に描画できるようになってから次に進め。
664662:2010/12/08(水) 21:20:24
>>661
申し訳ないです、つまり>>662の下の文章の通り、質問された内容がアニメーションでは必須で
これも分からなければそこからやり直せと言われたらそうします。

そうでなければ上の文章の「 その61 」URL を踏ませてまですみませんが
この回の内容が分かればDirectxの関数を使わずともアニメーション処理をする事が
可能になりますでしょうか
665デフォルトの名無しさん:2010/12/08(水) 21:21:56
Xファイルから頂点の情報とボーンの情報を取り出して>>662のサイトの説明に当てはめればできると思うけど
666662:2010/12/08(水) 21:23:46
>>663
文章を書いていて通り過ぎました、申し訳ないです

サブセット毎に意図的に配置しろ、という事で合ってますでしょうか
667デフォルトの名無しさん:2010/12/08(水) 21:24:52
>>662
結局何がやりたいのか分からん
Xファイルは使いたいけど
D3DXインターフェイスやヘルパー関数を使わずにやりたいってこと?

スキンメッシュの実装は貴方が思ってる以上に複雑なもので一朝一夕にやる方法は無いよ
SkinnedMeshのコードは素人目には必要なさそうなコードがいっぱいあるように見えるけどほ基本全部必要なものだから
1行1行追いながら何をやってるのか理解するしかない
668662:2010/12/08(水) 21:28:03
>>665
有難うございます、勉強していて違った方向へ進んでいたのかと思いました

そのサイトでは三角形の数が少なくかったので少しは分かりましたが
それがXファイル規模となると頂点の数すべて取り出せるのか? と思っていました。
669デフォルトの名無しさん:2010/12/08(水) 21:28:10
自前でXファイルを扱うのなら、まずは読み込んだ数値をコンソール出力するところから。
670デフォルトの名無しさん:2010/12/08(水) 21:32:01
Xファイルはフォーマットが曖昧だから
読み込みまではヘルパー関数使ったほうが良いな
自分で解析しようとすると読めないファイルがあるとか結構ある
671デフォルトの名無しさん:2010/12/08(水) 21:32:14
>>667
はい、最終的にはDirectxの関数を使わずやりたいと思っていまして
いきなりホワイトボックスから入っていました。

skinnedmeshとそのサイト様でのプログラムの量の差からskinnedmeshのソースには
アニメーションに必要な部分以外もあるのかなと思い込んでいました。
672デフォルトの名無しさん:2010/12/08(水) 21:32:44
1 Xファイルの構造を読み込む。
 これは自前で作ってもいいし、用意されているパーサを使ってもいい。
2 読み込んだデータを自前の構造体なり配列なりに格納
3 データをテキスト出力して、元ファイルと照合
4 ポリゴンを組み立てて自分で描画
5 フレームアニメーション要素の実装
6 スキンウエイトの適用

段階を踏んでいけば時間はかかるがそのうち出来るよ。
673デフォルトの名無しさん:2010/12/08(水) 21:34:08
それから最初は立方体のような簡単なデータを読み込むようにすること。
構造が確認できたら複数のフレームに増やすようにする。
674デフォルトの名無しさん:2010/12/08(水) 21:53:09
時間がかかる割に得られるものは少ないので止めた方がいいと思うけど。
675デフォルトの名無しさん:2010/12/08(水) 22:08:28
今時のPCで自力で3Dモデル表示させる必要なんて全く無いからな
DirectXは常に最先端だから、今どうしても使わないといけない層は3D職人レベル
一般のゲーム開発ならDXライブラリやゲームエンジン使った方がいい。DirectX9っていつのだよww
676デフォルトの名無しさん:2010/12/08(水) 22:08:58
ろくなサイト無いから自分でエクセルで計算したほうがいいよ
677デフォルトの名無しさん:2010/12/08(水) 22:52:58
Xファイルを再生するスレ
http://hibari.2ch.net/test/read.cgi/gamedev/1006624202/

このスレの
http://hibari.2ch.net/test/read.cgi/gamedev/1006624202/118-120
とかどうだろうか?
678デフォルトの名無しさん:2010/12/08(水) 23:03:39
>>662
ああ、そこ勉強したら理解できるんじゃない?
俺の言ったことが理解できなきゃ
ボーンオフセット行列理解できないと思うけど
>>661読んでわかったならそれで十分だよ

ただ、1,2から3を想像できない辺りちょっと不馴れかな・・・と
自分が作りたいものにスキンメッシュが必要だからって
いきなりスキンメッシュやろうとしてるならもうちょっと経験積んだほうがいいかと・・・
まず、DirectXの関数使って組んでみて改めて自作してもいいんじゃない?

俺は根性時代の人間なのでSDKのスキンメッシュのサンプル全文書き取り(わかるまで何度でも)がいいと思うけどw
679デフォルトの名無しさん:2010/12/08(水) 23:45:31
そんなの時間の無駄。
今なら「ゲームエンジンアーキテクチャー」を読めばスキニングの解説がソース付きで乗っている。
あれ読んで理解できなかったら知識が足りないので補充すれば良い
680デフォルトの名無しさん:2010/12/09(木) 06:11:24
DirectSoundでメモリに展開してあるファイルをストリーミング再生するのって意味無い?
681デフォルトの名無しさん:2010/12/09(木) 07:09:17
>>679
それはXファイルの〜なの?
682デフォルトの名無しさん:2010/12/09(木) 07:16:50
このスレは楽しい
683デフォルトの名無しさん:2010/12/09(木) 07:42:32
ググって辿り着いた XAudio2の話。 >>244 と同じ所で俺もつまづいたので死霊リンク
ttp://msdn.microsoft.com/ja-jp/library/cc677019(v=VS.85).aspx
ttp://msdn.microsoft.com/ja-jp/library/cc308017(v=VS.85).aspx
684680:2010/12/09(木) 08:51:00
教えてください
サウンドバッファはどこに作られます?
サウンドカードやチップセットにそういう場所がある?
685デフォルトの名無しさん:2010/12/09(木) 08:55:55
>>684
OSによって変わるし、XP以前だとドライバ任せ。
Vista以降だと完全にソフト制御になって
ハードの支援が受けられないので、基本的にはもう使わないほうがいい。
686デフォルトの名無しさん:2010/12/09(木) 08:58:41
>>684
そうじゃね。そういうカードなら
ただ実際はメインメモリに置いてあるPCMデータを必要に応じてカード側にDMA転送とかされて
それで発声されんじゃね。 てかその辺はドライバの仕事でアプリケーション製作者が必ずしも関知する所じゃないんじゃね
687デフォルトの名無しさん:2010/12/09(木) 09:43:41
>>686
なるほど。大きいファイルだからPCによってはストリーミングにしないとバッファに入りきらないってことはなさそう?
688デフォルトの名無しさん:2010/12/09(木) 10:21:43
>>687
XAudio2の場合は最大でもSourceVoiceには2MBのバッファまでしか渡せない。
DirectSoundの場合の制限は分からないけど、
ある程度の長さ以上の音声ストリームはストリーミング再生するのが常識。

oggからのライブラリを介したデコード、ストリーミング再生、複数ストリーム合成。
この辺含めて500行かかんないので、グダグダ言わず実装したほうが早い。
689デフォルトの名無しさん:2010/12/09(木) 11:36:12
ストリーミングは以下の状況で有効

回線速度が遅く、全データの取得に時間がかかる場合、
ストリーミングなら、頭の部分を取得した時点で再生を開始できる

データサイズが巨大で、ずべてメモリに上げると、メモリの利用効率が
落ちる場合、ストリーミングなら、小さいバッファで再生できる

690デフォルトの名無しさん:2010/12/09(木) 13:19:22
>>689
DirectXで動かすプログラムでストリーミングデータが
ネット上から動的に落として来るってシチュエーションが存在するのか?
691デフォルトの名無しさん:2010/12/09(木) 13:31:52
どこぞの3Dのオンラインゲームではゲーム内の映画館のスクリーンに動画をストリーミング再生で貼り付けていた
ローカルかネットかは知らない (ローカルのような気がする) が、同じ手法でネットから再生するシチュエーションはありえそう
仮想空間内のTVに何かのリアルタイム中継を流すとか
692デフォルトの名無しさん:2010/12/09(木) 14:42:16
Xファイルって今でも第一線で使われてるの?
693デフォルトの名無しさん:2010/12/09(木) 14:44:07
>>692
使われて無いと思いますよ
694デフォルトの名無しさん:2010/12/09(木) 14:44:14
今でもというからには以前は第一線で使われていたことになるが、
いったいいつのことだか具体例を出してもらおう。
話はそれからだ。
695デフォルトの名無しさん:2010/12/09(木) 17:55:07
どうしてマイクロソフトは第一線でも使えるフォーマットを標準にしなかったの?
696デフォルトの名無しさん:2010/12/09(木) 17:56:59
>>689
今はネットブックにもメモリ1G2Gが当たり前の時代なのに、CPUの負担を増やして圧縮ファイルからデコードする意味はある?
697デフォルトの名無しさん:2010/12/09(木) 18:25:46
Primitiveにモデルを描画するしかないのか
698デフォルトの名無しさん:2010/12/09(木) 18:31:59
>>685
まずは第一線で使えるフォーマットとな何なのかを明確にしろ。
699デフォルトの名無しさん:2010/12/09(木) 18:39:25
第一線でも使えるフォーマットにしようとしたけど
仕様が糞すぎて各3Dモデリング開発ソフト会社からそっぽ向かれた
700デフォルトの名無しさん:2010/12/09(木) 19:30:33
>>696
ロード時間
701デフォルトの名無しさん:2010/12/09(木) 20:43:56
形状は曲面や球なんかはポリゴンにしてしまったら2度と元には戻せないから非可逆だし
法線がないときもある(笑)、あるかもしれない(笑)とかいい加減だし
また、マテリアル分割されてないからリアルタイムにも実はあんまり向いてないよね
そのままDrawPrimitiveにぶち込めるフォーマットにしてくれりゃよかったんだけど
それだとメモリ的な無駄(はぁ?なにがしたいの?)が多いとか馬鹿な人が考えちゃったんだろうねw
702デフォルトの名無しさん:2010/12/09(木) 20:57:19
Xファイルのように簡単に扱えるフォーマットですら扱えない>>701のような存在に当時MSが気がついていなかった。
仕方がないのでDirectX11では>>701が言っているとおり、
そのままぶち込めるもっと簡易的なフォーマットをSDKのサンプルで提供している。
しかし現実問題としてそんなフォーマットじゃサンプル以外に使い道がない状態。
つまり馬鹿に何を与えても無駄ということ。
703デフォルトの名無しさん:2010/12/09(木) 20:58:48
Xファイルって使える気がしてきた。
便利な関数揃ってるし
704デフォルトの名無しさん:2010/12/09(木) 21:02:48
X-Fileは自分で定義したテンプレートが追加できるので、
自分でエクスポータが作れるのならあらゆるデータを含むことが出来る。
ただしD3DXを使わないと扱えない人間が使う限り糞フォーマットでしかない。
705デフォルトの名無しさん:2010/12/09(木) 21:10:02
>>702
>しかし現実問題としてそんなフォーマットじゃサンプル以外に使い道がない状態。
それってお前が馬鹿だからじゃないの?
706デフォルトの名無しさん:2010/12/09(木) 21:14:05
>X-Fileは自分で定義したテンプレートが追加できるので
これが諸悪の根源
汎用の方向性が間違ってる
707デフォルトの名無しさん:2010/12/09(木) 21:16:28
DCCツールのプラグインから欲しいデータを追加していけばいいんでしょ
708デフォルトの名無しさん:2010/12/09(木) 21:19:08
プログラマから見ればそうだけど
デザイナから見たらめんどくさいことこの上ない
結局は作る人間に受けの良いフォーマットじゃないと受け入れられない
709デフォルトの名無しさん:2010/12/09(木) 21:20:28
>>706
誰も使わないけどなそんなもん
読めるモデリングソフトがあるわけでもなし
なんかメリットあるんだろか?
710デフォルトの名無しさん:2010/12/09(木) 21:23:01
COLLADAが笑顔でうなづいています
711デフォルトの名無しさん:2010/12/09(木) 21:24:18
結局のところ便利にやるならシステムに沿ったフォーマットを自作するしかない。
だからエクスポータを自作できないレベルの人間に許されていることは、
不便でも既存の汎用フォーマットを使って不満を垂れ流すことだけ。
712デフォルトの名無しさん:2010/12/09(木) 21:25:12
必死だなw
713デフォルトの名無しさん:2010/12/09(木) 21:27:42
モデリングソフト+プラグインだよな
高額モデリングソフトならどれでも、安いのならメタセコ+プラグイン(¥5000)でおk
でもこの小額すら惜しむ奴いるんだよな・・・
本も一冊も買わない、それでいて勉強した気になってるから困る
714デフォルトの名無しさん:2010/12/09(木) 21:28:03
実際のところ第一線とやらのデータは、
各ゲームごとに独自実装で専用のエクスポータを作っているし、
汎用フォーマットをそのまま使っているものなんて皆無なんだよね。
715デフォルトの名無しさん:2010/12/09(木) 21:30:10
ずいぶん前にシェア版メタセコのライセンス買ったのに
ここ数年Blenderしか使ってないな
716デフォルトの名無しさん:2010/12/09(木) 21:34:05
XFile擁護してるの一人だけじゃん
717デフォルトの名無しさん:2010/12/09(木) 21:34:15
>>715
変態ツール使い乙
718デフォルトの名無しさん:2010/12/09(木) 21:36:04
blender結構使えるぞ
719デフォルトの名無しさん:2010/12/09(木) 21:38:23
>>718
使える使えないとか聞いてない
あまりにも操作が変態的過ぎていつも記憶から消える
一番安いソフトがメタセコだと脳みそで修正される
たとえ、それがタダであったとしても
720デフォルトの名無しさん:2010/12/09(木) 21:42:45
別に強要はしてないから大人しくメタセコ使っててくれ
Blenderは何回か挫折したがあれはよいソフト
でも残念ながらこの話題はスレチ
721デフォルトの名無しさん:2010/12/09(木) 21:50:27
Blenderちょっとみたけどボーンの情報も簡単にとってこれそうだけどね>プラグイン
昔からタダなのに人気ないな
722デフォルトの名無しさん:2010/12/09(木) 21:53:34
スレチだから他所でやれやゴミ
723デフォルトの名無しさん:2010/12/09(木) 23:06:02
ま、ようするにPerlかなにかでコンバーターを用意しとけって話だろ。
同じテキスト同士なら。
724デフォルトの名無しさん:2010/12/09(木) 23:10:55
プラグインだって言ってるだろハゲ
725デフォルトの名無しさん:2010/12/09(木) 23:41:06
Blenderが不人気なのはまともなエクスポータがないせい
メタセコはLW互換に見せかけて全然別物だから操作キモいよ
726デフォルトの名無しさん:2010/12/09(木) 23:46:15
死ねやコラ?
どこのスレでやっとんねんコラ?
727デフォルトの名無しさん:2010/12/10(金) 00:53:15
>>725
それってデザイナ的に?
メタセコはポジ確定してるけどBlenderはアニメーションまであるからデータの移行とかなさげだけどな
ゲーム作るってだけならプラグインでいいデータ吐けそうなんだけどな
もちろんスキンメッシュ付きXファイルも含めて
728デフォルトの名無しさん:2010/12/10(金) 00:58:04
まじでうざいからよそでやって
729デフォルトの名無しさん:2010/12/10(金) 01:07:43
ブレンダーはカルト宗教だからどうしようもない
"Blender"とか"ブレンダー"をNGワードに登録することを勧める
730デフォルトの名無しさん:2010/12/10(金) 01:40:37
>>701
そもそも、Xファイルが作られたとき、まだDrawPrimitiveはなかった気がする。
731デフォルトの名無しさん:2010/12/10(金) 05:41:16
何がうざいって自治厨が一番うざいわ
732デフォルトの名無しさん:2010/12/10(金) 06:56:53
>>731
単に自分の気に入らない話してるから叩き出したいだけって感じだしなw
負け犬臭くてよしw
733デフォルトの名無しさん:2010/12/10(金) 09:10:27
Blenderは脅威だからな。
メタセコが勝ってる所は何もない。
734デフォルトの名無しさん:2010/12/10(金) 09:13:48
最近のBlenderはそんなに変態仕様じゃないぞ?
プラグイン開発環境とマニュアルも充実してて、半日もあればエクスポータくらい出来るって
735デフォルトの名無しさん:2010/12/10(金) 10:08:46
本当にカルトなのは屈折したメタセコ厨
メタセコをNGワードにすると幸せ
736デフォルトの名無しさん:2010/12/10(金) 10:32:27
小遣い出して3DS MAX使おうぜ。
737デフォルトの名無しさん:2010/12/10(金) 10:37:50
デバイスロストのときにエフェクトをOnLostDeviceとOnResetDeviceではなく
ReleaseとLoadにしたら読み込みで失敗します
他のリソースは全部Releaseして生成にしてるので、これも同じようにしたいんですが
なぜ失敗するんですか?
738デフォルトの名無しさん:2010/12/10(金) 10:39:19
プログラマでも簡単に扱えるソフトは無いのか?
739デフォルトの名無しさん:2010/12/10(金) 10:40:25
SetVertexShaderConstantFで行列を設定するとき転置しないといけないのは何故ですか?
740デフォルトの名無しさん:2010/12/10(金) 11:27:56
>>738
あんまりこの話続くとスレチになっちゃうけど俺はXSI使ってるよ。
まったく知らないと難しそうに見えるけど、どれも大差ないと思う。
741デフォルトの名無しさん:2010/12/10(金) 11:35:20
>>737
DirectXはライブラリではなくて規格なので、
公式マニュアルに書いてあるとおりにやらないとダメ。
文句を言っても無駄。
742デフォルトの名無しさん:2010/12/10(金) 11:41:19
>>739
仕様としかいいようがない。
そもそも行列の並びの問題だから、最初から逆にしておけば転置する必要がなくなるし、
サンプル通りにやる必要性もないんだから、気になるなら逆でプログラムを組めばいいだけ。
743デフォルトの名無しさん:2010/12/10(金) 11:49:42
>>742
ありがとうございます。
744デフォルトの名無しさん:2010/12/10(金) 11:49:51
>>738
いったい何を言っているんだ?
プログラマだからこそどんなソフトでも、拡張する余地さえあれば、
プラグインなりスクリプトなりで簡単に扱えるようにできるだろう。
745デフォルトの名無しさん:2010/12/10(金) 11:52:27
>>744
たぶん、絵的センスが無くてもモデリングやアニメーションが上手く出来るソフトはないか?という意味じゃないの
746デフォルトの名無しさん:2010/12/10(金) 12:10:30
使いこなせても使い道がない!
747デフォルトの名無しさん:2010/12/10(金) 12:32:26
>>739
シェーダのベクトル×行列の命令が、転置行列を使うようになっているから。

行列を転置しておくと、ベクトルとの乗算に内積命令を使えて効率がいい。
内積ではなく積和演算(mad)を使えば転置しなくても同じ命令数で計算できるが、
アーキテクチャによっては内積を使うよりも遅くなってしまう。
748デフォルトの名無しさん:2010/12/10(金) 14:17:56
このスレは面白い
749デフォルトの名無しさん:2010/12/10(金) 14:20:28
>>733
日本語サポートってだけで大抵の人には有利

>>734
日本にはPythonを使える人がいない

>>736
色々使っても結局四大CGツールに落ち着くんだよな

>>738
四大CGツールならそんなに難易度は高くないよ
マニュアルも資料も豊富
中でもLW3Dなら数値入力でガンガン作れるから数字に強い人向け
750デフォルトの名無しさん:2010/12/10(金) 15:48:39
らいとうぇーぶってまだ生きてるの?
751デフォルトの名無しさん:2010/12/10(金) 18:28:57
4大CGツールってzbrush、blender、メタセコ、六角大王のことか
752デフォルトの名無しさん:2010/12/10(金) 18:32:45
Maya、3ds Max、Softimage、AutoCADだろ
753デフォルトの名無しさん:2010/12/10(金) 18:36:00
いま業界で強いのはMayaかな
Maxしか使えない人だとちょっと苦しい感じになってる
754デフォルトの名無しさん:2010/12/10(金) 19:42:12
プログラマでも絵的にいいって言ったら
BryceやTerragenだな
755デフォルトの名無しさん:2010/12/10(金) 20:42:10
>>749
>日本にはPythonを使える人がいない
問題発言
756デフォルトの名無しさん:2010/12/10(金) 22:57:19
なんでmayaやmaxとか古いソフトにこだわってんだろうな〜
そろそろ新しいの開発すべきじゃね
757デフォルトの名無しさん:2010/12/10(金) 23:05:22
>>756
新しいのは常に生まれて常に開発されて、それは延々と繰り返されてないか?
古いソフトにこだわってるんじゃなくて、デファクトの存在の話じゃないのか?
758デフォルトの名無しさん:2010/12/10(金) 23:08:46
オートディスクに制覇されてしまいました
759デフォルトの名無しさん:2010/12/10(金) 23:13:31
オートデスクは頑張ってるな
独禁法に触れない程度にもっと頑張れと思う
開発側からすれば1社に独占してて貰った方がいろいろ楽だ
FBX関係をもうちょっとしっかりしろと言いたいが
760デフォルトの名無しさん:2010/12/10(金) 23:15:21
気付いたらXSIもmayaもmaxもAutodeskか。
761デフォルトの名無しさん:2010/12/10(金) 23:29:02
>>749
>日本にはPythonを使える人がいない
はぁ?
C言語できれば1週間でだいたいできるようになる(逆(Python→C)は無理だけどなw)
762デフォルトの名無しさん:2010/12/10(金) 23:32:36
別にCじゃなくても何か別の言語でアプリケーション構築に慣れてれば
リファレンスその他で1日で書けるぞ普通に。いやマジで。若干クセはあるけども
763デフォルトの名無しさん:2010/12/10(金) 23:37:21
Pythonは他のスクリプト言語と比べると気色悪い部分が若干少ない
でも括弧がない(インデントに意味なんてもたせやがって)のと
ポインタがないのは俺はあんまり好きじゃねぇなぁ・・・
764デフォルトの名無しさん:2010/12/10(金) 23:38:49
あと self に馴染めない、って言ってる人の多くは C/C++ じゃない気がする
765デフォルトの名無しさん:2010/12/10(金) 23:48:16
>>763
ポインタが丸裸になってる言語なんか、C/C++とその親戚を除いたらほとんどないぞ。
あるのはオブジェクトへの参照。
766デフォルトの名無しさん:2010/12/11(土) 00:49:45
>>765
そうなんだよなぁ
だからc/c++から離れられない

ポインタ隠れてるのってそんなにいいか?
むしろ面倒なだけだと思うんだけど・・・
767デフォルトの名無しさん:2010/12/11(土) 01:23:35
SlimDX、XNA辺りはうまくやっている方じゃないかね。
768デフォルトの名無しさん:2010/12/11(土) 02:14:51
DirectInputってwindows7,vistaでまだ使える?
769k:2010/12/11(土) 02:55:14
初歩的な質問いいでしょうか?
Direct3D 9 で2Dポリゴンを表示しようとしたんですが、ポリゴンの色が虹色では
なく単色になってしまい困っています。デヒューズカラーの指定してるのに・・・
どうも頂点の配列の始めの要素の色が反映されているらしく、頂点を点として描
画すると正しくその頂点ごとの色が反映されるのですが、多角形として描画する
と、その多角形がどうしても単色になってしまいます。さっきからデバッグした
り他人のソースと見比べたりしているのですがさっぱり・・・どなたかご教授願
います!
770k:2010/12/11(土) 02:56:07


続く
771デフォルトの名無しさん:2010/12/11(土) 02:59:03
フラットシェーディング?
772k:2010/12/11(土) 03:08:17
続き
struct 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分割
773k:2010/12/11(土) 03:14:19
すいませんソースが変です ソースはなかったことにして下さい・・・

>>フラットシェーディング?
ソースを調べてみました。
シェーディングの設定は少しもしていないはずです。

塗りつぶしモードも
setRendState( D3DFILL_POINT, mode );
setRendState( D3DFILL_WIREFRAME, mode );
setRendState( D3DFILL_SOLID, mode );
とやってみましたが、ワイヤーフレームとPOINTに関しては表示すらできず、
SOLIDで単色という感じです。諦めるしかないのか・・・
774デフォルトの名無しさん:2010/12/11(土) 03:14:58
とりあえずどっかのロダにソース丸ごと上げてみろ、話はそれからだ
775k:2010/12/11(土) 03:28:54
長文アップローダさがします(`・ω・´)
776k:2010/12/11(土) 03:32:24
アップロードできました。
Win32空の新規プロジェクトのcppファイルに全選択⇒まるごと貼り付けでビルド
通ると思います。こんな夜中にすみません

http://anyhub.net/file/17ps-tt.cpp
777k:2010/12/11(土) 03:38:39
APIENTRY _tWinMainの所がまちがえてAPIENTRY_tWinMainになってました

さっき編集して間違えたんだと思います。スペース挟んだらビルドできました。
ちょっとシェーディングの設定をしてみよう(`・ω・´)
778デフォルトの名無しさん:2010/12/11(土) 03:59:06
こっちだと普通に頂点カラー反映されてるけど?
とりあえずCreateDeviceで
D3DCREATE_SOFTWARE_VERTEXPROCESSINGじゃなくて
D3DCREATE_HARDWARE_VERTEXPROCESSING
にしてみたら?
779デフォルトの名無しさん:2010/12/11(土) 03:59:31
俺の勘だと rhw = 1
780k:2010/12/11(土) 04:06:48
シェーディングモードを変えてみました。

device->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_GOURAUD );
⇒D3DPT_TRIANGLELIST色の違う頂点6個で、赤1色のぽりんごんに

md.setShade( D3DSHADE_FLAT);
⇒D3DPT_TRIANGLELIST色の違う頂点6個で、黄色と黄緑のポリゴンに

目星がついてきた
781k:2010/12/11(土) 04:59:56
rhwを1.0にしたらいけました!超ありがとうございます!!
いや〜寝ずに質問してよかったです。
にしてもrhwは謎の存在だ
782k:2010/12/11(土) 05:04:57
>>778
人のソースコードを眺めてるとD3DCREATE_SOFTWARE_VERTEXPROCESSINGの場合が
多かったからなんとなくそうしてました。
でもD3DCREATE_HARDWARE_VERTEXPROCESSINGのほうが速いらしいですね。それも
そうか。
783デフォルトの名無しさん:2010/12/11(土) 06:30:05
>>782
誰かのソースがこうだったからなんとなくそうする、っていうのは後々困るからやめたほうがいい。
ちゃんと理解して書かないと今回みたいなことが頻発するぞ。

例えばCreateDeviceはまずD3DCREATE_HARDWARE_VERTEXPROCESSINGで実行して
失敗したらD3DCREATE_SOFTWARE_VERTEXPROCESSING、それでも失敗したら
D3DCREATE_SOFTWARE_VERTEXPROCESSINGって書き方すればよっぽどショボい
環境じゃなきゃデバイス作成失敗はしない(マトモに動作するかどうかは別)。
あと設定するフラグの意味とかもちゃんと理解すべき。
784k:2010/12/11(土) 07:12:55
>>783
気をつけます(`・ω・´)

>>例えば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;
785デフォルトの名無しさん:2010/12/11(土) 07:32:54
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;

何でこの二つを同時に並べてるの?
馬鹿?
786k:2010/12/11(土) 07:48:41
>>785
本当だ
D3DADAPTER_DEFAULT と D3DCREATE_HARDWARE_VERTEXPROCESSING
の組合せはなしってドキュメントに書いてありました

あとrhwですが、float型ですがどうやらbool値っぽいです。0.01にしてみたり5.0に
してもポリゴンは不変でしたが、頂点によってrhw=0,rhw=1と変えてみたところ
rhw=0の頂点の色はグラデーションに反映されませんでした。ってきっとドキュメント
読めばちゃんと書いてあるんだろうな・・・読みます
787デフォルトの名無しさん:2010/12/11(土) 09:10:38
>>776
色々つっこみどころがあるけど、一番地味な点を指摘しておこう。

>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の説明より)
788デフォルトの名無しさん:2010/12/11(土) 09:31:02
WM_CREATEは特殊な状態で、
ハンドルはあるけど実体化してないような感じだからね。
その段階ではDirect3Dデバイスに関連付けることはできない。
789デフォルトの名無しさん:2010/12/11(土) 10:02:43
なん・・・だと・・・
790デフォルトの名無しさん:2010/12/11(土) 10:28:34
XPを捨ててCreateDeviceExを使えば幸せになれるよ。
791デフォルトの名無しさん:2010/12/11(土) 11:21:12
>>790
ま、Vista以降だと無理してDirect3D9を使う理由もないから
最初から3D11に行っちゃうけどね。
792デフォルトの名無しさん:2010/12/11(土) 11:39:52
directX10って全然話題にならないけど人気ないの?
793デフォルトの名無しさん:2010/12/11(土) 11:43:42
>>792
DirectX11の方が洗練されててハードウェア対応も旧機種向けに拡大した上、
対象OSも変わらずだったので
DirectX10を使う意味が全くなくなった。
794デフォルトの名無しさん:2010/12/11(土) 13:32:46
DirectX11もC++とWin32APIでプログラミングできますか?
それとも.NETになってしまったんでしょうか
795デフォルトの名無しさん:2010/12/11(土) 13:46:28
>>794
DirectX SDKを落として中を見てから言え。基本はC/C++のみだ。
逆に去年辺りまで公式の.NETサポートは無かったくらい。(XNA除く)

というかオープンソースでラッパライブラリ作ったはいいが、
MSDNその他の公式フォーラムでの扱いは未だにされてないな。
796デフォルトの名無しさん:2010/12/11(土) 13:47:23
>>794
そういう疑問を持つ前に、SDKのインストールは終わっているのか?
797デフォルトの名無しさん:2010/12/11(土) 13:48:27
見事にかぶったな
798デフォルトの名無しさん:2010/12/11(土) 16:32:40
>>784
なぜelseを使わないのか
799デフォルトの名無しさん:2010/12/11(土) 16:42:04
returnで戻しているのにelseを使う必要性がどこにあるんだ?
800デフォルトの名無しさん:2010/12/11(土) 18:19:49
関数からの出口は1つにすべきっていう20年くらい前のコーディングスタイルを
いまだに守ってる人とかw
801デフォルトの名無しさん:2010/12/11(土) 20:43:24
DirectXの処理の仕組みについていまいちよくわかりません
あるサイトでは処理ごとに違うプロシージャのようなものがよばれるとか、
またあるサイトではメッセージがなかったらゲーム処理をするとか
DirectXではいつどのように処理をしているのですか?
802デフォルトの名無しさん:2010/12/11(土) 21:01:24
それは設計の話なのでDirectX関係有りません
803デフォルトの名無しさん:2010/12/11(土) 21:04:46
>>801
DirectXが処理するのはあくまで自分の持ち分である入出力の部分だけ
お前さんが見てる内容はDirectX関係なしに、単にwin32の領域の話

基礎としてWindowsの基本的な動き、メッセージ、ウィンドプロシジャの知識必須

そういう意味で、DirectXは単にwin32APIにおける各種関数やGDI関数のような立場
混同せずに順番に切り分けて理解すること
804デフォルトの名無しさん:2010/12/11(土) 21:15:05
>>802,803
なるほど、そうだったんですね
てっきりwin32APIなどとは別物と思ってました
805デフォルトの名無しさん:2010/12/11(土) 23:10:51
なんか分かって無さそう
806デフォルトの名無しさん:2010/12/11(土) 23:33:27
>>804
win32APIと完全に別物だから切り分けろ関係ない、と上の奴は言ってる
807デフォルトの名無しさん:2010/12/12(日) 02:34:32
キネクトでモーションキャプチャできるかもらしいのだが
試みた人居ますか?
808デフォルトの名無しさん:2010/12/12(日) 02:57:30
もうされてる
809デフォルトの名無しさん:2010/12/12(日) 03:10:54
>>808
どうやるのですか
810デフォルトの名無しさん:2010/12/12(日) 04:03:15
スレチ
811デフォルトの名無しさん:2010/12/12(日) 08:36:01
>>809
ofxKinect と opencv でもググれ。それで得られた値を使って、DirectXで何かしたいような場合
またこのスレに来るといいぜ
812デフォルトの名無しさん:2010/12/12(日) 11:43:01
SDKにエンドユーザ向けランタイムをつくる方法があったと記憶していますが、どうやればいいのでしょうか?
813デフォルトの名無しさん:2010/12/12(日) 12:30:16
プログラム板にキネクトスレ立てようぜ
814デフォルトの名無しさん:2010/12/12(日) 17:08:11
>>812
SDKのライセンスの文章に書いてある。
815デフォルトの名無しさん:2010/12/12(日) 21:16:17
スレチ厨うざいな
816デフォルトの名無しさん:2010/12/12(日) 21:43:52
いやでもスレチだし
817デフォルトの名無しさん:2010/12/12(日) 22:59:46
フレームレートを変更したいのですが以下で実行しても30FPSに設定されてしまいます。

// VIDEOINFOHEADERの取得
hr=pC->GetFormat(&pmtConfig);
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER *)(pmtConfig->pbFormat);
pVih->AvgTimePerFrame = 500000; // 20FPSに設定
// キャストして代入
pmtConfig->pbFormat=(BYTE*)pVih;

//SetFormatでpbFormatの変更を適用
pC->SetFormat(pmtConfig);

設定方法が間違っているのでしょうか?
818デフォルトの名無しさん:2010/12/13(月) 03:04:01
DirectShowじゃねーか。
pCとか意味わからんし。
DirectShowと戦うスレ Part 4
http://hibari.2ch.net/test/read.cgi/tech/1214127501/
819デフォルトの名無しさん:2010/12/13(月) 03:47:49
ランタイムって勝手にゲームと同封して再配布してもいいの?
820デフォルトの名無しさん:2010/12/13(月) 06:00:17
>>819
DirectX 再頒布パッケージのことを言っているのなら、話は逆だ。

DirectX を使用しているプログラムを配布するときは、
使用しているDirectXのバージョンに合わせた再頒布パッケージを
「必ず」同梱しないといけない。
821デフォルトの名無しさん:2010/12/13(月) 10:13:23
-1.#IND00
これなんですか?

angle = acos(D3DXVec3Dot(&now_vec,&eye_vec));
っていう計算をしたら、angleに入ってきます。

ちなみに、now_vecとeye_vecは小数第3位あたりまでほぼ同じ数値が入っていて
この場合、0が入ってきてほしいんですが…
if(angle == -1.#IND00) angle = 0;
とかしてみようとしましたが、数値ではないらしいのでエラー吐きます
822デフォルトの名無しさん:2010/12/13(月) 10:26:51
計算が成り立ってないんだろう。
823デフォルトの名無しさん:2010/12/13(月) 10:29:23
>>821
少なくとも 「if(angle == -1.#IND00)」 は通るはずが無いとまず思って欲しいが、
とりあえずその値は 「数値計算上、ありえない状態」 って意味。 要はエラー、INF みたいな物
824デフォルトの名無しさん:2010/12/13(月) 10:31:10
あ、なんか誤解招く言い方したかも
「INF みたいな物」 ってのは、つまり数値表現の中の特殊な状態って意味で、みたいな物ってこと
825デフォルトの名無しさん:2010/12/13(月) 10:31:28
>>821
三角関数について勉強しなおせ。
浮動小数点演算で例外が発生してるのでそれ以上計算しても無駄。

対策としては、そもそもそのような値が出てこない用に呼び出し前に場合分けをする。
826821:2010/12/13(月) 11:22:56
float dot;
dot = D3DXVec3Dot(&now_vec,&eye_vec);
angle = acos(dot);

とすると、今のところ問題なく動くようになりました(・_・
ちなみに、dotには1.000000が入ってきていました
827821:2010/12/13(月) 11:43:03
すみません、とりあえず>>826はウソでした
828821:2010/12/13(月) 12:15:00
1.0000001が入ってくる場合があって、そのときに問題が発生しました。
桁落ちしていたようです

回りくどい対策をするのはいやなので、とりあえずfloatをdoubleに変えて対策してみます
829デフォルトの名無しさん:2010/12/13(月) 12:17:54
>>826-828
そんな場当たり的な対応をしてないで、ちゃんと場合分けしなさい。
830821:2010/12/13(月) 13:16:19
if(D3DXVec3Length(&(now_vec-eye_vec)) < 0.0001f)
angledot = 0;
else
angledot = D3DXVec3Dot(&now_vec,&eye_vec);

とりあえず、こんな感じにしてみました...
831821:2010/12/13(月) 13:27:48
angledot = 0

angledot = 1.0 でした
832デフォルトの名無しさん:2010/12/13(月) 21:53:06
3Dモデルがアニメーションしており、例えば走っている時に、別のアクションをさせると
走っているモーションの値が維持されたままで、次にまた走るアニメーションを呼び出すと
途中から走っているアニメーションになってしまいます。

アニメーションの初期化はどうすれば出来るのでしょうか
833デフォルトの名無しさん:2010/12/13(月) 21:55:38
どういう処理でどういうアニメーションをさせているのか
834デフォルトの名無しさん:2010/12/13(月) 22:05:37
何を使っているのか等の初期設定すら他人に伝えられない人間が、
融通の利かないコンピュータのプログラムを書こうなど、到底無理な話だ。
835デフォルトの名無しさん:2010/12/13(月) 23:21:29
じゃぁお前は最初の初期化はどうやってるんですか、と
836デフォルトの名無しさん:2010/12/13(月) 23:36:58
アニメーションクリップが10秒定義されていたとして、5秒の所で中断して、
後日またそのアニメーションを再生したら5秒の所から再会しました。
0秒から開始するにはどうすればいいですか。
という質問だと思う。俺はDirectX知らないから後はまかせた。
837デフォルトの名無しさん:2010/12/13(月) 23:54:23
directXを覚えちゃえばopenGLもすぐ分かったりしますか?
838デフォルトの名無しさん:2010/12/13(月) 23:57:27
んなことない
3Dの概念は大体いっしょだけど
ちょいちょい仕様の違いがあって引っかかる
839デフォルトの名無しさん:2010/12/14(火) 00:14:16
一番基本的な相違は座標系が違うことかなー
BulletやPhysXなんかは座標系がOpenGL仕様なので、
DirectXで使いたい場合は変換噛ませないといけない
840デフォルトの名無しさん:2010/12/14(火) 00:53:34
>>837
3Dの概念は同じだし座標系が右手か左手かの違いだけ(だけっていうと言いすぎかもしれない)

どっちも使ってるけどGLのほうが覚えやすい印象はある。
でもGLはただのグラフィックライブラリだから、ゲーム楽に作りたいならDirectXのほうがいいと思う。
例えば行列にしろベクトルにしろ、DirectXはD3DXMATRIXとかD3DXVECTOR型が用意されてるけど
GLにはマトリックス型もベクトル型もないから自分で作らないといけない感じ。
841デフォルトの名無しさん:2010/12/14(火) 01:40:10
>>838-840
ありがとうございます。
参考になりました。
842デフォルトの名無しさん:2010/12/14(火) 02:13:33
すみません。
3Dモデル描画にSDK Sampleの加工品を使っています。
不透明モーション付きモデルはそれで事足りていましが、
半透明モーション付きモデルの再生を行いたく思い問題に。
真っ当に行くならVertex、IndexBufferなどからポリゴン情報を取得して全ソートして描画すべきなのでしょうが、
そこまでせずに「大体半透明」にしつつモデル制作の手間が肥大しない、良い簡略化(騙し)の手法は無いでしょうか?

また、わざわざ全ソートしている作品をあまり見かけない気がするのですが、
(透けているものの、同一Objectらしき部分は裏面が消えうせている作品が多い気がします)
半透明はどう描画するのが定番なのでしょうか・・?
843デフォルトの名無しさん:2010/12/14(火) 02:25:56
OpenGLと対応するのはDirect3Dだけじゃないの?
844デフォルトの名無しさん:2010/12/14(火) 04:11:12
>>842
全てのポリゴンをソートではなく、オブジェクト単位でのソートとか
845デフォルトの名無しさん:2010/12/14(火) 04:27:59
>>842
超適当でいいなら、不透明なものを全部描画してから半透明なものをZバッファ書き込み禁止で描画とか
846デフォルトの名無しさん:2010/12/14(火) 04:36:23
>>842
DXUTより抜粋
http://codepad.org/CRAlCRJ6

つまり
マテリアルの不透明部分を先に描画して
半透明部分を後から描画
847デフォルトの名無しさん:2010/12/14(火) 09:14:56
>>845-846
そういう意味じゃないと思うぞ。
例えばキャラクター丸ごと半透明にした場合、オブジェクト単位でソートしても
重なる部分(腕->胴体)の描画順によってはきれいな半透明にならないので
ポリゴン単位でソートしないとまずいよねって話。
で、普通やらない。背面カリングして後はあきらめる。
半透明の描画は色々提案はされてるけど、根本的には現在のテクノロジーの限界だね。
http://hak.wablog.com/62.html
848デフォルトの名無しさん:2010/12/14(火) 09:17:43
OpenGLと対応するのはDirect3Dのみ
GLUTと対応するのはDXUTの3D周りのみ(3D以外を扱うDXUTってあったかどうか忘れた)
--
win32+DirectX(割と全般)に対応するのはSDL(OpenGL含む)
※ただしSDLはLGPL


849デフォルトの名無しさん:2010/12/14(火) 09:43:14
>>847
その問題は厄介そうだなぁ。

例えばいったん別のRenderingTargetに不透明で描画した後、
本来のフレームバッファに2D処理で合成すれば綺麗になるけど、
Zオーダーの処理が難しくなるね。

RenderTarget側で別のZバッファを持たせたとしても、
2枚のZバッファをうまく使って合成する処理なんて書けるものなの?
850デフォルトの名無しさん:2010/12/14(火) 13:04:55
>>832
自前なのか何使ってるか分からないから概念だけ説明すると
歩きと走りはモーションが一周する速度が違うので、双方の再生速度を同時に変化させつつブレンドする必要がある

>>839
PhysXは変換かます必要ない
851デフォルトの名無しさん:2010/12/14(火) 13:08:37
>>847
Aバッファの実装はまだですか

>>849
ZバッファのほかにマルチレンダーターゲットでZ値を書き出せば不可能ではないね
852デフォルトの名無しさん:2010/12/14(火) 13:13:48
J.S.バッファ
853デフォルトの名無しさん:2010/12/14(火) 13:21:52
J.S.ミル
854デフォルトの名無しさん:2010/12/14(火) 14:51:13
シェーダーでメッシュを描画するとき
エフェクトファイル内のグローバル変数にテクスチャを渡す形で描画したいんだけど

デバイス->SetMaterial();
デバイス->SetTexture();
テクスチャ->DrawSubset();

の最後の「テクスチャ->DrawSubset();」は必要?
これやらないとテクスチャが描画されないけど、文献の多くには「デバイス->SetTexture();」がテクスチャ描画だとしている。
855デフォルトの名無しさん:2010/12/14(火) 14:57:19
テクスチャ->DrawSubset();
なんて存在しないでしょ
メッシュ->DrawSubset();
ならあるけど

とりあえずエフェクトつかってやるなら
デバイス->SetMaterial();
デバイス->SetTexture();
は要らない(というかシェーダーに直接渡しているはず)
DrawSubsetはどちらにしても要る

DrawSubsetは内部で
頂点ストリームのセット、インデックスバッファのセット
DrawIndexPrimitiveを呼び出して描画している
856デフォルトの名無しさん:2010/12/14(火) 15:10:42
サンクス!

デバイス->SetMaterial();
デバイス->SetTexture();
はクラス設計の問題でシェーダーに直接渡さないようにしてるんだけど問題あるかな?
857デフォルトの名無しさん:2010/12/14(火) 15:18:32
>>851
半透明は1パス目でzだけレンダリングしてzバッファーx4枚で手前4つのオブジェクトを検出して
2パス目で見えている物体だけレンダリングすれば良い気がする。
シェーダー使えば今でもできると思うんだけど、このアルゴリズムではダメかな?
858デフォルトの名無しさん:2010/12/14(火) 15:37:26
>>857
4つの根拠は?
859デフォルトの名無しさん:2010/12/14(火) 15:50:03
>>820
え、マジで?
ネットワークで配布するときも同様?
860842:2010/12/14(火) 21:08:32
>>844-847 >>849 >>851 >>857
色々な情報ありがとうございます。勉強になりそこそこの解決方法の目処が付きそうです。
ご助言ありがとうございました。
861デフォルトの名無しさん:2010/12/14(火) 21:50:04
>>847 の件、俺も自前のライブラリ作ってた時一瞬悩んだけど、
Vertex/IndexBufferを内部に一本で持って、各オブジェクトはそのバッファ内のオフセットで管理して、
単純に透過指定のマテリアルでまとめて描画で普通にクリアした
見た目のオブジェクト、管理上のオブジェクトが別だからって、バッファまで物理的に別にする必要無いので
その観点でさくっと解決した。そんな感じ。 ただし自前でモデル管理してないならお疲れ、としか言えない
862デフォルトの名無しさん:2010/12/14(火) 22:08:09
別にID3DXMeshでやってても自前で管理できるぜ
ID3DXMesh使ったサンプルって
マテリアルごとのDrawSubsetが一般的だけど
実はもう1つアトリビュートテーブルってのを持ってて
ここにDrawIndexedPrimitivesに必要な頂点オフセットや面数やらが格納される

面倒な読み込みまでをID3DXMeshに任せて
そこからそのアトリビュートテーブルやら
頂点バッファインデックスバッファを抜いてきて使うと結構柔軟に対応できる
863デフォルトの名無しさん:2010/12/14(火) 23:40:53
アニメーションモデルの逆再生がしたいのですが、
アニメーションコントローラーで実現できますか?
(最終的には戻したり進めたりで、プルプルした動きをさせたい
864デフォルトの名無しさん:2010/12/15(水) 09:06:17
>>861で何がクリアできるのか分からないんだが・・・
865デフォルトの名無しさん:2010/12/15(水) 09:14:56
コードイメージ伝わらないと初心者にはわからないよな
866デフォルトの名無しさん:2010/12/15(水) 10:08:47
コードイメージは分かるけど>>861では>>847の解決になって無いと思うケド
重なる部分が発生しないレベルまで細分化する前提の話なのかな
867デフォルトの名無しさん:2010/12/15(水) 11:46:29
キ選
868デフォルトの名無しさん:2010/12/16(木) 01:11:01
SDKのskinnedmeshについて質問です
ID3DXAnimationController::AdvanceTime(
DOUBLE TimeDelta,
LPD3DXANIMATIONCALLBACKHANDLER pCallbackHandler
);

ここでアニメーションを進めていますが、SDKのサンプルのskinnedmesh.cpp内で
どの変数に値を加算していっているのでしょうか
869デフォルトの名無しさん:2010/12/16(木) 01:27:19
fElapsedTimeはDXUTで既に計算されてる前フレームからの経過時間
AdvanceTimeは絶対時間指定じゃなくて相対時間指定だからね

AdvanceTimeの内部を知りたいって話なら無理な相談
870デフォルトの名無しさん:2010/12/16(木) 01:32:05
そのアドバンスタイムの第一引数はどこの変数に加算しているのかが知りたいと思いました。

更新しているアニメーションを初期化(また1からアニメーション)したいのです
そこでアドバンスタイムの第一引数の値をいじれれば出来るのかなと思いまして・・
871デフォルトの名無しさん:2010/12/16(木) 01:40:27
そういうことがしたいなら
SetTrackPosition
872デフォルトの名無しさん:2010/12/16(木) 01:47:28
ありがとうございます、出来ました
関数名的にResetTimeなのかなと思っていました
873デフォルトの名無しさん:2010/12/16(木) 01:57:44
どういたしまして
わからないことがあったらまたおいで
874デフォルトの名無しさん:2010/12/16(木) 02:10:52
お前誰だよw
875デフォルトの名無しさん:2010/12/17(金) 03:28:22
質問していいっすかね?ちょっと手持ちPCが4年前の化石なので

あの、D3D9 のテクスチャフォーマットなんですけど。ナニ使うのがベストなんですか。
なんか色々調べてみたんだけども、DX上位バージョンではRGBはGBRに統一されたんですよね?
古いのはサポート終了しただの、そこはDX内部の話だろうからどうでもいいんです。
ただ、新ハードGPUも古いフォーマットは切り捨てたとかあったので、さっぱり何がなんだか分からなくなりまして。
256色がとっくの昔に使えないのは知ってますけど、なんか Rgb16 Rgb32 も廃止ってあったので…。

たとえば、R5B6G5って新機種じゃもう使えないですか。一番ありそうな、A8R8G8B8 も無理?
どうせDX上位バージョンがD3D9の旧形式から変換を勝手にやってくれると思うんですけど(たぶん)
でも、RGBを自前でビット操作しているアプリは、BGRに並べ替えないとアウトって書いてあったので、そこでつまずいてます。
新しいフォーマットを旧DXから選択肢に選べるわけもなく、何をどうやって互換の判定をしたらいいんでしょう。
一度何か書き込んで、取り出して、色成分を調べてから処理を切り替えればよい?つーかそんな面倒が本当に必要?
それとも、なにか思いっきり勘違いというか見当違いな心配をしていますか?

長い質問すいません。読んでくれた方、助けてください。
876デフォルトの名無しさん:2010/12/17(金) 03:56:31
ん〜、いい心配だと思うよ〜。
877デフォルトの名無しさん:2010/12/17(金) 09:41:43
http://msdn.microsoft.com/ja-jp/library/bb205073(v=vs.85).aspx
テクスチャーの移植

欲しいのはこれかい?
878875:2010/12/17(金) 15:02:01
ありがとうございます。それ見た感じ、ほとんどアウトですか・・・。

でもたぶん聞きたい事がそれとちょっと違うんです。
たぶん、それはDX9から10への「移植」ですよね。つまりDX9自体を使わずにDX10デバイスで作りなおす場合の。

個人的に作り直す気はないんです。DX9のまま、HEL上で動いてくれればいいんです。
HALなら当然デバイスに依存するのは分かるんですけど、HELでもバイト順序は新しいハードに依存するんでしょうか。

あくまでDX9のDLLさえ入れておけば、古い形式で指定できて、HEL上にテクスチャをロードした場合
バイト順序も古いまま、オリジナルで保持されますか。
自PCはもちろん、周囲にも会社にもVistaとWindows7が一人もおらず全員XPなので、確認できないんです。
あればとっくに自己解決するんですけど・・・
879デフォルトの名無しさん:2010/12/17(金) 15:49:23
そもそもHELなんてDirect3D7以前の話なんだが、
いったいどれだけタイムスリップしているんだ?
Direct3D8、9、10、11にもHELなんて存在していないぞ。
880デフォルトの名無しさん:2010/12/17(金) 16:56:46
DX9で普通に作ってVista/7で普通に動けばよし
普通に作って動かなかったらそのとき考えればいいじゃない
881デフォルトの名無しさん:2010/12/17(金) 17:03:02
どうでも良い事で悩んでるな
何のためのDirectXだと思ってるんだ
882デフォルトの名無しさん:2010/12/17(金) 20:10:24
>>875
4年前のPC使ってる俺に謝れ
883デフォルトの名無しさん:2010/12/17(金) 20:21:57
>>882
いや、買い換えろよ。
884875:2010/12/17(金) 20:42:01
>>879
えっ?それはどういうこと??HELはHELで普通にありますよ。初心者だからってバカにしてます?
ちなみに俺のPCはオンボードのショボイやつなんで、9.0cでさえDirectDraw以外は完全にHELですけど何か。
Windows7でも、一旦HELで吸収してソフトウェアレンダリングされてるから2Dが重くなったんですよね(たしか)
俺がタイムスリップしてるんですか?テキトーに言ってませんか?
885デフォルトの名無しさん:2010/12/17(金) 20:48:09
お前がおかしい
886デフォルトの名無しさん:2010/12/17(金) 21:06:38
HELってハードウエアエミュレーションだっけ?DXのソフト実行モードかな。
887デフォルトの名無しさん:2010/12/17(金) 21:29:43
これはあれだな。

間違ったことをさも当然のようにかつ挑発的に書くことで
豚オタどもが鬼の首とったかのように本当のことを教えてくれるとか思ってる輩だな。
888875:2010/12/17(金) 21:31:43
>>886
そうです。ハードウェアアクセラレータをOFFにした場合の。

初期化コードで、HARDWAREとSOFTWAREとVERTEXHARD/SOFTをtry〜catchで選択設定するでしょ。
HALとHELの分岐処理。それをせずにコード組んでる人なんていないと思うし、
なのに「無い」とか「おかしい」とか言われちゃうしなぁ。

なんか、ちゃんと知ってる人々がちゃんと答えてくれると思ってたから、がっかり。
ちゃんとした場所の人々に聞くことにします。
889デフォルトの名無しさん:2010/12/17(金) 21:39:50
マルチポストで通報してやんよ
890デフォルトの名無しさん:2010/12/17(金) 21:41:07
>>888
そっちを目的で組む人は早々いないから、答えられないんじゃない?
全力で作ったらHELだと重すぎるでしょ。

ま、君が最初の人柱だ。ってことかもね。
891デフォルトの名無しさん:2010/12/17(金) 22:30:45
>>888
なんか突っ込むのも恥ずかしいが、それはHELじゃない
892デフォルトの名無しさん:2010/12/17(金) 22:39:05
馬鹿は放っておけばいいんじゃない?
893デフォルトの名無しさん:2010/12/17(金) 22:51:42
Direct3D9の話をしているかと思えば、Direct3D7を最後に廃止されたHELの話を出してきたり、
頂点計算をCPU側に行わせる設定をHELと言ったり、さっぱり意味不明。
894デフォルトの名無しさん:2010/12/17(金) 23:06:07
そもそもDirect3D9自体R5B6G5やA8R8G8B8に対応している保証はない。
フォーマットの保証がついたのはDirect3D10以降から。
895デフォルトの名無しさん:2010/12/17(金) 23:08:36
ソフトウェアT&Lの話だったの?
896デフォルトの名無しさん:2010/12/17(金) 23:10:38
ソフトウェアT&LをHELと勘違いして突っ込まれたら逆ギレした馬鹿のお話
897887:2010/12/17(金) 23:18:10
このように続々と突っ込みが寄せられ
>>875はまんまと情報を得るわけです
898デフォルトの名無しさん:2010/12/18(土) 00:00:51
まさにHellだな
899デフォルトの名無しさん:2010/12/18(土) 00:44:33
REFと間(略
900デフォルトの名無しさん:2010/12/18(土) 01:09:12
一回覚えた概念を修正するのって大変だよね。拡張は楽だけど。
901デフォルトの名無しさん:2010/12/18(土) 01:53:10
ID出ないからやりたい放題だな
902デフォルトの名無しさん:2010/12/18(土) 04:45:50
なんだまたバカが沸いたのか
903デフォルトの名無しさん:2010/12/18(土) 09:33:30
すみません。DirectX9で半透明モデルの描画を
両面描画モードと D3DRS_ALPHATESTENABLE のTRUEで行っているのですが、
モデルが輝く様に真っ白になってしまいます。(何かの設定を勘違いしてるハズですよね・・)
これをテクスチャの色や模様が“出来るだけ”しっかり見えるようにするにはどうすれば良いでしょうか?

ググって自己解決を目指していますが中々良い情報を見つけきれず、ご助言頂けますと幸いです。
904デフォルトの名無しさん:2010/12/18(土) 09:41:57
ライティングの設定は?
905デフォルトの名無しさん:2010/12/18(土) 09:45:31
とりあえず半透明じゃないときはちゃんと表示できてるの?
906903:2010/12/18(土) 10:02:25
>>904
light.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で割った色にしたい という感じでしょうか…もう少し色々試してみます。
907デフォルトの名無しさん:2010/12/18(土) 10:12:54
モデルデータにα値を設定してないんじゃ……
908デフォルトの名無しさん:2010/12/18(土) 10:47:20
マテリアルがみあたらねぇ
アルファは計算式わかってるのか?
909デフォルトの名無しさん:2010/12/18(土) 10:49:06
それとRenderStateのライト設定云々
他色々考えられるけど面倒臭くて聞けねぇ確認項目が多すぎる
すでに動いてるサンプルを手本にして自分でなんとかしろ
910デフォルトの名無しさん:2010/12/18(土) 11:44:21
両面なのにライティングを有効している時点で間違い
911デフォルトの名無しさん:2010/12/18(土) 11:53:24
えっ
912デフォルトの名無しさん:2010/12/18(土) 12:09:33
そもそもどこでαをイジって半透明にしようとしてるんだろうか?
頂点カラー?
マテリアル?
テクスチャ?

とりあえず、コレをやって結果をみてくれ

デバイス->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
デバイス->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
デバイス->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
913デフォルトの名無しさん:2010/12/18(土) 19:34:01
>light.Direction = D3DXVECTOR3(-1, -20, 0);
正規化はしといたほうがいい
914デフォルトの名無しさん:2010/12/18(土) 22:19:40
正規化したほうがいいですね
915デフォルトの名無しさん:2010/12/18(土) 22:41:58
両面でライティングすると、裏側の法線が逆転してまともに描画できないのは分かっているのか?
916デフォルトの名無しさん:2010/12/18(土) 23:00:33
へー?
両面描画すると
面の描画順の問題でZバッファの整合性が取れなくなることはあるけど
法線云々なんて聞いたこと無いわ
917デフォルトの名無しさん:2010/12/18(土) 23:27:38
でもシェーダ通すと法線が頂点にくっついてるから黒くしかならんよーな気がするね
固定シェーダだとうまくやってくれんのかな?
918デフォルトの名無しさん:2010/12/19(日) 03:00:20
>>52 :デフォルトの名無しさん:2010/11/01(月) 00:37:52
>理解って、高校で習った筈だろ。
>数Cだっけ?

「行列」は旧数Uの中の「代数・幾何」の中に入ってた記憶がある。
「基礎解析」(正関数までの微積)の方ではない。
919903:2010/12/19(日) 03:14:23
>>907  モデルには無しでブレンドできないかと思っておりました;
>>908  久しぶりに描画関係を触りテクスチャステージステートの存在すら忘れておりました…orz
>>909  他のα抜きモデルはテクスチャでしており、SetRenderStateは触っていないと気付きました;
>>910  両面でライティングは駄目なのですね;
>>912  やってみた所普通に不透明描画でした。モデルのDiffuseのaを変えても変化は無く…色々勉強不足を実感しました;
>>913 >>914  ご指摘ありがとうございます。ライトを正規化するよう書き換えました。
>>915 >>916  その様な事になる?のですね。今後ライトを触る場合頭に入れて用心します。
>>917 HLSLと固定シェーダ両方混在気味なので気になりますが…注意しようと思います。

今回はテクスチャに透明度を埋め込んで一応の解決に至りました。
(αの不要なテクスチャまでα計算してるのかもと思うと少々気が重いですが…)
沢山のご助言ありがとうございました。TextureStageStateから復習しなければ・・ですね。
色々と勉強になるお話、ありがとうございました。
920デフォルトの名無しさん:2010/12/19(日) 09:33:08
固定シェーダは確認項目多すぎ
固定シェーダで動かしたときのチェックリストが必要だな
どうせしばらくは使う奴減らないだろうし

>>907-917までのような項目を躓くたびに確認しないといけない
開発効率悪すぎ
何が起こってるのかわからなすぎ
921デフォルトの名無しさん:2010/12/19(日) 10:11:55
そもそも固定シェーダなど存在しない
922デフォルトの名無しさん:2010/12/19(日) 11:54:31
directx11の頂点バッファを動的に書き換えられる設定で作成し、
(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しようとしたのが
目的です
923デフォルトの名無しさん:2010/12/19(日) 11:55:02
そんな時の関数ですよ。
924922:2010/12/19(日) 11:59:49
頂点バッファ作成とロック部分のコードです
http://codepad.org/FZ5gAO6I
925922:2010/12/19(日) 12:25:56
書き忘れてました
win7
メモリ2G
CPU Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz (2 CPUs), ~3.0GHz
NVIDIA GeForce GTX 460
です
926デフォルトの名無しさん:2010/12/19(日) 12:46:07
大量に繰り返すのなら、一つのバッファに一気に書いて、
キューに投入するときにバッファのインデックスを指定すればいい。
927922:2010/12/19(日) 14:05:57
>>926
ありがとうございます。
しかし今は頂点バッファがひとつだけなのでそれ以前の箇所なのです・・・
インデックスを指定は
ID3D11DeviceContext::Draw
ID3D11DeviceContext::DrawIndexed
などのStartIndexLocation、StartVertexLocation
での指定ですよね?
928デフォルトの名無しさん:2010/12/19(日) 14:30:04
3角形の数だけLockしてるならそんなもん
1フレームに1Lockだけなら
いくら大量の頂点データをコピーしたとしても
その数値ありえないからどっかおかしい
929デフォルトの名無しさん:2010/12/19(日) 14:53:51
FPSの測り方がおかしいとか。
930デフォルトの名無しさん:2010/12/19(日) 14:55:44
バッファが一つなのに1フレームでロックを繰り返すのがそもそもおかしい。
確かにそれ以前の問題だ。
931922:2010/12/19(日) 15:34:19
すみません説明の仕方が悪かったです
ロックは1フレームに1回です
932922:2010/12/19(日) 15:37:09
>>928
ありがとうございます、なるほど・・・他の原因を探ってみようとおもいます
933922:2010/12/19(日) 16:02:17
すみません、直前に呼び出していたソートが原因でした・・・
最強にバカだったようです
ちょっと別スレ逝ってきます
ちなみに
2000頂点ロックしても
1000fpsでました
答えてくださった方々に感謝申し上げます
934922:2010/12/19(日) 17:51:37
ボトルネックの箇所を修正したところ、
そこそこのパフォーマンスを出せました。ありがとうございました
ttp://up3.viploader.net/ippan/src/vlippan175652.jpg
935デフォルトの名無しさん:2010/12/19(日) 18:47:32
スキンメッシュのマトリックス変換って外でやるよりシェーダー内でやったほうが速い?
936デフォルトの名無しさん:2010/12/19(日) 18:51:09
それ単体を比べただけなら大差はないけど
後々、やりたい事が増えた時のために
GPUに投げられる部分は投げちゃってCPUの空き時間を増やした方がいいよ
937デフォルトの名無しさん:2010/12/19(日) 20:44:12
>>935
CPUとGPUが具体的に何なのか分からないのに答えられるわけがない。
間抜けな質問を書く前に、その程度のことも考えられないのか?
938デフォルトの名無しさん:2010/12/19(日) 21:58:59
>>937
そんな厳密に答えなくていいんだよ。
質問者もそこまで求めてないの。
自閉症かなんかで理解出来ない病気なの?

>>935
この時期は外でやると寒いしお勧めしない。
939デフォルトの名無しさん:2010/12/19(日) 22:17:10
不覚にもワロタ
940デフォルトの名無しさん:2010/12/19(日) 22:39:26
>>935
スキンメッシュで描画する個数分だけ頂点をグラボに流し込まないといけないけど
その対象の環境と動かしてるゲームで測ってみないとなんともいえないな

大してたくさん描画してないんじゃ気にするだけ無駄だしね
○○無双系のもん作ったら超遅くなるだろうけどね
941デフォルトの名無しさん:2010/12/20(月) 00:49:39
ここで設計の相談するとスレチって言われる?
じゃあどこですればいいのよ
942デフォルトの名無しさん:2010/12/20(月) 00:52:48
ゲ製作板
943デフォルトの名無しさん:2010/12/20(月) 01:06:40
>>942
いってきます
944デフォルトの名無しさん:2010/12/20(月) 01:45:46
さよなら
945デフォルトの名無しさん:2010/12/20(月) 02:40:03
そもそもこのスレが板違い
次スレはゲ製作板でいいよな?
946デフォルトの名無しさん:2010/12/20(月) 02:43:09
以前は両方にあったけど
統合されて(向こうが自然消滅して)ココだけになった
ここが板違いならム板の半数のスレが板違いになるぞ
947デフォルトの名無しさん:2010/12/20(月) 05:30:01
スレタイ的には全然まったく板違いじゃないんだが、
どうも 「DirectX」 でかつ 「初心者」 と付くとコーディング以外の話に興味があるような怪しい人が
集まって来やすいとは思う。 だからゲ製行け、みたいな話になる
ライブラリ以前の言語初心者とかはここ来るより前にするべき事あるよな、みたいなのも
948デフォルトの名無しさん:2010/12/20(月) 05:45:26
テンプレに関連スレを記述する程度でいいと思う
そもそも純粋にプログラムの話題はこっちでいいだろう
あっちはゲームが絡んでこその板だろうし
949デフォルトの名無しさん:2010/12/20(月) 15:24:38
板だろうし
950デフォルトの名無しさん:2010/12/20(月) 20:20:10
ふと思ったんだけど、世間の DirectX 関係の解説サイトって、あんまり stl や boost 使ってる所無いよな
スマポ使わずに SAFE_RELEASE マクロとかだし。 単純な文字列さえMSマクロのまんまだし。
なんとなく不思議な感じだ
951デフォルトの名無しさん:2010/12/20(月) 20:25:10
NHKでチラっと映ったソースはSTLを使ってたな
ちなみに今夜24:15にNHK総合で再放送だ
952デフォルトの名無しさん:2010/12/20(月) 20:40:13
stl も boost も普段 DirectX以外のコードを C++ で書いてる時普通に使ってる物だから
俺も当たり前に使ってるけど、例えばこんな感じのスマポを自分で書いた所でたいした手間じゃないので、

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にぶち込む時には、カスタムデリータ付きの既存のスマポ使ってもいいしと思った
953デフォルトの名無しさん:2010/12/20(月) 20:45:49
NULLの意味がないとかどーでもいい所が気になってしまう人は
スマポとか向いてないんだろうな
954デフォルトの名無しさん:2010/12/20(月) 20:49:37
俺なんで NULL 足したんだろうなww
955デフォルトの名無しさん:2010/12/20(月) 20:58:52
NULLぽ
956デフォルトの名無しさん:2010/12/20(月) 20:59:56
そう言った癖はいい事だと思うぞ
957デフォルトの名無しさん:2010/12/21(火) 00:00:53
>>950
普通はサンプルとして載せるコードには、API以外の知識が必要がないように気を使って書く。
行数は短く、処理の流れは可能な限り上から下に順番に流れるようにするので、classの使用も控えて、
グローバル変数を多用するようになる。

サンプルコードを見る人はコピペしたいんじゃなくて、APIを呼ぶタイミングや順番を見たいだけだから、
必要のない情報は可能な限り排除すべき。
それを分かってない奴が、猫でもわかる〜とかのコードにケチ付けてるけど、APIの使い方の例としての
コードはあれでいい。

あと、Direct3DのCOMの使い方だと、スマートポインタってあんまり恩恵ないと思う。
958デフォルトの名無しさん:2010/12/21(火) 00:49:21
中級者向けの解説サイトが少ないと思う
959デフォルトの名無しさん:2010/12/21(火) 01:09:52
スマートポインタの恩恵はあるだろう
intrusive_ptr とかまさに
960デフォルトの名無しさん:2010/12/21(火) 01:26:28
まるぺけさんのとこは比較的スマポつかってたような
961デフォルトの名無しさん:2010/12/21(火) 01:58:51
まるぺけは入門向けって言うより
ある程度分かってる人が「あぁ、なるほど」って思える記事が多いんじゃないか?
962デフォルトの名無しさん:2010/12/21(火) 03:12:13
STLを使う方が入門者向けだろう
簡単簡潔にするためのものなんだから
963デフォルトの名無しさん:2010/12/21(火) 04:29:55
>>958
中級者向けって例えばどんなの?
964デフォルトの名無しさん:2010/12/21(火) 04:31:09
>>963
Direct3D9でいえば
xファイル読み書きしてぼちぼちライティング処理やったり、
関節処理実装したり、
デバイスロスト問題でヒーヒー言ったりが中級じゃないかね。
965デフォルトの名無しさん:2010/12/21(火) 04:48:49
directx9でシェーダーで描画してるつもりだけど、固定機能パイプラインで描画されてるのかシェーダーで描画されてるのかいまいちわからない。
確認する方法ってありますか?
966デフォルトの名無しさん:2010/12/21(火) 05:00:13
>>965
シェーダーの出力を真っ黒にしてみる
1行加えるだけでできるだろう
967デフォルトの名無しさん:2010/12/21(火) 07:36:17
質問です。
D3DXMatrixPerspectiveFovLHで描画したオブジェクトと
D3DXMatrixOrthoLHで描画したオブジェクトが
同じシーンに混在してても問題ってないでしょうか?(Zバッファとか)
968デフォルトの名無しさん:2010/12/21(火) 08:16:29
>>957
>普通はサンプルとして載せるコードには、API以外の知識が必要がないように気を使って書く。

実際、これに尽きるんだけどな。ただスマポの恩恵無いってのはあり得ないけども
969デフォルトの名無しさん:2010/12/21(火) 08:21:45
HLSLの入門サイトってあります?
演算子とか組み方とか載ってるようなやつ
970デフォルトの名無しさん:2010/12/21(火) 08:35:18
>>962
それは無い。std::cout や std::string みたいな物しか想像してないとそうも思えるけど、
実際標準ライブラリや準標準の boost とかスマポやイテレータ/ストリームだけじゃないから
それらの挙動を理解しないで、最終的に生の内容に取り出すような時、あるいは駆使したロジックを書くとき、
それらのテンプレートライブラリの挙動をある程度理解せずに変な記述すると、あっと言う間に意味フなエラーが何百も吐き出されて
入門者じゃ手に負えなくなると思うよ。 普段使ってる人間なら過去に何度も見ているはず。それを思えばその台詞は間違っても言えない
971デフォルトの名無しさん:2010/12/21(火) 08:50:03
>>969
ありません
972デフォルトの名無しさん:2010/12/21(火) 09:37:03
>>967
大丈夫だ、問題ない
途中の行列演算が変化するだけ。
射影後はすべて、
最終的なクリップ座標系(-1 < x < 1,-1 < y < 1,0 < z < 1の空間)
に移動する。2Dのものならzをznにしておけばzテストで落ちることはない
973デフォルトの名無しさん:2010/12/21(火) 09:39:22
974デフォルトの名無しさん:2010/12/21(火) 12:12:26
>>970
boostやそれ以外はSTLに関係無いだろ
975デフォルトの名無しさん:2010/12/21(火) 18:06:42
>>972
ありがとうございます
安心して使えます
976デフォルトの名無しさん:2010/12/21(火) 21:49:52
>>974
日本語でおk
977デフォルトの名無しさん:2010/12/22(水) 01:14:52
XNAってOOなクラスがちゃんと用意されてて便利そうだなぁ
978デフォルトの名無しさん:2010/12/22(水) 01:22:04
XNAはDirect9しか使わないから
ここで言うサンプルよか簡単なのは
あたり前
979デフォルトの名無しさん:2010/12/22(水) 07:43:37
何重にもくるまれた大切な赤ちゃんのようなXNA
980デフォルトの名無しさん:2010/12/22(水) 08:16:20
981デフォルトの名無しさん:2010/12/22(水) 12:50:46
次スレ立ててくる
テンプレに何を追加すればおk?
982デフォルトの名無しさん:2010/12/22(水) 13:25:51
Directx11にて、
HLSLでテクスチャを張るポリゴンと張らないポリゴンを切り替えるには、
パスを切り替えるしかありませんか?
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;
}
と二つピクセルシェーダを用意しなければならいのは仕方ないですか?
983デフォルトの名無しさん:2010/12/22(水) 14:02:19
>>982

if文つかえば定数を変更するだけでできるんではないかな?
984デフォルトの名無しさん:2010/12/22(水) 14:15:05
どういう条件で切り替えるのかによりけり
985982 :2010/12/22(水) 16:02:07
とりあえずテクスチャを張るか、張らないかだけなので、ps自体挿げ替えようとおもいます。
また状況が変わればifを使うのも一つと考えておきます。
ありがとうございました。
986デフォルトの名無しさん:2010/12/22(水) 18:15:21
シェーダー内で制御構造とか遅くならない?
987デフォルトの名無しさん:2010/12/22(水) 19:16:07
>>986
シェーダーでは分岐もループも静的に展開される。
988デフォルトの名無しさん:2010/12/22(水) 20:16:07
次スレ立ててきました
http://hibari.2ch.net/test/read.cgi/tech/1293016261/

とりあえず、C/C++、ゲーム製作についての質問はスレ違いなので注意のことを
勝手に追加してみた いらなかったら次は消してください
989デフォルトの名無しさん:2010/12/22(水) 21:28:59
>>988
ルールを変えるときは次スレ立てる前に確認するっていうのも追加しといて
990デフォルトの名無しさん:2010/12/23(木) 02:33:05
正直どうでもいいと思った
991デフォルトの名無しさん:2010/12/23(木) 09:33:24
そんな厳密にルールなんて決める必要ない
ルールにしたがってたって気に入らないレスには解答しないし
ルールから逸脱してても自分が気に入る話題には解答するし

本当に困ったちゃんは役に立たないルールを指摘して
自分の気に入らないやりとりを止めてしまう育ちの悪い糞ガキ
992デフォルトの名無しさん:2010/12/23(木) 09:35:33
ルールは全員が意見を出し合って決めた内容なら納得もいくけど
個人がテキトーに追加できるこんな形ではあっても喧嘩の材料になるだけ
993デフォルトの名無しさん:2010/12/23(木) 09:56:45
まぁルールってのは、本当にどうしようもない状況を回避する為のもんだから
994デフォルトの名無しさん:2010/12/23(木) 10:15:20
それと最近明らかに回答するレベルにない奴がとんちんかんなレスしてるから注意したほうがいい
前はいなかったから最近来た奴
995デフォルトの名無しさん:2010/12/23(木) 14:06:32
とりあえずうめ
996デフォルトの名無しさん:2010/12/23(木) 17:34:10
追加したルール内容は賛成だけど、勝手に追加するのはまずいな。
997デフォルトの名無しさん:2010/12/23(木) 19:34:46
テンプレ変更前はスレに貼り付けてこれでいい?って聞くのが普通だろ
そういう根回しが出来ないからコミュ能力がないって言われるんだよ
998デフォルトの名無しさん:2010/12/24(金) 07:34:27
埋め
999デフォルトの名無しさん:2010/12/24(金) 07:42:55
1000ならちんぽ晒す
1000デフォルトの名無しさん:2010/12/24(金) 07:45:35
やめれ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。