- 1 名前:デフォルトの名無しさん mailto:ライシンマハケン [2008/07/17(木) 13:50:04 ]
- 1 名前:デフォルトの名無しさん[sage] 投稿日:2008/04/09(水) 09:55:56
※回答する人も、質問する人も必ず読んでください これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 4.余計な雑談は不要ですよ 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「SDK見れ」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する方 】 ・ どんな事で躓いているのか明確にしよう。 ・ 長くならないなら躓いている部分のコードを晒してみれ。 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。 ・ 回答して貰ったら、出来るだけお礼もしよう。 【C++】 DirectX初心者質問スレ Part17 【C】 pc11.2ch.net/test/read.cgi/tech/1207702556/
- 231 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 01:49:16 ]
- スタート画面をクリックする前はボタンを描画しないで、
スタート画面をクリックした後はボタンを描画すればよい
- 232 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:29:06 ]
- スレの主旨から言ってDirectXで、という話だと思うけど
DXUTが一番楽なのでは。 後はイルリヒトとかコンポーネントっぽいのが入ってた気がする。 ダイアログを置いてオーナードローでDirectX描画っつー手もあるけど 多分、面倒臭いと思う。
- 233 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 05:45:47 ]
- 質問です
スペースキーを押したらゲーム本体が始まる様にしたいのですが 実行するとキーの状態を取得せずにいきなりゲーム本体が始まってしまいます どうすれば最初にスタート画面を表示し続けれるのでしょうか? スタート画面処理 { if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ){ スタート画面を描画する } } while(1){ if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { 〜略〜 }else{ スタート画面処理 ゲーム本体 Sleep(1); } }
- 234 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 08:14:20 ]
- 何と言う糞設計
DirectX関係ないし
- 235 名前:233 mailto:sage [2008/08/19(火) 10:23:26 ]
- >>234
は?黙れ
- 236 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 10:27:09 ]
- いやでもDirectX以前の話。
そこまでひどいとどこから説明していいのか途方にくれるわ。
- 237 名前:233 mailto:sage [2008/08/19(火) 10:33:45 ]
- なんだよ つかえねーな
- 238 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 11:11:24 ]
- if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ) なの?
- 239 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 19:26:21 ]
- アドバイスのしようがないほどのソースは久しぶりに見た。
まずはメインループを書ける様になってからだ。
- 240 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 20:02:05 ]
- 「DirectXゲームグラフィックスプログラミング」の他にDirectXの基礎事項を勉強できるおすすめの本はありますか?
- 241 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 00:49:17 ]
- if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 ) でイインジャネ?
- 242 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 09:59:44 ]
- 入力待ちしないものでいくら判断したって押されてなけりゃそのまま通過するだけだろうが。
- 243 名前:デフォルトの名無しさん [2008/08/20(水) 15:43:01 ]
- if (GetAsyncKeyState(VK_SPACE) & 0x8000)
else if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 )
- 244 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 20:19:13 ]
- ひどいソースわろた
- 245 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:57:09 ]
- 常にスペース押しとけばいつか動くさ
- 246 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:32:29 ]
- DirectShowの質問です。
ムービーの動画をテクスチャに移して加工した上で表示させたいと思い、 ネット上のサンプルを読み漁ってとりあえず組んでみたのですが 以下の疑問点が発生しました。 どなたかわかる方が居ましたら、答えていただければありがたいです。 1. ムービーファイルの画像を「1枚ずつ」「任意のタイミングで」取得する方法はありますか? 現在のコードでは、DirectDrawに再生させておいて 描画時にテクスチャを取得して再生する、という構造になっています。 おそらく別のスレッドで再生させているのだとは思いますが このシステムでは、負荷でメインスレッドのFPSが落ちた場合などに 当然ながら同期のズレが発生してしまいます。 (動画とメインループのフレームの比率が変化してしまうため) アプリ側から任意のタイミングでフレームを進めることはできますでしょうか? 2. 実際に再生させるルーチンまでは作れたのですが 動画ファイルの読み込みに250msほど時間がかかってしまいます。 特にIGraphBuilderのRenderFileメソッドが非常に重く、 ここだけで200ms持って行かれてしまいます。 これはムービーファイルを再生する上で回避できない時間なのでしょうか? ちなみに、ムービー形式はサンプルに沿ってwmvを使用しています。 DirectShowというと、マイナーでネット上のサンプルも少ないというイメージで 触っている人が少ないかもしれないかと思うのですが、わかる方が居ましたら よろしくお願いいたします。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:34:11 ]
- ここまで書いてふと思ったのですが、
DirectShowなどに頼らずに自分で動画をデコードするような コードを書いたほうが早いのでしょうか… 再生する形式はwmvなりmpegなり1形式に絞れるので。
- 248 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 10:01:06 ]
- ム板かマ板にDirectShowと戦うスレがあったはず
DirectShowがDirectXから切り離されてひさしいので そっちで聞いたほうがいいかと
- 249 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 12:36:26 ]
- ありがとうございます。
この板にDirectShowと戦うスレ Part 4というスレがあったので そちらで再度質問してみることにします。
- 250 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 17:50:09 ]
- テクスチャフィルタをポイントに設定するにはどうすれば良いでしょうか?
現状はバイリニアのかかったような少しぼけた画像が 表示されてしまいます。 SetSamplerStateでポイントサンプリングに設定しても変わりませんでした
- 251 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:40:46 ]
- 交差している半透明のポリゴンを正しく表示するにはどうしたら良いでしょうか?
- 252 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:11:17 ]
- 交線でポリゴンを切り分ければ良し
- 253 名前:デフォルトの名無しさん [2008/08/24(日) 23:59:52 ]
- 質問いいですか?テクスチャのピクセルを取得しようとしています。
D3DXCreateTextureFromFileEx( pd3dDevice, L"pattern.bmp", 64, 64, 1, D3DUSAGE_DYNAMIC, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &texPattern); // テクスチャ情報取得 D3DSURFACE_DESC desc; texPattern->GetLevelDesc(0, &desc); // テクスチャをロック D3DLOCKED_RECT lockrect; texPattern->LockRect(0, &lockrect, NULL, 0); DWORD* ptr = (DWORD*)lockrect.pBits; DWORD pixel_color=0x0; short getx=10;//取得したいピクセル short gety=10;//取得したいピクセル
- 254 名前:デフォルトの名無しさん [2008/08/25(月) 00:00:10 ]
- if (0<=x && x<(short)desc.Width){
if (0<=y && y<(short)desc.Height){ pixel_color=ptr[getx+gety*(short)desc.Height]; } } texPattern->UnlockRect(0); short color_r=(pixel_color>>16)&0xFF; short color_g=(pixel_color>> 8)&0xFF; short color_b=(pixel_color )&0xFF; 上のプログラムで正確な色が取得できません。 指定するピクセルによって違う値が返ってきているので、 きちんとテクスチャを参照してはいると思うのですが。 どうか教えてください。よろしくお願いします。
- 255 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 06:28:58 ]
- pixel_color=ptr[getx+gety*(short)desc.Height];
これを直すといいかもしれない うそいったらごめん
- 256 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 08:41:11 ]
- >>253
サーフェスの横幅は、D3DLOCKED_RECT構造体のPitchを参照しないと駄目。 パディングでdesc.Widthと一致しない場合がある。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 12:27:09 ]
- つーか、desc.Height掛けてどうするよ。
- 258 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 15:56:26 ]
- >>255
具体的にどう直せばいいのか教えてもらえると助かります。 >>256 Pitchのほうですか? あれは余計なところまで含めたものらしいんで使えないはずです。 試してもらえばわかりますが、Pitchのところまで表示させるとゴミが出ますよ。 >>257 yは縦ですからHeightでしょう、高さという意味ですし。
- 259 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:05:38 ]
- >>255,257見てもうちょっと考えろよ
- 260 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:07:59 ]
- DirectX以前だな。
・ぼーるがたてに5つよこに4つならんでいます。 ・ぼーるをひだりうえからいちだんずつよこにじゅんばんにばんごうをつけることにしました。 ・いちばんひだりうえが0で、いちばんみぎうえが3です。 ・みぎはしまできたのでいちだんさがってつぎのだんのひだりはしが4になります。 ・いかどうようにばんごうをつけるといちばんみぎしたは19になります。 さて、ひだりから0からかぞえて2ばんめ、うえから0からかぞえて3ばんめのぼーるはなんばんでしょうか。 けいさんしきがわからなかったら、えにかいてみるといいですよ。
- 261 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:13:49 ]
- Q. 3Dプログラミングに行列等、数学の知識は必要か
A. 掛け算程度は出来ないとお話になりません >258 算数からやり直せ
- 262 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:29:40 ]
- 正方形ならうまくいったのになw
- 263 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 16:34:37 ]
- >>258は質問者を騙った釣りだろう
sageてるし 内容があからさまに釣りだし
- 264 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 17:14:33 ]
- 質問です
布シミュに手を出して満足のいくものができたので、次は髪の毛にいこうかと思っています。 布シミュは「布シミュ」や「クロスシミュレーション」でうまく資料を探せたのですが、髪の毛はうまく資料をぐぐれません。 何か良いキーワードか、ページを教えていただけないでしょうか よろしくお願いします
- 265 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:35:38 ]
- 3DのRPGを作ろうと思っているのでDirectXを勉強しようと思ったのですが
数学や物理の知識が必要と聞いたので 三角関数・ベクトル・行列を一通り勉強したのですが 他にやっておいたほうがいい分野はありますか? ゲーム開発のための数理学物理学入門は一通り理解しました
- 266 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:39:36 ]
- RPGってどんなのを作るつもりかわからんけど
3Dの知識以前にゲーム製作の総合的な知識が必要になると思うぞ 3Dの部分についてはとりあえず作り始めちゃって問題が出たらその都度調べればいいと思う
- 267 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:41:26 ]
- >>266
アドバイスありがとうございます
- 268 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:03:00 ]
- 質問があります。
ATL/WTLにてDirectXを扱うにはどの様にしたらよいのでしょうか クライアント領域を別のビュークラスで定義しサブクラス化しており、色々調べたところ ビュークラスのHWNDを渡してしまうとCreateDeviceが通らないためウィンドウのHWNDで初期化し、 Render関数にて引数にCDC*を取り LPDIRECT3DSURFACE9 pSuf = NULL; m_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pSuf); 上記でバックバッファを取得し、 pSuf->GetDC(pdc->m_hDC); とビューのHDCとバックバッファのHDCを関連づける方法にたどり着いたのですが、 Clearすら通りません。 問題のあるところを指摘していただけないでしょうか。
- 269 名前:デフォルトの名無しさん [2008/08/25(月) 23:07:25 ]
- 最強の同人ソフトウエアーを作るにはどのグラボを買えばOKでしょうか?
- 270 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:20:07 ]
- >269
Intelのオンボード
- 271 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:21:15 ]
- >268
>ビュークラスのHWNDを渡してしまうとCreateDeviceが通らないため 普通に通るぞ
- 272 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:41:55 ]
- あれ、ほんとだ。
初期化関数に渡すハンドルをクライアントのに変えただけであっさり通りました むしろ何故以前は通らなかったのか…… いずれにせよ前に進めました。ありがとうございます。
- 273 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 08:20:34 ]
- DirectX9.0cなのに「診断ツール」がありません・・・
どうやったらdxdiag.exeをインストールできますか?
- 274 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 09:46:50 ]
- dxdiag.exeはDirectXのドライバ入れたら(=ビデオカードがあれば)
Windowsに入ってると思うが。
- 275 名前:273 mailto:sage [2008/08/26(火) 11:23:20 ]
- Cドライブでdxdiag.exeの検索かけても何処にも無い位は実行済み
更新しようとしても「最新だからインストール必要なし」と表示されます
- 276 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 11:36:26 ]
- ファイル名を指定して実行、とか、Windows\system32の中、とか無いの?
今まで無かったためしがないのでないという状況がよくわからん。
- 277 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 12:00:56 ]
- DirectXを学ぶときって関数を暗記する必要ありますか?
- 278 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 12:47:42 ]
- >>277
暗記してもすぐ仕様が変わるから無駄
- 279 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 15:35:54 ]
- 暗記する必要はないが、どんな関数があるかくらいは一度全部
目を通した方がいい。
- 280 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 16:47:25 ]
- パソコンのDirectXバージョンがDirectX10で
製品の動作機種がDirectX9対応グラフィックでは正しく使えるのでしょうか? それともDirectXというのは同じバージョンでしか対応しないものなのですか?
- 281 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 16:58:16 ]
- >>280
10以下のはすべて使えると思う
- 282 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 21:56:47 ]
- >>281
回答ありがとうございます
- 283 名前:デフォルトの名無しさん [2008/08/26(火) 23:03:10 ]
- とりあえず280GTXってのを買ってきました。これでコミケに出れます。
- 284 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:06:12 ]
- 今からDirectXの勉強を始めようと思うのですが
入門書としてDirectXゲームグラフィックスプログラミングVer2.1 を買いました。 DirectXGraphicsの初期化などは暗記して見ないで打てるようにしたほうがいいですか?
- 285 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:10:38 ]
- 初期化なんかゲーム1本につき1回しか書かないから、ちゃんと動くの1回書けたら忘れていいよ
- 286 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:10:39 ]
- なんか暗記とか数学どこまで勉強とかって・・・
日曜プログラマならみんなコピペでいいよ コピペで駄目になってから考えろ
- 287 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:11:50 ]
- みんなでコピペした結果がこれだよ!
www.watch.impress.co.jp/game/docs/20070927/wv.htm
- 288 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 07:18:41 ]
- >>283
待つんだゲフォの280は地雷だ。 らでの4850にしとけ。 大差ないスペックで大量の消費電力と3倍近い値段するんだぞ280は。
- 289 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 07:52:34 ]
- >>287
March 2008でも直ってねーじゃん
- 290 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 07:58:17 ]
- 日曜プログラマでも脳みそは使わなきゃダメだ
- 291 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 09:43:51 ]
- 提供元のサンプルはコピペのためにあるようなもんだしなw
DVD出たときにパイオニアと東芝がしょっちゅう同じバグ出してたのもコピペだったんだろうなあ
- 292 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 11:30:57 ]
- >>291
昔買ったNECのマウスのファームウェアがサンプルのコピペでワロタ CY7C63101のサンプルコードに書いてあった仮のベンダーIDとかそのまんまになってた
- 293 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:49:52 ]
- DC版VF3がSAMPLE GAMEなのと同じですね、違いますね。
- 294 名前:デフォルトの名無しさん [2008/08/28(木) 00:58:23 ]
- Windosゲームを作っていて、
ゲーム起動時に32*32のフォント画像のテクスチャーを約8000個作りたいんですが、 その処理に15秒くらいかかってしまいます。 CreateTextureやバッファにフォント画像を書き込むこと自体は、 全然時間がかからないんですが、 ↓の処理が凄く遅いです。 D3DLOCKED_RECT lockRect; pTexture->LockRect(0, &lockRect, NULL, D3DLOCK_DISCARD); 高速化する方法ってないでしょうか。
- 295 名前:294 mailto:sage [2008/08/28(木) 01:12:25 ]
- 自己解決しました。
CreateTextureのプールを、 D3DPOOL_DEFAULT から D3DPOOL_MANAGED に変えたらちょっぱやになりました。 理由はよく分かりませんが、 D3DPOOL_DEFAULTだとLockRectでVRAMにアクセスするから遅い?
- 296 名前:294 [2008/08/28(木) 01:20:42 ]
- LPDIRECT3DVERTEXBUFFER9を頻繁にLockして色を変えたりする場合も、
もしかして、D3DPOOL_MANAGEDの方が速いのでしょうか? D3DPOOL_MANAGEDとD3DPOOL_DEFAULTの長所短所がよく分からないんですが、 詳しい人いたら教えてもらえませんか?
- 297 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 06:54:13 ]
- POOL_DEFAULTは適切な使い方をすればちょっぱやになります。
あなたの使い方は論外です、今は素直にPOOL_MANAGEDを利用して いつか分かるようになったらそのとき色々考えましょう。 っていうかDEFAULTのテクスチャをロックするなよ。
- 298 名前:294 [2008/08/28(木) 08:47:12 ]
- 今までリソースは全てPOOL_DEFAULTで作ってたんですが、
POOL_DEFAULTはどういう場合に使うのが適切なんでしょうか? いつかじゃなくて今知りたいんですが、教えてもらえないでしょうか。
- 299 名前:294 mailto:sage [2008/08/28(木) 09:23:29 ]
- かなり苦労してデバイスロスト時のリソース開放復帰処理を作ったので、
適切なところはPOOL_DEFAULTを使いたいんです。
- 300 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 10:53:32 ]
- その前にテクスチャ8000個の方に突っ込むべきな気もする…
- 301 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 11:24:46 ]
- 淫乱負数からディスプレイアダプタを取得する方法が分からないのですが
誰か教えていただけませんか? // ディスプレイアダプタを表すためのデバイスを作成 // 描画と頂点処理はハードウェアで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { // 失敗した場合 // 描画処理はハードウェアで、頂点処理はCUPで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SPFTWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { // 失敗した場合 // 描画と頂点処理をCUPで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { //取得失敗 return E_FAIL; これだとコンパイルエラーが出ます。。。
- 302 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 11:45:18 ]
- D3DPOOL_DEFAULT とかD3DPOOL_MANAGED考える前に
テクスチャ8000個ってのを改善しろよ 8000個なんて使うときあるか?
- 303 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 12:41:51 ]
- >>302
日本語全部だとそのくらいじゃないの 知らないけど
- 304 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 12:44:54 ]
- 1文字ずつバラしてんのか
- 305 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 12:51:47 ]
- 1枚でつくって切りだして使えよ
- 306 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:22:12 ]
- >>305
じゃあ聞きますけど1枚に全部入りますか? 書き込む前に考えるクセをつけるべきだと思います。
- 307 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:27:35 ]
- jpeg3なら可能なんでない?
マトリョーカシからの圧縮も対応してるし 12000*8000のサイズも余裕で収まるっしょ?
- 308 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:27:56 ]
- 糞設計ブーム到来中
- 309 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:31:38 ]
- 「1枚じゃはいらないなぁ」
「でも複数にするとどの文字が どのテクスチャに収納されてるのか考えないと・・・」 「そうだ!1文字テクスチャでつくればいいんじゃね」←いまここ こういうことだろ? どんだけ手抜きなんだよ
- 310 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:35:26 ]
- 書き込む前に考えるクセをつけるべきなのは>>306だなwwww
- 311 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:52:55 ]
- ---煽りあいはここまで---
- 312 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 17:22:10 ]
- 32*32を8000枚って、30MB超えたんだが、いったいどんな富豪グラボを想定してるんだろうw
- 313 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 17:55:04 ]
- 大丈夫
いまどきの富豪なグラボは1GBある
- 314 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 17:57:52 ]
- 淫乱負数からディスプレイアダプタを取得する方法が分からないのですが
誰か教えていただけませんか? // ディスプレイアダプタを表すためのデバイスを作成 // 描画と頂点処理はハードウェアで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { // 失敗した場合 // 描画処理はハードウェアで、頂点処理はCUPで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SPFTWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { // 失敗した場合 // 描画と頂点処理をCUPで行う if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &m_D3DPP, &m_pD3DDevice))) { //取得失敗 return E_FAIL; これだとコンパイルエラーが出ます。。。
- 315 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 18:42:55 ]
- とりあえずエラーの内容も書こうぜ
- 316 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 18:55:45 ]
- Renderer.cpp(266行目) 淫乱負数からのポインタが取得できません
ちなみに使っているコンパイラは現役専門学生の友達が作ってくれたものです。
- 317 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 19:53:57 ]
- DEFAULTはそれこそ毎フレーム書き換えるようなデータに使うのが一般的。
その場合は当然DYNAMICフラグとセットにしてな。 それ以外のただの画像テクスチャなんてものはMANAGEDで問題ない。 速度的にDEFAULTが速いとか勘違いしてるかもしれないが 作成時に1回だけ書き換える程度の静的なデータには無意味だ。 一般的といっていいかは分からないけど、 MMOみたいな大量の文字を使うようなゲームでも普通は事前に テクスチャに展開してUVで切り出して描画をするぞ。 1文字1テクスチャは色々とおかしいといわざるを得ない。 1文字単位でテクスチャの切り替えが発生するしキャッシュ効率も最悪。
- 318 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:45:27 ]
- >>316
淫乱負数について詳しく
- 319 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:23:35 ]
- 【淫乱負数】
デクリメント負数のサイズ (バイト単位)。柔軟な頂点フォーマット (デクリメント) 頂点バッファの場合は、 淫乱負数 は少なくとも 1 つの頂点を格納できる大きさでなければならないが、頂点サイズの倍数である必要はない。 淫乱負数 は非 FVF バッファについては検証されない。
- 320 名前:294 mailto:sage [2008/08/29(金) 00:13:09 ]
- >>309
手抜きじゃなくて、無知で初心者なだけです。 常に最善を求めて頑張っています。 >>310 とりあえず>>306は私じゃないのであしからず。 >>312 いまどきのグラボは30MBくらいいけると想定して、 古いグラボはすっぱりと切る心づもりでした。
- 321 名前:294 mailto:sage [2008/08/29(金) 00:14:46 ]
- >>317
参考意見ありがとうございます。 charがどの文字に対応するかは絶対1つずつ判定が必要ですよね。 そしたら後は、1枚から特定の場所を切り出す処理がない分、 1つずつのテクスチャにした方が効率がいいかと思ったんですが、 そうではないんでしょうか? 私はプログラムやコンピュータに触りだしたのが最近で、 キャッシュ効率(たぶんハード寄りなこと?)というのがよく分からないんですが、 大量のテクスチャを使えば一時保存領域などを頻繁に入れ替えることになるから、 その分オーバーヘッドが生じて遅くなるってことでしょうか?
- 322 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 01:21:10 ]
- >>317
その書き方では、DEFAULTはロック書き換え用だと読めるが、 そうなの? 別に実測値を出せとは言わんが、それを示すドキュメントとかあるか?
- 323 名前:デフォルトの名無しさん [2008/08/29(金) 01:25:44 ]
- 扇形を簡単に描画させる方法ってないですか?
60度の角度で上方向に扇形を描画さしたいのですが(円弧の方が上) 開始地点は275から半径50の扇形を描画さしたいのですが pD3Device->SetTexture(0, pTexture[0]); pt[0].x = 250.0f; pt[1].x = 300.0f; pt[3].x = 275.0f; pt[2].x = 275.0f; pt[0].y = 225.0f; pt[1].y = 225.0f; pt[2].y = 275.0f; pt[3].y = 275.0f; pt[0].tu = pt[3].tu = 0.0f / 1024; pt[1].tu = pt[2].tu = 200.0f / 1024; pt[0].tv = pt[1].tv = 0.0f / 1024; pt[2].tv = pt[3].tv = 200.0f / 1024; pD3Device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pt,sizeof(CUSTOMVERTEX)); これでは普通に三角形ができただけで・・・ 角度計算とかで簡単に扇形にできないでしょうか?
- 324 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 04:00:28 ]
- >>321
テクスチャの切り替えはなるべく少なくした方が高速
- 325 名前:233 mailto:sage [2008/08/29(金) 05:00:57 ]
- 解決しました
粗末な物を張ってすみませんでした
- 326 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 07:17:27 ]
- 淫乱負数って一体何なんだ
- 327 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 07:33:53 ]
- >>321
テクスチャの切り出しなんて文字コードをインデックスにして テーブルからUVを引っ張ってくるだけだろ。 今のCPUのキャッシュ容量なら余裕で全部乗る程度のキャッシュサイズだし、 別にテクスチャ自体を切り出して作るわけじゃないぞ。 「テクスチャの切り替えをする」ということはそのつど「DrawPrimitive」を呼ぶということだ。 昨今のグラフィックカードは細かいデータをたくさん出すようには設計されてないので致命的なほど遅い。 なので可能なら1枚のテクスチャに格納⇒文字全てを1個の頂点バッファに格納⇒DrawPrimitive1回で全ての文字を描画 これが実測でも理論でも最速になる。 DrawPrimitiveの連打に比べたら頂点データの作成やUVテーブルの参照なんてゴミみたいな負荷。 >322 SDKに入ってるドキュメントに書かれてるよ。 >動的な頂点バッファおよびインデックス バッファの使い方 > >理想は頂点データまたはインデックス データがまったく変化しないことですが、これは必ずしも可能ではありません。 >アプリケーションがフレームごとに頂点データまたはインデックス データを変更する場合は多くあり、 >フレームあたり複数回変更することさえあります。 >このような場合は、D3DUSAGE_DYNAMIC を使って頂点バッファまたはインデックス バッファを作成する必要があります。 >この利用法フラグによって Direct3D を頻繁なロック処理用に最適化します。 >D3DUSAGE_DYNAMIC はバッファを頻繁にロックする場合にのみ有用であり、 >変化しないデータは静的な頂点バッファまたはインデックス バッファに格納する必要があります。 テクスチャやサーフェイスの場合だとシステムメモリにコピーをいちいち作れない、 レンダリングターゲットや深度バッファなんかもDEFAULTで作る必要あるけど。
- 328 名前:327 mailto:sage [2008/08/29(金) 07:43:05 ]
- 補足。
D3DUSAGE_DYNAMICフラグはD3DPOOL_DEFAULTと一緒じゃないと使えない。 D3DPOOL_MANAGEDって単にシステムメモリにコピーもってて、 システム側のバッファ⇒DMA転送⇒VRAMのバッファってやってるだけ。 だからデバイスがロストしても復旧できる。 当然だけど描画中のバッファをLock()しようとした場合は描画終わるまで待たされる。 そうなると頻繁にバッファ書き換えるなら直接VRAMのバッファ変えるほうが速いのは当然だし DYNAMICフラグの場合はLock()する度に別のアドレス返してくるからMANAGEDみたいに データの保障は出来ないってことだな。 DYNAMICしたバッファは Lock()→新しいビデオメモリ領域をmalloc()→そのアドレスを返す→描画終わったらドライバがfree() っていう処理だから他のバッファみたいに描画中のバッファに干渉してパイプラインを止めなくてすむ。 だから書き換えないならMANAGEDでいいし、頻繁に書き換えるならDEFAULT+DYNAMICにしとけってな話。 ドキュメントの「DirectXGraphics」→「プログラミング ガイド」→「プログラミングのヒント」→「パフォーマンスの最適化」を参照。
- 329 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:06:50 ]
- 書き込むスレ間違えたのでマルチスレッドになるかもですが、
シーンの作成時やレンダラーの初期化時に HRESULTをいうのを使っているのですが HRESULT Renderer::Initialize(HWND hWnd, BOOL isFullScreen, int clientWidth, int clientHeight) LRESULTとの違いってなんですか? LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); ウィンドウプロシージャルを定義するときはLのほうを使って DirectXの初期化の時などはHを使うって事ですか?
- 330 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:23:45 ]
- LRESULTはもともとlongだったものからきてる、longで結果を返すものと思っていい。
HRESULTは内容が決まってる。COMが返すものと思っていい。 自分で作った関数は、よそから返ってきたHRESULTをそのまま返すもの以外はあまり使わないと思うよ。
- 331 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:36:43 ]
- >>330
なるほど〜〜 ありがとうございました!
|

|