【C++】 DirectX初心者質問スレ Part14 【C】
at TECH
1:デフォルトの名無しさん
07/09/08 22:21:46
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part13 【C】
スレリンク(tech板)
2:デフォルトの名無しさん
07/09/08 22:22:28
【関連サイト】
MSDN DirectX
URLリンク(www.microsoft.com)
DirectX Home Page
URLリンク(www.microsoft.com)
BBX (掲示板)
URLリンク(isweb8.infoseek.co.jp)
DXライブラリ置き場
URLリンク(homepage2.nifty.com)
Lamp:ゲーム開発とその学習をサポートするミドルウェア
URLリンク(lamp.sourceforge.jp)
TWINTAIL LOVERS.
URLリンク(www.twin-tail.jp)
Pastel's Laboratory
URLリンク(www.roy.hi-ho.ne.jp)
GamDevPukiWiki - DirectX総合スレ (過去ログ等)
URLリンク(gamdev.org)
GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
URLリンク(gamdev.org)
ゲームを作るための素材を集めよう まとめサイト
URLリンク(paw.my-sv.net)
3:デフォルトの名無しさん
07/09/09 07:27:58
スマートポインタの話題禁止
4:デフォルトの名無しさん
07/09/09 08:36:08
読み込んだメッシュを描画高速化のために最適化しようと考えているのですが
上手くいっているのか分かりません。
D3DXLoadMeshHierarchyFromXでメッシュを読み込んだ後にOptimize関数を
使ってメッシュを最適化しているのですが、速度が全然変わってないように
思えます。
D3DXLoadMeshHierarchyFromXを実行した際に
「 Miss rate before optimization: 1.000000 」
というデバッグメッセージが流れているのでD3DXLoadMeshHierarchyFromX内で
既に最適化処理をしているという事でしょうか?
5:デフォルトの名無しさん
07/09/09 13:11:51
D3DPOOL_DEFAULTなテクスチャをLockしてる間に
デバイスをロストしたらUnlockしないとマズー?
6:デフォルトの名無しさん
07/09/09 14:04:31
ロストには
@.D3DDeviceがロストするとき(この場合はPOOLなんとかで作ったものも関係なく死ぬw)
A.リソースだけがロストするとき(この場合はPOOLなんとかで作ったもんは中途半端に生きている)
の2つがあって対処方法は2つ
T.それぞれの場合に対してキチンと対処する
つまり、@の場合の対処はD3DDeviceまで一度完全に破棄して、すべて作り直す
Aの場合の対処はD3DDeviceは生きているので死んだリソースだけチェックして
死んだリソースのみ復旧作業を行う
U.@もAもD3DDeviceまで一度完全に破棄して、すべて作り直す
大抵は面倒なのでほとんどの人はUの方を選ぶと思う
復旧にゲームの仕様まで絡むときもあるので注意して組むこと
諦めるのも手ではある
7:デフォルトの名無しさん
07/09/09 15:19:23
>>6
Thanks!
8:5
07/09/09 15:42:13
追加で質問なんだが
D3DDeviceがロストすると
D3DPOOL_DEFAULTなテクスチャの中身はあきらめ?
GPGPUみたいなことをやりたいんだが。
9:デフォルトの名無しさん
07/09/09 17:13:21
>>8
D3DDeviceがロストするとすべてが駄目
10:デフォルトの名無しさん
07/09/09 17:40:58
>>9
ども
11:デフォルトの名無しさん
07/09/09 21:57:31
D3DXCreateTextureFromFileExでテクスチャを読み込む時にサイズを指定して
テクスチャの解像度を元のリソースより低めにして読み込んでるんだけど、
そのまんまの解像度で読み込んだ時と描画FPSが変わらない気ガス
元のリソースの方の解像度を変えないと描画速度変わりませんか?
高解像度と低解像度のリソース用意するのメンドクサイのですが・・・
12:デフォルトの名無しさん
07/09/09 22:21:14
見当違いで無意味な最適化の努力で悩むのが初心者の特徴
13:デフォルトの名無しさん
07/09/09 22:23:13
違う。脱初心者の背伸びを温かく見守るべき
14:デフォルトの名無しさん
07/09/10 05:25:00
今、DirectX SDKについてくる、チュートリアルを見ながら勉強しています。
Tut04_Litghs(円柱がくるくるまわるやつ)をいじっていろいろ試しているのですが、
D3DXMatrixPerspectivForLHで射影変換行列を得るときに、
第4引数の、近い方の前方投影面を小さな値にすると円柱の外側の面が欠けたように見えるのは
なんでなんでしょうか?
0.00008fぐらいにすると少し欠けて見えて、0.00001fにすると半分が消えたようになって見えます。
もともとは近い投影面が0でもいいのかどうかということが知りたくて、0にしたら半分が欠けてしまって、
いろんな値で試したらこうなったのですが、欠けてしまうことの理由がよく分からないです。
なぜなのでしょうか?
15:デフォルトの名無しさん
07/09/10 06:41:02
>>14
最終的にZn〜Zfが0〜1になるように変換されるので、Zf/ZnがZバッファの
精度に影響する。
Znを0にしてしまうと計算上すべてのZが同じ値になってしまうので、Zバッファが
全く機能しなくなる。
16:デフォルトの名無しさん
07/09/10 06:43:44
>>5さんではありませんがリソースだけのロストがあるんですか・・
デバイスロストしか知らなかった。
便乗してすみませんが質問してもいいですか。
ID3DResource9にロストを調べるAPIがないようなのですが
ロストしたことを知るにはどうしたらよいのでしょう?
17:デフォルトの名無しさん
07/09/10 07:04:07
俺がやってたときはIsLostとかあった気がするけどねw
18:16
07/09/10 07:59:12
>>17
レスありがとうございます。
DX8,DX9のヘルプを見てみたのですが
自分が探した範囲では IsLost 見つからないです。
DX8/9で関係がありそうなのはGet/SetPriority, Preload あたりでしょうか。
生成時にSetPriorityでそこそこ高い値を設定してGetPriorityで0が返ったら
管理下にないのでPreloadを実行?ですかね・・。よくわからないです。
19:デフォルトの名無しさん
07/09/10 11:32:55
ID3DXCreateBoxで作ったメッシュから
自力で頂点を集めて自力でワイヤー表示したいです。(RenderStateの設定とか使わずに)
おおかたうまく表示できているのですが、何本か正しくない飛び出た線が描かれてしまいます。
まったく原因が分からないんですが、やり方は正しいでしょうか?
****************************************
//頂点宣言など
struct Face{
D3DXVECTOR3 v0;
D3DXVECTOR3 v1;
D3DXVECTOR3 v2;
};
struct VERTEX{
D3DXVECTOR3 v;
};
#define FVF_VERTEX (D3DFVF_XYZ)
std::vector<Face> g_vecFaces;
***********************************
//描画部分
for(int i=0;i<g_vecFaces.size(); i++){
g_pD3DDev->DrawPrimitiveUP(D3DPT_LINESTRIP,3,g_vecFaces[i].v0,sizeof(VERTEX));
g_pD3DDev->DrawPrimitiveUP(D3DPT_LINESTRIP,3,g_vecFaces[i].v1,sizeof(VERTEX));
g_pD3DDev->DrawPrimitiveUP(D3DPT_LINESTRIP,3,g_vecFaces[i].v2,sizeof(VERTEX));
g_pD3DDev->DrawPrimitiveUP(D3DPT_LINESTRIP,3,g_vecFaces[i].v0,sizeof(VERTEX));
}
20:19
07/09/10 11:33:59
つづき
*****************************************
//頂点集め
D3DXCreateBox(g_pD3DDev,2.0f,2.0f,2.0f,&g_pBox,NULL);
//バーテックスバッファ取得
BYTE* vb;//先頭のポインタ
g_pBox->LockVertexBuffer(D3DLOCK_READONLY,(void**)&vb);
//FVFサイズ取得
DWORD FVFSize;
FVFSize = D3DXGetFVFVertexSize(g_pBox->GetFVF());
std::vector<D3DXVECTOR3> vertices;
D3DXVECTOR3 *v;
for(unsigned int i=0;i<g_pBox->GetNumVertices();i++){
v = (D3DXVECTOR3*)( vb + (FVFSize * i) );
vertices.push_back(*v);
}
g_pBox->UnlockVertexBuffer();
unsigned short *ib = NULL;
g_pBox->LockIndexBuffer(D3DLOCK_READONLY,(void**)&ib );
for(UINT i=0; i<g_pBox->GetNumFaces()-1; i++){
Face face;
face.v0 = vertices[*ib++];
face.v1 = vertices[*ib++];
face.v2 = vertices[*ib++];
g_vecFaces.push_back(face);
}
g_pBox->UnlockIndexBuffer();
ここまで
21:19
07/09/10 12:01:53
for(UINT i=0; i<g_pBox->GetNumFaces()-1; i++){
じゃなくて
for(UINT i=0; i<g_pBox->GetNumFaces(); i++){
でした。
試行錯誤していろいろ弄ってたのが残ってました。
22:4
07/09/10 15:25:42
>>12
そのとおり最適化について全然分かっていない初心者なので、どの当たりが
見当違いなのかご指摘お願いします。
DX90SDKのOptimizeMeshを見ながらやっているのですが、階層構造の
スキンメッシュの場合だと、サンプルのソースをそのまま使う事も
出来ず困っています。
せめて勘違いしている部分だけでも・・・!
23:11
07/09/10 15:34:27
漏れも最適化したいけど全然分かっていないのでアドバイス頼む!
24:デフォルトの名無しさん
07/09/10 18:45:58
複数アニメーションのXファイルをmeshviewerで保存するとモーションの
順番が逆転するんだけど、これって防ぐ方法ってないの?
25:デフォルトの名無しさん
07/09/10 18:49:34
meshviewerってXファイルを書き出す時にメッシュの形でエラーのある部分を
修正する機能があって重宝しているんで、ちょっと困ってる
26:デフォルトの名無しさん
07/09/10 18:57:09
>>15
なるほど。0〜1に変換されるというところが分かってませんでした。
ありがとうございました。
27:デフォルトの名無しさん
07/09/10 19:32:46
画面上に半透明な四角を表示するにはどうしたら良いですか?
28:デフォルトの名無しさん
07/09/10 22:54:00
チュートリアルをきちんとやると出来るようになります。
29:デフォルトの名無しさん
07/09/11 00:40:55
D3DXMatrixTranslation()などで指定する移動量って単位は何なんでしょうか??
30:デフォルトの名無しさん
07/09/11 00:59:32
単位は自分で決めた通りのもの
31:デフォルトの名無しさん
07/09/11 02:07:45
meshviewerってソースあるんだろ。好きなように改造すれば
32:デフォルトの名無しさん
07/09/11 11:32:48
directXで3Dクイズゲームを作っています。
回答は、画面上にキーボードから打ち込んで
答えるようにしたいと思っています。
そこで質問なんですが、3Dポリゴンが表示されている画面上にいっしょに
テキストボックスやボタンを表示するにはどうしたらよいですか?
33:32
07/09/11 11:37:00
例ですが、
URLリンク(nichiyo-web.hp.infoseek.co.jp)
このことわざ蛍のようにテキストボックスを表示したいということです。
34:デフォルトの名無しさん
07/09/11 12:04:43
>>33
SDKにそのまんまのクラスあったような‥‥
35:デフォルトの名無しさん
07/09/11 12:12:33
D3DXの使いにくい機能を使うか、
フルスクリーンにしないことを前提に標準コントロールを使うか、
自前で実装するか。
36:デフォルトの名無しさん
07/09/11 12:40:55
か、
DXUTのテキストボックス使うか、
DXUTのソース参考に自分で実装するか、
あきらめる。
Vista対応も考えるとなるとIME周りが非常に面倒。
37:デフォルトの名無しさん
07/09/11 13:14:15
>>32
IDirect3DDevice9::SetDialogBoxModeを使えばフルスクリーンでもGDI関係と
一緒に使えるが、テキストボックスやボタンを子ウィンドウとして作成しても
問題ないかは試したことがないな。
38:デフォルトの名無しさん
07/09/11 13:22:59
>>37
子ウィンドウをクリップするよう気をつけてPresentしないと塗りつぶされちゃうよ
39:デフォルトの名無しさん
07/09/11 17:54:23
逆に言うと上書きに気をつければ使えるってことか
40:29
07/09/11 19:06:10
>>30
ありがとうございました。
メートル単位でやってみることにします。
41:デフォルトの名無しさん
07/09/12 16:33:59
光跡を描画したいんですが、簡単な方法はありませんか?
42:デフォルトの名無しさん
07/09/12 18:10:04
まずは簡単の基準を明確にせよ。
43:デフォルトの名無しさん
07/09/12 18:11:31
むずかしくてもいいので教えてください
44:デフォルトの名無しさん
07/09/13 17:34:27
directplayを使ってローカルのマシン同士で通信を行うプログラムを
組んでいます。
通常の"169.254.205.100"等のIP同士で通信を行う場合は上手くいくのですが
"192.168.1.2"や"192.168.1.3"等のようにルータから割り当てられたIPだと
マシン同士の接続ができません。
しかしながら、人のDirectPlayプログラムのサンプルを実行してみると、
ルータによって割り当てられたIP同士でも通信できる物があるので、
上手くすれば自分のプログラムでも接続できるようになるとは思うのですが、
自分の力ではどうにも限界です。(サンプルのソースが公開終了してたり動作しなかったり)
ルータによって割り当てられたIPアドレス同士で通信を行うにはどうしたらよいのでしょうか?
45:デフォルトの名無しさん
07/09/13 18:21:49
出来ないのが逆に不思議
46:デフォルトの名無しさん
07/09/13 18:37:13
サンプルソースを幾つか集めてみた中で、ちゃんと接続出来る物の他に
出来ないものもあったのでプログラムの組み方次第で接続出来る様に
なるとは思うのですが・・・。
47:44
07/09/13 21:28:28
なんとか解決できました。
デバッグ(F5)によってプログラムを実行させるた際と、実行(Ctrl+F5)
によって動作させた場合で動作が異なっていたのがバグの原因だったようです。
動作が異なっていた部分はHost関数とConnect関数なのですが、なぜデバッグ実行と
通常実行とで動作が異なっていたかが気になります…、とはいえ一応解決です。
ありがとうござました。
48:デフォルトの名無しさん
07/09/13 23:04:36
DirectPlayってとっくにMicrosoftに見捨てられてなかったの?
49:デフォルトの名無しさん
07/09/13 23:14:35
> Microsoft DirectPlay は不適切となっており、新しいアプリケーションを開発する際それを
> 使わないことを、Microsoft は強く推奨します。その代わり、拡張された Microsoft Windows
> ネットワーク テクノロジを、ゲーム開発者は使うべきです。
もうぶち切れですよ(サポートが)
50:デフォルトの名無しさん
07/09/14 09:26:46
>>41
レンダリングターゲット以外に
画面サイズのテクスチャを2枚用意する
まず光跡以外の部分をレンダリングターゲットにレンダリングする
(そのときのZバッファの値をつかって)←発光部分が常に見えているならいらない
テクスチャ1に発光部分をレンダリングする
テクスチャ1を適当に透明度上げてテクスチャ2にレンダリングする
テクスチャ2をレンダリングターゲットに加算合成する
テクスチャ1と2を入れ替える
(つまり前回の発光部分に新しい発光部分を書き加える)
以下繰り返し
51:デフォルトの名無しさん
07/09/15 13:26:19
>>50
ありがとうございます。
自分でも調べた結果、サンプルでもその方法で光跡を描画していました。
自分がやりたかったのは発射された弾の後で跡を残しながら飛んでいくというやつなので
その方法ではやりにくいです
2Dなら複数描画して先に描画したものを徐々に半透明にしていくことで
自分のやりたい感じのことができるんですが
3Dで描画(メッシュ)している場合でもそれと同じ方法でやれるものなんでしょうか?
52:デフォルトの名無しさん
07/09/15 14:51:20
むしろ2Dは3Dの一部だから基本的に2Dでやってることは3Dで出来る。
なんか変だな。
DirectXの場合、2Dは3Dを平面にしただけと言うべきか。
53:デフォルトの名無しさん
07/09/15 15:21:06
ミサイルの煙(曲がるレーザとか)なら、2Dなら平面で楽だけど3Dになると何故か筒状にする人がいたり。
別に3Dだからって煙も3Dにする必要は無く、
ビルボード(常にカメラのほうを向いている面)にして描画してやれば2Dと同じことが表現できる。
この方法だとカメラの目の前からミサイルが飛んでいくと煙が細い線になってしまうので、
ビルボードで描画された煙+それとは別の独立した煙を描画するなど対応する必要がある。
これができれば
3Dシューティングであればミサイルの数を多くして煙の数を増やす→1つのミサイルの煙を出来るだけ軽く
ロケットの打ち上げを見せ場にしたい→描画する自体を煙の数を増やしてロケットから大量の煙を出しているように見せる
など、あとは自分がしたいことに合わせて調節していけばいい。
54:デフォルトの名無しさん
07/09/15 15:54:32
光跡と行っても具体的に何を描きたいのか、
3Dの軌跡データをどういうケースでどうレンダリングするか、紙の上で考えてみるといいかと。
俺も今からやるとこなんだけど(・∀・)アヒャ
55:デフォルトの名無しさん
07/09/15 20:27:43
なぜメッシュだとできないと思ったのかが不思議だ
56:デフォルトの名無しさん
07/09/15 21:35:01
>>53が言うような感じで面倒なケースがあるからだろ。
57:デフォルトの名無しさん
07/09/15 21:52:18
慣れれば大したことじゃないけど、分からない状態で組み立てていくと難しく感じるかもね。
やってることはシンプルなんだけど。
58:デフォルトの名無しさん
07/09/15 21:57:09
メッシュビューアーで見ると普通なのにメッシュとして読み込んで動かしてみると暗いって言うのは
法線の入れ忘れなんですか?
ライトをFALSEにすると若干明るくなりますが
59:デフォルトの名無しさん
07/09/15 21:59:52
そのぐらいデータを見れば分かるだろ。
60:デフォルトの名無しさん
07/09/15 22:06:56
どうやら法線がないようでした
法線を計算して入れるのってどういう風にやればいいんでしょうか?
61:デフォルトの名無しさん
07/09/15 22:09:46
何らかのツール使ってるなら情報出されてないので答えようが無いのは承知の通り。
自分で入れるなら面に対して垂直方向に法泉を入れればいいだけ。
62:デフォルトの名無しさん
07/09/15 22:11:18
メタセコイア+RokDeBoneです
今まで作ったのは勝手に法線入ってあったのになぁ・・・
63:デフォルトの名無しさん
07/09/15 22:12:48
D3DXは使いたくないんですぅってこだわりがないなら
D3DXComputeNormals なんてのもある
64:デフォルトの名無しさん
07/09/15 22:16:38
あ、すいません
法線はXファイルのMeshNormalsっていうのですよね?
これだとベクトルがたくさん書いてあるので法線は入っているみたいです
65:デフォルトの名無しさん
07/09/15 22:22:24
解決しました
>DirectX9の固定機能パイプラインのデフォルト設定では、
>頂点ごとに色が設定されている場合は、それをディフューズ色として使用し、
>設定されていない場合は、代わりにマテリアル(D3DMATERIAL9)の色を使用するようになっています。
>頂点色がある場合に、あえてマテリアルの色を頂点色にしたい場合は以下のようにします。
>g_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );
これを適用したら、ちゃんと表示されました
66:デフォルトの名無しさん
07/09/15 22:23:23
データに入っているならプログラムが悪い
ファイルの読み込み
ライトの設定
描画の方法
この辺をかいてみそ?
67:デフォルトの名無しさん
07/09/16 01:28:34
D3DXFONTなんですが、これで描画するとものすごく遅いですよね
これってDrawText関数を呼び出す回数を減らせばちょっとでも早くなりますか?
たとえば
m_pText->Draw( "あいうえお" );
m_pText->Draw( "かきくけこ" );
とするより
m_pText->Draw( "あいうえおかきくけこ" );
とやった方が速度的には早いんですか?
68:デフォルトの名無しさん
07/09/16 01:57:23
>>67
それで速度アップは無理だろうな
ロード字に使う文字だけ一文字ずつテクスチャに描き込んでおいて一気に描画しろ
69:デフォルトの名無しさん
07/09/16 08:14:16
>>67
DirectX9cのD3DXSPRITEを用いたD3DXFONT->DrawTextは
結構実用的な速度だったけど、それじゃ駄目なの?
あと、必ず同じ文字を出すなら>>68の方法でやった方が早いよ。
70:デフォルトの名無しさん
07/09/16 12:45:30
>>69
DirectX10だとどうすればいいの?
71:デフォルトの名無しさん
07/09/16 15:54:46
>>70
コンシューマなら使う文字をテクスチャとして用意して使っている。
DirectXだからってわざわざWindows(IME)が用意しているものを使おうとしていること自体が変じゃないかな。
便利さを取って速度を捨てるか、面倒くさくても速度を取るかはその人次第だけど。
72:デフォルトの名無しさん
07/09/16 16:24:42
Direct3D9EX(Vista専用の拡張9)だとフォント用の1bitテクスチャがあった希ガス。
あとそれを使った描画メソッドも。
73:デフォルトの名無しさん
07/09/16 16:49:05
・フォントのライセンスどうしよう
・解像度を可変させたいが、作り置きのフォントが伸びてぼけるのはみっともない気がする
(個人製作なら)自前フォントを作るのが手間的に無理
74:デフォルトの名無しさん
07/09/16 16:54:40
>>71
フォントとIMEは何の関係もない。
変なのはお前の頭。
75:デフォルトの名無しさん
07/09/16 20:09:15
2D で画面がスクロールする描画をするときは、Sprite で背景画像をスクロールする分ピクセルをずらすのですか?
76:デフォルトの名無しさん
07/09/16 20:25:41
テクスチャが小規模、例えばそのエリアでは1枚のテクスチャしか使わないのであれば
画面サイズのメッシュを用意してテクスチャ座標をずらすだけでも表現できる。
これの応用で2枚のメッシュを使うことにより複数のテクスチャに対応できる。
手段に正解は無いのでまず適当に作ってから自分の好きなように調整すればヨロシ
77:デフォルトの名無しさん
07/09/16 20:49:37
背景を筒状にしてしまうのも手だな
78:デフォルトの名無しさん
07/09/16 20:55:25
それはD3DXCreateCylinderとかで作ってテクスチャを貼り付けるとゆう事ですか?
79:デフォルトの名無しさん
07/09/16 21:28:35
方法は自由。
「〜ですか?」ではなくまずやってみろ。
80:デフォルトの名無しさん
07/09/16 22:18:16
なんでいちいちD3DXの機能が出てくるのか馬鹿の思考は理解できない。
81:デフォルトの名無しさん
07/09/16 22:55:48
D3DPOOL_DEFAULTなテクスチャがロストしたかどうか
調べるにはどうしたらいい?
82:デフォルトの名無しさん
07/09/16 23:03:19
>>81
リソースが個別にロストするなんて事は無い。
デバイスがロストしたら再構築不可能なリソースは全て無効になる。
83:デフォルトの名無しさん
07/09/16 23:04:46
東京から大阪まで行くのはどうすればいいか → 自分で決めろ
車の場合、高速道路を利用すべきかどうか → 自分で決めろ
こんな感じの疑問を問いたい気持ちは分かるが、間違ってでも自分で判断してくれ
失敗は成功の元 プログラミングに関してはこの言葉が当てはまるから、無謀でもどんどん失敗して欲しい
・・・と思うのは俺だけでいい(´・ω・`)
84:デフォルトの名無しさん
07/09/16 23:06:42
お説教もいらないから。
85:デフォルトの名無しさん
07/09/16 23:10:48
>>82
>>6は嘘?
86:デフォルトの名無しさん
07/09/16 23:11:21
>>83
はじめの5行が無かったら素晴らしいレスだったのに
87:デフォルトの名無しさん
07/09/16 23:28:43
>>85
大嘘
88:デフォルトの名無しさん
07/09/16 23:30:54
>>1-88は全部嘘
89:デフォルトの名無しさん
07/09/17 00:00:31
おまえもうそかよ?
90:デフォルトの名無しさん
07/09/17 00:04:14
何を信じて生きていけばいいの?
91:デフォルトの名無しさん
07/09/17 00:04:50
信じる者は騙される
92:デフォルトの名無しさん
07/09/17 00:13:18
>>88がしんじつであるとすると
>>1-88はぜんぶうそになる
>>88はうそつきであるから
>>1-88はしんじつに…
もういいかんがえるのつかれた
93:デフォルトの名無しさん
07/09/17 00:15:09
安物RPGのダンジョンの謎解きみたいだな
94:デフォルトの名無しさん
07/09/17 03:55:13
>>81
だから、デバイスがロストするときとリソースだけロストするときがあるの
デバイスがロストするとリソースも死亡
リソースだけロストしたときはデバイスは生きてる
95:デフォルトの名無しさん
07/09/17 04:00:40
BBXで説明されてるな
URLリンク(bbx.hp.infoseek.co.jp)
96:デフォルトの名無しさん
07/09/17 07:43:20
>>94
リソースだけロストするなんて事はない。
嘘もいい加減にしろ。
97:デフォルトの名無しさん
07/09/17 09:22:03
・実体験に基づき、リソースだけロストする状況に遭遇したことがない。
・DirectXの仕様から推測し、リソースだけロストする状況が想定できる。
という葛藤。
前者は、そう言えるほど十分に広い事例を試したのかという問題がある。
98:デフォルトの名無しさん
07/09/17 09:47:00
>>96
研究が足り無いな
普通に動かしてりゃ2つの動作があることに気がつくだろ普通
それと、BBXのmasaさんのレス読んだのか?
【こっから】
ちょっとややこしいのですが、
リソースを再作成する必要が生じるタイミングには、
大きく二種類の状態があります。
まず、テクスチャ/頂点バッファ/スワップチェーンなど、
アダプタ(ビデオカード)内の VRAM のみが破棄され、
D3D ランタイムの D3D デバイス管理は生きているというケース。
#極簡単に言えばウィザードで生成されたコードの
#CD3DApplication::m_pd3dDevice ポインタが有効である時
ヘルプに書かれている「デバイスの消失」はこれです。
この場合、ハードウェア内の、つまり VRAM に置いたデータのみが消失しています。
#ウィンドウサイズの変更などで簡単に起こります。
もう一つは、D3D ランタイムの管理する D3D デバイス自体が
完全に破棄/再作成される場合です。
【ここまで】
99:デフォルトの名無しさん
07/09/17 10:04:57
>>98
デバイスがロストでデバイスのインタフェイス自体が使えなくなるわけじゃない。
勘違いも甚だしい。
100:デフォルトの名無しさん
07/09/17 10:23:10
>これは、モニタ解像度/色数の変更、フルスクリーン化など
>「ディスプレイの表示モードが変化した場合」や、
>HAL-->REF などのデバイスの切り替えで行われます。
これ大嘘だから。
実際に試してみれば分かるけど、手動管理のリソース開放とResetだけで動く。
デバイスインタフェイス自体を再作成する必用はない。
101:デフォルトの名無しさん
07/09/17 10:31:02
ウインドウモードとフルスクリーンの切り替えなんて、
パラメータを変えて普通にリセットすれば切り替わるだろ。
いちいちデバイスを作り直している奴の方が少ないと思うが。
102:デフォルトの名無しさん
07/09/17 14:37:33
xファイルを他の形式、dxf・mqo・3dsとかメタセコイヤで読み込める形式に変換してくれるツールってないかなあ?
形状だけで良いんだけど
YJPコンバーターって奴見つけたけど1600円もするから、なんかフリーであればいいな
103:デフォルトの名無しさん
07/09/17 14:48:10
メタセコで変換するんじゃだめなの?
何がしたいのかよく分からん
104:デフォルトの名無しさん
07/09/17 14:49:52
xファイルしかないモデルがあって、メタセコじゃXファイルインポート出来ないだよね〜
105:デフォルトの名無しさん
07/09/17 15:22:53
昔のDirectXにmemtime(.exe)ってツールが在ったらしいのですが、
どこかに落ちてませんか? く、くっください!!!!!
106:デフォルトの名無しさん
07/09/17 16:48:21
ちょっとさがしてみるよ
107:デフォルトの名無しさん
07/09/17 16:55:02
DirectDraw絡みの、VRAM・システムメモリの組み合わせ毎の速度測定ツール
だった記憶がある。こんなの今更要るの?
108:デフォルトの名無しさん
07/09/17 17:02:42
DXSDK3のbinにあったけどゆそうしゅだんは?
109:107
07/09/17 17:18:01
>>108 熱烈感謝
ココにアップお願いします。
URLリンク(www.uploda.net)
>>107
ココを見て興味わいたのです
URLリンク(www.sun-inet.or.jp)
110:デフォルトの名無しさん
07/09/17 17:35:48
>>109
けいたいからあっぷしてみるよ
ちょっとまってて…
111:デフォルトの名無しさん
07/09/17 18:07:54
>>110
お願いします。
112:デフォルトの名無しさん
07/09/17 18:10:59
>>111
あっぷできたよかくにんよろしく
URLリンク(ud.gs)
ぱすはふぁいるめい
かくちょうしはてきすとになっているから
きおつけてねw
113:デフォルトの名無しさん
07/09/17 18:36:35
>>112
熱烈感謝です。無事ダウンロードできました。有難うございました。
ぺコリ、ペコリ、ペコリ
114:デフォルトの名無しさん
07/09/17 19:31:17
>>99-101
は?何が言いたいの?
デバイスのロストはその2種類でいいでしょ?
115:デフォルトの名無しさん
07/09/17 22:58:30
馬鹿の書いた掲示板の書き込みを馬鹿が信じる典型的な例だな。
116:デフォルトの名無しさん
07/09/17 23:38:37
>>115
masaさんはダブルスティールの人だよ
デバイスロストが2種類あるっての正しいでしょ?
俺もこの辺すげー苦労した覚えあるし
D3DDeviceを各オブジェクトで保持する組み方してたから
そこの辺軒並み組み直しになった希ガス
このときはじめてポインタ保持はグローバル変数と同じぐらいの大罪だと知って死んだw
117:デフォルトの名無しさん
07/09/17 23:48:05
>>116
BBX見てる奴でMasaを知らない人間は少数だと思うが、
誰々が言ってることなんだから正しい、とかそういう考えはよくないぞ
118:デフォルトの名無しさん
07/09/17 23:49:36
デタラメをここまで盲目的に信じるとはもやは救いようがない。
119:デフォルトの名無しさん
07/09/18 00:09:30
>>117
いや、だから、馬鹿じゃないってただそんだけだよ
だれにだって間違いはあるだろうし、別に盲信してるわけじゃないよ
>>118
だから何が間違ってるっていいたいの?
デバイスロストが2パターンあるところはいいんだよね?
120:デフォルトの名無しさん
07/09/18 00:17:16
>デバイスロストが2パターンあるところはいいんだよね?
全然良くない。
馬鹿を盲信する一方、その他の人間の話を全く聞かないな。
121:デフォルトの名無しさん
07/09/18 00:19:09
だれか正解をまとめてくれ
それか住民全員を納得させられるような攻撃力のあるリソースを提示してくれ
122:デフォルトの名無しさん
07/09/18 00:28:07
>>120
え?詳細まで書けよ
D3DDeviceの指す先が変わってることってあるよな?
これは確実にあるよな?
なぜなら、俺が各オブジェクトに保持してほぼ全ソース修正する原因がこの出来事だから覚えてる
この件があって以来、ポインタ保持は絶対にしないと心に決めた出来事がこれだからだ
っつーことはデバイスが生きてて、リソースが死ぬって状況がないって言ってる?
123:デフォルトの名無しさん
07/09/18 00:29:35
>>119
自らがReleaseして使えなくしているのを、パターンの一つに含めている時点でおかしい。
デバイスのインタフェイスを開放することをデバイスロストとは言わない。
あとは>>6の
>Aの場合の対処はD3DDeviceは生きているので死んだリソースだけチェックして
>死んだリソースのみ復旧作業を行う
そもそもロストの原因を知る術も、個別にどのリソースが使用不能なのか確認するAPIも存在しない。
チェックできないのにどうやって特定のリソースのみ復旧できるんだ?
124:デフォルトの名無しさん
07/09/18 00:31:37
>>121
俺のソースはそのBBXのしかない
デバイスロストは2種類あると思った
で、俺が対応したのは2種類ともD3DDeviceを作り直して解決する方法
つまり、デバイスが破棄されても、リソースだけ死んでも、
デバイスまで一度破棄して、デバイスから作り直す方法
昔のソースだけど製品として出荷したのはそういうコメントになってるし
125:デフォルトの名無しさん
07/09/18 00:32:05
>>122
肝心の「なぜなら」の説明が、「〜心に決めた出来事がこれだから」てwww
自分の体験談かよwwww
126:デフォルトの名無しさん
07/09/18 00:34:10
IDirect3DDevice9とそれ以前で違うって可能性ない?
だとしたらここまでみんなの記憶が混乱してるのも頷けるんだけど。
127:デフォルトの名無しさん
07/09/18 00:37:10
>>123
>そもそもロストの原因を知る術も、個別にどのリソースが使用不能なのか確認するAPIも存在しない。
>チェックできないのにどうやって特定のリソースのみ復旧できるんだ?
実は俺のとった対応方法はデバイスを作り変えるっていう2つの方法に対応できる方法だけなので
各リソースの有無を判別して復旧させることはしてないから
各リソースごと判別っていうのは俺はやってないからそこは嘘なのかも
覚えてるのはりソースだけ死んで(一部か全部かは知らない)デバイスが生きている場合と
デバイスからまるごと死ぬ場合があるってところだけ
各リソースがってところにひっかかってるなら俺の嘘かもしれないので気にしなくていいス
128:デフォルトの名無しさん
07/09/18 00:38:45
>D3DDeviceの指す先が変わってることってあるよな?
意味不明
129:デフォルトの名無しさん
07/09/18 00:40:41
>>126
この方式になったのは8からで、デバイスロストの仕様はそこから変わっていない。
130:デフォルトの名無しさん
07/09/18 00:41:21
>>126
POOL_MANAGEDを設定することで確実に死ななくなってる可能性はあるね
だから、デバイスが死んだときだけ気にすればいいっていう
SDKのサンプルが復旧時にPOOL_MANAGEDであるかどうかしか見てないから
もしかしたらデバイスが死んだときしか気にしなくていいのかもね
131:デフォルトの名無しさん
07/09/18 00:42:56
>>129
仕様はそうかもしれないけど挙動もそうなのかな?
なんかやけにSDKのサンプルがしつこく死なない気がするんだけど
前は解像度切り替えするだけで真っ黒だった希ガス
132:デフォルトの名無しさん
07/09/18 00:43:53
デバイスロストしてもデバイスインタフェイスが使えなくなることも死ぬこともない。
そもそもインタフェイスが死んだらロストしたことを知ることも出来ないし、
メンバを呼び出した時点で例外を出してアプリが落ちる。
133:デフォルトの名無しさん
07/09/18 00:54:56
>>132
あー、そうだ
俺がアフォでした
D3DDeviceを捨てて作り直してるのは俺なのなw
でも、D3DDeviceが死んだら作り直すしかないから、
結果各オブジェクトでD3DDeviceを保持してると困るってことで
別にD3DDeviceが違うもんになるわけじゃないのなw
すいませんでした
134:デフォルトの名無しさん
07/09/18 00:57:04
どうしようもないオチが…
135:デフォルトの名無しさん
07/09/18 01:01:21
>>121
一応まとめてみたんで貼る。なんかもう解決しちゃってるぽいんで無視してくれ。
例のBBXのMasaの投稿を読み直してみたけど、彼は別に間違ったことは言っていない。
彼が言っているのは、あくまで「リソースを再作成する必要が生じるタイミング」が二種類ある、
ってことだけ。つまり、
1) デバイスがロストした時
2) プログラマが意図的にデバイスを開放した時
だと言っている。
問題なのは、この記述を「ロストが二種類ある」と誤って解釈してしまっている一部のスレ住人だ。
何故か、上の1)2)を「リソースのロスト」と「デバイスのロスト」などと区別してしまっているようだ。
DirectXのヘルプで書かれている「デバイス消失時の〜」ってのは要するに 1) の状態のことだ。
2) の状態のことを、ロストだとか消失だとか普通は言わない。
さらに混乱の元となっているのは、上のBBXのスレッドが、DirectXのサンプルフレームワークを
前提にした議論になってること。
本来ならプログラマが明示的にデバイスを開放しない限り 2) は起こりえないのだが、
サンプルフレームワークではHAL→HELの切り替えなどのタイミングでこれを内部で自動的に
行っているらしく、一部の住人がこれを
「もう一つのロスト状態」だとか「デバイスの指す先は勝手に変わることがあるよな?」
などと勘違いしている、という訳だ。
136:デフォルトの名無しさん
07/09/18 01:05:57
>>135
なんかよくわかんね
状態だけでいうと
テクスチャのデータが吹っ飛んで一部のオブジェクトが黒くなっちゃうときと
Presentの関数が失敗するときってのは同じ現象でいいわけ?
137:デフォルトの名無しさん
07/09/18 01:11:41
>>129
確かにD3D8からっぽいね。
URLリンク(msdn.microsoft.com)
>デバイスを処理状態に戻せない場合、アプリケーションはデバイスが元に戻るまで待機します。
>この場合、アプリケーションは IDirect3DDevice8::Resetを使用して、デバイス リソースをすべて削除し、
>デバイスを破棄する必要があります。
>その後、初期化の場合と同じように IDirect3DDevice8::CreateDevice を使用してデバイスを
>再作成する必要があります。
>アプリケーションを開発する場合は、デバイスの消失に対応するために 1 つのコード パスで
>アプリケーションを開発することをお勧めします。このコード パスは、
>起動時のデバイスの初期化に使用されるコード パスとほぼ同じになります。
しかし微妙に意味不明だなこれ。
どうせしばらくResetできなさそうなら、
いったん管理リソースも解放してメモリ節約しようって意味かいな?
ただそのちょっとあとにこういう一文も。
>デバイスをリセットできず、廃棄してから再作成する必要がある場合は、
>リソースもすべて再作成する必要があります。
問題はどういう場合にその「必要」があるか、か。
138:137
07/09/18 01:21:18
あーもしかしてこういうことか。
(1)フルスクリーンでアプリケーションを作る。
(2)Alt+TABをフォーカスを失わせる
(3)この時点でIDirect3DDevice9::TestCooperativeLevelはD3DERR_DEVICELOSTを返す。
問題はここから。
IDirect3DDevice9::Resetを使えば確かにフルスクリーンからウィンドウモードに
デバイス再構築無しでモード変更は可能。
が、TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すまではResetは呼べない。
つまり、いったんAlt+TABでフォーカスを再取得できれば
D3DERR_DEVICENOTRESET→Reset→ウィンドウモード、のコンボが使えるけど、
フォーカスを得ないままウィンドウモードに変更しようと思ったら
いったんデバイスを破棄しないとダメぽと。
どう?
139:デフォルトの名無しさん
07/09/18 01:35:52
>>138
んなこと誰も議論してないんだが。
一人で勝手に議題をすり替えといてどう?なんて言われてもなあ
ちなみに>>137の"必要"ってのは日本語版では訳がいまいちで分かりづらいが、
単にD3DPOOL_DEFAULTなリソースのことを言っている
140:デフォルトの名無しさん
07/09/18 01:37:52
>>139
んじゃとりあえず>>101へのレスってことにしといてちょ。
141:デフォルトの名無しさん
07/09/18 01:43:32
亀レス乙
ところで>>6とか>>114は同一人物なのかね?
142:デフォルトの名無しさん
07/09/18 01:44:43
>>141
そうですよ
143:デフォルトの名無しさん
07/09/18 01:50:38
>>6>>114
ネ申
144:デフォルトの名無しさん
07/09/18 02:12:58
TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すときって言うのはGPU側のコンテキストが無効になっている。
ちなみに、GPU側のコンテキストってのはVRAM上のリソース等(DEFAULTのリソースと考えて構わない)。
ただし、ランタイムがCPU側に対応するコンテキストを持っているから、これをReset()のまえに開放してあげなくてはいけない。
で、Reset()が失敗する場合は、ランタイム側がデバイスコンテキストすらも無効化してしまっている場合。
この場合はランタイムが全てを諦めてしまっているのでCPU側のリソース(MANAGED、SYSTEMMEM、SCRATCH)も全て無効化されてしまっている。
よって、全てを開放し、参照カウントを元に戻して、デバイスの削除を行い、全てを新デバイスから再初期化しないといけない。
つまり2段階って言うのは、最初がGPU側、次がCPU側って事。
145:デフォルトの名無しさん
07/09/18 02:42:22
>>144
つまりReset()が失敗する場合は、MANAGED、SYSTEMMEM、SCRATCH全部アウトで、
>>139の「単にD3DPOOL_DEFAULTなリソースのことを言っている」ってのは誤読ってこと?
146:デフォルトの名無しさん
07/09/18 02:59:10
亀レスついでに。>>100
HALからREFへの変更はD3DDEVTYPE変えないといけないんで
Resetじゃ無理だけよ。
>>100が抜き出したところだけ見るとできてしまうように見えるので
誤解する人が出てこないよう一応指摘しとく。
あとはBehaviorFlagsの変更もResetじゃ無理か。
ロストと関係なくてスマソ。
147:デフォルトの名無しさん
07/09/18 05:14:53
たかがデバイスロストの対応だけでこの有様。
Windowsは腐ったジャムみたいだな。
148:デフォルトの名無しさん
07/09/18 06:24:12
ここでDirectXにドップリ漬かっている俺が登場。
普通に使っている分には、D3DDeviceが使えなくなることは無いが
アプリケーション実行中にnViewのモードを切り替えるような無茶な
ことをしたら、Resetではどうしようもなくなった。
あと試してはいないが、プライマリモニタの切り替えとか、無効化も
駄目っぽい気がする。物理的に別のビデオカードにプライマリが
移ることもあるしね。
149:デフォルトの名無しさん
07/09/18 06:52:48
POOL_MANAGEDなんてあんなメモリばかすか食った挙句
失敗してるんじゃ世話ねぇよこいつって感じ
結局、POOL_DEFAULTにして何かあったらD3DDeviceから作り直しするのが
一番楽だしコスト的にいいってのが昔の俺の結論だった・・・っぽい?w
150:デフォルトの名無しさん
07/09/18 08:43:04
POOL_MANAGEDは内部的に転送にUpdateSurfaceに相当する機能が使えそうなんだけど
そうなるとPOOL_DEFAULTに比べてCPUパフォーマンスが良くなるんじゃない?
151:デフォルトの名無しさん
07/09/18 10:53:05
パフォーマンス重視で動的に更新するのが前提ならAGPメモリ上に置くのが常識なのに、
試しもしないで>>150みたいな適当なことをほざく馬鹿はなんとかなんとかならんのか?
152:デフォルトの名無しさん
07/09/18 11:02:43
2chに厳正な書き込みを期待する馬鹿もなんとかならんかな。
153:デフォルトの名無しさん
07/09/18 11:24:31
ドキュメント見てないけど、
D3DPOOL_MANAGEDってD3D10じゃないよね?
10からはデバイスロストしないから
154:デフォルトの名無しさん
07/09/18 12:43:21
まだいじってないけど
10ならデバイスロストしなくなった?
155:デフォルトの名無しさん
07/09/18 14:26:53
画面の描画をウィンドウの範囲をしてしてする方法はありますか?
たとえば、1つのウィンドウの半分だけに3Dの画面を表示して、
片方の画面は文字入力用のテキストエディタのようにするような。
156:デフォルトの名無しさん
07/09/18 16:08:08
10どころか9Exから簡単にはデバイスロストしなくなった。
もちろん無茶すればロストするよ。
例えばアプリ実行中にドライバーをアップデートするとか。
>>150
それ完璧に考え方が逝ってるから勉強し直しといで。
157:デフォルトの名無しさん
07/09/18 16:21:53
>>156
いい加減無責任な発言は控えろよな。
158:デフォルトの名無しさん
07/09/18 16:29:04
>アプリ実行中にドライバーをアップデートするとか。
>アプリ実行中にドライバーをアップデートするとか。
>アプリ実行中にドライバーをアップデートするとか。
159:デフォルトの名無しさん
07/09/18 17:11:03
>>157
極論だが、至って分かりやすくて自分のアプリでもデバイスロストをテストするときに
デバイスマネージャーからドライバーを無効にしたりしてせめてエラー処理をテストするのは当然だけどな。
160:デフォルトの名無しさん
07/09/18 17:13:20
今日のお題はドライバーのアップデートとデバイスロストの関係についてw
161:デフォルトの名無しさん
07/09/18 17:16:33
>>159は本物のプログラマ
162:デフォルトの名無しさん
07/09/18 17:28:52
いや本物じゃなくても普通それくらいはするだろ?
ドライバーを無効にする、ハードウェアアクセラレーションを切る、くらいは
やってテストしとかないと怖くて公開できないよ。
流石に実行中にドライバを更新するなんてテストはしたことないけどな
163:デフォルトの名無しさん
07/09/18 17:36:26
どうやら真性です。本当にあり(ry
164:デフォルトの名無しさん
07/09/18 17:49:13
真性だな
165:デフォルトの名無しさん
07/09/18 17:50:55
>>162
ドライバーを更新するのとドライバーを無効にするってのは実行中のアプリからすると同じ意味だよ。
XPしか使っていないなら分からないかもしれないが、Vistaだとリブートなしでドライバー更新できるから、
更新するとまずはじめに現在のドライバーが無効化された後、アンインストールされ、その後新しいドライバーがインストールされる。
166:デフォルトの名無しさん
07/09/18 18:00:51
>>156
>>165
これね。
URLリンク(www.microsoft.com)
>再起動なしのドライバ アップグレード
VistaではDirect3D描画アプリが大幅に増えた。
DWMは実質フルスクリーンアプリ相当だし
WPFアプリもオフスクリーンサーフェイスにD3D9Exで描画してる。
再起動なしのドライバアップグレードを実現するためには、
ドライバが対応することも当然ながら
D3Dを使うアプリがDevice Removedからの復帰コードを持つことも重要。
そこの対応が甘いと、Windows Updateを実行したらアプリが落ちたって羽目になる。
167:デフォルトの名無しさん
07/09/18 18:11:25
そうだな5分に10回はWindowsUpdateするからな。
必要だな。
168:デフォルトの名無しさん
07/09/18 18:29:27
>>166
フルスクリーンアプリが起動したり、リモートデスクトップで接続されたりしてもデバイスロストしたかも。
169:デフォルトの名無しさん
07/09/18 18:29:54
どうせデバイスロストなんて頻繁に起こるものではないのだから、
残存リソースの再利用に拘るほどのものじゃないだろ。貧乏臭すぎ。
ってかこの話は >>81 が発端てことで良いんだよね?
170:デフォルトの名無しさん
07/09/18 18:55:56
次はスマートポインタの是非を語ろうぜwww
171:デフォルトの名無しさん
07/09/18 19:03:56
>>170 (゚∀゚)カエレ!
172:デフォルトの名無しさん
07/09/18 21:11:09
この仕様だとPOOL_MANAGEDがなんのためにあるのか謎
173:デフォルトの名無しさん
07/09/18 21:27:01
これだけは言える。管理を放棄してスマートポインタで逃げる事ばかり
考える奴は脳の病気。確実に逝っちゃってる人間の考え。
174:デフォルトの名無しさん
07/09/18 21:34:19
>>173
実際すさまじいバグり方するよなw
メモリの解放忘れだけにしとけって感じだ
175:デフォルトの名無しさん
07/09/18 21:48:36
test
176:81
07/09/18 21:50:01
おお、やっと書き込めた。規制の巻き添え食らってた。
俺の最初のレスからここまで議論になるとは思わなかった。
正直レベル高すぎてついていける気がしないw
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5158日前に更新/237 KB
担当:undef