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

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

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

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

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

前スレ
【C++】 DirectX初心者質問スレ Part4【C++】
http://pc8.2ch.net/test/read.cgi/tech/1115484821
2ピザ:2005/07/22(金) 20:40:46
>>1

2 get you!
3デフォルトの名無しさん:2005/07/22(金) 21:40:40
早速ですが質問させていただきます。
DirectXはどこでダウンロードするんですか?
前にサイトに行って、ダウンロードしようと思ったんですが、
英語ばかりで、しかも、登録?みたいな事を進められたので、
ほかにダウンロードできる場所ありましたら、教えてください。
4デフォルトの名無しさん:2005/07/23(土) 00:01:46
>>3
つか、SDK?RUNTIME?
SDKは開発者用のもんで、ランタイムは実行するのに必要なものだけだ。
用は開発者用がSDKで、ユーザ用がRUNTIMEだけどそこらへんは大丈夫なのかと・・・。

ランタイムならスレ違いなので適当にCDROM付きエロゲ情報誌でも買えw
SDKなら↓
http://www.microsoft.com/downloads/search.aspx?displaylang=en&categoryid=2
のページから適当にContinueボタン押して適当に同意した後、Continueボタンを押せば
普通にDownloadできるぞ。まあ、いつものアプリのインストールと同じだ。登録してるわけじゃねぇよ。
5デフォルトの名無しさん:2005/07/23(土) 00:17:15
6デフォルトの名無しさん:2005/07/23(土) 01:35:53
あたしのパパとママは本当のパパとママなの?
7デフォルトの名無しさん:2005/07/23(土) 01:36:54
すみません、思春期の質問スレと間違えました
8デフォルトの名無しさん:2005/07/23(土) 11:23:16
>>6
パパとママの定義は、現代では以下の種類がある。
遺伝子上のパパとママ
法律上のパパとママ
出産したママ
育てたパパとママ
お金をくれるパパ

どのことを言ってるのかね。
9デフォルトの名無しさん:2005/07/23(土) 11:44:47
ひとつのXファイルを複数回ロードして
画面上に複数同時(別座標)に描画したいのですが。
やり方がよくわかりません。

モデル1個の描画に対して一個のメッシュポインタを用意して、
D3DXLoadMeshFromXで描画したい分ロードしDrawSubsetを呼んでいます。

それぞれのモデルが移動や回転をする為には、デバイスオブジェクトも
複数生成して、setTransformメソッドを呼ぶのでしょうか?
10デフォルトの名無しさん:2005/07/23(土) 12:15:02
>>9
メッシュオブジェクトはひとつでいい

唯一のメッシュ作成

1番目のトランスフォーム行列をD3DDeviceにセット

DrawSubset

2番目のトランスフォーム行列をD3DDeviceにセット

DrawSubset
11デフォルトの名無しさん:2005/07/23(土) 12:20:25
しかし何故それが思い浮かばないのか、一度>>9の思考ルーチンを覗いてみたい。
12デフォルトの名無しさん:2005/07/23(土) 12:31:53
考え方は2Dと大差ない
VRAMに読み込んだ画像(メッシュ)を異なる座標に描画すればいいだけなのに
13デフォルトの名無しさん:2005/07/23(土) 13:00:22
FOVとアスペクトレートについてなんですけど
参考にしてた資料とDirectXでは定義が違ってたみたいで
作ったライブラリをDirectX側に合わせて修正したら
動作がおかしくなってしまった。

DirectXの定義って
FOV = 垂直視野角(Y軸)
AspectRate = ディスプレイの幅/ディスプレイの高さ
で良かったんでしたっけ?
14デフォルトの名無しさん:2005/07/23(土) 13:02:36
いいお
159:2005/07/23(土) 13:14:32
レスありがとうございます。
D3DDeviceも複数作成する必要があるということですね?
D3DDeviceは1画面に1つ作成するものだと勝手に思い込んでいました。
16デフォルトの名無しさん:2005/07/23(土) 13:15:16
ぁぁぁぁ、その斜め上を逝く思考ルーチンを覗かせろ。
17デフォルトの名無しさん:2005/07/23(土) 13:20:10
D3DDeviceは一個だヨ

メッシュはスタンプみたいなもんだ。
DrawSubsetでぺったんぺったん。
18デフォルトの名無しさん:2005/07/23(土) 13:22:54
>>14
ありがとうございます。

確認してみたころ
ヘルプD3DXMatrixPerspectiveFovXXの項が間違っていた為でした。
正しくはこうみたいです。

xScale = aspect ratio / yScale

xScale = yScale / aspect ratio
199:2005/07/23(土) 13:34:47
>17

ものすごく勘違いしていました。

トランスフォーム行列をD3DDeviceにセットしてから、
DrawSubsetを呼べば、セットした座標に描画されるということですね。

20デフォルトの名無しさん:2005/07/23(土) 15:59:48
Surfaceについてなんですけど、
どうやったら指定した色を透過出来ますか?
21デフォルトの名無しさん:2005/07/23(土) 17:02:08
確かにテンプレサイトが欲しいところですね。
誰かFAQ書きませんか俺はヤだよめんどくさいから。

>>20
Sufaceってなんのサーフェイスですか?
DirectDrawですか?
だったらカラーキーというものを設定する関数があるので透過したい色を指定ください。
それともDirect3Dのテクスチャですか?
だったらピクセルの透過具合を指定するアルファ値を操作してください。
具体的にはCreateTextureFromFileExなどでアルファ付フォーマットのテクスチャを作成します。
その際に引数のColorKeyで透過したい色を指定すれば勝手にやってくれます。
また、たとえアルファ値を指定してもレンダリングステートなどが間違っていると
うまく透過してくれないのでそのへんがよくわからない場合はいちいち聞きにこないでください。
22デフォルトの名無しさん:2005/07/23(土) 20:32:46
DirectShowの質問です。
他のアプリケーションが使用しているフィルタグラフに勝手にフィルタを追加するにはどうすればいいですか?
グラフマネージャのアドレスを取得できればなんとかなりそうだと思っています。
23デフォルトの名無しさん:2005/07/23(土) 20:34:09
DirectPlayでいいサンプルどっかに転がってない?
24デフォルトの名無しさん:2005/07/23(土) 21:22:52
DirectPlayはMSにいらない子の烙印を押されてしまったからなぁ。
25デフォルトの名無しさん:2005/07/23(土) 21:23:16
某格ゲーのキャラクタースプライト画像を抜き出して覗いたところ、
画像の縦横サイズが2のn乗じゃなかったんですが、2のn乗じゃない
画像をテクスチャにするにはどうすればいいんでしょうか?
26デフォルトの名無しさん:2005/07/23(土) 21:35:34
意味不明
27デフォルトの名無しさん:2005/07/23(土) 21:36:03
別に画像ファイルが2のn乗である必要はないだろ。
そんな無駄なことしてる奴ほとんどいないぞ。

それに、2のn乗でしかテクスチャサーフェスが作れない
ビデオカードなんて、今はi810あたりしか残ってないかと。
28デフォルトの名無しさん:2005/07/23(土) 21:43:29
んなわけない。
2925:2005/07/23(土) 21:46:37
ttp://www.c3.club.kyutech.ac.jp/~sukiyaki/
こちらのサイトを見ながら勉強してるのですが、こちらの「テクスチャ」の項には
DirectXは2のn乗じゃないと画像を作れない、画像のサイズは全て256*256で統一した方がいい、
とあったのでそう思い込んでました。

テクスチャの読み込み方法をD3DXCreateTextureFromFileしか知らないのですが、
一般的にキャラクタースプライトを表示する手順というのはどのようなものなのですか?
30969:2005/07/23(土) 22:13:58
assertがスルーされた
一体どこから呼び出されてるのか
皆目検討がつかん・・・。
31969:2005/07/23(土) 22:33:48
vectorのerase使っても
中身残ってるのでしょうか、もしや
とりあえず登録クラスのデストラクタで
ReleaseせずClearを使った上に
deleteやってeraseしてみた。
もうこれで完全に消えるっしょw
32デフォルトの名無しさん:2005/07/23(土) 23:56:17
>>31
まだやってるのか
なんかvectorわかってなさそうだな
eraseの使い方大丈夫か
33デフォルトの名無しさん:2005/07/24(日) 00:03:32
>>29
俺もその辺は困ったよ。
あちこちのサンプル見ても、2の累乗サイズのテクスチャを貼るものしかなかったもんなあ。
でも、画像は2の累乗サイズじゃないのが普通なんで、利便性を取ってがんばって対応した。
29もがんばれ。
34デフォルトの名無しさん:2005/07/24(日) 00:20:43
>>25の質問ってテンプレに入れるべきだな
D3DXCreateTextureFromFileExのフィルターオプション(DWORD Filter、DWORD MipFilter)
にD3DX_FILTER_NONEを入れれば解決

違う意味だったらスマソ
35デフォルトの名無しさん:2005/07/24(日) 00:43:01
2乗じゃない画像が収まるだけの、2乗Bitmapなりをメモリ上に展開し、データをそこにコピー。
で、そこからD3DXCreateTextureFromFileInMemoryEx()するだけじゃないかな。

或いはD3DPOOL_DEFAULTがいらないなら、十分な広さの2乗テクスチャをCreateTextureで作成し、
それをLockRect()してデータを書き込むだけでいんでない?
36デフォルトの名無しさん:2005/07/24(日) 16:04:50
DirectX8時代はsprite->drawで拡大縮小率とか回転率とか
設定できたんですがDirectX9.0cあたりから関数が4つの引数になり
回転とかはどう指定したらよいのか解らなくなってしまいました。
どう指定するか教えてくださると嬉しいのですが。

後、sprite->Beginの引数が要るようになったのでpSprite->Begin(D3DXSPRITE_ALPHABLEND);
にして(これ以外だとカラーキーならない)宜しかったんでしょうか?
37デフォルトの名無しさん:2005/07/24(日) 18:12:24
パソコンでフリーゲームをしようとしてインストールしようとしたら、DirectX Graphics Error 0x82000003
というエラーが出たのですがどうしたら解消できるのでしょうか?
38デフォルトの名無しさん:2005/07/24(日) 18:39:12
>>37
何のゲームかも言わずにここで聞くな。
そのフリーゲームの作者とかサポ掲示板などで聞く。
ゲーム名でぐぐる。なり汁。
39デフォルトの名無しさん:2005/07/24(日) 22:26:20
>>36
>DirectX8時代はsprite->drawで拡大縮小率とか回転率とか
トランスフォーム行列作ってSetTransformしてください。

>後、sprite->Beginの引数が要るようになったので
宜しいかどうかは君にしかわからない。想定通りの挙動をしてるのかね?
40デフォルトの名無しさん:2005/07/24(日) 22:27:57
DirectPlay8のpeerでホストが死んでも移行させないようにするにはどうすればよいですか?
41デフォルトの名無しさん:2005/07/24(日) 22:37:17
見捨てられた過去の遺物にしがみつくのを辞めて、
WinSockを使用し、自分で正しい実装をする。
4225:2005/07/25(月) 00:31:12
遅れましたがレスを下さった方々へ、ありがとうございました。

>>34
D3DX_FILTER_NONEを用いることで無事に出来ました。
2のn乗に足りない部分は自動的に透明な黒で補完されつつ
一番近い2のn乗のサイズでテクスチャを作ってくれる、
という理解をしましたが、合ってるかは不安です…

>>35
CreateCompatibleDCやCreateCompatibleBitmapなどを用いて作業用領域に画像を展開し、
メモリ上にあるDIBをテクスチャとして用いるという方法であってるでしょうか?

大きいサイズの背景画像をどうやって表示すればよいのか悩んでいたのですが、
512*512ぐらいのサイズの画像としてメモリ上に分割して、描画する際にまとめる
という方法で試しみようかと思います。
43デフォルトの名無しさん:2005/07/25(月) 05:20:48
アドベンチャーゲームで立ち絵をαマスクとαブレンドさせたいんですが、
マスク画像とのαブレンドの方法がよくわかりません。

テクスチャの頂点フォーマットのカラー値のαを操作すれば
透明度の調整は出来ますが、ここら辺にヒントがあるのでしょうか…

DDS形式に変換してからのαブレンドについては何件か検索で引っかかったのですが、
αマスクのビットマップ画像とのαブレンドについては見つかりませんでした。
何方か御教示願えれば幸いです。

# DIBでなら立ち絵・立ち絵マスク・背景のバッファを取得、
# それらをαブレンドの式で計算して出力してたんですが、
# DirectXでのやり方についてはお手上げですorz
44デフォルトの名無しさん:2005/07/25(月) 08:08:11
α値を設定するだけ。
45デフォルトの名無しさん:2005/07/25(月) 10:24:09
>>43
はじめからα値含められる画像フォーマット(tgaとか)にすればいいじゃない
まあどうしてもっていうならSetTextureStageStateを調べれば幸せになれるかな
46デフォルトの名無しさん:2005/07/25(月) 16:07:55
DirectInputのジョイスティックについて教えて下さい
ジョイスティックがついているかというのはどのように判別したらいいんでしょう
CreateDeviceの戻り値で判定させようと思ったのですが GUID_SysKeyBoardとGUID_SysMouseしかないので・・・orz
47デフォルトの名無しさん:2005/07/25(月) 16:56:37
>>44-45
なんか色々試行錯誤してたらできました。
SetTextureStageStateじゃなくSetRenderStateの設定を
しただけなんですが、こっちだとよくないんでしょうかね?
(共に抜き色は黒で)αマスクのビットマップは
   デバイスポインタ->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
   デバイスポインタ->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
と設定し、描画したいビットマップは
   デバイスポインタ-->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   デバイスポインタ-->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
と設定したところ、ちゃんとαブレンドできました(ように思えます)。
48デフォルトの名無しさん:2005/07/25(月) 17:00:37
と思ったらできてませんでしたorz 私の目が腐ってたようです…
(描画したいビットマップ側の絵が黒で縁取られていれば綺麗になるのですが、
 それ以外の場合だと周りが黒っぽく描画されてしまいます)
49デフォルトの名無しさん:2005/07/25(月) 17:52:23
>>48
D3DBLEND_INVSRCALPHA→D3DBLEND_INVSRCCOLORでどう?
50969:2005/07/25(月) 18:34:48
やっと規制解けた
ついでにちょいと謎が解ける
vector<NODE> node;

void Hoge()
{
     for( int i = 0; i < node.size(); i++ )
     {
          if( node[i].time > MAX_TIME )
               RemoveAt( i );
          else
               ++node[i].time;
     }
}

void RemoveAt( int Index )
{
     node.erase( node.begin() + Index );
}

こんな使い方をしていたからさぁ大変w
とりあえず修正して様子見中
51デフォルトの名無しさん:2005/07/25(月) 21:15:03
イテレータ使わないのは論外として、上のコードは何か問題が起こりますか?
私はeraseされた次の要素の判定が飛ばされるような気がします。
52969:2005/07/25(月) 22:57:46
要素を5つ登録(push_back)したとして
time = MAX_TIMEという条件で以下の流れ

i = 0 でRemoveAtが動作、要素削除
node.size()が 4に
i = 1 でRemoveAtが動作、要素削除
node.size()が 3に
i = 2 でRemoveAtが動作、要素削除
node.size()が 2に
i = 3 になり、node.size()が2なので終了

中身2つの要素が処理されず次回へ持ち越し
と言った具合です。
ちなみに
int end = node.size()
for( int i = 0; i < end; i++ )
これは、エラーでうっ止まるので。
53デフォルトの名無しさん:2005/07/25(月) 23:04:45
void Hoge()
{
    vector<NODE>::iterator it = node.begin();
    while (it != node.end())
    {
        if (it->time > MAX_TIME)
            it = node.erease(it);
        else
            ++it;
    }
}
54デフォルトの名無しさん:2005/07/26(火) 00:02:25
while( it (略)
はループされるたびにnode.end()は呼び出されないのかな?
とりあえず試してみるか。

いまんとこ RemoveAtしたら i をデクリメントして対策してます。
55デフォルトの名無しさん:2005/07/26(火) 01:50:57
DirectX9を始めようと思います
どうやらC++.netが必要みたいですが、アカデミック以外で一番安く買えるのは
Microsoft Visual C++ .NET 2003
http://www.yodobashi.com/enjoy/more/i/cat_38974489_36928194_320347/8973942.html
でしょうか?
56デフォルトの名無しさん:2005/07/26(火) 01:51:28
すみませんageます
57デフォルトの名無しさん:2005/07/26(火) 07:09:35
学生ならVisual Studio .net theSpoke Premium 2003が買える。
あとageんな
58デフォルトの名無しさん:2005/07/26(火) 08:03:31
学生じゃないです
59デフォルトの名無しさん:2005/07/26(火) 08:08:25
ニートなら
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
こちらのタダバージョンをお勧めする
60デフォルトの名無しさん:2005/07/26(火) 10:45:18
>>59
ニートじゃないけど見てみます
ありがとう
61969:2005/07/26(火) 10:49:04
>>53
今頃ですが、やってみました。
シンプルで感動した!コレでやってみます
ありがとう
62デフォルトの名無しさん:2005/07/26(火) 12:04:23
イテレータはSTLの基本中の基本だからちゃんと勉強しようぜ
6355:2005/07/26(火) 14:59:25
>>57
学生じゃないです

>>59
ニートじゃないです

VC4を昔会社で使っていたので、VC環境でやりたいっす
Microsoft Visual C++ .NET 2003で問題無いということでしょうか?
エンタープライズなんちゃらじゃなくてもとりあえず問題は無し?
後はDirectX9って書いてあるIO辺りの本を買ってきてぴゃーってサンプルとか動いちゃう?
64デフォルトの名無しさん:2005/07/26(火) 15:08:45
>>63
Standardは最適化なしのコンパイラしかついてこないので、
Toolkit2003の最適化ありのコンパイラに差し替えて使うように。
最後の一行は訳わかめだしふざけ過ぎ。
6555:2005/07/26(火) 15:42:57
すみません、調子に乗りました
DirectX9って書いてあるIO辺りの本とはこれらのことです
http://www.amazon.co.jp/exec/obidos/search-handle-url/index%3Dbooks-jp%26field-author%3DO%E7%B7%A8%E9%9B%86%E9%83%A8%2C%20%E7%AC%AC%E4%BA%8CI/249-5483332-2413147

最適化の件もありがとうございます
66デフォルトの名無しさん:2005/07/26(火) 19:25:43
ほんとは8万ぐらいのを買えば熱の入れようが違ってくるからいいんだけどな
67デフォルトの名無しさん:2005/07/26(火) 21:13:14
学生でもニートでもないなら、自分で調べればいいのに。
68デフォルトの名無しさん:2005/07/26(火) 21:14:13
学生でもニートでもないなら、自分で調べればいいのに。
69デフォルトの名無しさん:2005/07/28(木) 06:45:27
学生でもニートでもないなら、自分で調べればいいのに。
70デフォルトの名無しさん:2005/07/28(木) 08:17:27
学生でもニートでもないなら、自分で調べればいいのに。
71デフォルトの名無しさん:2005/07/28(木) 23:51:47
DirectX9を使ってますが、meshファイルを描画した後に
D3DPT_lineSTRIP でラインを描画しようとすると、
meshファイルの色の影響が出ているようなのですが、
どうしてなんでしょうか?
また、回避するにはどうすればいいのでしょうか?
72デフォルトの名無しさん:2005/07/29(金) 00:42:45
>>71
Zバッファが微妙なんじゃねーの?
73デフォルトの名無しさん:2005/07/29(金) 01:23:06
色ってなんだ?マテリアルカラーか?
それともテクスチャ?

後者なら
IDirect3DDevice9::SetTexture( 0, NULL )
74デフォルトの名無しさん:2005/07/29(金) 01:53:16
>>73
それは解決法として如何なものか
75デフォルトの名無しさん:2005/07/29(金) 02:51:41
>>71
ラインを描画する前にRenderStateとTextureStageStateを
ちゃんと設定しているか?
7671:2005/07/29(金) 03:05:09
>>73
SetTexture( 0, NULL )
これでラインがきちんと白色で描画されました
どうもありがとう

helpでこの関数を調べたら、後ろの引数がNULLだと
どうなるか記述されていませんでした

>>74
73でどういう症状になっていたのがわかりました
ようするにテクスチャを描画する状態が残っていたので、
その状態から脱出すればいいのですね?たぶん

SettextureStateState() に D3DTOP_DISABLE を
渡すのが正しい処理なのでしょうか?
実際に試してみたら、この方法でも白色で描画されました
これでいいのかな?
7771:2005/07/29(金) 03:07:13
>>75
あぁ、レスを書いているときに入れ違いになってしまいました

RenderState と TextureStageState のそれぞれの
何の項目を設定するのでしょうか?
78デフォルトの名無しさん:2005/07/29(金) 12:36:50
>>77
出力色 = マテリアルディフューズ色

なら、
colorVertex = false;
colorOp[0]= selectArg1;
colorOp[1]= disable;
colorArg1[0]= current;
alphaOp[0]= selectArg1;
alphaOp[1]= disable;
alphaArg1[0]= current;
texture[0] = null;
79デフォルトの名無しさん:2005/07/29(金) 16:28:53
隔月間だいれくとえーっくす!
今月号の付録は何かなー?

http://www.microsoft.com/downloads/details.aspx?FamilyID=3904b19a-02b9-447b-ab58-c12e2456e9ba&DisplayLang=en
80デフォルトの名無しさん:2005/07/29(金) 17:10:11
うぜええ
どうせまた隠し変更あるんだろお
しっかしHLSLコンパイラのアップグレードがねえなあ
たのむぜまったく
81デフォルトの名無しさん:2005/07/29(金) 17:37:21
>>77
何の項目って、必要な項目に決まってるだろう。
何が必要かを自分で調べろ。

Direct3Dを使うならRenderStateとTextureStageStateは
全部把握しないと駄目。そのくらい重要で基本的なこと。
82デフォルトの名無しさん:2005/07/29(金) 18:47:57
詳しい方教えてください。
DX9.0での内部動作についてです。

pd3dDevice->DrawPrimitive()って処理時間必要ないんですか?
この関数が帰って来た時は、まだ描画が終了していない様な動きをしてしまうんですが。

具体的には、自前のレンダーターゲットに、ピクセルシェーダーを使って描画し、
その後、pd3dDevice->Present()でプライマリサーフェイスへ転送しています。
D3DPRESENT_PARAMETERS.PresentationInterval=D3DPRESENT_INTERVAL_ONEにしてても、
テアリングが発生してしまいます。
ピクセルシェーダー処理が軽い時は、テアリングは発生しないのですが、重いと書き換えラインが見えてしまいます。
そのラインの位置は一定なので、一応V-Blankは待っている様です。

もし、DrawPrimitiveが非同期ならば、何とか描画終了まで待ちたいのです。何か関数やオプションがあるんでしょうか?
・・・DX7時代には、DrawPrimitiveってフラグで同期・非同期を選択できましたよね。
8382:2005/07/29(金) 18:49:38
一部修正です。

具体的には、自前のレンダーターゲットに、ピクセルシェーダーを使って描画し、
  ↓
具体的には、規定のバックバッファにピクセルシェーダーを使って描画し、
8482:2005/07/29(金) 19:10:45
ageます
85デフォルトの名無しさん:2005/07/29(金) 19:48:19
DrawXXX()どころかEndScene()やPresent()すら描画が終了している
保証はないみたいだよ。(SDKドキュメントに書いてある)
描画コマンドとの同期はIDirect3DQuery9で調べてみると幸せかも。
あとV-BlankはGetRasterState()で自前で検出できるみたいだからそっちも試してみたら?
8682:2005/07/29(金) 21:22:47
>>85
ありがとうございます!!無事同期を取る事ができました。
これで週末休めそうです。・゚・(ノД`)

お詳しい85さんにもう一つ、今回どうしても解らなかった事をお聞きしても宜しいでしょうか?

現在ウインドウモード限定のD3Dアプリを作ってるのですが、
バックバッファをスワップしたいのです。
具体的には、

バックバッファを2枚用意・・・
バックバッファ1にDrawPrimitive()
バックバッファ2をPresent()(フロントバッファにコピー)
1と2を(処理対象を)入れ替える
以上繰り返し・・・

をしたい(つまり、テアリングを見せずに速度アップを行いたいんですね)のですが、

D3DPRESENT_PARAMETERSで、
 BackBufferCount=2
 SwapEffect = D3DSWAPEFFECT_DISCARD;
 PresentationInterval = D3DPRESENT_INTERVAL_ONE;
とする事でバックバッファは2枚確保できているんでしょうか?

バックバッファとは別に、ソースとなるダイナミックテクスチャを1枚作成しているのですが、
上の設定でデバイスを作成すると、なぜかLock時にエラーが出る様になってしまいました・・・
バックバッファを複数確保した時に何か注意点とかご存知ないですか?
87デフォルトの名無しさん:2005/07/29(金) 23:30:55
http://wisdom.sakura.ne.jp/system/directx/dxg8.html
で、カメラの回転するソースがあったのですが、どうもこれって
三角が回転してるようにしか見えません。
もう少し、それっぽく見えるようなソースを捜しているのですが、どこかに
ないですか? または、作れる神はいませんでしょうか?
カメラが360°手動でぐるぐる動かせるようなやつです。
もう2時間近く捜してます (´ー゚#)
8871:2005/07/29(金) 23:42:30
SetTexture( 0, NULL )
これだけど、
>>73>>78 では「解法」といっていて
>>74 では「それはあやしい」といってるけど
どっちが正しいの?
89デフォルトの名無しさん:2005/07/29(金) 23:59:02
>もう二時間近く
それがどうした?
90デフォルトの名無しさん:2005/07/29(金) 23:59:59
さんぷるください
91デフォルトの名無しさん:2005/07/30(土) 00:07:23
>>87
俺作ったよ
5度単位でぐるぐる動くの
92デフォルトの名無しさん:2005/07/30(土) 00:08:47
>>87
>三角が回転してるようにしか見えません。
当たり前です。
表示したい物がカメラに対してどの位置に来るのか計算しなきゃ
「三次元上のカメラの動き」が再現できるわけないでしょう。

>もう2時間近く捜してます
だから何?
9387:2005/07/30(土) 00:21:44
もう見つかりませんよー
計算の仕方がわかりませんよ・・
ソースみたら多少はつかめると思うんです
うざいかもなのでこれで最後 だめなら諦めます

さ ん ぷ る く だ さ い みっからないんです、よろしくお願いします
94デフォルトの名無しさん:2005/07/30(土) 00:38:34
>>88
あやしいという訳ではなく、足りないということ。
レンダーステートというのは明示的に変更しない限り保持される。
最初のDrawPrimitiveと次のDrawPrimitiveでエフェクトを描画効果を変えたいなら
当然ステートを変えなきゃならんでしょ。
テクスチャの影響を無くしたいのなら、テクスチャのサンプリング自体を止めるのが正道。
それが>>78
9571:2005/07/30(土) 00:55:53
SetTexture( 0, NULL )
後ろの引数を NULL にすること自体は
間違ってない、というのですね

ところで、RenderStateとかTextureStageStateとか
現在のステートをどこかにプッシュして、
何かを行って、後からポップするようなことって
できないのでしょうか?

アセンブラでいうと、pushad/popad で、汎用レジスタの値を
全部まとめてスタックにセーブしたりロードしたりできたと
思うのですが、こんな感じのものが欲しい…
96デフォルトの名無しさん:2005/07/30(土) 01:13:04
> RenderStateとかTextureStageStateとか 現在のステートをどこかにプッシュして、
> 何かを行って、後からポップするようなことって

エフェクトを使えばできるよ。
あと、使ったことないけどステートブロックってのがそれっぽい。
97デフォルトの名無しさん:2005/07/30(土) 02:29:41
>>93
ハイハイ
ここは釣堀じゃありませんよ
さっさと巣に帰れ
98デフォルトの名無しさん:2005/07/30(土) 02:38:35
こいつらろくに調べもしないで聞きにきやがって・・
さっきNHKでやってたデンジロウ先生の蓄音機に感銘を受け
独力で作り上げた小学生の恥垢でも煎じて飲めやカス
99デフォルトの名無しさん:2005/07/30(土) 12:50:50
http://shibuya.cool.ne.jp/y_yutaka/shade/plugin/zahyou.html
このサイトでは、手の親指をX・人差し指をY・中指をZ、として座標を形作る

http://www.sis.otsuma.ac.jp/~tsutsumi/lecture/graphics/gif/s7_10.jpg
一方このサイトでは、親指がz軸となっています
一体どちらが正しいんですか?
100デフォルトの名無しさん:2005/07/30(土) 13:17:26
どちらが正しいという話でもない。
101デフォルトの名無しさん:2005/07/30(土) 14:29:03
DXの左手座標系はどう考えても嫌がらせだよな
102デフォルトの名無しさん:2005/07/30(土) 14:32:33
嫌がらせも何も左右両方の関数がきちんと用意されているだろ。
自分で使わないだけなのに責任転嫁とは厨の考えることはさっぱり分からない。
103デフォルトの名無しさん:2005/07/30(土) 14:35:01
俺は行優先、左手座標系でつ。
やっぱこれがベストだよね♪
104デフォルトの名無しさん:2005/07/30(土) 15:59:33
いいや僕は断然列優先。
105デフォルトの名無しさん:2005/07/30(土) 16:59:00
なぁDX9SDKのあたらしいUpdate、インストール中にとまるんだけど。
2005Aprさがそうとするぞ?
106デフォルトの名無しさん:2005/07/30(土) 20:41:39
もう最新SDKなんかほっときゃいいじゃん。
仕事でも趣味でも、必要なやつなんてほとんどいないだろう。
Vistaたんまでもちつけ。
107デフォルトの名無しさん:2005/07/31(日) 15:19:06
SDKに収録されているはずのDirectX+MFCのサンプル(ヘルプに書いてあるパスや、その他のフォルダも探しましたが)
が見つかりません。2004年版と2005年版を両方探しました。
だれか居場所をご存じの方教えてください。
108107:2005/07/31(日) 15:20:02
>>105 私は問題なくインストールできました。
109デフォルトの名無しさん:2005/07/31(日) 19:20:53
>>107
Summer2004以降は削除された気がする。
Summer2003にならある。
110デフォルトの名無しさん:2005/07/31(日) 21:23:11
MFCはもういらん
111107:2005/08/01(月) 00:03:49
>>109 情報ありがとう。

でも2003のMFCサンプル、今のVer.のSDKでコンパイル通らないの・・・
112デフォルトの名無しさん:2005/08/01(月) 03:22:57
質問させてください
カメラのnerとfarの間は出来るだけ小さいほうが言いと聞いたのですがそれは何故でしょうか?
また、あるものを描画したい場合そのまま描画するよりもそのものやカメラの距離などを全てを例えば十分の一にしして描画結果は同じでもnerとfarを小さくしたほうがいいのでしょうか?
113デフォルトの名無しさん:2005/08/01(月) 06:48:13
カメラ
<O_______near____________far

カメラ
<O__________near_____far

描画対象が少ないから?
114デフォルトの名無しさん:2005/08/01(月) 09:37:24
例えばZバッファが8bitだとすると、その解像度は256です。
nearからfarまでが10mだとすると、1bitで約0.04mになります。
nearからfarまでが1000mだとすると、1bitで約4mになります。
もしnearから2mの点と3mの点があった場合、
前者ではちゃんと違う深度になりますが、
後者では同じ深度になってしまいます。
115デフォルトの名無しさん:2005/08/01(月) 09:37:57
<O____near____(´・ω・`)____far
<O__near__(・ω・)__far
これは意味ないわね。
>>113もそうだし、nearとfarの比が大きい(nearが近すぎとか)と、
射影後のZ値の偏り(近くが密、遠くが疎)が大きくなるってのは一応あるわ。
116デフォルトの名無しさん:2005/08/01(月) 11:34:46
透視射影の場合は、near〜farのZ値は、0.0〜1.0に等間隔には変換されないわ。
目安としては、視錐体に対角線を引いて、交わった部分が0.5になる位置。
http://www.uploda.org/file/uporg160631.png
だからnearを極端に近づけると、後ろの方のZの精度が 1/2,1/4…に
なるから注意してね。
117デフォルトの名無しさん:2005/08/01(月) 11:52:47
>>116
そこらへんの理解が足りないんだけど、

射影変換後のZ値は
z' = z / ( far - near ) - near / ( far - near )
で0.0〜1.0でリニアに変換される。

これにw(z)で除算すると
z'' = z' / w
非線形分布になる。

前者がZバッファリング、後者がWバッファリングってことでいいのかな?
118デフォルトの名無しさん:2005/08/01(月) 12:39:50
>>117
Zバッファ用の値は、後者みたいなw除算後の値だわ。
(前者の計算式はちょっと違うみたいだけど)
Wバッファ用の値は…たしか1/z をそのまま使うと思うわ(自信ないけど)
119デフォルトの名無しさん:2005/08/01(月) 13:03:27
× 1/zをそのまま ○ zをそのまま
120デフォルトの名無しさん:2005/08/01(月) 13:11:24
>>118
ごめんなさい間違えました。
前者は射影変換とは関係ない
Z値を0.0〜1.0にリニアに変換する式でした。

Wバッファリングは今思い出したんですが、
言われたそれで良かったと思います。
頭のもやもやがとれました。ありがとうございました。
121デフォルトの名無しさん:2005/08/01(月) 14:22:15
頂点バッファに使ったLVERTEX配列をデストラクタでdelete[]
しようとするとエラーが出てしまいます。

groundVer = new LVERTEX[NUM_MAPVERTEX] ←コレ
pD3DDevice->CreateVertexBuffer(sizeof(LVERTEX) * NUM_MAPVERTEX,0,FVF_LVERTEX,D3DPOOL_MANAGED,&p_GroundBuf, NULL);
p_GroundBuf->Lock(0,0,(void**)&argVer,0);
memcpy(groundVer,mapVer[0], sizeof(LVERTEX) * NUM_MAPVERTEX);
p_GroundBuf->Unlock();

何ででしょう?
122デフォルトの名無しさん:2005/08/01(月) 15:22:53
使われていないargVerの存在の意味が分からない。
123デフォルトの名無しさん:2005/08/02(火) 00:05:14
COLLADAの日本語の仕様書ってありませんか?
124デフォルトの名無しさん:2005/08/02(火) 12:16:17
>122
記述ミスでした。
argVerではなくgroundVerです。
125デフォルトの名無しさん:2005/08/02(火) 12:48:02
だったらポインタの示すアドレスが入れ替わっているんだから、
根本的に解放できるわけがない。
126デフォルトの名無しさん:2005/08/02(火) 14:02:15
ていうかなんではじめにメモリ確保してんの
127デフォルトの名無しさん:2005/08/02(火) 15:25:59
バカだから
128デフォルトの名無しさん:2005/08/02(火) 18:22:03
ふたなりだから
129デフォルトの名無しさん:2005/08/02(火) 20:32:41
これでゲーム作れって課題でたけどさっぱりわかりません
どうやって単位をもぎとればいいですか?
130デフォルトの名無しさん:2005/08/02(火) 20:37:26
おねぇちゃんのおみせに先生つれてけ。それで交渉しろ。
131デフォルトの名無しさん:2005/08/02(火) 20:49:41
すっげー、基本的な質問
C++でDirectXの基本的な解説やってるWebと本を教えて。
WinMainつかうのと
AppWizardつかうのと
そのほかのフレームワークやら、ライブラリやら使う奴を個別に教えて欲しい。
で、できれば、次スレ以降のテンプレに加えてくれ。
最初のここでつまづいているオレよりのお願いだ!
132デフォルトの名無しさん:2005/08/02(火) 21:12:03
つ【ヒントというか答え:”C++ DirectX プログラミング”でぐぐる】
133デフォルトの名無しさん:2005/08/02(火) 22:31:56
134デフォルトの名無しさん:2005/08/02(火) 23:31:07
>>131
本スレのテンプレ見ろよ
135デフォルトの名無しさん:2005/08/03(水) 12:08:08
131は馬鹿そうなので教えても理解できないだろう。たぶん。
136デフォルトの名無しさん:2005/08/03(水) 14:40:42
>>137
お前にこれをやろう
つ「グーグル」
137デフォルトの名無しさん:2005/08/03(水) 15:07:35
この世の全てを消し去る方法を教えてください。
グーグルで検索してもわかりませんでした。
138デフォルトの名無しさん:2005/08/03(水) 15:10:12
FORMAT C:
139デフォルトの名無しさん:2005/08/03(水) 15:45:18
自分が死ねば世界を消し去ったことになるだろう。
140デフォルトの名無しさん:2005/08/03(水) 15:48:16
哲学的だな。
141121:2005/08/04(木) 00:01:35
>125
解放しないとメモリーリークしませんか?

>126
どこのメモリを使っているのか自明でないと不安なんです。
142デフォルトの名無しさん:2005/08/04(木) 00:30:18
>>141
p_GroundBuf->Lockの中の人がせっせとメモリを確保してくれるのだから、その前に自分でnewを書く必要はない。
143121:2005/08/04(木) 01:20:49
>142
あ、なるほど
愚問失礼致しました
144デフォルトの名無しさん:2005/08/04(木) 17:09:17
質問です、DirectSoundにSetVolumeという関数がありますが
これってDSBVOLUME_MAX(0)からDSBVOLUME_MIN(-10000)までしか値が指定できません。

という事は、音量を小さくする事しか出来ないのでしょうか?
例えば、ゲームのコンフィグ等にある音量調節を実装する場合、
一度下げてからまた上げたい場合等にはどうすればよいのでしょう?
145デフォルトの名無しさん:2005/08/04(木) 17:12:53
追記です
要は、絶対的な音量指定は出来ないのでしょうか?
相対的(しかも下げる方向のみ)だけでなく………
146デフォルトの名無しさん:2005/08/04(木) 17:42:55
ボリュームコントローラのスライダーの位置が最大になっている状態で、
それ以上上に移動させようとしているわけだが、頭が固いにもほどがある。
147デフォルトの名無しさん:2005/08/04(木) 17:45:39
>>146
ぼくのおちんちんもガチガチです
148デフォルトの名無しさん:2005/08/04(木) 17:50:44
これが5000〜-5000とかだったら、絶対的な動作が全く一緒でも、
何の疑問も抱かず使うんだろうな。
149デフォルトの名無しさん:2005/08/04(木) 17:53:29
>146
それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?

MSDNを参照すると
>設定可能な値の範囲は、DSBVOLUME_MAX (減衰なし) から DSBVOLUME_MIN (無音) までである。
>これらの値は、Dsound.h 内ではそれぞれ 0 および ?10,000 と定義されている。
>値 DSBVOLUME_MAX は、ストリーム本来の未調整のボリュームを表す。
>値 DSBVOLUME_MIN は、オーディオのボリュームが 100 dB 減衰していることを表し、これは実際的には無音を意味する。
>DirectSound は増幅をサポートしていない。
と書いているのですが………
150144:2005/08/04(木) 17:55:44
144=149です
151デフォルトの名無しさん:2005/08/04(木) 18:03:23
だからボリュームを上げたければ、初期状態を下げておけばいいんだけなんだよ。
頭固いなあ。
152デフォルトの名無しさん:2005/08/04(木) 18:05:14
>それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?
>それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?
>それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?
>それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?
>それは、DSBVOLUME_MAXがボリュームコントロールのスライダーの位置最大ということでしょうか?
153144:2005/08/04(木) 18:10:09
………何と無くは分かりました、GetVolumeの方の説明も見とくべきでしたorz
とりあえず、有難う御座いました。
154デフォルトの名無しさん:2005/08/04(木) 18:23:31
ちんちんおっきおっき
155デフォルトの名無しさん:2005/08/04(木) 21:40:09
SkinnedMeshのアニメーションのサンプルで、xファイルのアニメーションキーの
数取得できる方法ご存知ないでしょうか?
156デフォルトの名無しさん:2005/08/04(木) 22:16:31
アルファ合成(乗算)について教えてください。
メッシュの輪郭線を描画するために、テクスチャに白地に黒の線を書いて、
それを最後に乗算描画しようとしているのですが、うまくいきません。
設定は
pd3ddevice->SetRenderState(D3DRS_SRCBLEND , D3DBLEND_ZERO);
pd3ddevice->SetRenderState(D3DRS_DESTBLEND , D3DBLEND_SRCALPHA);
です。

テスト用に
pd3ddevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA));
pd3ddevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA));
と設定すれば、白地に黒の輪郭線のみが表示されますので、
テクスチャへの描画はうまく言っているはずです。

SetRenderStateの設定ミスでしょうか?
157デフォルトの名無しさん:2005/08/04(木) 23:27:13
お前さんがやりたいのは、D3DBLEND_SRCCOLORじゃねぇのか?
158デフォルトの名無しさん:2005/08/05(金) 15:07:49
DrawIndexedPrimitiveで描画したポリゴンにライトが当たりません。
描画すると真っ黒で、ライトをオフにするとテクスチャと同じ色で描画されます。
この前後でXファイルを描画させると、それに対しては問題なくライトの処理が行われています。
何か特殊な処理でも必要なのでしょうか?
159デフォルトの名無しさん:2005/08/05(金) 15:36:36
>>158
法線逆じゃないの?
160デフォルトの名無しさん:2005/08/05(金) 16:35:28
固定機能パイプラインを使って
テクスチャ座標を色として出力したいんですが
可能でしょうか?

HLSLの場合こんな感じです。
float4 PixelShaderMain( const in float4 i_vTexCoord0 : TEXCOORD0) : COLOR0
{
return i_vTexCoord0;
}
161158:2005/08/05(金) 20:49:40
>>159
レスありがとうございます。
法線関係調べましたら座標と法線逆に指定してました(ノ∀`)
162156:2005/08/05(金) 23:58:22
>>157
ありがとうございます。
おかげさまでうまくいきました。

・・・なんで気がつかなかったんだろう。
163デフォルトの名無しさん:2005/08/07(日) 20:24:43
DirectInputなんですが、接続しているジョイスティック一覧を取得するときに
ジョイスティックの名前を取得できませんか?
コントロールパネルのゲームコントローラーで出てくる名前を取得したいんです。
164163:2005/08/07(日) 21:01:37
解決しました。
DIDEVICEINSTANCE構造体から取得できるんですね。
165デフォルトの名無しさん:2005/08/08(月) 21:16:40
Direct3Dを使用してフェードイン/フェードアウトを行いたいのですが、
普通の画面を描画したあとに、一番手前に大きなポリゴンをアルファブレンディングで
描画するする方法しか思いつきません。
これはすごく重くなりそうです、、一般的にはどのようにして実装するのがいいでしょうか?
166デフォルトの名無しさん:2005/08/08(月) 21:26:24
重くなりそうとかグダグダ言う前に実際に作ってみろ。
何故簡単に試せることすらやろうとしない?
167デフォルトの名無しさん:2005/08/08(月) 21:29:56
場合によっちゃフォグでも出来るかもね
168デフォルトの名無しさん:2005/08/08(月) 21:42:49
>>166
レスありがとうございます。
一度作ってみます(ノ∀`) でも重そう…。

>>167
フォグですか。一度試してみます。
ご助言ありがとうございました。
169デフォルトの名無しさん:2005/08/08(月) 22:01:47
>>165>>168
「重そう」だと考える根拠が知りたい
170デフォルトの名無しさん:2005/08/08(月) 22:03:42
正に、馬鹿の考え休むに似たり
171デフォルトの名無しさん:2005/08/08(月) 22:04:56
>>169
ちんちんがむけてないと、たまにそういうこと言うよ。
172デフォルトの名無しさん:2005/08/08(月) 22:42:15
ちんちんの皮だろ童貞
173デフォルトの名無しさん:2005/08/08(月) 22:47:57
>>172
ちんちんがむけるってゆーたら、
皮のこと指すんだろがふつー。
わからないお前のが童貞。
つーか、俺のソープ初体験(1年前)聞きたいのかボケ。
174デフォルトの名無しさん:2005/08/08(月) 22:49:51
何このスレ
175デフォルトの名無しさん:2005/08/08(月) 22:56:23
アホな質問をする奴より
意気揚々とカスなレスで埋める
お前らがウゼー
ちょっと難しいことを聞くと、
だんまり決め込むチンカスども死んでね
176デフォルトの名無しさん:2005/08/08(月) 23:11:16
>>175
よしよし、なんだい?
元ゲームプログラマー(現在業務系プログラマ)な俺が質問に答えてやろう。
177デフォルトの名無しさん:2005/08/08(月) 23:12:04
ただし、解答に2桁以上の掛け算の入る質問は駄目だ。
178マイク ◆yrBrqfF1Ew :2005/08/09(火) 00:02:58
先生ポータルってなんですか
どうやって作るんすか
179デフォルトの名無しさん:2005/08/09(火) 00:14:19
>>178
さっきググってみたけどポータルって窓口のことだってよ。
やっぱりアルミサッシ買ってくるんじゃね?
180デフォルトの名無しさん:2005/08/09(火) 00:37:44
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |  >>179&アルミサッシ
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |
                 馬鹿かてめーは
                 アルミサッシもつけてやるから
                 二度とこのスレ覘くな。
181デフォルトの名無しさん:2005/08/09(火) 01:38:36
>>176
では質問、
View空間での方向ベクトルを
射影空間に変換するにはどうすればいいの?
普通に射影行列を掛けてW除算でいいのかな?
182デフォルトの名無しさん:2005/08/09(火) 03:02:42
>>181
本当に「方向」ベクトルなら、変換前の座標はちゃんとW=0にして無限遠に向けようね。
それに射影行列をかけてW除算した結果が果たして何を意味するのかは、使う前によく考えましょう。
183デフォルトの名無しさん:2005/08/10(水) 00:42:48
CreateDeviceでD3DERR_DRIVERINTERNALERRORが帰ってしまいます。

D3DDEVTYPE_REFでも,D3DDEVTYPE_HALでも同様です。

WinnXP Pro SP2 DirectxX9.0 Summer 2005 SDK VC++NET2003 MatroxG400 最新のドライバーを当てています。

いろいろ自分なりに調べてみましたが解決できません。
考えられる原因は何でしょうか?対象方はありますか?教えてください。
184デフォルトの名無しさん:2005/08/10(水) 00:57:47
>>183
>MatroxG400
・・・・・・やっぱり、これかな(笑)
185184:2005/08/10(水) 01:32:42
>>184 たしかに古いボードですがorz

補足しますが、他のDirectXアプリやSDKのサンプルは重いなりに動いています。
186デフォルトの名無しさん:2005/08/10(水) 10:56:29
DirectX Graphicsで頂点バッファと、インデックスバッファを使用しレンダリングしているのですが、
ポリゴンの頂点がランダムに移動する言う症状が発生しています。

頂点、インデックス共に最初の書き込みのみで、以降変更していません。
なのに何故変化があるのでしょうか?
どなたか助言いただけませんでしょうか。

実際のプログラムはごちゃごちゃしていたので、症状が発生するように抜き出しました。
ttp://tool-ya.ddo.jp/2ch/trash-box/contents.jsp?file=20050810105127177.zip

WindowsXP ProSP2
GeforceFX5900XT
Dx9SDK August 2005です。
187デフォルトの名無しさん:2005/08/10(水) 11:56:38
質問するのなら最低限バックバッファくらい作ってからにしてくれ。
描画以前の問題。
188デフォルトの名無しさん:2005/08/10(水) 12:06:59
>>186
VC++ Toolkit2003でコンパイルしてみました。
中に入っていたpngの正しい描画と同じ結果が得られました。
以上。
189デフォルトの名無しさん:2005/08/10(水) 12:37:20
>>186
症状でねぇ
WinXP
Geforce256
DX9.0c
190デフォルトの名無しさん:2005/08/10(水) 15:37:32
トランスフォーマーってなんですか?
191デフォルトの名無しさん:2005/08/10(水) 15:47:21
>>190
変形ロボットアニメ
192デフォルトの名無しさん:2005/08/10(水) 15:50:08
>>190
変圧器
193デフォルトの名無しさん:2005/08/10(水) 16:14:40
私にいい考えがある
194デフォルトの名無しさん:2005/08/10(水) 16:22:37
>>193
却下
195186:2005/08/10(水) 17:16:58
>>187
元はあったのですが、症状の再現に関係なさそうだったので省略しました。
フレーム毎にブレークをかけてF5連打しても時々発生するので、
同期やら、バックバッファ云々では無いかと。

>>188-189
そうですか・・・
3Dゲームとかがおかしかった事は無いし、
ビデオカードのドライバを変えてみたりしたのですが変わらず。
症状が出ても、次のフレームが何事も無かったように描画されるのがなんとも不思議で。


196デフォルトの名無しさん:2005/08/11(木) 09:04:17
>>185
D3DCREATE_HARDWARE_VERTEXPROCESSINGを指定してないか?
197デフォルトの名無しさん:2005/08/11(木) 21:17:37
DX9で文字列表示はどうやればいいですか?
ttp://www.microsoft.com/japan/msdn/academic/Articles/DirectX/02/
ここの「2.3 文字列の表示」を読んでるんですが、

D3DXCreateFont(pD3DDevice, hFont, &pD3DXFont);
の時に関数が不正な 3 個の実引数

pD3DXFont->DrawText(psz, strlen(psz), &rc, DT_SINGLELINE, color); // 文字列を出力
の時に関数が不正な 5 個の実引数
になってしまいます。

BeginとEndも'ID3DXFont' のメンバではありませんと言われてしまいます。
198デフォルトの名無しさん:2005/08/11(木) 21:43:14
いーからSDKのマミュマル嫁や
もしくはヘッダの宣言みろや
199デフォルトの名無しさん:2005/08/11(木) 21:51:19
>>197
DirectX 9.0 SDK Update (Summer 2003) で、ID3DXFont のインターフェイスが変更されました。
http://msdn.microsoft.com/library/en-us/directx9_c/directx/graphics/reference/d3dx/interfaces/id3dxfont/_id3dxfont.asp
200デフォルトの名無しさん:2005/08/11(木) 21:59:15
こうコロコロとAPI仕様が変わるDX9時代、初心者はDirectXプログラム禁止ってことでFA?
201デフォルトの名無しさん:2005/08/11(木) 22:10:33
自分が学習に使っているSDKのバージョンをを使い続ければOKなんでは
202197:2005/08/11(木) 22:38:06
返信ありがとうございます。
if( FAILED( D3DXCreateFont(lpD3DDEV,h, w, 0, 0,0,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH,"MS ゴシック", &m_lpFont ) ) )
{
MessageBox( 0, "D3DXCreateFontIndirect FALSE", "ok", MB_OK);
exit(0);
}
で駄目でした。

D3DXFONT_DESChFont={h, w, 0, 0,0,
SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"MS ゴシック", };
if( FAILED( D3DXCreateFontIndirect( lpD3DDEV, &hFont, &m_lpFont ) ) ) {
MessageBox( 0, "D3DXCreateFontIndirect FALSE", "ok", MB_OK);
return;
}
も駄目でした。
両方コンパイラは通りますが、エラーになってるみたいです。

SDKは丁度、DirectX 9.0 SDK Update (Summer 2003)です。
203デフォルトの名無しさん:2005/08/12(金) 00:01:56
> エラーになってるみたいです
そしたら、
「どのようなエラー値が返っているのか?」
を調べるべし。
204デフォルトの名無しさん:2005/08/12(金) 00:29:25
DirectXの前にC言語の勉強した方がいいかと…
ヘッダとかエラーメッセージを見たら分かることなんだし。
205197:2005/08/12(金) 00:50:50
戻り値のHRESULTの
DEC値が -2005530516
DXGetErrorDescription9で見てみると
Invalid Call

呼び出し無効?引数が間違ってるって事でしょうか…?
206デフォルトの名無しさん:2005/08/12(金) 00:51:58
DirectX 8.1のSDKって今でも手に入りますか?
207206:2005/08/12(金) 01:50:27
すいません、自己解決しました。ありがとうございました。
208デフォルトの名無しさん:2005/08/12(金) 01:59:06
>>197
D3DXCreateFontのドキュメントを良く見るんだ。
戻り値について解説がある
209197:2005/08/12(金) 02:14:13
>>208
良く考えてみてできました!
lpD3DDEV初期化する前にCreateFontやろうとしてましたorz
210デフォルトの名無しさん:2005/08/12(金) 11:02:45
boland c++ compilerでもDirectX使えますか?
211デフォルトの名無しさん:2005/08/12(金) 11:31:46
BCもVCも動作にDirectXは使いません。
212名無し募集中。。。:2005/08/12(金) 16:44:27
Direct Sex
213デフォルトの名無しさん:2005/08/12(金) 22:49:51
今日からDirectXを始めた者です。
書籍片手に悪戦苦闘しています。
質問なんですが、参考にしている書籍ではD3DDeviceのポインタを
全ての描画関数に引数で渡してあるのですが、
これはグローバル(クラス)にひとつだけ持つようにしても問題ないものなのでしょうか?
それとも今後D3DDeviceを2個生成して切り替えるようなテクニックを使うのでしょうか?
214デフォルトの名無しさん:2005/08/12(金) 23:12:05
>>213
すべて引数で渡すのが正解。
グローバルで1つだけ生成したとして、
それをどこからも呼べるようにしておいて実際にそうやってくんじゃうと
バグったときに最悪。
これはグローバル変数が駄目といわれる理由。
なんで駄目なのかってのは自分で実際に痛い目をみなきゃ理解できないと思う。

引数で渡すようにするのはそれをどこが呼んでいてどこが変更を加えているのか
わかるようにするため。
決して面倒だからという理由でこれをおこたってはならない。(本当はねw)
215デフォルトの名無しさん:2005/08/12(金) 23:21:23
いろんなページ見つつ、
Mesh読み込んで表示するクラス作ったんだけど、
自分で作ったxファイルが表示できない…。
なんで?
216デフォルトの名無しさん:2005/08/12(金) 23:22:22
>>214
回答ありがとうございます。2,3質問があります。

バグった時ってのが具体的に分からないのですが、
変更する必要がなくて、1個だけでよければ
シングルトン(グローバルインスタンス)のメンバ変数で
問題がないように思えるのですが。

どこで呼んでいて、どこで変更ってのも参考にしている書籍では
メイン関数(WinMain)のローカル変数で生成して、それを全てで使いまわしています。
この構成ではシングルトンのメンバに持ったほうが、可読性が上がり、
バグの入り込む余地はないと思うのですが。

テクスチャのリソース管理なども今後シングルトンで管理しようと思っていますが、
D3DDeviceの取り扱いでちょっと悩んでいます。
217デフォルトの名無しさん:2005/08/12(金) 23:22:40
また超能力者きぼんぬかよ。
218デフォルトの名無しさん:2005/08/12(金) 23:24:52
>>214
DXUTGetD3DDeviceの立場はどうなるんだろう、とふと思った。
219デフォルトの名無しさん:2005/08/12(金) 23:29:51
>>216
シングルトンで問題ないと思うよ。
いきなりグローバル変数の一般論を語り出す>>214は軽く聞き流しておけばいい。
220デフォルトの名無しさん:2005/08/12(金) 23:54:14
>>216
じゃあ例えば、

gGlobalという変数を用意したとしてどうやらそこがバグの原因らしいと
でも

initGame();
frameGame();
endGame();

これ↑じゃ関数の中身をいちいちチェックしないとわからないでしょ?

initGame(&gGlobal);
frameGame();
endGame();

でも、これ↑ならバグの発生箇所がinitGameの中であることが確定されてるでしょ?
こういう細かいところをしっかりと管理することでバグが格段に減る。

また、別の視点として、自分ではない誰かにソースをみせたとき、
gGlobalをシングルトンにしてしまうとgGlobalの影響範囲が絞れない。
つまりでかいプロジェクトでこれをやってしまうと終了確定。
俺も新人の頃これをやって先輩(上司ね)にすげー怒られた。
221デフォルトの名無しさん:2005/08/12(金) 23:58:35
( ´_ゝ`)フーン
222デフォルトの名無しさん:2005/08/13(土) 00:19:01
>>221
まあ、1回痛い目にあわないとそんなもんだよw
俺もそうだったし。

ただ、C/C++ってインスタンスやクラスの影響範囲を絞るのって
ヘッダーファイルのインクルードか引数をみるしかないんだよね。

俺が最悪だと思うソースは2つ、
1つはグローバル変数がヘッダーファイルに1つにまとめて宣言してあって
そのヘッダーファイルがすべてのヘッダにインクルードされているソース。
もう1つは、ほとんどの引数がvoid*
223デフォルトの名無しさん:2005/08/13(土) 00:19:50
>>219
回答ありがとうございます。参考になります。

>>220
解説ありがとうございます。
確かに一般論はそうなのですが、私の方では、ひとつしかないデバイスを扱う物は基本的にシングルトンにします。
各種マネージャー系、ハードデバイス系(コントローラー、サウンド、バックアップデバイス等)です。
それらを引数で渡していると、ある関数に渡す引数がそれこそ10や20では足りなくなります。
これらの広範囲で使うデバイスは、どこから呼ばれているかでバグの原因が
分からないというのが想定しにくいです。

ただ、この辺りは個別の問題に関することなので、
D3DDeviceに関してもそうだとは断言できません。

私の方で作成予定のソフトでは、D3DDeviceを引数に渡すのが恐らく最終的には、
クラスで100、関数で、数1000以上になると思われます。(一桁増える可能性もあります)
引数を渡す必要のある関数のネストは10ぐらいは平気で行くと思われます。
可読性を考慮して、シングルトンの方が良いと判断します。
ただ、一時的にあるいは動的にデバイスを生成削除するなら、引数で渡します。
で、一時的にデバイスを生成削除する必要があるのかなと思った次第です。

今まで扱ってきた3D環境では、D3DDeviceのような概念がなかったので、
ちょっと悩んでいます。
スレの趣旨と変わってきたので、後は自分で頑張ってみます。ありがとうございました。
224デフォルトの名無しさん:2005/08/13(土) 00:34:03
BCCでDirectX扱おうと思ったのですが
初期化処理でD3d8.libをリンカに指定しなければ
ならないらしく、ところがそのライブラリがない
っぽいです。BCCでは無理なんでしょうか?
225デフォルトの名無しさん:2005/08/13(土) 00:37:07
>>223
うぁ・・・俺が新人ときに先輩にいったことと全く同じこといっとるw

それじゃ、バグったときも1000以上あるクラスを
影響範囲も特定できない状態で調べるつもりなんだ。
つか、可読性を完全に履き違えてる。
ソースの見た目を綺麗にするのが可読性じゃないぞ。
クラスやインスタンスの影響範囲が限定できてこその可読性。
そのクラス(変数も)が関連するクラスはどのクラスとどのクラスなのか
これが綺麗に表現できていなければ、いくらソースの見た目が綺麗であっても
誰も読めない。

>それらを引数で渡していると、ある関数に渡す引数がそれこそ10や20では足りなくなります。
それでいいんだよ。
その関数はそれだけの複雑性を抱えてるってことなんだよ。
プログラムの腕が上がれば綺麗にまとめる方法が見えてくるよ。
しばらくは大量に引数をつけちゃってもかまわないから
ノーグローバル変数のスタイルを貫いてみてほしいなぁ・・・。

226デフォルトの名無しさん:2005/08/13(土) 00:47:31
227デフォルトの名無しさん:2005/08/13(土) 00:52:35
私の携わるプロジェクトの別チームが作ったプログラムは、
大小さまざまな構造体がグローバルに置かれていてその数なんと、50は下らない。
確かにそれだけの情報量が必要ではあるのだが、外部から変更される可能性のある
設定ファイルの内容までもそうして保持しているから一体いつ更新されているのか
最早誰にも理解できなくなっている。
228デフォルトの名無しさん:2005/08/13(土) 01:09:32
>>225
はは、私も3年目ぐらいの時はその考えでした。
その考えで1本ゲームも作ったな。
これでも信念持ってやってますし。経験も長いので、ただ宗教論争になるので止めましょう。
長いって言ってもゲームなんで特殊かもしれませんが(笑
何をグローバルにして何をクラスメンバにして、何をローカルにするかは
常に考えていますよ。その上で、必要なところはシングルトンにします。
スレッドが絡んでくるとむしろシングルトンの方がまだ楽だし。
可読性云々も含めてこれ以上は宗教論争になるので止めときましょう。
229デフォルトの名無しさん:2005/08/13(土) 01:17:23
>>228
嘘でしょう。
発言の薄さから、プログラムの設計について考えた形跡が全くみられない。
230デフォルトの名無しさん:2005/08/13(土) 01:37:59
頭の固い2D親父に何言っても無駄ムダ。
Direct3Dの勉強、頑張って下さいね〜。
231デフォルトの名無しさん:2005/08/13(土) 02:00:39
ただの変数ならともかくD3DDeviceで「グローバル変数の弊害」とは
232デフォルトの名無しさん:2005/08/13(土) 02:05:38
>>225の主張はこのケースにはまったく当てはまらないが
(その都度引数として渡そうが大域変数を使おうが中身は常に同じ)
まあスタイルとして統一するってことでいいんじゃないの?
233デフォルトの名無しさん:2005/08/13(土) 02:17:55













234デフォルトの名無しさん:2005/08/13(土) 02:20:22
でも、コピーして持っておくのは良くないよな。
235デフォルトの名無しさん:2005/08/13(土) 03:12:23
教条主義にとらわれて思考停止に陥ってるお方は
ぜひロガーもサウンドモジュールも引数渡しでがんばってくれればと切に願う。

ところでd3ddの中にはレンダリングステートとかがあるし、
それぞれd3ddを通して描画するモジュールが全員自分用のstateblockでも持ってて
毎回自分の都合のよいように全部設定してから描画するとかならいいけど、
ある状態になってることを前提にして描画処理を流したいということになってくると
d3ddがどこからでも触れるようになっていて、モジュールが好き勝手なタイミングで
描画をやっているとなると、ある日前提がくずれて思ったような描画が
されなくなったときにその原因追求は結構厄介なことになるのではなかろうか。

そのような問題に対処するための何らかの歯止めは必要だと思う。グローバル変数がどうとかじゃなくて。
それはたぶん結局は…ってことになるのだとは思うけど
236デフォルトの名無しさん:2005/08/13(土) 03:35:55
アンチグローバル信者キモ。
偏執で頭固まりすぎ。
経験の浅い学生なんだろうけど、こんな協調性のない奴が
職場にいたらと思うとぞっとするな。
設計のなんたるかも分かってないみたいだし。
4人のギャングが怒ってくる罠。
237デフォルトの名無しさん:2005/08/13(土) 04:10:10
>>236
だな。たかがpd3dDeviceの話なのに、必死に論点ずらしてて笑えるw
238デフォルトの名無しさん:2005/08/13(土) 04:25:36
ここはDirectXのスレじゃないの?
変数の場所を決めるスレでつか?
239デフォルトの名無しさん:2005/08/13(土) 08:47:11
>>236
そんなわけあるか。
グローバル変数を使うプログラムの設計が糞なのは
C言語のときから散々言われてきた。
そういう駄目な例を扱った本も何十冊と発売されてきたし、
禁じ手といったらグローバル変数は代表みたいなもんだ。

ここまでしてグローバル変数を回避する必要があったんだよ。
それをもっとよく考えるべきだと思う。
240デフォルトの名無しさん:2005/08/13(土) 08:47:51
>>226
dクス
241デフォルトの名無しさん:2005/08/13(土) 08:54:19
>>239
俺だってグローバル変数は「できるだけ」回避するようにしてるけどさあ。皆も同じじゃねーの?
そろそろ自分の言葉で語ってみたらどうよ。
242デフォルトの名無しさん:2005/08/13(土) 08:57:57
>>241
そろそろもなにも自分の言葉だけどなにか?

#そういや、最近、リンクの紹介だけして逃げてくアホが増えたけど
#あーいうのに言ってやれよ。
243デフォルトの名無しさん:2005/08/13(土) 09:29:03













てって言ってんだろがこのハゲどもがああああああああああああ
244デフォルトの名無しさん:2005/08/13(土) 09:38:01
ハゲっていうなああああああああああああああ
245デフォルトの名無しさん:2005/08/13(土) 09:38:16
おまえらにはラッパーを作るという考えはないのか・・・
246デフォルトの名無しさん:2005/08/13(土) 10:15:58
ヨーチェケラ
247デフォルトの名無しさん:2005/08/13(土) 10:41:52
>>239
> グローバル変数を使うプログラムの設計が糞なのは
> C言語のときから散々言われてきた。
> そういう駄目な例を扱った本も何十冊と発売されてきたし、
> 禁じ手といったらグローバル変数は代表みたいなもんだ。

そんなことはいちいち書かなくても誰でも知ってますよ。
もっとも、本書く人は大抵開発現場にいませんけどね。
248デフォルトの名無しさん:2005/08/13(土) 10:51:13
>>247
じゃあ、なんでシングルトンとか使っちゃうアレな人が減らないわけ?
249デフォルトの名無しさん:2005/08/13(土) 10:53:09
ヨーチェケチェケ
チェケラッチYO!
250デフォルトの名無しさん:2005/08/13(土) 11:03:46
デザパタスレの常連キチガイがこちらにも来たみたいだな
251デフォルトの名無しさん:2005/08/13(土) 11:09:30
まだ固執してるか、キモすぎ。
まさに思考停止だな。
ほんと全て引数渡しでがんばってくれと切に願うね。
そして一人で誰にも迷惑かけずにやってくれと。
252マイク ◆yrBrqfF1Ew :2005/08/13(土) 12:05:53
qAppもグローバルだな。
253デフォルトの名無しさん:2005/08/13(土) 12:16:25
>>251
その言葉、そっくりそのままお前に送るます
254デフォルトの名無しさん:2005/08/13(土) 12:23:39
もうやめてやれよ。
論点ずらしまくりのキチガイなんだから。
255デフォルトの名無しさん:2005/08/13(土) 12:38:02
>>254
その言葉、そっくりそのままお前に送るます
256デフォルトの名無しさん:2005/08/13(土) 12:45:44
>>250
デザパタなんか現場じゃ全く使ってないのにねw
257デフォルトの名無しさん:2005/08/13(土) 13:15:44
いやデザパタスレの常連キチガイは>>256みたいな感じな人だよ
258デフォルトの名無しさん:2005/08/13(土) 13:16:42
お前ら本当はプログラミングのプの字もできないんだろ?
俺知ってるぜ
259デフォルトの名無しさん:2005/08/13(土) 13:22:11
>>257
とりあえず、ナムコ、カプコン、スクエニではデザパタは使ってないですw
260デフォルトの名無しさん:2005/08/13(土) 13:44:02
・ゲーム製作現場が全てだと思っている
・デザインパターンを「使う物」だと思っている
・なんか子供っぽい権威を持ち出す(ナムコ、カプコン、スクエニ)

なるほど痛いな
261デフォルトの名無しさん:2005/08/13(土) 14:59:50
勝手に使ってないことにすんなよw
262デフォルトの名無しさん:2005/08/13(土) 17:06:37
dinput.hはインクルードしてあって
lpDevMouse->SetDataFormat( &c_dfDIMouse2 );
やっても
error LNK2001: 外部シンボル "_c_dfDIMouse2" は未解決です
になります。
他に何かやる事ありますか?
263デフォルトの名無しさん:2005/08/13(土) 17:19:07
>262

dinput.libかdinput8.libがリンクされてないとか。
264デフォルトの名無しさん:2005/08/13(土) 18:07:30
>>263
そんなことは……

当たりでした…orz。
265デフォルトの名無しさん:2005/08/13(土) 19:03:38
すいません
マウスの初期化はできたんですが、
マウスの軸移動の情報がウィンドウ外でしか入手できてないみたいなんです。
クリックはウィンドウ内でも受け付けてるんですが…。
266デフォルトの名無しさん:2005/08/13(土) 19:07:36
すいません。自己解決…
267デフォルトの名無しさん:2005/08/13(土) 20:23:54
>>224ですけど
226さんのリンク先をたどると
ttp://codecentral.borland.com/Item.aspx?id=16547
ここのサイトでユーザー登録しないと
ライブラリが手に入らないらしいんですが、
それでいいんでしょうか?
268デフォルトの名無しさん:2005/08/13(土) 20:51:35
269デフォルトの名無しさん:2005/08/13(土) 20:54:36
clootie
270デフォルトの名無しさん:2005/08/13(土) 20:57:38
http://www.clootie.ru/

あ、URL変わってるのでこっちで
前のは重たい
271267:2005/08/13(土) 21:28:59
>>268
エキサイト一応やりましたが…意味不明で確信がもてません。

>>269-270
dです。でも書かれてる内容が分かりません。
ここからDLできるんですか?
272デフォルトの名無しさん:2005/08/13(土) 23:24:32
>>271
あの程度わからないならBCCでDirectX使おうなんて
身の程違いもいいところだよ…。馬鹿は素直にVC買っとけ。
273デフォルトの名無しさん:2005/08/14(日) 15:04:06
むしろ学校のお勉強が先だと思うな。。。
274デフォルトの名無しさん:2005/08/14(日) 15:38:06
>>271
とりあえず登録しておけ
275デフォルトの名無しさん:2005/08/14(日) 19:31:54
GPU Gems1 の 94ページに
「アルファブレンディングを使って描画呼び出しでz-テスト/書き込みを有効にすれば」
                                          ~~~~
とあるのですが、無効の間違いでしょうか?
(私は半透明なオブジェクトではどちらも無効にして最後に書いてました)
276デフォルトの名無しさん:2005/08/15(月) 01:08:09
>>275
その本持ってないのでそれだけの情報では分からないな。
277デフォルトの名無しさん:2005/08/15(月) 01:25:36
>>275
その本は知らないが、半透明を描画する際にZテストは
無効にしちゃ駄目だろう。無効にするのは書き込みだけ。
278デフォルトの名無しさん:2005/08/15(月) 13:42:50
半透明オブジェクトを書く順番で、有効無効が違うだろ。
279デフォルトの名無しさん:2005/08/15(月) 15:38:28
無知素人278発見
280デフォルトの名無しさん:2005/08/15(月) 17:27:39
無知っていうかZバッファの比較と書込みの違いがわかってないんじゃないかな…
281 ◆YlfFTVBogg :2005/08/16(火) 00:43:52
最近暇が出来まして、DirectXの勉強をC++.netで始めております。
現在、自動車教習所のシミュレータのパクりを作ろうと考えています。
半年前二輪免許取ったときのシミュレータが楽しくて、是非自分で実現しようと思いまして。

細かい仕様をだいたい決定して、さて次は具体的に技術を考えようと思った矢先に
フィールドに関する事項で躓きました。

みなさんフィールドの実装はどのようにされていますか?高低差を含んだフィールド
の実装方法を教えて下さい。
また、それを載せているサイトでも構いません。

現在考えている方法は、
・2次元の高さ配列を作り、それをメッシュにする。
・メタセコイアでがんがって作ってXファイル表示。
です。何か良い方法などありましたらサイト、書籍構わず教えて下さい。

当方VisualC++での開発経験はあります。(あくまで自分用の制御系ツールですが
英語の資料は無理なく読めます。よろしくお願い致します。
282デフォルトの名無しさん:2005/08/16(火) 01:07:04
>>281
あー、「ナビゲーションメッシュ」とか「オクトツリー」で
ググるとそこ周辺の情報がついてくるよ。
英訳してググルとさらに当たると思われる。
283デフォルトの名無しさん:2005/08/16(火) 01:13:18
普通にコースのメッシュを作ればよろしいと思うが。
そこそこ茨の道だと思うので覚悟するように。
284デフォルトの名無しさん:2005/08/16(火) 01:41:42
>>283
多分、見た目用のモデルと、当たり用のモデルを用意するって手法(?)を知らないと思われる。
2次元の高さ配列なんていってっけど、それをどうやって作るのか考えてないと思われ。
285 ◆YlfFTVBogg :2005/08/16(火) 01:50:00
>>282
なるほど。Game Programming Gemsが欲しくなるような検索結果でした。
しかし、結構な情報が手に入りました。また熟考してみたいと思います。
ありがとうございました。

>>283
単なるメッシュを作ることも考えましたが、後の拡張性を考えて、う〜ん
と悩んでいたところです。

>>284
当たり判定云々は知ってます。
二次元配列はDXF形式のデータを三次元加工用に三次元配列に変換する
プログラムを作ったことがあるので、その技術を流用しようかと考えています。
286デフォルトの名無しさん:2005/08/16(火) 02:01:08
>>285
そんな面倒なことしなくても、メタセコでモデル作ったときに当たり用のモデルも作っちゃえばいいじゃん。
当たり用のモデルの名前だけ特定のものにしておけば楽じゃん。
287 ◆YlfFTVBogg :2005/08/16(火) 02:07:07
>>286
当然その予定です。
ただ、配列を用いたと仮定したときの場合を述べました。
分かり難くてすみませんです。


本題に戻りますが、
http://www.gamedev.net/reference/list.asp?categoryid=45
にLandscapeの話が載っていました。
面白そうなので、少し読んでみます。

またお世話になると思いますので、今後ともよろしくお願い致します。
288デフォルトの名無しさん:2005/08/16(火) 14:41:57
3DCGツールで作ったアニメーションを再生させるのってどうしてる?
良いライブラリとか知らない?
みんな自作してるの?
289デフォルトの名無しさん:2005/08/16(火) 14:58:22
D3DXLoadMeshFromXで三つ以上メッシュ読み込むと、
ものすごく遅いんですが、どうにもなりませんか?
290デフォルトの名無しさん:2005/08/16(火) 15:37:43
メッシュの頂点数を減らす
見えないときはDrawしない
ハードウェアを良いものに買い換える
291デフォルトの名無しさん:2005/08/16(火) 15:40:36
ロードが遅いのか描画が遅いのか
292デフォルトの名無しさん:2005/08/16(火) 15:59:51
描画が遅いです。
やっぱ細かいとこつきつめてくしかなさそうですな。
ありがとうございました。
293271:2005/08/16(火) 20:40:37
おかげ様でライブラリらしきものを入手できました。
皆様ありがとうございました。
しかし、初期化処理にはd3d8.hヘッダファイルが
必要らしくそれもDLできないでしょうか?
294デフォルトの名無しさん:2005/08/16(火) 20:44:24
>>293
物事自分で調べられない奴はプログラミングには向いてないと思うよ
295271:2005/08/16(火) 20:45:03
>>294
調べようがなくて、すみません。
296デフォルトの名無しさん:2005/08/16(火) 20:52:05
>>295
いんたーねっとにはべんりなけんさくえんじんというほーむぺーじがあります
http://www.google.co.jp/
297デフォルトの名無しさん:2005/08/16(火) 21:30:37
>>293
Microsoftのサイトから落としてこい。
298デフォルトの名無しさん:2005/08/16(火) 21:56:38
ンヒヒヒヒヒ!すいません!
299271:2005/08/16(火) 21:59:26
>>296 キーワードが思い当たらないって意味です
>>297 すみません。どこにあるのか検索しても見つからないです
300デフォルトの名無しさん:2005/08/16(火) 22:04:24
>>299
キーワード:DirectX SDK
てか君まず検索の練習から始めた方がいいよ・・
301271:2005/08/16(火) 22:15:19
>>300
d3d8.hを落とせないか調べたいのですが…
302デフォルトの名無しさん:2005/08/16(火) 22:22:24
>>301
釣り?釣りじゃないなら
もう君プログラミングやめた方が良いよ。
303271:2005/08/16(火) 22:23:34
>>302
あ、そですか。論外ですか。
あとはどーにでもしますわ。
304271:2005/08/16(火) 22:31:50
>>303
偽物は出てこないで下さい。
d3d8.hがどこにあるかだけ分かればいいんです、おねがいしますorz
305デフォルトの名無しさん:2005/08/16(火) 22:34:12
なんだ釣りか
306271:2005/08/16(火) 22:37:34
>>304
偽物うぜぇ。

もうお前らには要はねーよwww
糞野郎どもがw
307デフォルトの名無しさん:2005/08/16(火) 22:40:21
まーめがほしいかそらやるよ
308デフォルトの名無しさん:2005/08/16(火) 23:03:53
>>271
マジレスすると、>>272が書いてあることが一番的を射ている感じがする。

おそらく君はDirectX(SDK)がどういうものなのかも分かっていないし、
コンパイラがどういう仕組みで動いているのかも分かっていない。
(プログラミング経験も無いんじゃないか?)

つまり、何を調べれば動くようになるのかすら分からない状態なわけだ。

素直にVisualC++.NETとDirectXの入門書を買ってくることを薦めるよ。
309271:2005/08/17(水) 19:35:05
>>308
ありがとうございます。

改めて今日探して見ましたが
Microsoft DirectX 9.0 SDK Update (August 2005)
のソフトウェア開発キットというのに
ヘッダやライブラリがすべてありました。
どうもお騒がせしました。
310デフォルトの名無しさん:2005/08/17(水) 20:11:13
Directx8で
頂点カラーとテクスチャカラーの合成をしたとき
頂点カラーが0.5のときに、テクスチャカラーがそのままでて
頂点カラーが0.5より上なら明るく、下なら暗く
という感じの設定って無いでしょうか?
311271:2005/08/17(水) 21:00:18
たびたび申し訳ありませんが質問です。
初期化処理をしたところ
>309でダウンロードした中のd3d8.libファイルにリンクしてもエラーが出てしまいます。
>270さんに紹介してもらったclootieというサイトで
DLしたライブラリだとなぜか上手くいきました。
前者のファイルでおこったエラーは以下の通りです。
Error: 'C:\BORLAND\DIRECTX\LIB\X86\D3D8.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
どういう事でしょうか。教えてください。お願いします。
312271:2005/08/17(水) 21:02:21
自己解決しました。すいません。
313271:2005/08/17(水) 21:17:54
>>312
そんなにうざいですか?
314デフォルトの名無しさん:2005/08/17(水) 21:30:42
????
315デフォルトの名無しさん:2005/08/17(水) 21:41:56
>>310
固定機能なら D3DTOP_MODULATE2X でいけるんじゃない?
316デフォルトの名無しさん:2005/08/17(水) 22:10:40
>>311
LIBファイルの変換が必要
詳しいことはBorland C++スレで聞け
317デフォルトの名無しさん:2005/08/17(水) 22:40:35
>>315
SetTextureStageですね、MDULATE2XかADDSIGNEDがそれっぽい感じがします
他にも色々なことができるみたいですね、ありがとうございました
318311:2005/08/17(水) 22:54:54
>>316
ありがd
319デフォルトの名無しさん:2005/08/17(水) 23:03:24
>>313
少しも自分で調べようとしないで人に片っ端から聞きまくって恥ずかしくないの?
320デフォルトの名無しさん:2005/08/17(水) 23:10:20
>>313
どうせお前は伸びない。
321デフォルトの名無しさん:2005/08/18(木) 02:01:29
Directx8で質問です
ライティングを有効にすると頂点カラーは使えないのでしょうか?
322デフォルトの名無しさん:2005/08/18(木) 02:11:35
質問する前にまずステートのヘルプを読め。
323321:2005/08/18(木) 12:09:43
ライティングを無効にするとDIFFUSEに頂点カラーが入って
有効にするとライティング計算済みの色がDIFFUSEに入るということでしょうか?
324デフォルトの名無しさん:2005/08/18(木) 12:20:58
ヘルプを読め。
325321:2005/08/18(木) 12:29:46
ってことはできるということなのでしょうか?
読んでも見つからないっす
COLORARG1にD3DTA_TEXTURE
COLORARG2にD3DTA_DIFUSE
を設定して
COLOROPにD3DTOP_MODULAT
を設定してるのですが
これだとD3DTA_DIFUSEはどちらかになりますよね?
他になにか設定必要なのですか


D3DA_TEMPって一般的には使って良いのでしょうか?
例えば、例えばフェードアウトとか半透明表示する場合のアルファレートなどに
後、レジスタの値をどこで設定するかわかりません、デフォルトは0.0.0としか書いてない
326デフォルトの名無しさん:2005/08/18(木) 13:07:32
俺からも言おう。ヘルプを読め。
TextureStageStateだけでなく、RenderStateのところも読め。

D3DA_TEMPはテクスチャステージの途中の段で値を一時的に
保存しておくためのもの。D3DTSS_RESULTARGで書き込む。
確認してないが、シェーダ使えるチップならみんな使えるんじゃない?
逆に言うと、シェーダが使えないチップではまず無理。
327デフォルトの名無しさん:2005/08/18(木) 13:26:31
全然無理じゃないが。
328デフォルトの名無しさん:2005/08/18(木) 13:28:15
はい
329デフォルトの名無しさん:2005/08/18(木) 14:41:42
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。

お前ら天麩羅嫁
330デフォルトの名無しさん:2005/08/18(木) 14:46:43
ここに限らず2ch全体が、ググれ、ヘルプ読めで停滞しているからな
331デフォルトの名無しさん:2005/08/18(木) 15:11:53
>>328
はいじゃないが。
332デフォルトの名無しさん:2005/08/18(木) 15:41:42
>>329
取り扱い説明書見れば書いてあることを
わざわざ文章書いて説明しろってのも変な話だ

取り説のこの文章の意味がわからん
なら話は違ってくるがな

つーかお前が教えてやれよ
333デフォルトの名無しさん:2005/08/18(木) 15:49:08
ねテンプレに従えないならレスするなよ
こなんのためのテンプレだ
大アホか

334デフォルトの名無しさん:2005/08/18(木) 15:56:07
質問があるのですが、
よくテクスチャサイズは2のべき乗にしなさいと言われますが、
これは縦と横のサイズも同じじゃないとだめでしょうか?
(例)256x256はOK, 256x128はNG
335デフォルトの名無しさん:2005/08/18(木) 16:19:32
256x128でもOK
336デフォルトの名無しさん:2005/08/18(木) 16:29:56
>>335
OKですか、ありがとうございました
337デフォルトの名無しさん:2005/08/18(木) 16:35:07
>>325
だから、ヘルプの「Render States」のところを読めって言ってるだろうがボケ
http://msdn.microsoft.com/library/en-us/directx9_c/directx/graphics/programmingguide/gettingstarted/direct3ddevices/states/renderstates.asp
338321:2005/08/18(木) 18:50:02
SetRenderStateの所読みました

D3DRS_COLORVERTEXって何ですか?
これをFALSEにしても頂点カラーが有効のままなのですが
これはなにか根本的に設定が間違ってたりするのでしょうか?
339337:2005/08/18(木) 18:52:18
('A`)ハァ…
340321:2005/08/18(木) 18:56:21
即レスであきれるような事書いて申し訳ないです
でもわからんのです
341デフォルトの名無しさん:2005/08/18(木) 18:56:39
バトルフィールド2のような細かい起伏の地形を作ろうと頑張っていますがどうにも上手くいきません。
現在碁盤の目のようにプリミティブを配置し、頂点のy座標に高さを持たせて起伏を表現しています。
細かくすると視野内(〜FogEnd)だけでも数千になり、DrawIndexedPrimitiveで一括描画してもかなり重いです。
荒くすると大雑把なマップになりますし思ったような地形を組むことができません。
xファイル1つでマップ1つを表示させるのは作るのも表示させるのも無謀ですよね。
クォータービューの2Dっぽいゲームなら碁盤の目のようにプリミティブ(頂点)を置いても問題ないですが、
3Dのゲームだとこのやり方は適さないのでしょうか?

地形の作成・描画方法について何か参考になるようなことをご存知の方がいればアドバイスをお願いします。
DirectXで作っていますがアルゴリズムの質問なので聞くところ間違えてたらすみません。
342デフォルトの名無しさん:2005/08/18(木) 19:07:08
>>340
だから、SetRenderStateじゃなくて>>337の「Render States」のページは読んだのか?
「Per-Vertex Color State」の説明でわからないなら俺にはお手上げだ。
343デフォルトの名無しさん:2005/08/18(木) 20:11:56
>>336
ビデオカードによる
344デフォルトの名無しさん:2005/08/18(木) 20:21:12
正方形じゃなきゃ駄目というビデオカードはないだろ
DirectXにそんなCaps項目ないし
345デフォルトの名無しさん:2005/08/18(木) 20:28:03
>>344
あるぞ
346デフォルトの名無しさん:2005/08/18(木) 20:35:36
>>344
はたぶん2のn乗にしろってことの意味を理解してないのだろう
347345:2005/08/18(木) 20:36:00
ちと調べてみた。D3DCAPSのMaxTextureAspectRatioだな。
348321:2005/08/18(木) 20:42:50
長々と申し訳ありません、
なんとか出来たような気がします
アンビエントライト、ディフューズライトの設定で
頂点カラーの色を飛ばしてしまっていました

これの計算式は、
ディフューズライトx頂点カラー+アンビエントライト
になるのでしょうか?
ディフューズライトが当たっていない部分は頂点カラーの色が無くなってしまうのですが
349345:2005/08/18(木) 20:44:08
>>341
そういうのはLODの考え方を採用するべし。
遠いものは荒いメッシュで、近くのものは細かく描画。
具体的なアルゴリズムに関しては長くなるので…
LODで調べれば何かヒットするでしょ。
350デフォルトの名無しさん:2005/08/18(木) 20:52:25
>>345>>347
指摘サンクス
dxinfoで調べてみたら、S3 ProSavageがMaxTextureAspectRatio=1だった
こんな環境も存在するのね・・・

>>346
もちろん理解してるよん
351デフォルトの名無しさん:2005/08/18(木) 20:54:26
>>348
頂点カラーの色を無条件にそのまま加算したければ、
D3DRS_EMISSIVEMATERIALSOURCEでEMISSIVEに
頂点カラーを使用する指定を行う。
アンビエントカラーの影響を考えたいなら
D3DRS_AMBIENTMATERIALSOURCEに頂点カラーを設定。

他の部分のマテリアルソースもちゃんと調整すること。
352351:2005/08/18(木) 21:04:34
×アンビエントカラー
〇アンビエント光
353341:2005/08/18(木) 21:19:47
>>349
ありがとうございます。早速調べてみたいと思います。
新しい単語が出るとなぜかワクワクしてしまう(ノ∀`)
354デフォルトの名無しさん:2005/08/19(金) 20:30:53
ttp://wisdom.sakura.ne.jp/system/directx/dxg4.html
ここのプログラムが上手くビルドできません。
エラーは出ないのですが、終了ボタンを押しても正式に止まりません。
開発環境はノートPCでBCC、clootieのライブラリにリンクしてます。
原因を教えてください。お願いします。
355デフォルトの名無しさん:2005/08/19(金) 20:58:32
>>354
終了ボタンってなんだよバカ
そもそもBCCを疑うぐらいならVCTK使え
356デフォルトの名無しさん:2005/08/19(金) 21:17:01
512x512などの大きいテクスチャを用意しておいて
読み込むときに256x256に縮小することってできますか?
357デフォルトの名無しさん:2005/08/19(金) 22:27:35
>>356
D3DXCreateTextureFromFileExでWidthとHeightを指定しる
358デフォルトの名無しさん:2005/08/19(金) 23:32:01
描画処理の負荷を計測したいのですが、
描画前にtimeGetTime()を実行し
Presentメソッドを呼び出した直後に再度timeGetTime()を実行すると
その差分が描画にかかった時間になるのでしょうか?
359デフォルトの名無しさん:2005/08/19(金) 23:38:49
ならない
360デフォルトの名無しさん:2005/08/19(金) 23:41:21
ではどうすれば良いでしょうか?
361デフォルトの名無しさん:2005/08/20(土) 00:02:13
もの凄いアホな質問で申し訳ないのですが、
描画負荷を大きくするとPCからノイズのような音が聞こえてきます
こいつはなんなのでしょうか?
もう1台のPCの方では特に変化はありません

ノイズが鳴る方のPC
アスロン64 3200+ Radeon9600 ファンレス
ノイズが鳴らないPC
P4 1.8G GeforceMX440 ファンレス

SpeedFanでファンの回転数を見ても変化していません(つД`)
362デフォルトの名無しさん:2005/08/20(土) 00:11:59
>>360
どうにもならない
363デフォルトの名無しさん:2005/08/20(土) 01:04:22
>>361
音響系の配線の引き回しに注意。ボードやましてチップが原因ならお手上げだけど、
大抵は筐体内の配線を見直すだけで改善する(かも知れない)。
364デフォルトの名無しさん:2005/08/20(土) 01:12:54
>>363
怪現象などではなくて、普通にありえる問題ということでしょうか?
スピーカーは繋いでません、サウンドはオンボードで近くのPCIスロットを使用しているとかではないです
CPUだけに負荷をかけても影響ないので、ビデオカードに負荷をかけると
干渉?してノイズが出るという感じでしょうか?
とりあえず壊れるような問題でなければこのまま使うことにします
ありがとうございました
365デフォルトの名無しさん:2005/08/20(土) 01:43:02
>361
それはマザボが死にかけてるよ。自作PC板参照。
366デフォルトの名無しさん:2005/08/20(土) 01:48:59
>>365
マジですか、買ってから1ヶ月・・・orz
自作板逝って来ます

ちなみにDOSパラのショップブランド・・・
ビデオカードは3年ぐらい前に買ったものですが
367デフォルトの名無しさん:2005/08/20(土) 02:21:04
何で俺と同じような人をココで見かけるんだ…

うちもノイズが入って仕方が無い。
Radeon9600
Athlon 1.2GHz

SW1000XG というカードからノイズが混入している模様。
気温が高いと特に乗りやすく、ウィンドウをスクロールしただけで出たりする。


とりあえずスレ違いsage
368デフォルトの名無しさん:2005/08/20(土) 03:09:36
うちもGPUの高負荷時にノイズが聞こえたことがあったけど、
そのときは電源が原因で、別の電源に交換したら鳴らなくなった。
スイッチング回路のコイルが物理的に振動していたらしい。
マザボのコイルが鳴るってのもあるみたいだね。
369デフォルトの名無しさん:2005/08/20(土) 10:19:39
CPUの動作ノイズをラジオに拾わせて音楽を奏でていた時代もあったらしい

パソコンどころかマイコンという言葉すらメジャーではなかった時代の話
370デフォルトの名無しさん:2005/08/20(土) 19:13:04
VCToolkit落としたんですが、DirectX開発環境にしたいのです。
どうすればいいでしょうか?
371デフォルトの名無しさん:2005/08/20(土) 19:15:12
そういう質問をする人間には向かない開発環境なので、
知識がなければお金を出して開発環境を買ってください。
372デフォルトの名無しさん:2005/08/20(土) 19:22:31
>>371
はい。すみましぇん。
373デフォルトの名無しさん:2005/08/20(土) 21:26:04
コンデンサも振動するぞ。
よくある話なのでそれほど気にしなくてもいい。
374デフォルトの名無しさん:2005/08/20(土) 21:57:19
自作からの誤爆の上、すでにスレが流れているところに今頃レスとは…。
375デフォルトの名無しさん:2005/08/20(土) 22:14:01
>>374
スレを汚してすみません
Directxで負荷が大きい描画やPresent命令を短期間で何度も呼び出したりしてると
なんか変な音が聞こえてきて、気になったので書き込みしました
普段使ってるときはそんな音全然聞こえなかったので・・・
376デフォルトの名無しさん:2005/08/21(日) 00:24:34
レンダリングステート設定のD3DSHADE_GOURAUD指定の
グローシェーディングは、RadeonやGeForce等のビデオボードが
無いと補間されないのでしょうか?
377デフォルトの名無しさん:2005/08/21(日) 17:46:06
すみません。
BCCでDirectXを動かそうとしているのですが、
ttp://www.kohgakusha.co.jp/books/detail/4-7775-1112-X
この書籍の2Dプログラムのサンプルコードをビルドすると
Error: 外部シンボル 'DXTraceA' が未解決(D:\MYPROG\JUNK\TEST4\DEBUG\DXGSAMPLE04.OBJ が参照)
Error: 外部シンボル 'Direct3DCreate9' が未解決(D:\MYPROG\JUNK\TEST4\DEBUG\DXGSAMPLE04.OBJ が参照)
とエラーコードが出てしまいます。ライブラリはclootieのです。
原因を教えてください。お願いします。
378デフォルトの名無しさん:2005/08/21(日) 22:20:46
>>377
bcc32.cfg、ilink32.cfg のDirectXライブラリのパスを

-L○○○○;×××× ←尻にではなく、

  ↓頭に追加
-L××××;○○○○
379デフォルトの名無しさん:2005/08/22(月) 12:19:07
>>378
ありがとうございます。
しかし、上手くいきませんでしたが、
リンクするライブラリを本書のp26の通りに変えて
リリースと上手くいきました。
ですが、コンパイルが上手くいっても
白紙のウィンドウで全く動きません。
エラーは全くないのですが、どういう原因が考えられる
でしょうか?
380デフォルトの名無しさん:2005/08/22(月) 13:59:05
その本は持ってないから分からんが、
2D ならテクスチャが読み込めてないとか?
381デフォルトの名無しさん:2005/08/22(月) 14:27:04
上の人と同じくBCCでDirectXを使いたいのですが
下のエラーが出てコンパイルできません。
コンパイルできるようにするにはどうすればいいんでしょうか?

エラー E2268 C:\Program Files\Microsoft DirectX 9.0 SDK (August 2005)\Include\d3dx9math.inl
1578: 未定義の関数 'sqrtf' を呼び出した(関数 D3DXVec2Length(const D3DXVECTOR2 *) )
382デフォルトの名無しさん:2005/08/22(月) 14:47:14
DX9c(2004December)にしたら、文字列表示関数を使ったら、
悉くコンパイラーにはじかれるようになったorz
エラーが出るのは仕様変更されたみたいだけど、意味が分からないorz
(省略)
//フォントの設定
LOGFONTLogFont ;
LogFont.lfHeight = 16 ;//高さ( 0 で標準)
LogFont.lfWidth = 0 ;//横幅( 0 で自動 )
LogFont.lfWeight = 1000 ;//太さ( 0 〜 1000 の範囲 : 100 刻み )
LogFont.lfItalic = FALSE ;//斜体
LogFont.lfUnderline = FALSE ;//下線
LogFont.lfStrikeOut = FALSE ;//打ち消し線
LogFont.lfCharSet = SHIFTJIS_CHARSET ;//文字コード
lstrcpy(LogFont.lfFaceName, FONT_NAME1);//フォント設定( "" で標準 )
D3DXCreateFontIndirect(lpD3DDevice, &LogFont, &lpFont);//フォントを初期化
lpFont->OnResetDevice();
(省略)
//文字描画
lpFont->Begin();
RECT rc = {0, 100, 200, 200};
lpFont->DrawTextA(NULL ,"文字表示", -1, &rc, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB( 255, 255, 255, 255));
lpFont->End();
(省略)
383デフォルトの名無しさん:2005/08/22(月) 15:09:43
>>381
#define sqrtf(f) (float)sqrt(f)
384デフォルトの名無しさん:2005/08/22(月) 15:48:57
>>382
2004Octの日本語ヘルプを落とすとよろし。
385デフォルトの名無しさん:2005/08/22(月) 17:27:14
ポイントスプライトなんですが
D3DRS_POINTSPRITEENABLEのヘルプの説明がよくわかりません。
これがTRUEになっている時は
ビルボード表示の為に、4スミのテクスチャ座標が生成されるというのはわかるんですが
FALSEの場合、どのような動作をするのかわかりません。
ヘルプでは、
>FALSE の場合、頂点テクスチャ座標はポイント全体で使われます。
>D3DRS_POINTSPRITEENABLE が FALSE に設定されている場合は、頂点テクスチャ座標は頂点それぞれで複製されます。
とあります。どういう意味でしょうか?
386デフォルトの名無しさん:2005/08/22(月) 19:53:24
本の付録についてるDirectX SDKについて質問ですが、
これがあればspy++使えますか?
387デフォルトの名無しさん:2005/08/22(月) 20:07:28
Spy++はVisualStudioに付いてくるツールだが。
388379:2005/08/22(月) 20:08:25
>>380
ソースうpしていいですか?
389デフォルトの名無しさん:2005/08/22(月) 20:10:32
アニメーション付きのxファイルを再生するプログラムのサンプル、
もしくはサンプルを公開しているサイトを教えてください
もの凄いくアホで申し訳ないです
とっかかりがまったくわかりません
390デフォルトの名無しさん:2005/08/22(月) 20:12:14
391デフォルトの名無しさん:2005/08/22(月) 23:48:26
ウインドウモードでカーソルのちらつきを抑えるのってどうやるんですか?
一応SetCursorPropertiesでのソフトウェアエミュレーションは試してみたんですが何も効果なし…
ご存知の方いらしたら教えてください。
392391:2005/08/22(月) 23:50:17
追記です。
描画したクライアント画面そのものはまったくちらつかないんですがマウスカーソルだけがちらつく状態です。
393デフォルトの名無しさん:2005/08/23(火) 00:41:42
マウスカーソルは表示させないでおき、
独自にマウスカーソルを描画するとかどう?

いや、テキトーなこと言ってるけど。
394デフォルトの名無しさん:2005/08/23(火) 00:48:52
>>385
「頂点テクスチャ座標は」を「(元の)頂点のテクスチャ座標が」に変えれば少しは意味が通るかと。
「頂点それぞれ」ってのはスプライト生成後の四隅の各頂点のことね。
マイクロソフトの手抜き翻訳は何とかならないもんかねぇ・・・。
395デフォルトの名無しさん:2005/08/23(火) 09:31:18
D3DXMatrixShadow() を使って平面にキャラを投影してシャドウを描こうとしているのですが、
この関数で得られた行列をワールド行列としてモデルを描画すると
Zテストが正しく行われていないかのような描画結果になってしまいます。

まずキャラを描画し、次に地面の近くの平面に投影しているのですが、
ぺったんこになったキャラが、最初に描いたキャラで隠面消去されずに描画されてしまいます。
この問題はどういった原因が考えられますでしょうか?
396デフォルトの名無しさん:2005/08/23(火) 09:41:48
プログラム通りの正しい結果が得られているので、何も問題はない。
397デフォルトの名無しさん:2005/08/23(火) 09:51:55
質問です。
pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME )
でワイヤーフレームの描画を試みていますが、ポイントスプライトがワイヤーフレームではなく、
元のテクスチャが表示されてしまいます。何か他にステートを変更する必要があるのでしょうか?

開発環境:
SDK:9.0(June)
グラフィックボード:RADEON9000Pro

398395:2005/08/23(火) 10:09:06
>>396
シャドウのポリゴンが隠面消去されずに描画されてしまうという状態が起こっているのですが、
これは問題ではないということでしょうか。
なにかレンダーステートで足らない設定があるのでしょうか?
399379:2005/08/23(火) 13:10:46
>>380
49uperの73429です。
画像が特殊なのかddxという形式でよく分かりません。
エラーの原因を教えてください。
400385:2005/08/23(火) 16:10:44
>>394
今わかったんですが
D3DRS_POINTSPRITEENABLEがFALSEの時って
ポイントスプライトを使わない普通のポリゴン表示モードなんですよね。
ヘルプの意味はわかりませんでしたが、単にポイントスプライトのフラグとだけ
覚えておけばいいみたいですね。
お答えありがとうございました。
401デフォルトの名無しさん:2005/08/23(火) 16:30:20
>>395
ワールド行列には、投影行列をそのままじゃなくて、
(キャラクタ自体のワールド行列)×(投影行列)を設定しているかしら。
402395:2005/08/23(火) 17:11:19
>>401
はい、行列は (キャラクタ自体の回転行列)×(平行移動行列)×(投影行列)×(カメラ行列)
という順番で設定しています。

先程気が付いたのですが、光源の位置を、
light(0.0f, 1000.0f, 0.0f, 1.0f);
というように、Y軸上に置いた場合だけは問題が起こらないみたいです。
よろしくお願いします(´・ω・)
403デフォルトの名無しさん:2005/08/23(火) 18:07:19
ピクセルフォーマットが24bitのbmpを16bitのサーフェスに読み込もうとした場合、
bmpのピクセルフォーマットはは自動で16bitに変換されるのでしょうか。
それとも、自分で処理したいと駄目なんでしょうか。
404デフォルトの名無しさん:2005/08/23(火) 18:49:32
最近、2次元でしか抜けなくなってきたのですがDirectXの力で何とかならないでしょうか
405デフォルトの名無しさん:2005/08/23(火) 19:07:56
>>404
おまいに必要なのはDirectseXだ。
406デフォルトの名無しさん:2005/08/23(火) 19:09:56
>>393
うーん、それだとタスクバーとクライアント領域の中間でカーソルが表示されない空白地帯ができないですか?
407デフォルトの名無しさん:2005/08/23(火) 20:17:49
>>402
とりあえず、おかしくなるときのキャラクタ座標、ライト、平面の
数値を例で挙げてみて。
あと、まさかWバッファは使ってないわね。
408395:2005/08/23(火) 21:34:27
>>407
レスありがとうございます。
キャラクタは、XZ平面上に立っている人型モデルです。
高さはY座標で20.0f程度です。XZ平面上のどの場所にいても起こります。

ライトは、 
D3DXVECTOR4 light(100.0f, 100.0f, 100.0f, 1.0f);
D3DXVec4Normalize(&light, &light);
という感じに設定しました。正規化をしないとシャドウが消えてしまうみたいです。

平面は、
D3DXVECTOR3 point = D3DXVECTOR3( 0.0f, 0.01f, 0.0f ); //平面上の一点
D3DXVECTOR3 normal = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); //法線
という感じです。

Wバッファは使っていません。Zバッファは16ビットです。
カメラのZNearとZFarを色々と変えてみたのですが、変わりありませんでした。
409デフォルトの名無しさん:2005/08/23(火) 23:20:48
>>408
ライト座標の正規化は不要(しても意味がない)のはずだけど、
それで結果が変わるのはおかしいわね。
リファレンスラスタライザで試してみて。
410395:2005/08/24(水) 00:32:45
>>409
ライトは正規化しても意味がないのですか、怪しいですね。。

リファレンスラスタライザで試してみましたが、結果は同じでした。
うーん。。
411デフォルトの名無しさん:2005/08/24(水) 01:44:39
D3DXMatrixShadowに渡すpLightってのは
位置座標だろ、正規化しちゃ駄目だろ。
隠面消去されないってのもおかしい。
Zバッファリングが有効になっていれば必ずされます。(当然その他もろもろの設定が正しいとして)
どうなるべきのものがどう違っているのか、もっと詳しく述べるべき。
俺はD3DXMatrixShadowを使ったことないから正確じゃないけど
これはZバイアスがいるんじゃねーの?
412デフォルトの名無しさん:2005/08/24(水) 02:07:04
>>411
pLightは同次座標だから定数倍しても位置は不変なんだけど・・・
413395:2005/08/24(水) 02:50:08
>>411
Zバッファは有効になってますし、シャドウ以外のモデルは正しく隠面消去が行われてますです。
Zバイアスというのは知らなかったので、先程使ってみたのですが、
Value値を16にしても何も変わりませんでした(つД`)

http://gamdev.org/up/img/3062.jpg
これが症状です。シャドウは床スレスレに存在しているのですが、なぜか兵士の上側に
描画されてしまっています。
414デフォルトの名無しさん:2005/08/24(水) 03:28:08
>>413
もし固定機能の頂点ブレンドを使ってるのなら、これが参考になるかも。
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=42&vew=318
415395:2005/08/24(水) 13:07:10
どうも、解決しました!
>>414のリンク先が参考になりました。

これまでシェーダーに以下のように記述してました。
float3 position;
position = mul(float4(vertex.pos, 1), (float4x3)matWorld);
position = mul(float4(position, 1), (float4x3)matView);
ret.pos = mul(float4(position, 1), matProjection);

これを以下のように修正しました。
float4 position;
position = mul(float4(vertex.pos, 1), matWorld);
position = mul(position, matView);
ret.pos = mul(position, matProjection);

これまでワールドビュー変換では、W成分を使わなかったのですが
平面投影行列を使うとW成分を使うことになるので、射影変換の結果がおかしくなっていた
ということでしょうか。どうも皆さんありがとうございました!
416デフォルトの名無しさん:2005/08/24(水) 13:29:36
いえいえ、僕は何もしてませんので
417379:2005/08/24(水) 15:39:32
BCCでビルドしているのですが、
原因が分かりません。ソース等をうpしたので
教えてください。
ttp://49uper.com:8080/html/img-s/73761.zip
pはメル欄です。
418デフォルトの名無しさん:2005/08/24(水) 15:45:36
>>417
>>399>>417のreleaseのEXEを実行すると、どちらも、
青い背景に、「DirectX graphics サンプル」と言う文字がフェードイン、フェードアウトを繰り返してるけど・・
419デフォルトの名無しさん:2005/08/24(水) 16:28:19
>>415
D3DXMatrixShadowの行列は一般に4×4のすべての成分が非ゼロになるからね。
この機会に、同次座標や射影幾何学について理解を深めてみると面白いと思うよ。
とりあえずは、pLightやpPlaneの4次元ベクトルを適当に定数倍しても影が動かないことや、
pLightのw成分だけを0に近づけていくと光源が遠ざかっていくことなどを観察してみましょう。
420379:2005/08/24(水) 16:40:23
>>418
そうです。それを自分でコンパイルするとエラーは出ないのですが、
白地のウィンドウで止まってしまうんです。なぜでしょうか?
421395:2005/08/24(水) 17:21:49
>>419
同時座標などは考慮せずにやってきましたので、、勉強してみようと思います。
射影幾何学ですか、面白そうですね。
422デフォルトの名無しさん:2005/08/24(水) 23:56:15
>>420
おまいのPCのグラフィックカードが酷くオンボロ
423デフォルトの名無しさん:2005/08/25(木) 00:23:33
nVidiaのサンプルソースコンパイルしようとすると、
incorrect version of Direct3D
というエラーが出ます。

d:\bld_sdk7.pl\devtools\sdk\9.5\sdk\libs\src\dxut\dxut.cpp(494): D3DXCheckVersion hr=Unknown (0x80040909)

という出力がでており、うまくバージョンが取得できていないようですがなにが問題なんでしょうか?

環境は
VS.NET 2003 C++.
DirectX 2005 Aug.
VideoCard GF6600GT
です。
他の自作プログラムやらなんやらは普通に動きます。
424デフォルトの名無しさん:2005/08/25(木) 10:10:29
>>379
ヒント:戻り値
ヒント:DirectX コントロールパネル
425379:2005/08/25(木) 13:06:00
>>422>>424 アドバイスありがとうございます。今から模索してみます。
それから情報の小出しスマソ。
DirectXランタイムというのを使うとエラーらしきものが出ました。
Direct3D9: (ERROR) :HAL Disabled: Device doesn't support texturing
上手くいかない原因に関係あるでしょうか?
426デフォルトの名無しさん:2005/08/25(木) 13:08:26
>>425
そのままでは?
427デフォルトの名無しさん:2005/08/25(木) 14:38:55
428デフォルトの名無しさん:2005/08/25(木) 15:47:48
そういえばMilleniumでゲームやると、
テクスチャが張られなくて全部真っ白(影はある)だった事があったなぁ。

いまどきテクスチャに対応してないカードってなんだろ・・・
429379:2005/08/25(木) 16:44:39
>>426
>>427
ありがとうございます。
グラフィックボードは
ATI RAGE Mobility P/M PCI (A21/2)
というらしいんですが、
動作はできても、作成する事ができない
ことってあるんですか?
430デフォルトの名無しさん:2005/08/25(木) 17:54:56
ATI RAGE って DirectX 6 くらいの世代? ちょっと古いね。
本にはコンパイルずみのバイナリーは付いてないの?
431379:2005/08/25(木) 19:56:57
>>430
すみません。バイナリーの意味が分からないので
もう吊ってきます。
432デフォルトの名無しさん:2005/08/25(木) 20:49:31
つまり、すでにできあがって exe になっているやつ。
433デフォルトの名無しさん:2005/08/25(木) 20:55:12
てかGF2MXですらHALでの初期化に失敗するんだからそんな
ノーパソのオンボのグラボじゃ無理でしょ・・・
434デフォルトの名無しさん:2005/08/26(金) 07:00:28
DirectX 9.0c SDK August 2005使ってます。
なぜかピクセルシェーダがセットされません。
シェーダはコンパイルもセットも成功しているようなのですが、
まったく反映されないのです。
どうもデフォルトのシェーダみたいなものがセットされているみたいで、
SetPixelShaderをすっとばしても描画はされます。(意図したものではない)

問題がどこにあるか、お分かりになる方はいらっしゃいますか?
435434:2005/08/26(金) 07:04:33
書き忘れました。
使用ハードはパナのR3Eで、チップセットが855GME(GPUは82855?)です。
436デフォルトの名無しさん:2005/08/26(金) 08:03:13
>>434-435
ピクセルシェーダを使いたい場合には、デバイス作成時に必ず
IDirect3DDevice9::GetDeviceCaps で PixelShaderVersion をチェックしなさい。
437434:2005/08/26(金) 08:57:30
>>436
どうもです。
DeviceCapsはDirectX Caps Viewerで確認することはできませんか?
今はps_2_0でコンパイルしていますが、
非対応の場合はコンパイルエラーになりませんか?
438デフォルトの名無しさん:2005/08/26(金) 09:05:07
>>437
で、Caps Viewerで確認したらどうだったんだ?
なぜ非対応だとコンパイル時にエラーが出ると思うんだ?
439デフォルトの名無しさん:2005/08/26(金) 09:35:21
>>437
>非対応の場合はコンパイルエラーになりませんか?
そのコンパイラくれ。
440デフォルトの名無しさん:2005/08/26(金) 10:04:45
directx8で質問があります
方向ライトを当てたときの光が当たったときの明るさを制御したいです
ちょっと説明しにくいのですが、

光に対し面の傾きが
角度0 = 100%
角度45 = 50%
角度90 = 0%
のときは、こんな感じだと思うのですが、これを
角度0 = 100%
角度45 = 25%
角度90 = 0%
のように2乗にするとかで、光の当たりを極端にすることはできるのでしょうか?
441デフォルトの名無しさん:2005/08/26(金) 10:06:46
>>438
Caps Viewer上のどこを見てよいのか分かりません。
PS20Capsという項目があるので対応しているのではないかと思いましたが、
そう判断していいのかが分かりません。
ps_2_0非対応のデバイス使用時にD3DXCompileShaderでエラーになるのではないかと。

>>439
そちらの環境ではD3DXCompileShaderは使えませんか?
442デフォルトの名無しさん:2005/08/26(金) 11:12:53
>>441
[D3D Device Type]->[HAL]->[Caps]のPixelShaderVersion。
あと、コンパイルの段階ではビデオカードが非対応でもエラーは出なくて、
その後でD3DXCreatePixelShaderを呼んだときにエラーになるはずだわ。
D3DXAssembleShader じゃなくて D3DXCompileShader を使ってるみたいだけど、
アセンブラじゃなくHLSLなのかしら、それならエフェクトの方が
楽じゃないかしら。
443434:2005/08/26(金) 11:32:21
前回名前入れ忘れたorz

>>442
PixelShaderVersion確認できました。ありがとうございますです。
CreatePixelShaderのエラーコードを華麗にスルーしてましたorz
どうもお騒がせしました。

なお、PixelShaderVersionが2.0のPCでは問題なく表示できました。
CF-R3Eはこれが0.0・・・、って一切対応していないのか。

>アセンブラじゃなくHLSLなのかしら、それならエフェクトの方が
>楽じゃないかしら。
エフェクトの効果をよく理解していないのではずしているかもしれませんが、
テクスチャの重ね合わせ処理にピクセルシェーダを使ってます。

重ね重ね、どうもありがとうございました。
444デフォルトの名無しさん:2005/08/27(土) 03:03:31
質問です。
バンプマップのときのtangentとbinormalって、頂点ごとに1つなのでしょうか?

三角形ABCと三角形CDEと三角形CFGとあったとき、
頂点Cのtangentとbinormalは1つと考えてもいいのでしょうか?
445デフォルトの名無しさん:2005/08/27(土) 03:06:48
>>444
法線と同じように考えればいい
446デフォルトの名無しさん:2005/08/27(土) 03:12:07
>>445
レスありがとうございます。
足して、正規化しちゃっていいということでしょうか?
447デフォルトの名無しさん:2005/08/27(土) 04:20:51
これからDirectXを始めようと思うのですが、手元にDirectX 5の本があります。
最近API仕様がけっこう変わってると聞くのですが、DirectX 5で勉強しといても問題ありませんか?
最近の仕様のほうが分かりやすいインターフェースだとすればそちらを勉強したほうがいいのかな、とも思います。
アドバイスお願いしますです。必要なら新しい本を買おうと思ってます。
448447:2005/08/27(土) 04:22:13
書き忘れたのですが、基本的に使う機能は2Dのみで、新しい機能を使うつもりはないです。
449デフォルトの名無しさん:2005/08/27(土) 05:04:16
せめてDirectX7にしなさい
450デフォルトの名無しさん:2005/08/27(土) 09:02:10
そして8以降を使おうとするとあまりの変わりっぷりに愕然とする罠
451デフォルトの名無しさん:2005/08/27(土) 11:51:52
>>447
基本的に2Dっつってもポリゴンで2Dっぽく描画するか、
ほんとに2D描画なのかってところでわかれるんだけど
DirectX8,9ぐらいになるとDirectDrawが削除されてるから、
ポリゴンで2Dっぽく描画するしかなくなってる。

もう、プログラマとしての発展はのぞまねーよ。ただ、2Dゲーム(ショボイ)をつくれりゃいいんだよ。
っていうなら、多分、DirectDrawでほんとに2D描画したほうが手っ取り速い。

でも、プログラマとしてもスキルアップしていきたいな。もし、できるなら将来3Dも触ってみたい。
っていうなら、DirectX9推奨。
452451:2005/08/27(土) 11:56:58
ただ、ホントにショボイ機能しかないから気をつけて。
AVGのキャラのまわりの淵を市販のゲームみたいに綺麗にしたいとかDirectDrawでやろうとすると
yaneSDKとかに頼ったりした方がいいかも。
もう、こういう小細工とかやろうとするとすげー知識いるからそのつもりで。
誰かのライブラリにたよることでなんとかなるかも?

じゃあDirectX8,9ではその辺楽になってるのかというと、そうでもなくてだな。
今度はアルファ云々の3Dまわりの知識が必用になる。
453デフォルトの名無しさん:2005/08/27(土) 12:42:03
2Dのライブラリだったら、DXLIBがいいと思うよ。
454デフォルトの名無しさん:2005/08/27(土) 14:33:41
>>449-453
ありがとうございます。

ドット絵の貼り合わせでゲームを作るつもりなので
DirectDrawで十分かな、と思いましたが、新しいバージョンだと使えないんですね…
ビットマップ描画するにも、テクスチャにして、ポリゴンの表面に貼り付ける、
って形になるのでしょうか。(基本的な概念もよく分かってないので変な言葉使ってたらごめんなさい)
3D機能は後々使っていきたいので、DirectX9にチャレンジしようと思います。
いろいろ新しいこと勉強する覚悟で。(3D周りの理論?とか)

DXLIBも検討してみます。
ありがとうございました。
455デフォルトの名無しさん:2005/08/27(土) 16:59:42
D3DXSPRITEは無かったことにされてるんだなw
456デフォルトの名無しさん:2005/08/27(土) 18:24:36
自分は>>451氏の言うショボイゲームでも作りたいのですが、
どうすればいいですか?
前バージョンの開発キットのようなものは残ってないですか?
457デフォルトの名無しさん:2005/08/27(土) 19:06:18
ようなものってアンタ…
458デフォルトの名無しさん:2005/08/27(土) 19:11:20
>>457はバールのようなもので闇に葬られました
459デフォルトの名無しさん:2005/08/27(土) 19:29:41
Cマガジンのバックナンバーを注文すれば手に入ります
http://www.cmagazine.jp/contents/index.html
460デフォルトの名無しさん:2005/08/27(土) 20:42:01
>>459
dクス
461460:2005/08/27(土) 21:07:46
っていくら過去の記事を溯っても、それらしい物が見当たらないのですが…
462デフォルトの名無しさん:2005/08/27(土) 22:20:08
よくわからんがDirectXが特集されてる号のCD-ROMに入ってんじゃないの?
463デフォルトの名無しさん:2005/08/27(土) 22:46:07
>>461
2000年3月号
464デフォルトの名無しさん:2005/08/27(土) 22:59:11
>>456
#define DIRECTDRAW_VERSION 0x0500
#include <ddraw.h>
465デフォルトの名無しさん:2005/08/27(土) 23:18:41
>>456
これからだったら、こっちのほうが応用が利いていいかも
http://www.microsoft.com/japan/msdn/directx/japan/dx9/mxd10.asp
466デフォルトの名無しさん:2005/08/28(日) 00:00:57
上のほうで無かったことにされてるD3DXSpriteを使ってるんだけど、
それで描画したドット絵を拡大してみると
ふちがアンチエイリアスぽくなってる。
バイリニアフィルタ?のせいらしいんだけど、
これをかからなくする方法を教えてください。
467460:2005/08/28(日) 00:27:04
>>462-465
皆さんありがとうございます。
>>464氏のこれってまさか
最新のバージョンのDirectXでもDirectDrawが使えるってことですか?
すみません。勘違いだったら…
開発キットとかぬかして、お手間取らせて
>>463氏ごめんなさい皆さんごめんなさ(ry吊ってきます。
468デフォルトの名無しさん:2005/08/28(日) 00:47:51
>>466
別に無かったことになんてしてませんよ。
3Dで描画すると3Dの知識がいるっていってるでしょう。
D3DXSpriteだけ例外のわけないでしょうよ。
とりあえず、ここにバイリニアフィルタのON/OFFを制御できる関数があるので調べてくださいな。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/setrenderstate.asp
ところでなんでOFFにしたいんでしょうか?
バイリニアフィルタなら綺麗だからかかっててもいいじゃないですか?
もしかしてフィルタ云々と別の理由でOFFにしようとしてません?
469デフォルトの名無しさん:2005/08/28(日) 00:53:17
>>468
私は466ではありませんが、フィルタがかかっているのが常に嬉しいとは限りませんよ。
ドット絵とかだったら、そのまま拡大したいときもあると思います。
私は別の理由でしばしばMAGFILTER切ったりしますよ。

って、あれ?MAGFILTERならSetSamplerStateだよな。
466氏の要望はどっちだべ?
470デフォルトの名無しさん:2005/08/28(日) 01:19:55
>>ALL
すみません。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/setsamplerstate.asp
SetRenderStateからヘルプをググってSetSamplerStateのページ開いてアドレスコピーしたんだけど
IEのアドレスバーに入ってるアドレス変わって無かったw

>>469
拡大するならなおさら、かかってた方が綺麗な気がするけど。
具体的にどういう場合なの?
471デフォルトの名無しさん:2005/08/28(日) 01:29:05
フィルタが必要かどうかは、好みや、実現したい表示によるわな。
フィルタをかけるのが綺麗とは限らない。
472466:2005/08/28(日) 01:34:22
私はドット絵の細い線がにじんだりするのがイヤです。
拡大縮小しないでそのまま描こうとしてもにじむのを何とかしたい。

ds.d3ddev->SetSamplerState( i, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
ds.d3ddev->SetSamplerState( i, D3DSAMP_MINFILTER, D3DTEXF_POINT );
ds.d3ddev->SetSamplerState( i, D3DSAMP_MIPFILTER, D3DTEXF_POINT );

とりあえずこれやってみたけど効果なかったorz
どうするんでしょう?
473デフォルトの名無しさん:2005/08/28(日) 01:37:51
みんな人が悪いな。縁の滲みが気になるんだから
clampの設定がマズいんでしょ。

>>472
D3DSAMP_ADDRESSU
D3DSAMP_ADDRESSV

この設定だと思われ。
474デフォルトの名無しさん:2005/08/28(日) 01:55:17
>ところでなんでOFFにしたいんでしょうか?
2chではこういう返しをする奴多いけど
なんでだろ?
475デフォルトの名無しさん:2005/08/28(日) 01:57:57
2chだからってわけじゃないだろ
476デフォルトの名無しさん:2005/08/28(日) 02:03:30
>>473
俺も始めそれかと思ったんだけど、
細い線がどうとかいってるから違うと思われ。
477デフォルトの名無しさん:2005/08/28(日) 02:04:16
理由を聞くのは要求仕様策定の基本だろ?
478デフォルトの名無しさん:2005/08/28(日) 02:12:41
>>474
もしかしたら、フィルタを消したいわけじゃなくて、
>>473の問題で悩んでるんじゃなかろうか?と考えた。

なんつーかね。
質問する側が
「作ってるもんの現状がどんな状態で、こういう風にしたい。」
ってのがなくて、ただ、
「アンチエイリアスっぽくなってる、バイリニアフィルタじゃなかろうか?」
っていってるから、
「それってバイリニアフィルタが問題じゃねーんじゃねーの?
そもそもなんでフィルタ消したいの?」
って疑問が回答者から消えない。
だから、
「どうしてそれがやりたくて、結果どうなってほしいのか?」
ってのがこっちから聞かなきゃならない。

で、結局、バイリニアフィルタをOFFにしても問題は解決していない(かもしれない)わけだ。

とりあえず、>>472はそのコードでバイリニアフィルタのON・OFFが効いてるのかどうか
もっとわかりやすい画像で試してくれって感じだな。
479デフォルトの名無しさん:2005/08/28(日) 02:27:28
>>473で解決するなら、質問者の言う"ふち"というのは、
テクスチャそのものの"ふち"ということになるけど、
そうなのかな?>>466どの

>>470
>拡大するならなおさら、かかってた方が綺麗な気がするけど。
>具体的にどういう場合なの?
質問者のケースはドット絵、例えば32x32のアイコンを
拡大して見せたいような場合はフィルタ切りますな。
あとは、ビデオのインタレースをそのまま表示したい場合とか。

>>472
サンプラステ−ジインデックス合ってる?
480デフォルトの名無しさん:2005/08/28(日) 02:34:13
>>472
> 拡大縮小しないでそのまま描こうとしてもにじむのを何とかしたい。

テクスチャの幅が 2の累乗じゃないのでは?
481デフォルトの名無しさん:2005/08/28(日) 02:48:19
最近は該当部分のコードやスクリーンショット、開発環境も教えないで質問者を試すような事をするのが流行りなのか?
482デフォルトの名無しさん:2005/08/28(日) 02:53:26
>>481
自分で自分を試すの
483464:2005/08/28(日) 02:55:32
>>467
そゆこと。これを使えば最新のSDKだけで過去の資産も生かせる。
ほかにもDIRECT3D_VERSIONとかいろいろあるよ。

ちなみに、DX8以降ではDirectDrawの更新が凍結されたので、
DIRECTDRAW_VERSIONはデフォルトで0x0700になる。
だから、DX7のDirectDrawは最新のSDKでそのまま使えるはず。
484466:2005/08/28(日) 03:10:43
>>478
その通りです。

現状は、絵をそのままの大きさで描画するときに、
細い線や絵がアンチエイリアスがかかったように滲むので
それを滲まないようにしたいです。
バイリニアと書いたのは一番症状が近いかなと思ったもので、
確信があるわけではないです。

>>479 サンプラステージ
たぶんあってます。
デフォルトは0ですよね?一応不安になって0から7までforで回してみたんでiになってますけど。

>>480 テクスチャの幅
64*512 スプライトで表示するときは64*64
一応512*512にしてみたけど変化ないです。

今のところ、SetRenderStateもSetSamplerStateも、いじってみても変化がない。
なんだか根本から間違ってるような気がしてきた。
485デフォルトの名無しさん:2005/08/28(日) 03:26:15
ゲ製作にDirectX7使ったゲームのソース転がってるじゃん
486デフォルトの名無しさん:2005/08/28(日) 08:00:12
位置座標を-0.5ピクセルずらすとか。
487デフォルトの名無しさん:2005/08/28(日) 08:48:50
>>484
ステートの変更はBegin-End間でやってるか?
ID3DXSpriteはブラックボックスだから何ともいえないが。
488466:2005/08/28(日) 12:23:38
解決しました。

根本的な原因はバックバッファとウィンドウのサイズが微妙に違うということでした。
そりゃぁにじむに決まってる。
で、それを直した後もにじんでたのは>>487でした。
Begin-End間でもやってみたことはあったんですが、ウィンドウのサイズを直す前だったので、
場所は関係ないのかと思って別の場所においたのが原因みたいです。

>>486 -0.5ピクセルずらす
念のため-0.5ピクセルずらしてますが影響はないようです。

Begin End間で
ds.d3ddev->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
を行えば同サイズでの描画の際に、にじみはなくなるようです。

数々の助言ありがとうございました。
489473:2005/08/28(日) 16:14:06
漏れが読み違えてたか。

まぁ、解決してヨカタね。
490デフォルトの名無しさん:2005/08/29(月) 01:12:34
Directx8での描画の最適化で質問があります、

ヘルプに載ってるパースペクティブ補正は必要なときだけとありますが、
これはどの命令で変更するのでしょうか?それっぽいのが見当たりません
またSetRenderStateのD3DRS_NORMALIZENOMARLSはどういう意味があるのでしょうか?
パフォーマンスに影響無いように思えるのですが
491デフォルトの名無しさん:2005/08/29(月) 07:37:36
>>490
DX7以前はD3DRENDERSTATE_TEXTUREPERSPECTIVEで手動でオンオフできましたが、8から消えました。
デバイスのD3DPTEXTURECAPS_PERSPECTIVEが有効になっている限り、自動的に補正がかかります。

現在のグラフィックスハードウェアはパースペクティブ補正を前提に設計されていますので、
たとえ無効にできたとしても、速度の向上はほとんど見込めないと思います。
492デフォルトの名無しさん:2005/08/29(月) 07:44:33
http://www.microsoft.com/downloads/details.aspx?FamilyID=3904b19a-02b9-447b-ab58-c12e2456e9ba&DisplayLang=en
これみるとwin2kは対応してないみたいなんだけど
directx使って開発するにはxpにしないとだめなんですか?
493デフォルトの名無しさん:2005/08/29(月) 10:30:44
>>493
最新じゃないSDK使えばよい。
494デフォルトの名無しさん:2005/08/29(月) 16:16:43
>>492
win2k対応は(December 2004)まで
日本語ヘルプが出てるのは(October 2004)まで
495492:2005/08/29(月) 18:54:07
なるほど。
解決しました。

dxguid.lib(dxguid.obj) : fatal error LNK1103
というリンクエラーが出たのでファイルが壊れてるのかと
入れ直そうといろいろ調べていた所だったのです。
上のエラーが無くなったのは October 2004 のでした。
ググってみると VisualStudio6 との問題らしいです。

ありがとうございました。
496デフォルトの名無しさん:2005/08/30(火) 22:56:48
DirectDrawの質問で、フルスクリーンではなく
通常のウィンドウを初期設定したいのですがどうすればいいですか?
497デフォルトの名無しさん:2005/08/30(火) 23:38:39
( ゚Д゚)y─┛~~ さて、この馬鹿をどうしてくれようか
498デフォルトの名無しさん:2005/08/30(火) 23:50:54
  ∧¶∧
 ( ・∀・) 市中引き回しの上火あぶり
 ( ∪ ∪
 と__)__)
499デフォルトの名無しさん:2005/08/30(火) 23:51:24
殿!!
500デフォルトの名無しさん:2005/08/31(水) 09:18:42
Direct3D 9でGetRenderTargetData()を連発して呼ぶと、数秒後にシステム
全体がフリーズしてしまい、リセットボタンを押す羽目になります。
GetRenderTargetData()を呼び出す間隔をある一定以上にすると
問題はありません。他の方はどうですか?

うちは、Athlon64 3200+ Geforce6800(ドライバ77.76)を使用しています。
501デフォルトの名無しさん:2005/08/31(水) 11:30:26
>>496の馬鹿ですが、
SetCooperativeLevelでDDSCL_NORMALを設定すると
思うのですが、サーフェイスを作成するところで躓いてしまいます。
DirectDrawの初期化については
ttp://www.cnet-try.ne.jp/akiji/directx.htm
こちらのサイトのソースを参考に拝借させてもらってます。
フルスクリーンから通常のウィンドウモードにするには何か他に手順が必要なのでしょうか?
低脳な質問ですが教えてください。おながいします。
502デフォルトの名無しさん:2005/08/31(水) 18:03:35
DirectInputでキーボードのAが押されたらA、Bが押されたらBと表示させるには
switchやテーブル変換等を使って表示させるしか方法ないですか?
503デフォルトの名無しさん:2005/08/31(水) 19:19:17
>>502
ヘルプのDirectInputのチュートリアルは読んだかな?
アレは中々上手い方法でやっているので一度は読んでみることをオススメする。
504デフォルトの名無しさん:2005/08/31(水) 19:52:51
>>503
ありがとうございます。早速読んでみました。
これのことですよね?

#define KEYDOWN(name, key) (name[key] & 0x80)

g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if (KEYDOWN(buffer, DIK_RIGHT));
// Turn right.

マクロについて勉強してきますorz
505デフォルトの名無しさん:2005/08/31(水) 20:01:06
あー、name[key]がマクロの特殊な構文なのかと勘違いしました。
直接入力の場合の構文ですね。ボケてたorz
506501:2005/09/01(木) 19:27:08
すみません。情報不足だったでしょうか。
ひとつ訂正があるのですが、
×フルスクリーンから通常のウィンドウモードにするには
○ウィンドウモードにするには
ここではDirectDrawの質問は受け付けてないんですか?
せめて何がいけないのか教えてください。
507デフォルトの名無しさん:2005/09/01(木) 19:49:03
>>506
DDSCL_FULLSCREEN
508デフォルトの名無しさん:2005/09/01(木) 20:03:26
「躓いてしまいました」から何を察しろというのか。ホームラン級の馬鹿だな。
509501:2005/09/01(木) 20:32:35
すみません。
ttp://www.cnet-try.ne.jp/akiji/directx05.htm
ソースはこちらと同じで
hRes = lpDD->SetCooperativeLevel(hWnd,DDSCL_NORMAL);
と修正しただけです。
躓くというのは
・・・
hRes = lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
if(hRes != DD_OK)
{
 lpDD = NULL;
 lpDDSPrimary = NULL;
 MessageBox(hWnd,"Step4","Error",MB_OK);
 return hRes;
}
ここでエラーになるという事です。
510デフォルトの名無しさん:2005/09/01(木) 21:00:28
また同じこと言うが
SDKのサンプルに答えがあるのに
なぜ見ない?
511デフォルトの名無しさん:2005/09/01(木) 21:54:42
あの、
pTexture->LockRect(0, &LockedRect, &rect, 0);
↑みたいなLock関数について伺いたいのですが、
Lock関数の引数で、ロックフラグ(↑のLockRectの場合は第四引数)が
0の場合はどのような意味を持つことになるのでしょうか?
DirectXのヘルプには、
D3DLOCK_DISCARD
D3DLOCK_NO_DIRTY_UPDATE
D3DLOCK_NOSYSLOCK
D3DLOCK_READONLY
D3DLOCK_NOOVERWRITE
のいずれかを使えと書いてあり、内容も理解できます。
しかし、いろいろサイトを見てきましたが
このフラグに0を指定してるソースが多々見受けられます。
解説が見つからなかったのでここで質問させていただきます。
どうかよろしくお願いします。


512501:2005/09/01(木) 22:21:52
>>510
サンプルとは現在のSDKにも入ってるんでしょうか?
Direct3Dのサンプルなどならあったのですが…
513デフォルトの名無しさん:2005/09/01(木) 22:22:08
>>510
初心者スレでそうガーガーわめいたところで解決などしない。
それにあのSDKのサンプル郡は初心者には触り難いイメージがある。
アレは普通はみないよ。

俺も初心者の頃、DirectXの初心者本買いまくった方だから、
初心者の役に立たないサンプルソースの匂いってわかるんだ。
514デフォルトの名無しさん:2005/09/01(木) 22:34:44
>>511
日本語ヘルプはファビョってるから、英語のヘルプを読め。
515デフォルトの名無しさん:2005/09/01(木) 22:47:26
誰か「猫でもわかるDirectX」書いてくれ
516501:2005/09/01(木) 22:54:26
>>513
役に立たないソースでも構いません。詳細きぼんです。
517デフォルトの名無しさん:2005/09/01(木) 23:03:33
>>512
DirectDrawなんて使ってると、わからないことがあるたびにそうやって
生き字引を探さなきゃならないわけだが・・・
それでもDirectDrawを使い続けるのか?
正直、旧バージョンのサポートなんて無いといっていい。
あくまで実行ファイルが動くってだけだ。
なんかさ、どうでもいいところで躓くのって嫌じゃない?
特に理由がないなら、DirectX9を奨めたいけどね。
518デフォルトの名無しさん:2005/09/01(木) 23:05:57
DirectX5と7の本ならまだAmazonに売ってる
近所の書店でも見かけた
519デフォルトの名無しさん:2005/09/01(木) 23:06:18
>>516
まあ、どうしてもっつーならこの本をかいたまへ
http://www.amazon.co.jp/exec/obidos/ASIN/4875937997/qid=1125583494/
もう、これっきゃないっしょー
520デフォルトの名無しさん:2005/09/01(木) 23:17:42
>>519
> I/O別冊第1編集部 (編さん)

「編纂」なのは分かっているが、ひらがななもんで一瞬「編さん(影さん・つぐ美ちゃん)」が書いたのかと
521デフォルトの名無しさん:2005/09/02(金) 01:37:59
DirectXの日本語ドキュメントって2002以降
作られてないの??
522デフォルトの名無しさん:2005/09/02(金) 02:01:45
(October 2004)が最後
523デフォルトの名無しさん:2005/09/02(金) 02:24:48
http://www.microsoft.com/japan/msdn/directx/downloads.aspx
ここ見たら、DirectX9は、2002しかないけど...
524デフォルトの名無しさん:2005/09/02(金) 02:35:20
525デフォルトの名無しさん:2005/09/02(金) 03:00:21
スレのログは一応見たのですが、
D3DのDLLを個別に配布しないですむDirectX9は
Dec2004が最新ってことで良いのでしょうか?
526デフォルトの名無しさん:2005/09/02(金) 03:06:56
>>525
d3dx9_24x.dll〜d3dx9_27.dllの事ならそうだ
527デフォルトの名無しさん:2005/09/02(金) 03:21:03
>>524
ありがとー。
528デフォルトの名無しさん:2005/09/02(金) 15:52:30
>>501
サイトの方は見てないが
おそらくバックバッファとプライマリバッファのピクセルフォーマットが
異なっているんじゃないだろうか。
俺はバックバッファはOFFSCREENPLAINで作って、
ウィンドウモードのときはGDIでウィンドウに転送してる。

それとI/Oの本は持ってるけどその辺のことは全然書いてないし、
フルスクリーンで何も考えないでとりあえずDirectX使うところまでも
たどり着けないようなやつが買う本。たぶん参考にならない。
529デフォルトの名無しさん:2005/09/02(金) 22:14:55
同じメッシュを幾つも描画する時どうしてますか?

位置情報を元に一つのメッシュを幾つも描画してますか。

それとも
vector<Mesh*> array;
初期化部
Mesh* pmesh = new Mesh;
array.push_back( pmesh );

描画部
for( int i = 0; i < 10000; i++ )
     array.Draw()
こんなんやってますか?

というのは
今までメモリを気にして前者のやり方でやってたのですが
本をみると(Spriteですが) listに放りこんでるではないですかっ!!

そこで試しに10000回push_backやってみたんですが
GlobalMemoryStatusで dwAvailPhysを見てみたんですが
殆どメモリが減ってない。
vector<Mesh*>は Meshサイズ分のメモリを食ってないのでしょうか??
530529:2005/09/02(金) 22:19:02
おっと付け足して文を構成したせいで
描画部がわけわかんなくなっちゃったぜ
531デフォルトの名無しさん:2005/09/02(金) 22:44:39
VRAMに乗ってたりして
532デフォルトの名無しさん:2005/09/02(金) 22:45:25
VRAMの消費調べてみ
533デフォルトの名無しさん:2005/09/02(金) 22:55:10
VRAMの○×だよ!
534529:2005/09/02(金) 23:05:24
ぐはっ
見当違いのメモリを調べていたのかw
535デフォルトの名無しさん:2005/09/02(金) 23:11:06
>>529
共通の描画用メッシュの参照ポインタを持てばいい。
そのためのAddRefだろー。

現実はあまり使わないけどなw
536529:2005/09/02(金) 23:17:53
VRAMを調べてくれる関数がわからん・・・
フリーソフトはあるのだから
調べる方法は必ずあるんだろうなぁ

VRAM sprintf でググっても出てこんw

同じ物を描画する時はどうやってますかい?
537デフォルトの名無しさん:2005/09/02(金) 23:23:10
だからVRAMに保持させとく描画用メッシュは1つだけでいいだろ。
538529:2005/09/02(金) 23:43:41
と、なると前者の方法で
位置情報を元に 一つのメッシュを
再利用すべきなのですな

1000回のチェックに下げて
VRAMチェッカー(フリーソフト)で調べると
2Mちょっと食われてた。
539デフォルトの名無しさん:2005/09/02(金) 23:58:29
ドラクエとかのマップだって、そうだろ?
同じマップチップを何度も使いまわしている。
それが3Dになっただけだ
540デフォルトの名無しさん:2005/09/03(土) 00:07:21
質問です。XP、Visual C++ .NET です。
MFC スレかどうか迷ったのですが、ここで質問させていただきます。
プロジェクトは MFC を用いて組んでいます。

DirectInput に関してです。

(プロジェクト名).rc(85): error RC2104 : undefined keyword or key name: DIK_BACK

というエラーが出て、rc ファイルを見てみると、次のようなコードがありました。

/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//

IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
"C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
"V", ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT
DIK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT, NOINVERT
DIK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT
DIK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT
DIK_F6, ID_PREV_PANE, VIRTKEY, SHIFT, NOINVERT
DIK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
DIK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT
"X", ID_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT
"Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT
END

(続く)
541540:2005/09/03(土) 00:08:33

実は rc ファイルをいじったこと今まではなく、そもそも rc ファイルが何者なのかも理解できていません。
また、DirectX 関連のライブラリとのリンクなどはずっと以前から行っており、プロジェクトのビルドもできていましたが、
今日、突然このようなエラーが現れました。
このかん、DirectX に関連する部分をいじってはないつもりです。(いじったからエラーが出たと思うんですが・・・)

上の部分のコードはいつ生成され、エラーの原因は何なのでしょうか・・・。
よろしくお願いします。
542529:2005/09/03(土) 00:12:48
そんな風に思ってた時期が(ry

ロールプレイングゲームプログラミング
という書籍に
CChipという関数に画像データを1個ずつ入れて
それを
list<CCharacter>にぶっこんでるわけですよ
      ↑(Image(画像を取り扱うクラス)を継承している。)
マップに存在する分だけ

そこで、オレもぶっこんでみようかなと
頭こんがらがったワケデスヨ。

>>540
.rcはResourceファイルでメニューバーやら
ショートカットキー(Accelarator)などを保存?みたいな
しているファイルで、それは
resource.hファイルというのに定義されている。
#include "resource.h"てのが抜けてるのだろうか?
543デフォルトの名無しさん:2005/09/03(土) 00:27:29
>>540
とりあえず "DIK_"ってのを"VK_"にすればいいんじゃないかしら。
間違って置換しちゃったとか。
544540:2005/09/03(土) 00:29:36
>>543
置換・・・

orz やっちまったようです。こんな質問に対してエスパー解答本当にありがとうございました。
545関連リンク製作委員会:2005/09/03(土) 03:45:01
【C++】 DirectX初心者質問スレ Part5 【C++】
ttp://pc8.2ch.net/test/read.cgi/tech/1122031254/
[詳細不明]DirectX9.0c日本語リリース[人柱]
ttp://pc8.2ch.net/test/read.cgi/win/1090985428/
鬱だ氏のう DirectX (Part 15)
ttp://pc8.2ch.net/test/read.cgi/tech/1096649788/
DirectXとOpenGL、ゲーム作るならどっち?
ttp://pc8.2ch.net/test/read.cgi/gamedev/1009941920/
Managed DirectX vol.2
ttp://pc8.2ch.net/test/read.cgi/tech/1061285378/
最強のDirectShow Filterを探そう
ttp://pc8.2ch.net/test/read.cgi/avi/1030190329/
Direct 3D
ttp://pc8.2ch.net/test/read.cgi/gamedev/1005293179/
OpenGL VS Direct3D
ttp://pc8.2ch.net/test/read.cgi/tech/1044308707/
出やがったなDirectX8.1
ttp://pc8.2ch.net/test/read.cgi/win/1005383406/
C#でDirectX9 初心者の館 2頂点目
ttp://pc8.2ch.net/test/read.cgi/tech/1103998649/
DirectShowと戦うスレ
ttp://pc8.2ch.net/test/read.cgi/tech/1026666092/
Direct3D
ttp://pc8.2ch.net/test/read.cgi/tech/1011762546/
VB.NET で DirectX 初心者の箱庭
ttp://pc8.2ch.net/test/read.cgi/tech/1106216291/
2D!!のDirectXをやってみるかもな
ttp://pc8.2ch.net/test/read.cgi/gamedev/1005133911/
━━━━Direct Draw━━━━
ttp://pc8.2ch.net/test/read.cgi/gamedev/1031289035/
DirectXのサンプルをしゃぶりつくす!
ttp://pc8.2ch.net/test/read.cgi/gamedev/1032657642/
546デフォルトの名無しさん:2005/09/03(土) 19:55:38
DirectInputにてバッファーからキー入力を取得しているのですが
SHIFTが同時に押されているかどうかはどう判断するのでしょうか?
今はシフトが押されたらbool isShift=true; 離されたらisShift=false:として
場合分けをしています。
547デフォルトの名無しさん:2005/09/03(土) 20:04:26
>>546
両方しらべればいいじゃない
548デフォルトの名無しさん:2005/09/03(土) 20:34:29
VC6.0で->とか関数で引数とかを表示してくれヘルプみたいなのを
使えるようにするにはどうしたらいいでしょうか?
549C初心者です:2005/09/03(土) 21:01:05
質問です。
NT系のOSってノートパッドに書き込める容量は制限されて無いみたいなんですけど、
Meってノートパッドに書き込みすぎるとメモリ不足って言う表示がでてしまい、それ以上書けなくなってしまいます。
そこで、Meで動作する容量の制限されないノートパッドをC言語で作ってるんですけど、イマイチ作れません。
だれか作り方教えてください。お願いします。
550デフォルトの名無しさん:2005/09/03(土) 21:09:59
>>549
スレタイ百回口にだしてよもう
551C初心者です:2005/09/03(土) 21:17:31
>>550
早とちりしてました。ほかのスレに行きます
552546:2005/09/03(土) 21:31:25
自己解決しました。
よく考えたらバッファーからは押されたキーの情報を時系列順にしか取り出せないのだから
この場合はフラグでしか無理ですね…。

>>547
チェックした時点でSHIFTが押されているかではなく、あるキーが押された時点で
同時にSHIFTが押されているかどうかを調べたいので
やはりバッファーからの情報を元にフラグを立てることにします。

スレ汚しすみません。
553デフォルトの名無しさん:2005/09/03(土) 22:10:42
>>552
キーはな。
まず関数を作るんだ。
作る関数は

GetOnTrgKey関数  キーが押された瞬間をとる
GetOffTrgKey関数  キーが放された瞬間をとる
GetOnKey関数    キーが現在押されているかどうかをとる

の3つだ。
引数はスペースだとかリターンだとか上とか下とかキーの種類な。戻り値はboolな。
この関数ができれば、

if(GetOnKey(SHIFT)){
  if(GetOnTrgKey(ENTER)){
  }
}

って簡単だろ?
もちろん、前回のフレームのキー状態をとっておく必要はあるからね。
上の3つができたら、キーの長押しなんかも判断できる関数作ってみ。
長押しってのはRPGのステータス画面なんかで十字キーしばらく押してると
ピッピッピッピピピピピピピって連続で押されているみたいな動作するじゃん。それ。
554デフォルトの名無しさん:2005/09/03(土) 22:37:26
GetOnTrgKey実現するには
スッドレとイベントが必要だったり
555デフォルトの名無しさん:2005/09/03(土) 23:05:50
>>554
いらないと思うけど・・・
556デフォルトの名無しさん:2005/09/04(日) 02:03:14
>>552
答えようとしてる人達が、バッファリングデータのことを
知らない人ばかりですまないな。
557デフォルトの名無しさん:2005/09/04(日) 02:16:20
>>555
>GetOnTrgKey関数  キーが押された瞬間をとる
戻り値がboolで、キーが押された瞬間を捉えるとすると同期オブジェクト使うしかないやん。
スピンロックは却下な。
558デフォルトの名無しさん:2005/09/04(日) 02:21:36
>>557
フレーム単位であわせりゃいいじゃん。
つーか、フレーム単位でしかとらないほうがいいだろ。
559デフォルトの名無しさん:2005/09/04(日) 12:13:42
質問です。XP、.NET です。
MFC を利用してコードを組んでいます。

DirectX9 の勉強中です。
DirectInput によりキーボードの入力状態をチェックしてるのですが、上手く行きません。

コンパイルエラーは出なく、原因が全くつかめないため、
冗長かも分かりませんがソースの必要と思われる部分をUPします。

http://www.geocities.co.jp/CollegeLife-Club/7442/ts.txt

自作 CDirectInput8 クラスの InitDInput() を、MainFrame の OnCreate() 内で呼び出して
DirectInput の初期化を行い、OnTimer() 内でキー状態をチェックしています。
道中メッセージボックスでのエラーは出ません。
が、キー入力を行っても "成功" のボックスが出ません。
調べたところ、OnTimer() 自体は確実に呼ばれているようです。

お手上げ状態です。
かなり面倒な質問ですが、お時間のある方、ご協力をお願いします。
560デフォルトの名無しさん:2005/09/04(日) 12:24:02
>>559
hr = mpDInputDevice->Poll();
hr = mpDInputDevice->GetDeviceState(256,diKeyState);
if(hr != DI_OK){
hr = mpDInputDevice->Acquire();
while(hr == DIERR_INPUTLOST)
hr = mpDInputDevice->Acquire();
return 0;
}

その部分、俺のソースではこんなことになっていた・・・orz
なんか支離滅裂なコードなのであんまり気にしないでくれw

君のは多分Poll関数が呼ばれてないだけじゃないのかな?(違ったら素マンコ)
561559:2005/09/04(日) 12:39:48
>>560
Poll() に関して調べてみました。
内容はまだ理解できていませんが、キーボードやマウスの場合は必要ないようです・・・。
申し訳ありません。
562デフォルトの名無しさん:2005/09/04(日) 12:50:12
>>559 SDKだとこんな風にしてるわよ。
//if (hr == DIERR_INPUTLOST){
//m_directinput.m_pDIDevice->Acquire();
//}
if( FAILED(hr) )
{
hr = m_directinput.m_pDIDevice->Acquire();
while( hr == DIERR_INPUTLOST )
hr = m_directinput.m_pDIDevice->Acquire();
return;
}
563デフォルトの名無しさん:2005/09/04(日) 12:52:55
>>561
ほんとだ。
いい加減なこといってすまん。

じゃ、やっぱ
while(hr == DIERR_INPUTLOST)
hr = mpDInputDevice->Acquire();
なのか?ちがうか・・・orz
564デフォルトの名無しさん:2005/09/04(日) 12:53:59
>>562
かぶった。すまん。
565デフォルトの名無しさん:2005/09/04(日) 12:58:45
GetDeviceStateの戻り値は調べたのか?
DI_OKならm_diKeyStateを直接表示してみては
566559:2005/09/04(日) 13:01:03
しまった・・・
GetDeviceState() で SUCCEED していないようです。戻り値調べてみます。
ありがとうございます。
567デフォルトの名無しさん:2005/09/04(日) 13:04:00
やっぱ、ソースみると解決早いな。
568559:2005/09/04(日) 13:06:24
GetDeviceState() の戻り値:

DIERR_NOTACQUIRED
The operation cannot be performed unless the device is acquired.

orz
569559:2005/09/04(日) 13:10:02
ひとまず、指摘いただいたとおり
FAILED の時に Acquire() 呼び出すように改良してみます。
お付き合いありがとうございました。一旦失礼します。
570559:2005/09/04(日) 13:16:49
動いたあああああ!!!!!!
ありがとうございました。ようやく次の作業にいけます!

長々とお世話になりました。それではー。
571デフォルトの名無しさん:2005/09/04(日) 16:34:03
すいません、ベクトルの回転について困っています。
ベクトルを任意軸で回転させ新しいベクトルを取得したいのですが、計算結果にわずかな誤差がでてしまうのです。
例えば (0, 0, 1) というベクトルを (1, 0, 0) という軸で90度回転させるとします。
+Zに向いているベクトルを-Yに向けたいのです。
ところが、計算してみると (0, -0.999998, 0) などコンピュータらしい誤差が生まれます。
この問題、なんとかならないでしょうか?

ベクトルの回転方法としては、ベクトルを行列に格納し、回転行列を作って掛け合わせ、その行列から
_41, _42, _43 を取り出して新しいベクトルとしています。
関数はD3DXMatrixRotationAxis() や D3DXQuaternionRotationAxis() と D3DXMatrixRotationQuaternion() などを使いましたが、
誤差をなくせません・・・。
よろしくお願いします。
572デフォルトの名無しさん:2005/09/04(日) 16:39:53
回避は『ほぼ』不可能です。
演算の手法や順番の工夫、遅くなるのを覚悟で倍精度や拡張精度の
浮動小数点演算を行うといった方法である程度軽減は可能ですが、
離散値しか扱えない以上は丸め誤差や打切り誤差は不可避です。
573デフォルトの名無しさん:2005/09/04(日) 16:43:05
マジか
574デフォルトの名無しさん:2005/09/04(日) 16:46:59
>>571
つーか、何がしたいの?
こういうの無理そうだって感覚的に理解できるっしょ普通w
また、こういう微妙な数字をゲームの判定なんかにつかっちゃ駄目だよ。マジで。
1ぴったりであることとか、0ぴったりであることとか。
575デフォルトの名無しさん:2005/09/04(日) 16:50:22
マジか
576デフォルトの名無しさん:2005/09/04(日) 18:04:08
誤差前提でプログラムを組むしかない。
577デフォルトの名無しさん:2005/09/04(日) 18:06:46
>>574
ん〜…
ある平面があって、その平面は指定したベクトルの先に展開したいので、
まず回転のない平面の4頂点を作り、指定したベクトルに応じた回転を与えることで、
4頂点の座標を求める・・・・ということをやっています。傘なんかを思い描いてもらえればいいかと思います。
傘の柄が指定したいベクトル。柄の先に有るビニールが展開したい平面。
そして、その平面と当たり判定をするのですが・・・その平面に対しつっこんできた点の、
反射ベクトルを求めようとしているのですが、なにか微妙な誤差がありまして。平面との反射角は、
法線と角度をとった場合、平面の表なら90以下、平面の裏なら90ど以上じゃないとおかしいじゃないですか。
それが、裏なのに89.9999...など「微妙に数値がずれてる」場合がありまして、うまく計算できないときがあるのです。
先ほどの例で(0,0,1)を(1,0,0)などで90度回転させた平面の座標を見たところ、しっかり90度で回転させているのに
頂点が綺麗な数字にならず14.9999...など回転させた際に誤差が生まれたようで。それが反射角が微妙に
おかしくなる原因かと思ったのです。
>>572
不可能・・・ですか。マジですか・・・。
まぁ、反射角の求め方もまだ怪しいので、もうちょっと調べてみます。

ありがとうございました。長文ですみません。
578デフォルトの名無しさん:2005/09/04(日) 20:09:10
浮動小数点を使っている限り数値誤差は避けられない。
スパコンで行う大規模数値計算ですらそれを前提に行う。
ゲームみたいなテキトーなものはテキトーでよい。

>>577
DirectXのヘルプのHLSLのreflect関数に公式が出てるよ。
説明はt-potに良いのがあった記憶が。
579デフォルトの名無しさん:2005/09/04(日) 23:16:45
この板や3Dプログラミング系のBBSで誤差が話題になることは稀だけど
多分それは、その部分は適当にすませてるケースが多いからだろうな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4563036420/qid=1125843179/sr=1-7/ref=sr_1_10_7/250-0637096-8431410
この本がお勧めです。難しいけどね。
580デフォルトの名無しさん:2005/09/04(日) 23:34:27
>>579
わw
センスなさそーだなお前w
誤差がでることを前提に作るしかねぇってわかるだろ。
それとも何か解決策でもあったか?

くっだらねぇ本紹介する前にテメェがその本で獲た結論から言えや。
581デフォルトの名無しさん:2005/09/04(日) 23:44:51
>>580
著者に向かってなんてことを言うんだ
582デフォルトの名無しさん:2005/09/04(日) 23:45:46
>>580
この本は誤差がでることを前提に作れっていってるんだよ。
誤差があっても落ちない破綻しないようにする作り方を示してる。
でも他により良い資料があるなら是非紹介して欲しい。
583デフォルトの名無しさん:2005/09/04(日) 23:49:47
>>580
自分で自分をDQNだって明言することが趣味なのか?
アカデミックな本に関してアレルギーでも持ってるのかな?
584デフォルトの名無しさん:2005/09/04(日) 23:56:25
自分の本が売れないからって必死ですね
585579:2005/09/05(月) 00:02:52
>>580
んーやはりちょっと気になるなぁ。
いったい何をもってくだらないと断じているのか知りたい。
ちなみに自分自身は、学歴ないし頭悪いし計算幾何学に通じてる訳でもないし
その本は半分ぐらい読んで放置中だw
でもいずれそれに沿った実装はしたいと思っている。
誤差は本当に頭が痛い問題だ、もっと簡単で使える技術があるなら本気で知りたい。


586デフォルトの名無しさん:2005/09/05(月) 00:03:09
アカデミックな本wwwキタwwwキタコレwwwww
587デフォルトの名無しさん:2005/09/05(月) 00:03:10
>>581-583
営業活動必死だなw
588デフォルトの名無しさん:2005/09/05(月) 00:04:51
>>582
>この本は誤差がでることを前提に作れっていってるんだよ。
読んでも読まなくても俺と結論がいっしょじゃねぇかよw
589デフォルトの名無しさん:2005/09/05(月) 01:29:15
質問です。XP、.NET です。
DirectInput の勉強中です。

class CDirectInput8
{
public:
 BOOL CALLBACK EnumDevicesBySemanticsCallback(
  LPCDIDEVICEINSTANCE lpddi,
  LPDIRECTINPUTDEVICE8 lpdid,
  DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef);
}

BOOL CALLBACK CDirectInput8::EnumDevicesBySemanticsCallback(
 LPCDIDEVICEINSTANCE lpddi,
 LPDIRECTINPUTDEVICE8 lpdid,
 DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)
{
 //(中略)


自作 CDirectInput8 クラス内で上記コールバック関数を定義し、
CDirectInput8::InitDInput() (初期化用のメソッド) 内で以下のように EnumDevicesBySemantics() を使っています。

(続く)
590589:2005/09/05(月) 01:29:52
// デバイスへのアクションマッピング
hr = m_pDInput->EnumDevicesBySemantics(
  NULL, &m_DIActionFormat, EnumDevicesBySemanticsCallback, NULL, DIEDBSFL_ATTACHEDONLY);
if (FAILED(hr)) {
 AfxMessageBox("デバイスへのアクションマッピングに失敗");
 return false;
}

すると、上記コードでコンパイルエラーが出ます。
〜\DirectInput8.cpp(44): error C2664: 'IDirectInput8A::EnumDevicesBySemantics' : 3 番目の引数を 'BOOL (LPCDIDEVICEINSTANCE,LPDIRECTINPUTDEVICE8,DWORD,DWORD,LPVOID)' から 'LPDIENUMDEVICESBYSEMANTICSCBA' に変換できません。

型変換ができないと言われましたが、
他の色々なサンプルを見ても、同じコードが書かれており、コンパイルが通ります。

原因分からなくて困っています。
よろしくお願いします。
591デフォルトの名無しさん:2005/09/05(月) 01:47:43
>>589
メンバ関数をコールバックに渡してっからだろ。
592デフォルトの名無しさん:2005/09/05(月) 01:51:22
593デフォルトの名無しさん:2005/09/05(月) 02:02:00
>>591-592
知らなかった・・・。完全に勉強不足でした。ありがとうございます。
594デフォルトの名無しさん:2005/09/05(月) 02:22:02
directx 9.0bってどこでインストール出来るんですか?
595デフォルトの名無しさん:2005/09/05(月) 02:29:58
>>594
なんで検索して自力で調べようとしないんですか?
596デフォルトの名無しさん:2005/09/05(月) 02:41:25
9.0bランタイムほんとに無いなw
デバッグするときどうするんだろ
597デフォルトの名無しさん:2005/09/05(月) 02:50:08
>>595
ケチ臭い事言ってんなよ
いちいち調べろとかわざわざ書き込むな
調べてもわからないから聞いてんだろコラ
598デフォルトの名無しさん:2005/09/05(月) 03:00:45
>>597
なら正しい検索の仕方から学んだ方が良いと思いますよ
599デフォルトの名無しさん:2005/09/05(月) 03:06:04
>>598
ほほう
ではその検索とやらの仕方はどーすんのよ?
ここは初心者スレだろ?
600デフォルトの名無しさん:2005/09/05(月) 03:09:35
日本サイトに無い場合は海外サイトね。
http://www.microsoft.com/downloads/details.aspx?FamilyID=bc7ddedd-af62-493d-8055-5e57bab71e1a&DisplayLang=en
んで、このGenuine Windows Validationってもう任意じゃなくて必須なのかしら。
601デフォルトの名無しさん:2005/09/05(月) 03:11:56
>>599
スレタイ読めますか?日本語の勉強からしたほうが良いかもしれませんよ。
602デフォルトの名無しさん:2005/09/05(月) 03:20:31
>>601
日本語から学べ?ハイワロスワロス
603デフォルトの名無しさん:2005/09/05(月) 03:22:37
そうやって逃げるような書き込みしか出来ないのですね。
まぁこの程度の事すら自力で調べられないようならプログラミングなんぞ無理でしょうけど。
604デフォルトの名無しさん:2005/09/05(月) 03:27:52
こんな夜中によく(r
605デフォルトの名無しさん:2005/09/05(月) 03:29:40
>>600
それSDKw
日本語サイトにもSDKやシンボルはあるよ
606デフォルトの名無しさん:2005/09/05(月) 03:36:42
サイト内検索でランタイムも見つかる。
ただ検索も満足に出来ない人に見つけられるかは知りませんが。
607デフォルトの名無しさん:2005/09/05(月) 03:38:36
ランタイムはダウンロードできない
試してみ?
608デフォルトの名無しさん:2005/09/05(月) 04:22:20
9.0cのランタイム入れれば9.0bも動くんじゃないの?
良くわかんないわね。
609デフォルトの名無しさん:2005/09/05(月) 04:48:25
そら動かなかったら大変なことになっとるがな
610デフォルトの名無しさん:2005/09/05(月) 04:49:11
香ばしい展開乙
611デフォルトの名無しさん:2005/09/05(月) 04:51:54
ランタイムは最新版だけ落とせるようにしてるんじゃないの?(よく知らないけど)
んで、仮にわざわざ9.0bの環境にしてデバッグしたいってことなら、
とりあえず初心者では無いわねw
612デフォルトの名無しさん:2005/09/05(月) 05:10:52
613デフォルトの名無しさん:2005/09/05(月) 05:40:07
>>611
初心者ではないならなおさら見苦しいなwww
614589:2005/09/05(月) 07:27:44
たびたび失礼します。XP、.NET です。
>>592 を参考に、コールバック関数を static で宣言しました。

class CDirectInput8
{
public:
 // (中略)
 static BOOL CALLBACK EnumDevicesBySemanticsCallback(
  LPCDIDEVICEINSTANCE lpddi, LPDIRECTINPUTDEVICE8 lpdid,
  DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef);
};

BOOL CALLBACK CDirectInput8::EnumDevicesBySemanticsCallback(
 LPCDIDEVICEINSTANCE lpddi, LPDIRECTINPUTDEVICE8 lpdid,
 DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)
{
 // (中略)
}

bool CDirectInput8::InitDInput(HWND hwndApp)
{
 // (中略)
 // デバイスへのアクションマッピング
 hr = m_pDInput->EnumDevicesBySemantics(
   NULL, &m_DIActionFormat, EnumDevicesBySemanticsCallback, (LPVOID)this, DIEDBSFL_ATTACHEDONLY);
}
615589:2005/09/05(月) 07:28:37
こうしたところ、EnumDevicesBySemantics に失敗し、hr に E_INVALIDARG が返って来ました。

>DIERR_INVALIDPARAM
>無効なパラメータが、戻ってくる関数に渡されたか、オブジェクトがその関数を呼び出せる状態になかった。

どっちのエラーかも分からないのでなかなか解決しません。
お手を貸していただけないでしょうか。
616デフォルトの名無しさん:2005/09/05(月) 07:40:10
>>615
m_DIActionFormatが怪しいような。
アクションマッピング使ったことないから分からんけど。
617589:2005/09/05(月) 07:56:43
>>616

// アクションマップの定義
int number_of_actions = sizeof(g_GameAction) / sizeof(g_GameAction[0]);
m_DIActionFormat.dwSize = sizeof(DIACTIONFORMAT);
m_DIActionFormat.dwActionSize = sizeof(DIACTION);
m_DIActionFormat.dwDataSize = number_of_actions * sizeof(DWORD);
m_DIActionFormat.dwNumActions = number_of_actions;
m_DIActionFormat.guidActionMap = g_AppGuid;
m_DIActionFormat.dwGenre = NULL;
m_DIActionFormat.rgoAction = g_GameAction;
m_DIActionFormat.dwBufferSize = 100;
m_DIActionFormat.lAxisMin = -1000;
m_DIActionFormat.lAxisMax = 1000;
lstrcpy(m_DIActionFormat.tszActionMap, "hoge");

こんな感じでした。
618デフォルトの名無しさん:2005/09/05(月) 08:31:31
ZeroMemoryでフィールドの初期化はしてある?
フィールドはそれ以外にもあるからそういうのが関係してるとか。
(あんまり関係ない気はするが一応やってみるのがいい)

ユーザー関数が呼ばれているかどうかはブレークポイントを関数内に設定してみ。
ブレークポイントで止まる前に落ちるなら、関数への設定パラメータのミスと考えるのが妥当かと。
まあINVALIDPARAMだし恐らくそうなんだろうけれど…
619589:2005/09/05(月) 08:36:38
>>618
ZeroMemory を行っていなかったのでやってみました。
また、コールバック関数内にブレークポイントを設定してみましたが、そこは通らず、

 // (中略)
 // デバイスへのアクションマッピング
 hr = m_pDInput->EnumDevicesBySemantics(
   NULL, &m_DIActionFormat, EnumDevicesBySemanticsCallback, (LPVOID)this, DIEDBSFL_ATTACHEDONLY);
 if (FAILED(hr)) {
  /* ※ */
 }

※の行に設定してあるブレークポイントでストップしました。
620デフォルトの名無しさん:2005/09/05(月) 08:47:07
つーことは設定パラメータがおかしいんでは。

とりあえずリファレンスとかサンプル参考にしながら見てこう。
サンプルがあるなら、それと自分のコードの違いを見比べて、
怪しいと思ったところを修正するのが楽かな。

仕事行くのでこの辺で。
621デフォルトの名無しさん:2005/09/05(月) 13:56:24
だーめーだーわからん
622デフォルトの名無しさん:2005/09/05(月) 14:16:17
スプライトを左右反転させて表示するにはどうすればいいんんですか?
623デフォルトの名無しさん:2005/09/05(月) 14:24:42
>>622
[-1,0,0,0]
[0,1,0,0]
[0,0,1,0]
[0,0,0,1]
最初にこの行列をかける
624デフォルトの名無しさん:2005/09/05(月) 14:31:29
>>617
>>m_DIActionFormat.dwGenre = NULL;
NULLはだめみたいよ。他のを適当に代入。
あと、アクションマップは Program Files/Common Files/DirectX に
勝手に設定ファイル作ったりするので、個人的にお勧めできないわ。
625デフォルトの名無しさん:2005/09/05(月) 14:38:12
>>624
適当なものが無かったので、サンプルにあった DIVIRTUAL_SPACESIM を入れてみました。
が、ダメでした・・・。

マジですか
アクションマップだめですか。うーん。作り変えてみます。ありがとうございます。
626デフォルトの名無しさん:2005/09/05(月) 14:58:25
>>625
例えばDIBUTTON_FIGHTINGH_KICKを使うには
dwGenre = DIVIRTUAL_FIGHTING_HAND2HAND; になってる必要があるみたいね。
結局ややこしいからお勧めでき(ry
627デフォルトの名無しさん:2005/09/05(月) 17:46:45
よその質問スレッドで明快な答えをいただけなかったので
技術者の多いこちらで再度質問させてください。

なぜDirectXを使用したゲームはCPU使用率が100%(HTでは50%)になるのでしょう?

処理の重さに関係なく必ずCPU使用率が100%になります。
理由がわかるかたいませんでしょうか?
628デフォルトの名無しさん:2005/09/05(月) 17:58:51
技術者が多いかどうかは知らんが、別にすべてのソフトでCPU100%使うわけじゃないぞ。
PCのスペックが十分でFPSを固定してれば100にはならんし、
キーフレームアニメーション使ってて常時再描写してるんだったら100になるってだけだ。
例えばRigidChipsでもFPS固定して軽いモデル使えば50〜80くらいにはなる。
629デフォルトの名無しさん:2005/09/05(月) 18:02:33
そういえば同期待ちでCPU持っていくグラフィックボードがあったな
630デフォルトの名無しさん:2005/09/05(月) 18:11:27
>>627
CPUを100%使ってるからだろ。っていうか質問の前提がおかしい。ウザス
631デフォルトの名無しさん:2005/09/05(月) 18:18:33
>>627
CPUが100%になることを確認したソフトのリストと
PCのスペックを詳しく
632デフォルトの名無しさん:2005/09/05(月) 18:31:13
またビジーループ叩きかw
熱心なこった
633デフォルトの名無しさん:2005/09/05(月) 18:41:59
MSがあれだけ派手にビジーループ作るなって宣伝したらそりゃ叩かれるよ
プレゼン資料みただろ?w
634デフォルトの名無しさん:2005/09/05(月) 18:48:03
イニシャルDタイピングとかエロゲとか100%になりそうだよな。
ま、偏見だけど
635デフォルトの名無しさん:2005/09/05(月) 20:01:27
627です
叩いているとかいう以前に、なぜそうなのか疑問に思っただけです。

具体的なゲームタイトルとしては、RagnarokOnline Lineage2
Pangya ハンゲの3Dビリヤードなどなど

Direct3Dを使用するゲームは全般的にCPU使用率が100%になるようです

これというのはDirectXの仕様なのでしょうか?
それとも各ゲームのプログラム上の都合なのでしょうか?


>CPUを100%使ってるからだろ。っていうか質問の前提がおかしい。ウザス

画面を大幅に書き換えている状態でCPU使用率が100%になることはあり得るとしても
画面にほぼ動きがなく、処理もたいしたことをしていない状態でも
安定して100%状態を維持してます

※質問の要点は、なぜ軽い処理をしているときもCPU使用率が100%なのですか?という点です
わかりにくくてすみません
636デフォルトの名無しさん:2005/09/05(月) 20:07:10
>RagnarokOnline Lineage2 Pangya ハンゲの3Dビリヤード
チョソが書いた糞プログラムだけみて「全般的」とか言っちゃうのって
脳みそ腐ってんじゃないの?wwwww
637デフォルトの名無しさん:2005/09/05(月) 20:11:52
>画面にほぼ動きがなく、処理もたいしたことをしていない状態でも

お前プログラムしたことないだろ?
メッセージループ回してるだけでも、CPU100%食うんだよ。
638デフォルトの名無しさん:2005/09/05(月) 20:20:55
>>635
ちゃんとPresent( NULL, NULL, NULL, NULL )使ってるか?
あとSDKのサンプルも見て見ろ。
俺の環境だとSDKのサンプルを起動して更新をINTERVAL_DEFAULTにするとCPU使用率は100%にならない。
639デフォルトの名無しさん:2005/09/05(月) 20:21:45
>メッセージループ回してるだけでも、CPU100%食うんだよ。

食わねえだろボケ
おまえのInternetExplorerはアイドル中にもCPU100%食うのかよ
640デフォルトの名無しさん:2005/09/05(月) 20:27:32
>>639
アイドル中はGetMessage()で止まってるからループは回ってないぞ。

逆をいえば、GetMessage()ではなくPeekMessage()で溜まり具合をみつつ
ゲームのメインループを回してるとCPU100%になる。
641デフォルトの名無しさん:2005/09/05(月) 20:28:15
大雑把に言うと、
一般アプリはGetMessage関数でSleepされているが、
Direct3D系のアプリはPresentでSleepされている。
しかしドライバによってはPresentがSleepを使わず無限ループの場合があるらしい。
INTERVAL_DEFAULT(っつーかINTERVAL_ONE)でも100%になる原因みたい。
642デフォルトの名無しさん:2005/09/05(月) 20:44:12
>>641
>しかしドライバによってはPresentがSleepを使わず無限ループの場合があるらしい。
>INTERVAL_DEFAULT(っつーかINTERVAL_ONE)でも100%になる原因みたい。
ホントにその処理ってドライバ依存なのかぁ?
俺はSDKのサンプル以上のサポートはいらんと勝手に自分に結論付けたからどうでもいいけど。
643デフォルトの名無しさん:2005/09/05(月) 20:51:14
テメエでタイマーとGetRasterState見つつPresentで良いじゃない。
644デフォルトの名無しさん:2005/09/05(月) 21:26:32
>>627
DirectXを使っているかどうかは全く関係ない。
一般アプリケーションとゲームでは処理の仕方が違うだけ。

一般アプリケーションはユーザの入力に対して何か処理をするのが
中心だから、入力がないときは何もしていない。だからCPU使用率は低い。

ゲームの場合は、何も入力がないときでも常に進行していくのが普通なので、
CPU負荷は常に高め。
それでも大抵のゲームではCPU時間が余るが、余った時間を解放するか
どうかはプログラマーの考え方次第。
ただ、最近はノートPCの人も多いし、デスクトップでも消費電力が無視できなく
なってきたから、ベンチマーク目的以外では解放した方がいいが。
645デフォルトの名無しさん:2005/09/05(月) 22:19:33
>>644
CPU解放型のアプリってショボイの多いな。
結局、することなくて解放してるだけでさ。
646デフォルトの名無しさん:2005/09/05(月) 22:35:55
ノベルゲームとかが多いかな。
ファルコムなんかは100%だね。
647デフォルトの名無しさん:2005/09/05(月) 22:45:09
>>646
アリスソフトも100%だけど動作がいいぞ。
648デフォルトの名無しさん:2005/09/05(月) 22:55:10
>>647
うるせーエロゲマニア
649デフォルトの名無しさん:2005/09/05(月) 23:54:05
次のフレームまでの時間見て
Sleep使えば基本的にはいけるんだが
Sleepって実際はその時間で戻ってくるって保障されないんだっけ?

マイクロソフトがSetTimerとかSleepをもっとちゃんと作ってくれればなんとかなるのだがな
650デフォルトの名無しさん:2005/09/06(火) 00:08:14
Sleep(1)でも1tickくらいは平気で待たされている気がする。
651デフォルトの名無しさん:2005/09/06(火) 00:13:18
こないだのCEDECではQueryPerformanceCounter使えって話でてたな。
でもコスト高いから、たまに使う程度にしろとか。どーしろってんだ。
結局timeGetTimeかよ。
652デフォルトの名無しさん:2005/09/06(火) 00:23:58
>>651
それ、インテルのデュアルコアプロセッサでのマルチスレッド
の話の奴なら、意味が違うかと…
653デフォルトの名無しさん:2005/09/06(火) 01:14:30
GetRasterStateで状態監視するのって重くない?
654デフォルトの名無しさん:2005/09/06(火) 04:39:07
>>651
QueryPerformanceCounter使うと動かないっていう奴まだいるんだよなぁ
655デフォルトの名無しさん:2005/09/06(火) 05:23:12
>>651
最近は省電力とかでクロック数が動的に変化するCPU結構あるから
細かくフリーケンシー計らないと使い物にならない。 案外微妙。
656デフォルトの名無しさん:2005/09/06(火) 05:24:45
クロック変わったのを検地する方法(メッセージが飛んでくるとか)はないの?
657デフォルトの名無しさん:2005/09/06(火) 05:52:10
QueryPerformanceCounter=RDTSCなのか?
658デフォルトの名無しさん:2005/09/06(火) 08:20:16
>>654
え、マジで?
どういう環境で動かないんだろう。
659デフォルトの名無しさん:2005/09/06(火) 10:09:43
QueryPerformanceCounterってコスト高いんか。
CEDECでって、MSのセッション?
660デフォルトの名無しさん:2005/09/06(火) 11:39:33
PC97で高精度タイマの標準を提案していればこんなことにはならなかったのに。
661デフォルトの名無しさん:2005/09/06(火) 11:47:05
60fps で動かすときも SetTimer(0, 1, NULL) で呼んで
毎回 timeGetTime() でフレームを進めるかどうかをチェックしてる・・・
ダメなのかな?
662デフォルトの名無しさん:2005/09/06(火) 11:54:31
WM_TIMERの精度って50msとかじゃなかったっけ・・・
663デフォルトの名無しさん:2005/09/06(火) 11:59:49
WM_TIMERほど信用出来ないものはないな
664デフォルトの名無しさん:2005/09/06(火) 12:01:45
WM_TIMER は優先度が低いメッセージだから
ガンガン遅れるんじゃなかったっけか
665デフォルトの名無しさん:2005/09/06(火) 12:29:07
メッセージキューが空っぽに近い状態で IDLE に入ったら思い出したように出してくれる程度の精度
マウスで窓サイズの変更の真っ只中かだと、ぜんぜんやってこん
666デフォルトの名無しさん:2005/09/06(火) 12:50:10
>>660
普通に使う分には1msの精度で十分だから、あまり必要ないんじゃない?
時間に厳しい処理なんかは、WindowsXPはリアルタイムOSではない
という理由で実装されてないし。

QueryPerformanceCounterの精度なんて普通はプロファイリングにしか
必要ないよ。fpsの制御に使うのはオーバースペック。
リフレッシュレート75Hzや85Hzのモニタで60fpsの動画を再生したときの
最大の誤差を計算してみれば、1msの精度で十分だと分かるはず。
667デフォルトの名無しさん:2005/09/06(火) 13:06:43
進歩のない考え方だねえ
668デフォルトの名無しさん:2005/09/06(火) 14:04:46
もっと高精度のSleepがあればなぁ
669デフォルトの名無しさん:2005/09/06(火) 14:37:16
667は久多良木健
670デフォルトの名無しさん:2005/09/06(火) 19:43:17
ポリゴンを表示させると物体と背景との境界線のジャギが目立つのですが、
アンチエイリアス機能はDirectXにはないのでしょうか?
671デフォルトの名無しさん:2005/09/06(火) 19:50:18
>>670
ある
672デフォルトの名無しさん:2005/09/06(火) 20:06:12
低スペック志向をウリにする人が多いので
普通はアンチエリアスを無視しますよね。
全ハードで使える保障がないので先輩が怒りますし。
673670:2005/09/06(火) 20:15:39
レスありがとうございます。
検索しても答えになるようなことが全く出てこないのでないものだと思っていましたが、
あるのならと思いあれこれ調べてたらやっとたどり着きましたorz
あまり実用的ではないからあえて触れていないのですね。
674デフォルトの名無しさん:2005/09/06(火) 20:15:47
>>671
どうすればよいのでしょうか?
675デフォルトの名無しさん:2005/09/06(火) 20:24:42
>>674
SetRenderStateで設定する。(たしか)
676デフォルトの名無しさん:2005/09/06(火) 20:27:05
D3DXMatrixMultiply関数の中身ってどうなっているのでしょうか?
調べても見つけられませんでした。
677670:2005/09/06(火) 20:29:49
SetRenderStateはD3DRS_EDGEANTIALIASをTRUE
MultiSampleTypeはD3DMULTISAMPLE_9_SAMPLESを指定でフルシーンアンチエイリアス
678デフォルトの名無しさん:2005/09/06(火) 21:00:26
>>672
>全ハードで使える保障がないので先輩が怒りますし。
普通は使えるのかどうか調べるのだが
その先輩とやらは脳無しだから明日から下っ端扱いで構わない
679デフォルトの名無しさん:2005/09/06(火) 21:13:26
>先輩が怒りますし
この小学生みたいな台詞もどうかと思うぞ。
680デフォルトの名無しさん:2005/09/06(火) 21:36:19
>>677
ショックだと思うが、こころして聞いてくれ
D3DRS_EDGEANTIALIASはもうここにはいないんだ!!!
681デフォルトの名無しさん:2005/09/06(火) 22:39:00
あれこれ試してみましたが期待通りというか、実際に効果が出てるのか分からないうえに処理がクソ重くなりました。
ゲフォ5950Uだから問題は無いはずなんですが(´・ω・`)
682デフォルトの名無しさん:2005/09/06(火) 22:56:10
>>681
安心しろ俺の環境でもそうなるからw
683デフォルトの名無しさん:2005/09/06(火) 22:56:47
>>681
ちなみにRadeon9600Proね。
684デフォルトの名無しさん:2005/09/06(火) 22:59:43
んじゃよくFPSとかであるアンチエイリアス×○ とかは何なんだろ。
685デフォルトの名無しさん:2005/09/06(火) 23:06:58
>>684
いや、確実に効果はある。
たしかに淵は滑らかになってるけど、
ここまで速度を犠牲にしてまで、それにふさわしい効果があるかっていうと、
無いと言いきれる。そんなレベル。
こんなもんのスイッチいれるぐらいなら画面の更新頻度が多い方が絶対にうれしい。
686デフォルトの名無しさん:2005/09/06(火) 23:13:22
ごめん、間違えた
×アンチエイリアス×○ とかは何なんだろ。
○アンチエイリアス×○ とかはどうやってるんだろ。
687デフォルトの名無しさん:2005/09/06(火) 23:14:33
○×○×ややこしいな
688デフォルトの名無しさん:2005/09/06(火) 23:17:36
>>686
そんなのSetRenderStateに値を設定すればいいだろ!ウンコ!
何が聞きたいのかさっぱりわからないよ!ウンコ!
689676:2005/09/07(水) 00:01:11
float *out = (float*)aOut;
float *mat0 = (float*)aMat0;
float *mat1 = (float*)aMat1;

for(int i=0;i<4;i++){
  for(int j=0;j<4;j++){
    for(int k=0;k<4;k++){
      out[i*4 + j] = mat0[k*4 + j] * mat1[i*4 + k];
    }
  }
}

こんな感じで頑張ってみました・・・
あってるでしょうか?
690デフォルトの名無しさん:2005/09/07(水) 00:06:02
液晶で解像度が同じだとかなり綺麗に感じると思うよ
解像度低くてスムージングかかってたり
CRTじゃあまり感じられないかもね
691マイク ◆yrBrqfF1Ew :2005/09/07(水) 00:39:16
>D3DXMatrixMultiply関数の中身ってどうなっているのでしょうか?

マトリックスの乗算公式をそのままコード化してるだけだろ
692デフォルトの名無しさん:2005/09/07(水) 00:50:45
D3DXはSSEとか使ってるから>>689より速いよ
693デフォルトの名無しさん:2005/09/07(水) 00:57:47
>>691
いや、それがどうだったけかなぁ・・・と。
なーんか、昔、DirectX5とか6の頃はヘルプにコードが載ってたような気がするんですけど
なーんだっけかなぁ・・・と、まあ、そんなところでした。

ところで・・・
まちがえますた・・・orz
float *out = (float*)aOut;
float *mat0 = (float*)aMat0;
float *mat1 = (float*)aMat1;

for(int i=0;i<4;i++){
  for(int j=0;j<4;j++){
    for(int k=0;k<4;k++){
      out[i*4 + j] += mat0[k*4 + j] * mat1[i*4 + k];
    }
  }
}
694デフォルトの名無しさん:2005/09/07(水) 00:58:27
>>692
いえ、それを使えない場面にあたっちまいまして・・・
695デフォルトの名無しさん:2005/09/07(水) 01:18:09
>>693
DX6のサンプルのd3dutils.cppより:

D3DMATRIX
MatrixMult(const D3DMATRIX & a, const D3DMATRIX & b)
{
  D3DMATRIX ret = ZeroMatrix();

  for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
      for (int k=0; k<4; k++) {
        ret(i, j) += a(k, j) * b(i, k);
      }
    }
  }
  return ret;
} // end MatrixMult

最初に出力行列を初期化しようね。
696デフォルトの名無しさん:2005/09/07(水) 06:05:12
DirectXはVC以外の開発環境でできますか?
希望する環境はEclipse+CDTですが可能でしょうか?
697デフォルトの名無しさん:2005/09/07(水) 07:15:13
>>695
ありがとうございます!
698デフォルトの名無しさん:2005/09/07(水) 12:03:22
Geforce256は1500万ポリゴン/秒ってあるのですが

12ポリゴンで構成されたメッシュを
900体以上表示させるとFPSの速度が落ちるのは
オレのプログラムが悪いからでしょうか?
699デフォルトの名無しさん:2005/09/07(水) 12:05:54
うn
700デフォルトの名無しさん:2005/09/07(水) 12:07:30
>>698
1回のDrawPrimitiveで1000頂点くらい描画しないと
その性能はでないよ。
701デフォルトの名無しさん:2005/09/07(水) 12:21:51
>>699
化ッ

>>700
なるほど そういうことですか。
for文が900回繰り返してるからかな?
702デフォルトの名無しさん:2005/09/07(水) 12:29:02
単純にDraw〜のみをループも使わず連続こぴぺで描画した場合だったりして
703デフォルトの名無しさん:2005/09/07(水) 13:22:06
パイプライン処理ってのを理解すればわかるよ
704698:2005/09/07(水) 13:37:57
試しに28ポリゴンを900体
25200ポリゴン描画してみたら問題なしでした


熱でPCフリーズw

色々と、レス有難うございました。
705デフォルトの名無しさん:2005/09/07(水) 21:16:11
>>698
1ポリゴンあたりの面積も重要。
706デフォルトの名無しさん:2005/09/07(水) 21:22:28
テクスチャについて2つ質問があります。
 1つ目は四角形(三角2枚)のプリミティブに張るテクスチャを画像データの一部分を切り取っている場合、同一の画像を繰り返し描画することは可能かどうかです。
赤青 これで1枚の画像としたとき、
緑白  赤と青の部分だけ切り取って四角形のプリミティブに複数の縞模様をつける。
1枚の画像を全て使用するならアドレシングモードで設定できますが、DrawIndexedPrimitiveで200枚近く一括描画していますので、それぞれに専用のテクスチャを用意して設定していくのは非常に効率が悪いです。

 2つ目はポリゴンに張るテクスチャの作り方です。
地球のテクスチャ1つでも極の部分は赤道直下部分より伸びていて、球体に貼り付けると奇麗な地球に見えます。
こういうテクスチャを作るには、
適当にテクスチャを描く→ポリゴンに貼り付ける←<繰り返し>→テクスチャの描き直し
と言う風にしているのでしょうか。
それともポリゴンに直接模様等を描いてそれを画像データにするようなソフトでもあるのですか?

(長々と読みにくい文章ですみません)
707デフォルトの名無しさん:2005/09/07(水) 21:43:37
>>706
1.
その三角二枚のポリゴン頂点のUV値に、描画したいUV値を割り当てる方法でダメ?
仮に
赤青
緑白
で、赤と青を取り出したいなら、左上の頂点から時計回りにUV値(uv(n))は以下のようになる。
uv0 = {0.0f, 0.0f};
uv1 = {0.5f, 0.0f};
uv2 = {0.5f, 0.5f};
uv3 = {0.0f, 0.5f};
これを描画したい三角二枚のポリゴンの四隅の頂点に対して行えば良い。
いちいちuv値を計算するのがメンドクサイなら、あらかじめ表示したいテクスチャの区画を計算した
テーブルから値を引っ張ってくる。

2.
UVマッピング 球面
で検索をかけるといいかも。
708デフォルトの名無しさん:2005/09/07(水) 21:58:21
DirectX とは直接関係無いのですが、timeGetTime() の精度が 10ms しかないのは僕の環境だけでしょうか(´・ω・`)
う〜ん…… QueryPerformanceCounter を使うしかないのかなぁ……
709デフォルトの名無しさん:2005/09/07(水) 22:00:41
つtimeBeginPeriod(1);
710デフォルトの名無しさん:2005/09/07(水) 22:03:21
対にtimeEndPeriod(1);
711デフォルトの名無しさん:2005/09/07(水) 22:07:58
うぉ。即レスthx。さっそく試してみます orz
712706:2005/09/07(水) 22:13:35
>>707
これだと赤しか表示されないような・・。
赤青
緑白 から赤と青を取り出し

赤青赤青赤青  
赤青赤青赤青
赤青赤青赤青
赤青赤青赤青 と表現したいのです。

赤青 のみの画像であれば、同じく
uv0 = {0.0f, 0.0f};
uv1 = {3.0f, 0.0f};  (V値は何でも問題ないですね)
uv2 = {3.0f, 4.0f};   にし、D3DTADDRESS_WARP等を
uv3 = {0.0f, 4.0f};    指定すれば複数の縞模様ができますが。


2番については検索の仕方が悪かったのか球体マッピングのやり方ばっかり出てきます。
実際球体ではなく白黒パトカーのテクスチャを作りたいのですが、
ボンネットの「く」の字の部分やドアの線が合ったテクスチャが作れなくて困っています。
713デフォルトの名無しさん:2005/09/07(水) 22:26:19
uv0 = {0.0f, 0.0f};
uv1 = {1.0f〜, 0.0f};
uv2 = {0.0f, 0.5f};
uv3 = {1.0f〜, 0.5f};

コレじゃだめなの?
714707:2005/09/07(水) 22:27:52
>赤しか
すまんかった・・・OTL

>赤青 のみ
赤青で描画した四角形ポリゴンを目的の大きさになるまで複数並べるんじゃだめなんすか?
715706:2005/09/07(水) 22:41:58
>>713
同一の色なら問題ないのですが、模様が描かれているので縦長に表示されてしまいます。
>>714
単純に縦横4倍ずつにすると16倍のプリミティブを描画しないといけないことになり、
試した結果かなり重くなりました。
1枚1枚テクスチャをセットしてラップテクスチャで描画をしたほうが若干ではありますが軽かったです。
716デフォルトの名無しさん:2005/09/07(水) 23:01:01
>>715
例題は何とか可能か知れないが
汎用ではないので、出来ないとするべきだろう。
717デフォルトの名無しさん:2005/09/07(水) 23:05:25
>>715
一括描画って、
for(******) {
dev->DrawIndexedPrimitiveUP(****);
}
って感じ?
これだと激しく遅い。
718698:2005/09/07(水) 23:07:07
>>705
マジスカ
719デフォルトの名無しさん:2005/09/07(水) 23:10:20
なんつーか無理だと思ふ…
720706:2005/09/07(水) 23:12:42
>>716
そうですか(´・ω・`)
>>717
dev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, (表示したい四角形の数)*4, 0, (表示したい四角形の数)*2);
だけです。
721706:2005/09/07(水) 23:44:47
色々とレスありがとうございました。
1つ目の質問のほうは出来ないという結論で閉めておきます。
残る2つ目の質問なのですが皆さんはどういう風にテクスチャを作っているのでしょうか。
非常に単純なポリゴン+テクスチャを作ってみましたが、
ttp://vipquality.orz.hm/imageup/file/3946.jpg
見るも無残な姿に・・。
パトカーのように白黒ハッキリしているなら色に合わせて面を作っていけば出来なくもないですが、
ドアの枠線(境界線)などのように細かな模様を付けたい位置に調整するのが非常に困難です。
地球にしろ車にしろ人の顔にしろ1枚のテクスチャ画像に収まっていますが、
こういうのを作るにはどうすればいいのでしょうか?
722デフォルトの名無しさん:2005/09/08(木) 00:49:02
>>721
もしかして、テクスチャってどうやって作るの?って話してる?
ならこの本がオススメ。
http://www.amazon.co.jp/exec/obidos/ASIN/4881663488/
まあ、俺等の範囲じゃないけど。
知っておかないとカッコつかないしね。と思うなら買い。

まあ、掻い摘んでいうと、3Dモデル(左右対称だとする)を作ったら、
真正面から見た図、真横から見た図をウィンドウズのプリントスクリーンキーでとる。
で、とった図に色を塗ってそれをテクスチャにする。
で、モデリングソフトのUVマップの設定に平行投影っていう設定あるべ?
それで色をぬったテクスチャを真正面、真横からそれぞれ平行投影で貼り付ける。
って作業工程らしい・・・。

え?もしかして、そんなことが知りたいんじゃない?(笑)
723デフォルトの名無しさん:2005/09/08(木) 01:35:55
てかスレ違いだろ・・・
724706:2005/09/08(木) 01:37:44
>>722
ありがとうございます。
そういうのが知りたかったのです。
725デフォルトの名無しさん:2005/09/08(木) 05:33:35
>>706
3Dモデルに直接描画できるソフトもあることにはある。
726デフォルトの名無しさん:2005/09/08(木) 05:43:30
今どき直接描画できないソフトはないと思うけど
727デフォルトの名無しさん:2005/09/08(木) 08:19:41
質問です。DirectX9のエフェクトファイルで作った頂点シェーダって
GeForceの3や4でハードウェアアクセラレーション効きますか?
728デフォルトの名無しさん:2005/09/08(木) 12:52:32
>>727
vs_1_1以下ならたぶん
729デフォルトの名無しさん:2005/09/08(木) 13:36:29
カメラがオブジェクトの周りをぐるぐる回るサンプルを作りたいです!!!

カメラ位置(Eye)に RotationX すると、回る事には回るのですが、ただオブジェクトが
回転しているようにしか見えませんでした。
そこで、注視点に同じように RotationX を掛けてみると望んだ結果に近い動きをするのですが、
うまく周りを回ってくれません。
どのような順序で演算すると、カメラがオブジェクトの周りをぐーるぐる回るのが作れますか?
730デフォルトの名無しさん:2005/09/08(木) 13:39:26
>>729
相対的な運動って意味わかるか?
731デフォルトの名無しさん:2005/09/08(木) 13:40:48
とりあえず二次元で図に描いて考えてみろ。
732デフォルトの名無しさん:2005/09/08(木) 14:03:01
>>729
>ただオブジェクトが回転しているようにしか見えません
これ以外になにがしたい?
733デフォルトの名無しさん:2005/09/08(木) 14:18:32
729=幼稚園児並みの立体感覚の持ち主
734デフォルトの名無しさん:2005/09/08(木) 14:31:25
自分がディスプレイをもってぐるぐる回るというのはどうだろう。
735デフォルトの名無しさん:2005/09/08(木) 14:54:58
>>734
そのまま80mくらい投げそうだ
736デフォルトの名無しさん:2005/09/08(木) 15:09:13
くるくる回せる液晶モニタとかいいわね。
>>729 vEye = vAt + α, αは自力で。
737デフォルトの名無しさん:2005/09/08(木) 15:27:04
>>729
吹いたw
738デフォルトの名無しさん:2005/09/08(木) 15:42:53
物体の背後に背景をつけるとか比較対象となる別の物体でも置いたらいいんでね
739デフォルトの名無しさん:2005/09/08(木) 15:55:06
質問です。XP、.NET です。

DirectSound を利用して、WAVE ファイルのストリーミング再生で BGM を流そうとしています。
方法と、スレッドを作成し、バッファの半分が演奏されたら Notify で通知し、もう半分を埋めるのを繰り返す、一般的な方法です。
が、プロジェクトの仕様上、BGM 切り替え時の遅延をできるだけ少なくしたいのです。

そこで、演奏する可能性のある BGM の数だけセカンダリバッファを作成し、全 BGM に対して、
WAVE をオープンすると同時にあらかじめ、ストリームバッファの半分だけバッファに BGM をロードし、
イベント通知用のスレッドを作成しようとしています。

が、こうすると、BGM の数だけのスレッドが待ち状態になり、効率が悪く思えます。
BGM の演奏開始時に、その BGM 用のスレッドを作成することも考えましたが、
スレッドの生成にどれだけ時間がかかるかが分かりません。

こういうときの定石みたいなものはありますでしょうか?
ゲームなどではよく出くわしそうな状況なので、「普通はこうする」みたいなのがあればと思って質問しました。
よろしくお願いします。
740デフォルトの名無しさん:2005/09/08(木) 16:32:48
>>739
1BGMに1スレッドにするから何本もスレッド作ることになるんでは。
俺は1スレッドで複数BGMを再生しているよ
741デフォルトの名無しさん:2005/09/08(木) 16:36:02
>>740
ああ、全くその通りでした・・・。ありがとうございます。
742デフォルトの名無しさん:2005/09/08(木) 17:53:38
質問です。XP、.NET です。
何度も申し訳ありません。

DirectSound を用いたストリーミング再生で BGM を演奏しているとき、
他の音を鳴らすと、BGM が飛ぶというバグが発生しています。
しばらくしたら元に戻るため、(1秒未満の間だけ、ずれた演奏ポイントで BGM が演奏される)
間違ったイベントが通知されているのではないかと考えていました。

調べてみたところ、同じ質問が各所であり、
DirectSound の有名なバグだという記述まで見つけたのですが、(真偽は分かりません)
詳細が調べられず、解決方法が分かりません。
質問が曖昧で申し訳ありませんが、もし本当に有名だとしたら、何かご存知の方、お願いします。
743デフォルトの名無しさん:2005/09/08(木) 18:14:19
イベントの発生が怪しいなら、イベントを使わない実装方法ならうまくいくかな。
すんごく原始的だけど、再生位置を常時チェックして、今どこを再生しているのか見る。
前回の再生ポイントから現在の再生ポイントまでを新しいバッファで埋める。
まあストリーミング再生なんて再生できれば十分なことだし、こんなんでいいかと
744デフォルトの名無しさん:2005/09/08(木) 18:17:35
.NET なら AudioVideoPlayback 使うとか。よく分からんが解決したりして
745デフォルトの名無しさん:2005/09/08(木) 18:52:10
>>742
前に自分で使ったとき、オンボードのサウンドチップで
バッファをハードの方に取るとおかしくなることがあったよ。
746デフォルトの名無しさん:2005/09/08(木) 18:59:59
>>745
試しに Play() に DSBPLAY_LOCSOFTWARE フラグを与え、
全てソフトウェアで再生してみたところ、通常に再生されました・・・。
何でだよおおおお

PCに高スペック要求してしまうかもしれないので、起動時にどちらで再生するかを選ばせるようにしてみます。
ありがとうございました。

>>744
AudioVideoPlayback についても調べてみます。ありがとうございました。
747742:2005/09/08(木) 19:00:38
と、レス番号を名前に入れてませんでした、申し訳ないです。
748デフォルトの名無しさん:2005/09/09(金) 08:03:16
>>746
今時ハードウェアバッファ使う奴なんていないぞ。
余計にバス圧迫するからDX6の時点で打ち切りだ。
749デフォルトの名無しさん:2005/09/09(金) 16:38:25
やっとわかってきました。

注視点に RotationX を掛けたあと、オブジェクトをカメラ位置(Eye)から移動させて、
そしてから RotationX すると望んだ結果になりました。
てっきりオブジェクトを置いてからカメラで撮るような感じかと思ったんですが、
まずはカメラありき、、、なんですね。

そこで新たな疑問です!!!

一周ぐるりと回転させてるはずなのに、二個のオブジェクトがあるとなぜか二周?
ぐらい回ってしまいます。どちらかの RotationX を半分にするのかと思うんですが、
これはオブジェクトの個数が影響するんでしょうか?
750デフォルトの名無しさん:2005/09/09(金) 16:44:40
>>749
とりあえず君は基礎からやりなおしたほうがいいとおもう
751デフォルトの名無しさん:2005/09/09(金) 17:04:04
>>749
まずは君がテレビのカメラマンになったつもりで
固定されたティーポットの全方位を視聴者に見せるには、どうすればいいのか考えろ。

カメラマンがオブジェクトの周囲を回転するだろ? だから、

Camera.Pos = Object.Pos + Radius*(cosθ,sinθ)

以上。
752デフォルトの名無しさん:2005/09/09(金) 17:56:42
カメラ行列は、その概念とは裏腹に、実際は世界を回転させてカメラに
合わせる行列だから、カメラ行列用の関数を利用しないで生の行列を
使うと分かりにくいんだけどな。
753デフォルトの名無しさん:2005/09/09(金) 20:05:18
欝だ氏のうDirectXスレって中級者以上専用ですか?
754デフォルトの名無しさん:2005/09/09(金) 22:26:59
鬱で氏にそうな人は誰でも利用できます
755マイク ◆yrBrqfF1Ew :2005/09/09(金) 23:43:31
カメラが回らなくても急須が回ればいいだろ
756デフォルトの名無しさん:2005/09/09(金) 23:47:16
カメラを動かすのとオブジェクトを動かすのって処理的にはどっちが軽いとかあるの?
それともやっぱりケースバイケース?
757デフォルトの名無しさん:2005/09/10(土) 02:36:09
君は何を言ってるんだね…
758デフォルトの名無しさん:2005/09/10(土) 03:48:37
>>756
この世を終わらそうと思ったら他人を皆殺しにするか、自分が死ぬかどっちがいいの?
759デフォルトの名無しさん:2005/09/10(土) 04:04:25
758は758で馬鹿だな
760デフォルトの名無しさん:2005/09/10(土) 04:24:03
俺は上手いと思ったが
761デフォルトの名無しさん:2005/09/10(土) 04:31:22
この世に、二人っきりだったらどっちでもいいじゃまいか。
762デフォルトの名無しさん:2005/09/10(土) 05:06:19
うぇ
教えてください!!
763デフォルトの名無しさん:2005/09/10(土) 12:27:54
(August2005)でD3DXを使ってDLLを添付しないで済むように作ることはできますか?
また、DirectX8や7を使った時もd3dx9_27.dllは必要になるのでしょうか?
764デフォルトの名無しさん:2005/09/10(土) 14:05:16
げ、もしや August2005 の D3DX は標準で入ってないんかい
……あと、dx8 なら d3dx9_*.dll は必要無いとおもう。多分

ところで「Z 値が同じポリゴン2枚を描画すると後から描いたのが必ず手前に来る」は正しい?
765デフォルトの名無しさん:2005/09/10(土) 14:21:33
>>764
頂点座標がまったく同じなら、D3DRS_ZFUNCの設定による。
デフォルトはD3DCMP_LESSEQUAL。
766デフォルトの名無しさん:2005/09/10(土) 15:28:33
DX9のD3DXCreateTextureFromResourceってbmp以外のフォーマットに対応してないの?
767デフォルトの名無しさん:2005/09/10(土) 15:31:02
>>766
ヘルプくらい読んだらどうだ?
768デフォルトの名無しさん:2005/09/10(土) 15:36:20
>This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga.
だよね。うん、対応してる筈。

……ってことはリソースの組み込み方が変なのか orz
769名無しさん@そうだ選挙に行こう:2005/09/10(土) 17:27:50
>>768
一度自分でバッファに読み込んでInMemoryとか?
むしろ、たくさんファイルがあるならリソースじゃなくデータ用フォルダに突っ込むか
データをまとめて1ファイルに突っ込んでおくのもいいんじゃ。
770名無しさん@そうだ選挙に行こう:2005/09/10(土) 23:37:42
Visual C++ と DirectX8でゲームを作ってます。

質問なんですが、ウィンドウを動かしたり最小化して戻したりすると
画面が一瞬ノイズだらけになったり、直前に動かしていた別のDirectXプログラム
(ゲームなど)の画面が一瞬映ったりするんですが、原因は何なんでしょうか?

デバイスロストって奴なのかな? どう修正すれば分からず困ってます……
771名無しさん@そうだ選挙に行こう:2005/09/10(土) 23:58:11
>>756
どっちも一緒
772名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:33:33
はじめまして。
gshowという動画再生のフリーソフトがあるのですが・・・このソフトを改良しようと思って日々いろいろ勉強しています。
このgshowには、ソースがついているので、改良前に自分でgshowをVisual C++6.0でビルドしようにもサッパリできないのです。
プログラミングに詳しい知人に聞いたのですが、わからず八方塞状態です。ちなみに、gshowの作者とは連絡がとれないのです。

このソースとDirectX8.0以降のSDKとWindows Media Format SDKがあれば、ビルドできるそうです。
今現在、DirectX9(october2004)SDKを導入し、コンパイルしたら下記のようにエラーがでました。
自分なりに解決方法をしらべてはいますが、1週間以上解決法がみつからないままです。
Windows Media Format 9.5SDKをインストールしてはあるのですが・・・きちんと導入できているかわからないです。

このソフトのソースをなんとかビルドできるように、ご指導よろしくお願いいたします。

/////////////// /////////////// /////////////// ///////////////
コンパイル中...
StdAfx.cpp
c:\program files\microsoft directx 9.0 sdk (october 2004)\include\strmif.h(1024) : error C2146: 構文エラー : ';' が、識別子 'HSEMAPHORE' の前に必要です。
c:\program files\microsoft directx 9.0 sdk (october 2004)\include\strmif.h(1024) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー

gshow.exe - エラー 2、警告 0
/////////////// /////////////// /////////////// ///////////////

↓gshowの配布サイト
http://www.vector.co.jp/soft/win95/art/se296143.html?y
773名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:55:54
めぼしいのをビルドしてみたけど、
警告は大量にでるけど一応最後まで終わるよ。

'HSEMAPHORE' が定義されてる箇所を調べてみた?
あとそれのtypedef元のDWORD_PTRはどう?
それの_WIN64とかのifndefが怪しいんじゃないかな。
774名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:09:59
Platform SDKが新しくないとかじゃない?
775名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:27:44
772です。さっそくの御返事ありがとうございます。

773さん
私は、超初心者なので・・・ソースの中身をみても意味を理解できていません。
'HSEMAPHORE' が定義されてる箇所を調べたり・・・というのはできないです。
すいません。

普通に、VC++をインストールして、DirectX9 SDKとWindows Media Format 9.5SDK
インストールするだけでは、ビルドできないということでしょうか?

774さん
何かの本で、最近のDirect X9は、Direct Showが導入されていない
という記事を読み、DirectX9のoctober2004を導入してるわけです。
一方で、Direct ShowはPlatform SDKに含まれているようになったときいたのでが・・・
ですから、古いDirect X9 SDKを入れるかわりにPlatform SDKはインストールしていないです。
776名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:30:45
>>770
ロスト前の内容は保証されない
ウィンドウを戻す前に適切に処理汁
777名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:36:20
>>775
改良しようとしているんじゃなかったのか?
定義を調べるぐらいできるだろ
778名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:01:29
772&775です
777さん
HSEMAPHOREを文字検索するぐらいしかできないです。
何分、自分自身プログラミングのことがわかってないですから。
すいませんが、何をしたらいいのかわからないです。

改良といっても、gshowは重複起動できないので、「重複起動のチェックを外す」ことだけを目標としています。
これについては、大体の見当がついてます。

付け加えですが・・・一番最初に、DirectX9SDK(augsut2005)とPlatform SDKをいれてみたのですが、
やはり上手くいきませんでした。
779名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:24:15
なんとなくだけどVisual C++6.0ってのがダメなんじゃ?VC++.NETで試してみては?
780名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:29:16
てか何でプログラミングやったことないのにVC++がPCに入ってるの・・・
781デフォルトの名無しさん:2005/09/11(日) 19:16:27
>>780
しかも最近売ってない6.0
782名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:36:59
つーかDirectX初心者じゃなくてプログラミング初心者なんだろ?
スレ違いだ。
>>1 読め
783名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:00:31
>778
スレ違いも甚だしい
↓いけ
ttp://pc8.2ch.net/test/read.cgi/tech/1124511889/
784マイク ◆yrBrqfF1Ew :2005/09/11(日) 23:06:49
>しかも最近売ってない6.0

警察の予感♪
785デフォルトの名無しさん:2005/09/12(月) 02:55:26
どうせ割れなら最新版使うだろっての
786デフォルトの名無しさん:2005/09/12(月) 18:08:25
772です。
プログラミングは大学の授業関連で使った程度で久しぶりに使ってるわけです。
なんで「警察の予感♪」なのかわかりませんが、きちんとその当時に、アカデミックパックですが、
家電店にて購入したものなので違法性など微塵もありません。
VC++.NETで試すのも一つの方法かもしれませんが・・・gshow事態は、VC++6.0で作っているので、
VC++6.0を使うことはとんでもない間違いではないはず。
787デフォルトの名無しさん:2005/09/12(月) 18:21:23
>>786
DirectX SDKのOctober 2004はPlatform SDKを必要とする。
最新のPlatform SDKはVC++6ではうごかないので、
Platform SDKのFebruary 2003を導入する必要がある。
788デフォルトの名無しさん:2005/09/12(月) 18:37:01
>>プログラミングは大学の授業関連で使った程度で久しぶりに使ってるわけです。
俺には既にあなたが学生ではないような書き方に思えるのでが

>>家電店にて購入したものなので違法性など微塵もありません。
アカデミックパックは学生の間だけですよ?
789デフォルトの名無しさん:2005/09/12(月) 18:43:43
ライセンス違反だな
790デフォルトの名無しさん:2005/09/12(月) 18:45:52
今3Dのシューティングゲーム作ってるんだけど
ホーミングレーザーがうまい具合に作れないっす。
バーチャロンのサイファーがうつ4つでるレーザーみたいに作りたいんだけど
誰かアドバイス求む。
791デフォルトの名無しさん:2005/09/12(月) 18:53:38
>>788
>>789
MSの場合、卒業後もそのまま使い続けられるはずだけど。
792デフォルトの名無しさん:2005/09/12(月) 18:54:56
>>790
何がうまくいかないのか詳しく
793デフォルトの名無しさん:2005/09/12(月) 18:55:13
>>788
教職員は?
794デフォルトの名無しさん:2005/09/12(月) 19:12:02
>>790
バーチャ論は知らんが
明後日の方向に撃って
高次曲線で補間じゃ駄目なのか?
795デフォルトの名無しさん:2005/09/12(月) 19:13:53
>>790
バーチャロンなんて知らないから画像とってこい画像。
そしたらやり方教えてやる。
796デフォルトの名無しさん:2005/09/12(月) 19:31:38
>>790
オペムー止まりの俺はVIPERUしか知らん。
797デフォルトの名無しさん:2005/09/12(月) 20:47:26
>>772
VisualC++ 6.0
DirectX 9.0 SDK October2004
Windows Server 2003 SP1 SDK
Windows Media Format 9.5 SDK
(OS:WindowsXP)
wmstub.lib 非リンク
hr = WMCreateCertificate(&m_pCert); -> hr = E_FAIL;
でビルドできたわよ。
798デフォルトの名無しさん:2005/09/12(月) 20:55:55
enderStateが不明なデバイスの画面に、確実にポリゴンを頂点色で表示するには
どうしたらよいでしょうか?
他のプロセス(ゲーム)の画面上にFPSをポリゴンで作った数字で表示させようと
しているのですが、一応表示はできたもののFPSのポリゴンの色が変わったり
消えたりします。

D3D9でお願いします。
799デフォルトの名無しさん:2005/09/12(月) 21:10:05
>>800のレス予想
1、エンダ〜♪
2、そういえばender's gameの映画化ってどうなった?
800798:2005/09/12(月) 21:42:45
'R'が抜けてました。
801772:2005/09/12(月) 23:17:28
787さん&797さん
いろいろアドバイスありがとうございます。「windows media format 9.5 SDK」と「Platform SDK」のIncludeとlibraryのリンクを再度見直して、リンクをやり直してみたら、772よりも進みました。しかし・・・・まだ完全にビルドできないです。

hr = WMCreateCertificate(&m_pCert); -> hr = E_FAIL; を追加しましたが・・・・

//////////////////////////////////////////////////////
コンパイル中...
DsControl.cpp
C:\Documents and Settings\take\デスクトップ\gshow100\src\DsControl.cpp(105) : error C2143: 構文エラー : ';' が '->' の前に必要です。
gshow.cpp
コードを生成中...
cl.exe の実行エラー

gshow.exe - エラー 1、警告 0
///////////////////////////////////////////////////////
とエラーが出てしまいます。

ちなみに hr = WMCreateCertificate(&m_pCert); -> hr = E_FAIL;の -> hr = E_FAIL;を追加しない場合は、
/////////////////////////////////////////////////////////
リンク中...
LINK : fatal error LNK1104: ファイル "wmstub.lib" を開けません。
link.exe の実行エラー

gshow.exe - エラー 1、警告 0
////////////////////////////////////////////////////
と出てしまいます。とりあえずここまで進みました。なにか気がついた点がありましたら、ご指導をお願いいたします。私事ですが、明日は仕事で当直なので水曜日以降に、書き込みにたいする返事をいたします。
802デフォルトの名無しさん:2005/09/12(月) 23:23:22
てかプログラミングの知識無いのにどうやって改良すんのよ・・・。
基礎を知ってないと幾らソース眺めても何も出ないよ・・
803デフォルトの名無しさん:2005/09/12(月) 23:28:59
フフフ微笑ましいナア
804772:2005/09/12(月) 23:36:45
hr = WMCreateCertificate(&m_pCert); -> hr = E_FAIL; の意味は、追加ではなくて

WMCreateCertificate(&m_pCert)をE_FAILに代えるってことなのかな?

E_FAILに代えてみても・・・

/////////////////////////////////////////////////////////
リンク中...
LINK : fatal error LNK1104: ファイル "wmstub.lib" を開けません。
link.exe の実行エラー

gshow.exe - エラー 1、警告 0
////////////////////////////////////////////////////

のままです。

確かに、私はプログラミングの知識はほとんどないですが、どうしてもこのフリーソフトを改良(重複起動のチェックをはずす)ことをしなければならないので
どうが見捨てずにご指導ください。よろしくお願いいたします。
805デフォルトの名無しさん:2005/09/12(月) 23:37:36
>>804 そうよw
wmstub.lib は最新のSDKでは必要ないみたいだから
メニューの[プロジェクト]-[設定]-[リンク]のライブラリ欄から
wmstub.lib を削除すればいいわ…
806デフォルトの名無しさん:2005/09/12(月) 23:40:24
どこまで続けるつもりだよ…
807デフォルトの名無しさん:2005/09/12(月) 23:44:53
だから一から全部覚えればいい話じゃん。
全部他人任せかよ。ちょっとは努力しろや。
808デフォルトの名無しさん:2005/09/12(月) 23:57:31
別にプログラミングをしたいわけじゃなくて、
上司かなんかに言われてそういうソフトが必要になったダケ
とかじゃねーのかな。
プログラミングは大学でかじったことあります、って言ったツケが回ってきたとかナ。
809デフォルトの名無しさん:2005/09/13(火) 00:06:07
一度ウィンドウ外にカーソルを移動させないと砂時計のままです。
どうすれば直りますか?
810デフォルトの名無しさん:2005/09/13(火) 00:22:23
>>809
カーソルを一度ウインドウの外に移動させれば直るよ。試してみ?
811デフォルトの名無しさん:2005/09/13(火) 00:27:16
>>810
直りませんでした
どんな原因が考えられますか?
812デフォルトの名無しさん:2005/09/13(火) 00:30:51
>>809-811
??????????????
813デフォルトの名無しさん:2005/09/13(火) 00:33:31
OpenGLスレから飛び火した模様
814デフォルトの名無しさん:2005/09/13(火) 00:34:05
コンパネのマウスのポインタって所でカーソルの形状を全部砂時計じゃなくせば直る
815デフォルトの名無しさん:2005/09/13(火) 00:45:59
よくわかんないけど、とにかく後は
ソースのどこかを2行コメントアウトすれば目標が達成されるみたいよ。
これは自力で見つけて欲しいわね。
816デフォルトの名無しさん:2005/09/13(火) 00:55:50
>>809
::LoadCursor(NULL, IDC_ARROW);
817デフォルトの名無しさん:2005/09/13(火) 01:15:48
>>816
うまくいきました
ありがとうございます
818デフォルトの名無しさん:2005/09/13(火) 21:09:23
XSIのボーンによるスキンアニメーションがよくわからん。
ていうかどこで質問すれば良いのかよくわかんないからとりあえずここで質問してみる。
819デフォルトの名無しさん:2005/09/13(火) 21:39:26
今更DirectDraw始めようと思うのですが
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712601/qid=1126614569/sr=1-4/ref=sr_1_8_4/249-9302812-8897111
参考書としてこれを注文しようと思っているのですが、
持ってる方などいらっしゃれば、参考までにご感想をお聞きしたいです。
820デフォルトの名無しさん:2005/09/13(火) 21:46:40
始める前から、他力本願か・・・
821デフォルトの名無しさん:2005/09/13(火) 21:48:37
ていうか本当に今更だな。
822デフォルトの名無しさん:2005/09/13(火) 21:51:17
>>819
入門向けの本
FPS制御みたいなゲ製作板でFAQになりそうな事が書いてある
もし工学社みたいなリファレンス風が好みなら、その正反対なのでおすすめできない
823デフォルトの名無しさん:2005/09/13(火) 21:51:48
エロゲ屋さんは未だにDX7しか使わせて貰えないのか
824デフォルトの名無しさん:2005/09/13(火) 22:09:49
SDKにDXSetup.exeが入ってなかったんだけどどこ?
825デフォルトの名無しさん:2005/09/13(火) 22:31:09
>>824
どっか
826デフォルトの名無しさん:2005/09/13(火) 22:41:45
>>825
DXSetup.exeみつけたらSDKのバージョン教えてくれ
ヘルプには入ってるって書いてるのに無い
October 2004です
827デフォルトの名無しさん:2005/09/13(火) 22:52:56
>>826
Redist\DirectX9フォルダに入ってる。(October 2004)
828デフォルトの名無しさん:2005/09/13(火) 22:56:06
今凄いことに気づきました
間違えて(December 2004)入れてました
おさがわせして本当にすみません
特に助言いただいた>>827さんにはご迷惑をかけました
今からDirectXと性根を入れなおしてきます
ありがとうございます
829デフォルトの名無しさん:2005/09/13(火) 23:38:38
>>818
AVIDに質問しろよ。
830デフォルトの名無しさん:2005/09/13(火) 23:51:02
>>818
フォーマット公開されてんじゃん。
その前に君はXファイルのスキンアニメーションはできるレベルなの?
831デフォルトの名無しさん:2005/09/14(水) 03:53:08
質問です。XP、.NET です。

DirectPlay8Peer についてです。

IDirectPlay8Peer::Host() を実行したところ、ウィンドウに制御が戻ってくるのにかなりの時間がかかりました(2秒ほど)。
例えば IDirectPlay8Peer::Connect() では、DPNCONNECT_SYNC を指定しないことで
処理を非同期にできますが、Host() ではこれを行う方法はないでしょうか。
スレッドを作成して並列処理を行うしかないでしょうか?

また、Host() が実行されると、DirectPlay8Peer で指定したコールバック関数に
DPN_MSGID_CREATE_PLAYER が届きました。
特に問題ないのですが、ホスト自体がセッションに参加したときにこのメッセージが届くのに不自然を覚え、
MSDN を見ても、このメッセージが送信されるという記述がありませんでした。
これはこういう仕様なのでしょうか。

以上2点ですが、よろしくお願いします。
832デフォルトの名無しさん:2005/09/14(水) 04:07:11
>>831
Hostは起動時に時間がかかる仕様。
MSのソフトのAoKとかもバッチリ固まってくれるよ。
AoKはConnectすらSYNCでやってるっぽい。

DPN_MSGID_CREATE_PLAYERがホスト生成時にも生成されるのは非常に便利。
コールバック引数に渡される構造体のpvPlayerContextの初期化とかをここで行うとよい。
ホストプレイヤーの場合はHost()に渡すときにpvPlayerContextを初期化できちゃうけど、
ユーザーコンテキスト側からDPNIDの参照設定のタイミングとしてはここが最高かと
833831:2005/09/14(水) 04:17:49
>>832
時間がかかるのは仕様ですか・・・。まあ大きな問題はないので、これについてはあきらめます。
メッセージについても理解しました。詳しい説明ありがとうございました!
834デフォルトの名無しさん:2005/09/14(水) 08:38:28
卒研としてラッパーライブラリーを作ろうと思ってんだけど
すでに開発ストップした既存のラッパーライブラリーを少しいじって
俺のものにしちゃっても問題ないよね?
C++とDX9SDKで動くやつにしようかと思ってる
835デフォルトの名無しさん:2005/09/14(水) 09:18:53
知るか。
836デフォルトの名無しさん:2005/09/14(水) 10:03:08
釣りか?w
つーかそんなんで卒研になるのかよ
837デフォルトの名無しさん:2005/09/14(水) 10:36:28
Easy Link Libraryのことですね
838デフォルトの名無しさん:2005/09/14(水) 12:50:23
>>836
友人の卒研がプログラムでOKだったのでじゃあ俺も同じにしようかと
839デフォルトの名無しさん:2005/09/14(水) 12:57:31
プログラムといってもピンキリな訳だが。
840デフォルトの名無しさん:2005/09/14(水) 12:58:48
新しいUpdateを入れてから気づいたのですが、サンプルがほとんど入っていません
おそらく前のバージョンに入っているのでしょうが、古いバージョンをインストールしてなにか問題は発生しますか?
841デフォルトの名無しさん:2005/09/14(水) 13:01:28
フルスクリーン表示/ウィンドウ表示の切り替えは、

1: ウィンドウを非表示にする
2: Device をリセットする
3: ウィンドウのスタイルを変更して表示する

……で合ってますか?
今は上手く動いてるけど、いつ動かなくなるかと思うと心配で心配で。
842デフォルトの名無しさん:2005/09/14(水) 15:29:02
質問です。XP、.NET です。

かなり初歩的でお恥ずかしい質問なのですが・・・。

DirectPlay8Peer を使っています。
DPN_PLAYER_INFO 構造体のメンバに、pwszName というのがあり、型は PWSTR 型です。
サンプルでは、pwszName = L"hogehoge" というように、L という・・・
演算子?か何かよく分からないものを用いて文字列の代入を行っています。
この L は何者なんでしょうか。
また、char[] 型に格納されている文字列をこの pwszName に代入するのはどうすればいでしょうか。
よろしくお願いします。
843デフォルトの名無しさん:2005/09/14(水) 15:35:11
ASCII文字列(1バイト、char形の文字列)を"..."
UNICODE文字列(2バイト、wchar_t形の文字列)をL"..."
で表す。

DirectPlayは基本的にUNICODEを使うのでL"hogehoge"を代入する。
844デフォルトの名無しさん:2005/09/14(水) 15:39:01
あと、char形からwchar_t形に変換するには
mbtowcだったかその辺の関数を使うんだったかな。
俺はもうめんどくさくなってデフォでUNICODE使うプログラムを作ることにしたよw
そのほうがフォントとか自力描画するとき便利なんだわ
845842:2005/09/14(水) 15:52:19
>>843-844
なるほど。文字コードの知識はかなり薄いので、詳しく調べてみます。
詳しくありがとうございました。
846デフォルトの名無しさん:2005/09/14(水) 16:24:03
ビュー行列からカメラ位置を得ることは可能?
847デフォルトの名無しさん:2005/09/14(水) 17:01:50
[Rx,Ry,Rz]   [Px]    [Rw]
[Sx,Sy,Sz] x [Py] = [Ry] x -1
[Tx,Ty,Tz]    [Pz]    [Rz]

R : 転置View行列の1行目
S : 転置View行列の2行目
T : 転置View行列の3行目
P : カメラ位置
848デフォルトの名無しさん:2005/09/14(水) 17:03:41
間違った。正しくはコレ

[Rx,Ry,Rz]   [Px]    [Rw] 
[Sx,Sy,Sz] x [Py] = [Sw] x -1 
[Tx,Ty,Tz]    [Pz]    [Tw] 
849デフォルトの名無しさん:2005/09/14(水) 17:26:56
GUIが使えるのはどのバージョン以降ですか?
850デフォルトの名無しさん:2005/09/14(水) 17:49:54
>>846
カメラ位置をビュー行列で変換したら原点に来るんだから、その逆を考えてみましょう。
851デフォルトの名無しさん:2005/09/14(水) 17:54:41
質問です。XP、.NET です。

DirectPlayPeer8 に関してですが、
自分自信の DPNID を取得するにはどうすればいいでしょうか。

ホストがセッションを構築したとき、ホスト自体にも DPN_MSGID_CREATE_PLAYER が届くため、
セッションに参加したのが自分なのか他人なのかを調べたいのです。
現在は DPN_PLAYER_INFO 構造体の pwszName で比較を行っていますが、
これだとたまたま名前がかぶったときに衝突してしまいます。

よろしくお願いします。
852デフォルトの名無しさん:2005/09/14(水) 17:58:14
そんな餌じゃこの俺は(ry
853851:2005/09/14(水) 18:02:42
あれ、何か勘違いをしていたでしょうか。もう少し考えを整理してみます。申し訳ありません。
854851:2005/09/14(水) 18:07:52
もしかすると、DPNID はセッション参加時に割り当てられるということは、
DPN_MSGID_CREATE_PLAYER が届いたときの処理ではじめて(自分のも含め)DPNID を取得するのですか?

では、セッションに参加したのが自分かどうかを判定するには、IP などの情報から判断するのが適切なのでしょうか。
855851:2005/09/14(水) 18:13:21
dwPlayweFlag・・・

自己解決しましたorz お騒がせしました・・・。
856デフォルトの名無しさん:2005/09/14(水) 18:13:25
>>851
君さ、次々質問してるけど
その件について、中国の了解を取ったのですか? 取ってないでしょ?
アジアの人々はみんな怒ってますよ!
857デフォルトの名無しさん:2005/09/14(水) 18:25:21
DirectPlayはその辺の処理にパターンがあって凄く綺麗にまとまるんだけれど。
それに気づかないうちは単にめんどくさいだけにしか見えないんだよなあ…
858デフォルトの名無しさん:2005/09/14(水) 20:42:11
違うPCで同じプログラムを動かしてて、
timeGetTime()の精度が違っちゃうんですけど、どうしたら良いんですか?

timeEndPeriod(1);//・・・1
timeBeginPeriod(1);
座標 += ミリ秒単位の移動量 * (timeGetTime() - 前のフレームの時間);
前のフレームの時間 = timeGetTime();
timeEndPeriod(1);//・・・2

endPeriodの位置変えてみると
片方の動作がちょっと変わるんだけど、
どうしてだろう…。

グラフィックボード関係あるかな・・・?
859デフォルトの名無しさん:2005/09/14(水) 21:43:42
timeGetTime()が二箇所にあるのは感心できないなあ
始めのtimeGetTimeと次のtimeGetTimeの間にタスク切り替えが
発生したら平気で10ms単位でずれていきそう

現在時間 = timeGetTime();
座標 += ミリ秒単位の移動量 * (現在時間 - 前のフレームの時間);
前のフレームの時間 = 現在時間;
860デフォルトの名無しさん:2005/09/14(水) 22:11:32
timeBeginPeriodとかはプログラムの最初と最後でやっとけば後は放置だろ
861デフォルトの名無しさん:2005/09/14(水) 22:29:27
>>859,860
ありがとうございます。
とりあえずそうしてみます。
862772:2005/09/14(水) 22:31:03
>>805
まだ、うまく行かないですが・・・原因を調査中です。アドバイスありがとうございました。
今回の件をきっかけに、もっとプログラミング勉強しようと思います。
ありがとうございました。

--------------------構成: gshow - Win32 Debug--------------------
リンク中...
uuid.lib(oaidl_i.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください
link.exe の実行エラー

gshow.exe - エラー 1、警告 0
863デフォルトの名無しさん:2005/09/14(水) 22:42:06
>>862
VC6でPlatformSDKのライブラリをリンクするとうまくいかないから、
ライブラリディレクトリ欄から削除(それか下の方に移動)するといいわよ。
864772:2005/09/14(水) 22:47:12
>>863
できました!!ありがとうございました!
これから改良に取り組んで行こうとおもいます。
本当にありがとうございました。
865772:2005/09/14(水) 23:06:20
>>863
改良も、見当をつけていたところを少し修正したら成功しました。
本当にありがとうございました。

ここの皆様のご指摘通り、まだまだ勉強が足らないのは確かなのでこれからじっくり勉強していこうと思います。
ありがとうございました。
866デフォルトの名無しさん:2005/09/15(木) 00:01:20
叩きに耐えてよく頑張った!感動した!

・・・気がする。
867デフォルトの名無しさん:2005/09/15(木) 14:11:04
厚顔無恥乙wwwwwwwwwwwwwwwwww
868デフォルトの名無しさん:2005/09/15(木) 14:53:42
とりあえず某所にあったラッパーライブラリーを
いろいろいじって俺のものにしちゃうことにした
調べたけどベクターとかに登録されてないみたいだし
完全に俺のものとして俺の名前で登録予定
どんな名前のラッパーライブラリーにすっかなーと考えてる
869デフォルトの名無しさん:2005/09/15(木) 14:57:19
ん? 怒って欲しいのか?
870デフォルトの名無しさん:2005/09/15(木) 15:07:54
俺もパクりたいからそのライブラリ教えろ
871デフォルトの名無しさん:2005/09/15(木) 17:07:53
パクりじゃない。インスパイアだろ?
872デフォルトの名無しさん:2005/09/15(木) 17:18:56
じゃあそのインスパイアって方法でコピーするから頼む
873デフォルトの名無しさん:2005/09/15(木) 19:49:08
パクリでもインスパイアでもなく
完全に俺のものにするんで 乗っ取り かな
874デフォルトの名無しさん:2005/09/15(木) 20:07:54
現在も更新が続いてる国産ラッパーライブラリなんて存在しなくね?
875デフォルトの名無しさん:2005/09/15(木) 22:00:10
そもそもラッパーライブラリが必要ってのが理解できぬ。
876デフォルトの名無しさん:2005/09/15(木) 22:07:17
その労力使ってゲームエンジンでも開発したほうがよっぽど役に立つのにね

昔は初期化だけで200行以上書かされた
しかもバグや環境依存を回避するコードを入れたらさらに増える
そういう時代なら役割があったのかもしれない
877デフォルトの名無しさん:2005/09/15(木) 22:25:16
そこらのラッパー使うと余計に分からなくなるから絶対に使わない。
878デフォルトの名無しさん:2005/09/15(木) 22:25:29
>昔は初期化だけで200行以上書かされた
今もじゃん。
879デフォルトの名無しさん:2005/09/15(木) 22:27:18
>しかもバグや環境依存を回避するコードを入れたらさらに増える
今もじゃん。
880デフォルトの名無しさん:2005/09/15(木) 22:28:21
今はネスト5段とかないだろ?マシにはなってるんだって
881デフォルトの名無しさん:2005/09/15(木) 22:32:18
DirectXも使いやすくなったよね。
今更WinAPIで作りたいなんて思わない。
882デフォルトの名無しさん:2005/09/15(木) 22:34:27
WinAPIも9x系捨てていいならそれなりに使いやすい気がする。
883デフォルトの名無しさん:2005/09/15(木) 22:48:35
DXSTRUCTURE s;
s.dwSize = sizeof(DXSTRUCTURE);

こういうの無くなって良くなった。
884デフォルトの名無しさん:2005/09/15(木) 23:04:41
>>883
DPN_PLAYER_INFO dpi;
dpi.dwSize = sizeof(DPN_PLAYER_INFO);

ってのならあるけどこれとは違うんだろうか。
885デフォルトの名無しさん:2005/09/15(木) 23:07:26
初期化ルーチンなんて一回書いてしまえばほぼ使い回し、
レンダリング部分も特に面倒なことなんてないし。
強いて言えば、デバイスロスト時の動作周りか?
エラー処理部分も例外使えば結構すっきりするし、
どう考えてもラッパーの必要性を感じない。

ところで、アームレストの布地が破れた。
1年も持たないのか。。。
886デフォルトの名無しさん:2005/09/15(木) 23:07:34
>>883
DXSTRUCTURE s;
ZeroMemory(&s,sizeof(s));
s.dwSize = sizeof(DXSTRUCTURE);
じゃね?
887デフォルトの名無しさん:2005/09/15(木) 23:12:09
>>885
駄目。MSのAPIはソースぐちゃぐちゃになって、ラッパー書かなきゃわけわかんね。
せめて機能ごとにまとめておいてくれないと、どういう意図でそのAPIを使ってるのか、
作った人間に聞かないとわからない。ラッパーじゃないにしてもブロックごとにコメントはつけておいてほしい。
でも、ラッパーになっていてくれれば、ラッパーで提供されてる関数ごとに何をやっているかの概要だけはすぐに掴める。
888デフォルトの名無しさん:2005/09/15(木) 23:23:53
>>886
DXSTRUCTURE s = {sizeof(DXSTRUCTURE)};
889デフォルトの名無しさん:2005/09/15(木) 23:27:48
そういう知らない人がいてもおかしくないマニアックな仕様を
わざわざ使うのはどうかと思うよ。
890888:2005/09/15(木) 23:33:58
えー
891デフォルトの名無しさん:2005/09/15(木) 23:45:47
>そういう知らない人がいてもおかしくないマニアックな仕様を
どこが?
892デフォルトの名無しさん:2005/09/15(木) 23:52:19
>>883>>886>>888は記述が違うだけで同じことしてるの?
893デフォルトの名無しさん:2005/09/16(金) 00:03:31
>>886>>888は同じ結果になるはず。
>>883はdpi.dwSize以外の構造体メンバは未初期化。
894デフォルトの名無しさん:2005/09/16(金) 00:13:25
2Dの単純描画を3Dで書いてる自分に矛盾を感じる。
895デフォルトの名無しさん:2005/09/16(金) 01:03:23
>>892
覚えなくていいよ。
>>888はまともな人間なら書かないコードだから。
896デフォルトの名無しさん:2005/09/16(金) 01:37:54
無知を正当化するとはレベル高すぎですね。
ローカル仕様じゃなく、cの規格にのっとっているはずだし
Win32にも最初のメンバがサイズであるような構造体が大量にあるわけだが。
897デフォルトの名無しさん:2005/09/16(金) 01:52:12
こんなん使ってるのやねうら某ぐらいだろ。
898デフォルトの名無しさん:2005/09/16(金) 01:52:15
どんなスパゲッティなコードでも規格にのっとっていれば良いのか?
レベル高すぎだな。

速度や容量その他のメリットがあるならわからなくもないが、、
違わないなら、わかりやすい(多く知られてる一般的な)書き方をするのが当然だと思っていたが。
899デフォルトの名無しさん:2005/09/16(金) 03:02:46
    _, ,_  パーン
 ( ‘д‘)  <馬鹿にレスつけんな!
  ⊂彡☆))Д´)>>898
900デフォルトの名無しさん:2005/09/16(金) 04:59:02
この手の話題はレスが伸びる 相変わらず
901デフォルトの名無しさん:2005/09/16(金) 05:10:01
何処のスレでも言語に話が及ぶと伸びるよな。
それぞれ言語スレが立ってるだろうに。
902デフォルトの名無しさん:2005/09/16(金) 07:42:24
つまり、ごく当たり前の仕様に則ったノウハウも知らない香具師ほど自分を否定された気になって吼えるんだよ。
903マイク ◆yrBrqfF1Ew :2005/09/16(金) 07:52:39
俺の脳が摂動された。
904デフォルトの名無しさん:2005/09/16(金) 08:09:58
結論はでてる。
仕様にも糞仕様ってものが存在する。
特にプログラムにおいて可読性は最優先事項だ。
一体>>888で何が得られるものがあるのか激しく疑問。
就職作品なら書いてあった時点で落とす。あまりにもキモ過ぎ。
905デフォルトの名無しさん:2005/09/16(金) 08:45:18
↓のスレで聞いてみたよ。このスレはDirectX関係で頼むよ

【初心者歓迎】C/C++室 Ver.21【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1125743714/147-
906デフォルトの名無しさん:2005/09/16(金) 11:47:41
Direct3Dで3Dのモデルをフォームに表示したいと思っています。
当方、VisualStudio.NET(2003じゃない)を持っており、DirectX9をインストールしました。
VisualStudio.NETで、(できればVBで)
DirectXインストールから、マウスドラッグで簡単な3Dモデルが動かせるようなプログラムを
書くまでを解説してるようなサイトってないでしょうか?
907デフォルトの名無しさん:2005/09/16(金) 12:25:20
>>906
DX9のヘルプとサンプル
908デフォルトの名無しさん:2005/09/16(金) 12:30:11
DirectPlayでDPN_PLAYER_INFO構造体のpvDataに文字列Sを入れる場合
dwSizeはstrlen(S)+1でいいんですよね?
909デフォルトの名無しさん:2005/09/16(金) 12:30:59
間違えました。DwDataSizeです。
910デフォルトの名無しさん:2005/09/16(金) 14:14:07
>>886
HOGESTRUCT d = { sizeof(d) };

として、dwSize の初期化と残りのゼロ埋めを
まとめてやってしまうコードもたまに見るな。
911デフォルトの名無しさん:2005/09/16(金) 14:23:33
>>910
>>888-
912デフォルトの名無しさん:2005/09/16(金) 19:34:42
>>917
初頭関数では表せません
913デフォルトの名無しさん:2005/09/16(金) 22:27:27
>>910
俺は0埋めがメインで、sizeof dはついでだと思っている。
914デフォルトの名無しさん:2005/09/16(金) 22:59:02
BC++5.5やmingwのようなフリーのコンパイラで
DirectX9による3Dプログラミングは出来ますか?

Webの情報だと古いものしか見つかりませんでした。
ご存知の方いらしたら教えていただけないでしょうか?
915デフォルトの名無しさん:2005/09/16(金) 23:00:36
>>914
やったことないけど、DirectXSDK を落としてきてパス設定とか設定すれば問題ないはず
916デフォルトの名無しさん:2005/09/17(土) 12:06:06
class CCharData {
 public:
  CCharData() { ZeroMemory(this,sizeof(CCharData)); }
  LPD3DXMESH pMesh;
  D3DMATERIAL9* pMeshMaterials;
  LPDIRECT3DTEXTURE9* pMeshTextures;
  DWORD dwNumMaterials;
} ;

enum { MAX_CHAR = 10 } ;
CCharData CharData[MAX_CHAR];

という風にCCharDataクラスを使ってXFileを読み込み表示したのですが
 for (int i=0; i<MAX_CHAR; i++) {
  SAFE_RELEASE( CharData[i].pMesh );
  CharData[i].pMeshMaterials = NULL;
  CharData[i].pMeshTextures = NULL;
 }
でメモリ解放してもメモリリークしてしまいます。
クラスでなく構造体でやるとメモリリークしませんでした。
どこが悪いのか教えていただけないでしょうか。よろしくお願いします。
917デフォルトの名無しさん:2005/09/17(土) 12:11:20
クラスとか構造体とかとは関係ないんだけど
>  CharData[i].pMeshTextures = NULL;
これはまずいんじゃない?
これもRelease呼び出さないと。
918デフォルトの名無しさん:2005/09/17(土) 12:22:07
>>CCharData() { ZeroMemory(this,sizeof(CCharData)); }
どうでもいいけど、これクラスが仮想関数持ってたら
仮想関数テーブルポインタも初期化しちゃって、そのうちアボンよ。
919デフォルトの名無しさん:2005/09/17(土) 12:27:56
>>917
>SAFE_RELEASE( CharData[i].pMesh );
よくわからんけど、これがそうなんじゃね?
920デフォルトの名無しさん:2005/09/17(土) 12:55:33
>>917
ポインタはリリースできないとか言われちゃったので、無理やりNULLしてました;
>>918
おおお;そんなことが。
変数ごとにNULLか0かします。
>>919
SAFE_RELEASEでメッシュをReleaseしてNULLを入れてるんですが迷子です

ZeroMemoryをやめてD3DMATERIAL9とLPDIRECT3DTEXTURE9をポインタで
無いようにしてやってみます。
ありがとうございます。
921916:2005/09/17(土) 14:22:50
できました!
初歩的なミスでしたすみません;

for (int i=0; i<MAX_CHAR; i++) {
 for (int j=0; j<CharData[i].dwNumMaterials; j++) {
  SAFE_RELEASE( CharData[i].pMeshTextures[j] );
 }
 delete[] CharData[i].pMeshTextures;
 delete[] CharData[i].pMeshMaterials;

 SAFE_RELEASE( CharData[i].pMesh );
}

と配列の削除を入れたらメモリリークが無くなりました。
922デフォルトの名無しさん:2005/09/17(土) 14:36:33
>>921
あー、そういやそんなのあったなぁ。
STLのvectorとstringとlistはお手軽に使えて便利だから
ちょっとだけかじってみればそういう苦労なくなるよ。
923デフォルトの名無しさん:2005/09/17(土) 21:14:40
>>922
そんなのあったなぁって、おまい、、、
924デフォルトの名無しさん:2005/09/18(日) 01:22:16
コンパイルしたexeを直接実行するとMPEGファイルが実行できるけど、
デバッガの中から実行するとRenderFile()で0x80040200エラーになってしまう。
何か手がかりありませんか?
環境はVisual C++ 2003, WinXP Proです。
925デフォルトの名無しさん:2005/09/18(日) 01:29:12
MPEGファイルがdebugフォルダの中にある
926924:2005/09/18(日) 01:50:27
"MPEGファイルが実行"→"MPEGファイルが再生"の間違い。

>>925
ファイルはプロジェクトと別フォルダに置いてあります
927デフォルトの名無しさん:2005/09/18(日) 01:53:27
MPEGファイルへのパスを、フルパスで渡すと?
928924:2005/09/18(日) 01:58:09
渡してます。

#defineFILENAME L"c:\\home\\foobar.mpg"

....

IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
HRESULT hr;

hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_INPROC,IID_IGraphBuilder,(LPVOID *)&pGraphBuilder);
hr = pGraphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *)&pMediaControl);
hr = pMediaControl->RenderFile(FILENAME);

ここでエラー。
929924:2005/09/18(日) 01:58:42
渡してます。

#defineFILENAME L"c:\\home\\foobar.mpg"

....

IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
HRESULT hr;

hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_INPROC,IID_IGraphBuilder,(LPVOID *)&pGraphBuilder);
hr = pGraphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *)&pMediaControl);
hr = pMediaControl->RenderFile(FILENAME);

ここでエラー。
930デフォルトの名無しさん:2005/09/18(日) 04:30:29
今作りかけのゲーム用のライブラリがあります。
これのインターフェイスはほぼ素のC++であり
依存する他のライブラリはDirectXぐらいです。
これらの設定を入力する為にダイアログを作らなきゃならなくて
windows用のGUIフレームワークが必要になるんですが
何使うのがベストですか?

思いついた一覧
MFC → IDEのサポートが効くしシンプルな構造で使いやすそう、独自コンテナとかウザい、この板の評判が悪い。

ATL/WTL → 軽い、この板の評判はいい、ドキュメントがソースのみ、MFCそっくりなのであえて選ぶメリットが不明瞭。

JavaSwing → 今風な作りで楽に書けそう、Windows+DirectXの構成でわざわざJavaを選ぶのはアクロバティック過ぎないか?
そもそもDirectX動くのか?

.NET WindowsForm → 今風な作りで楽に書けそう、.NETの仕様を一から覚えるの大変、MC++なんとなく嫌。
931デフォルトの名無しさん:2005/09/18(日) 05:07:34
Win32プラットフォームのライブラリならって事だけど、
どれも全く経験が無いなら、MFCが扱いは楽で導入の問題も比較的少ない。

.netは、クライアントに.net Framework入れるのが前提になるので、
俺は配布するようなライブラリには、絶対選ばない。Javaも同様。

ATL/WTLが個人的には一番オススメ。使用経験ないならこの際いかが?w
MFCそっくりだから選ぶメリットが不明瞭というけど、
それはGUIフレームワークを使用して、プログラミングした時だけの話でしょ。
結果生成される物は、似て非なる物だもの。
932デフォルトの名無しさん:2005/09/18(日) 05:41:10
初心者がMFCやるとDoc/Viewだけでわけ分からなくなって撃沈するんじゃないの?
933デフォルトの名無しさん:2005/09/18(日) 05:43:57
そんなに複雑なもんでもないと思うけどDoc/Viewは。
あれで躓くようなら、他のGUIフレームワークどれでも躓くような気がするが。
それだったらいっそのこと、VCLでも薦めるよ。
934デフォルトの名無しさん:2005/09/18(日) 05:46:14
MFCだからといってDocViewを強制される訳では無いのだが・・・
935マイク ◆yrBrqfF1Ew :2005/09/18(日) 06:11:01
>windows用のGUIフレームワークが必要になるんですが
>何使うのがベストですか?

もはやQt以外に選択肢は無いな。
936デフォルトの名無しさん:2005/09/18(日) 06:13:33
DirectX 7 SDK 日本語ドキュメントが欲しいのですが、MSサイトに行っても
8以降のバージョンしか置いてありません。
他にインターネット上で入手する方法はありませんか?
937デフォルトの名無しさん:2005/09/18(日) 06:40:25
すみません自己解決しました。
938デフォルトの名無しさん:2005/09/18(日) 09:40:40
MFCわかんね。
939デフォルトの名無しさん:2005/09/18(日) 09:53:52
ダイアログだけ使うならMFCも難しくはないでしょ。
940デフォルトの名無しさん:2005/09/18(日) 10:07:14
ダイアログだけで良いなら、APIだけで作るのもありかと。
たかがゲームの設定ダイアログだけの為に、フレームワークだの何だのは大げさな気がするけど。
941デフォルトの名無しさん:2005/09/18(日) 11:58:39
そう、ダイアログなんてAPIだけで十分。
プログラムからやるのは、初期値の設定と最後に
ダイアログから値を取得することくらいだし。
942デフォルトの名無しさん:2005/09/18(日) 15:05:26
APIベタでやるんならWTLでいいじゃん
943デフォルトの名無しさん:2005/09/18(日) 15:42:34
WTLなんて今更感ありすぎ
944デフォルトの名無しさん:2005/09/18(日) 15:43:46
今の時代WTFだよな
945930:2005/09/18(日) 16:21:50
お答えありがとうございました。
お答え参考にしてMFCで行くことにします。
Qtというのもちょっと調べてみます。
946デフォルトの名無しさん:2005/09/19(月) 01:38:21
マウスカーソルの位置によって速度が変わります。なぜでしょう?
解像度を640x480にすると、SDKサンプル全てで発生します。
947デフォルトの名無しさん:2005/09/19(月) 02:18:28
DirectX9の勉強をするために、本を3冊ほど買ったのですが、
発行年度がバラバラで、
1.2004年1月
2.2004年11月
3.2005年3月
となっていて、一番新しいやつを読むと、2004年の途中で大幅に仕様が変更になったらしいのですが、
この場合どうしたほうが良いでしょうか?

自分として考え付くのは、発行年度が一番古い本のバージョンのDirectXを入れて、古い順に勉強していって、
次の本に行くごとにその本にあったDirectXのバージョンを入れる
または、一番新しいやつを最初に勉強して、古いやつのコードを新バージョンのDirectXにあうように書き換える(出来るかどうかわかりませんが)。
位なんですが、どうでしょうか?
948デフォルトの名無しさん:2005/09/19(月) 03:15:54
2chでは糞本が多いとされるDirectX関連本をまとめて3冊買う蛮勇にまずは乾杯。
仕様変更っちゅーても、初心者が学習する範囲においては気にするようなモンじゃないよ。
いーんじゃない? 新しいので。なんの本買ったのか知らんけど。
949デフォルトの名無しさん:2005/09/19(月) 11:49:28
>>947
SDK付属のサンプルコードだけで十分。
Microsoft謹製
950947:2005/09/19(月) 11:52:01
一応アマゾンでは評価が高いやつを買ったんですけど、
1.DirectX9シェーダプログラミングブック
2.DirectX9ゲームプグラフィックスログラミング Ver.2
3.DirectX9 DirectX Graphics
を買ったんですが、古いやつほど、ページ数が多く色々書いてあるので・・・
仕様変更は、ライブラリが変更になったり、関数が変更になったりと書いてあったと思うんですが、
古いコードを新バージョンに対応させることって出来ますかね?
951947:2005/09/19(月) 11:54:30
>>949
SDKのヘルプとかも一応見たんですけど、どうもPC上に書いてある長文は苦手で、
本で見れるものがほしかったので。
952デフォルトの名無しさん:2005/09/19(月) 12:26:20
というか今現在出版されてる書物で最新のDirectXの仕様に対応してる奴ってないよな?
SDK付属のドキュメントも日本語版は古いままだしなぁ。
953デフォルトの名無しさん:2005/09/19(月) 12:33:23
そりゃ最新の仕様が出たのが8月だしな
954デフォルトの名無しさん:2005/09/19(月) 12:34:38
一番古いのがシェーダプログラミング
とか書いてあるし

どのみち後ろの二つで先に基礎を学ぶことになるのでは
955デフォルトの名無しさん:2005/09/19(月) 15:41:25
DirectX SDKのチュートリアルに当たる部分に仕様変更なし
956デフォルトの名無しさん:2005/09/19(月) 18:15:28
>> パフォーマンスの低下を招くことは間違いないようなので、正方形にします。
>現在テスト可能な環境、SavageIX、G200、G400MAX、Radeon9600Proで、
>トランスフォーム済み頂点で1024×512のテクスチャを640×480に切り出して
>ひたすら描画するだけのテストをしてみましたが、
>512×512を二枚使って二回描画した方がパフォーマンスが落ちてしまいました。
>
>間違いないと断言されていらっしゃるので、何らかのテストされたのだと思いますが、
>具体的にどの製品でどのような描画の仕方でパフォーマンスの低下が確認できたのでしょうか?

2回レンダしたら遅くなるの当たり前だろ知障
2048*1024と1024*1024から640*480だけ抜いて比較しろよ染色体異常者
957デフォルトの名無しさん:2005/09/19(月) 18:17:23
おこったごーん
958デフォルトの名無しさん:2005/09/19(月) 18:24:54
>>956
2048にする意味がわからんのだが、
そもそも1024*512と512*512二枚とどっち使うかという話だったんでは?
俺は素直に1024*512使うが。
959デフォルトの名無しさん:2005/09/19(月) 18:33:34
>>958
あいつは正方形のほうが速いということに反応し、
512*512*2と1024*512で比較したんだよな?

正方形が速いという話はテクスチャ1枚のことであって、
2枚と1枚を比較してる時点で頭おかしいだろ?

640*480で正方形と長方形を比較するなら、
これがすっぽり収まる2048*1024と1024*1024だろ?

元々の512*512*2と1024*512の話は別で、
どれぐらいの大きさまで使えるのか聞いてただけだろ?
960デフォルトの名無しさん:2005/09/19(月) 18:36:23
>>959
何言ってるの、君?
961デフォルトの名無しさん:2005/09/19(月) 18:42:28
>1024×1024ぐらいのサイズのテクスチャはたいてい作れます。
>ただ、なしさんが言われたようにパフォーマンスは保障されません。
>工夫して、無駄をなくすことを心がけましょう。
>例えば、よく使う640×480や800×600の背景などは、実は512×512のテクスチャ2枚の中に納まります。
>これだけで、1024×1024のテクスチャよりも半分節約できます。

こいつがそもそも頓珍漢
同一人物か?
962デフォルトの名無しさん:2005/09/19(月) 18:53:37
つーか、>>956ってどこへのレスなんだ。
アンカーぐらいちゃんと使ってくれよ。
963デフォルトの名無しさん:2005/09/19(月) 19:08:31
今c++を勉強してるんだが、掲示板みてるとJAVA
の方が主流?そこで質問

            C VS JAVA


使いやすさ、流通度、就職や職場ではどちらが使われているか
の点から意見求む。
964デフォルトの名無しさん:2005/09/19(月) 19:10:04
>>963
スレタイも読めない人には教えられません。
というか先に日本語勉強しましょう
965デフォルトの名無しさん:2005/09/19(月) 19:25:18
>>963
C++とDirectXが主流ですよ
使いやすいし、これ以外流通してない
966デフォルトの名無しさん:2005/09/19(月) 19:33:25
JAVAは趣味程度なのかな?
ここの板みてるとJAVAが多いような気がする。
967デフォルトの名無しさん:2005/09/19(月) 19:43:29
>>966
スレタイみて死ねw
968デフォルトの名無しさん:2005/09/19(月) 20:20:35
何故BBXの話題がここで?
969デフォルトの名無しさん:2005/09/19(月) 21:17:47
わざとJavaの話題を出して、C++使いにJavaを叩いてもらいたい、
よくある厨のパターンですか。
970924:2005/09/19(月) 22:31:17
924です。

相変わらず解決しません。
MPEG1, AVIは問題なくデバッグ可能ですが、MPEG2だけだめみたい。
(作りたいのはMPEG2なので、他のフォーマットが再生できても)
アドバイスをお願いします
971デフォルトの名無しさん:2005/09/19(月) 22:44:53
MPEG2だからじゃね?
972デフォルトの名無しさん:2005/09/19(月) 23:41:51
D3DXPlaneFromPointsに指定する頂点の順番は
時計回りでよろしいでしょうか?
973デフォルトの名無しさん:2005/09/20(火) 00:03:28
test
974デフォルトの名無しさん:2005/09/20(火) 00:05:41
このスレを埋めたいと思うのは俺だけだろうか?


埋め
975デフォルトの名無しさん:2005/09/20(火) 00:05:48
そろそろ次スレ
976デフォルトの名無しさん:2005/09/20(火) 00:09:06
次スレは>>985よろ
977デフォルトの名無しさん:2005/09/20(火) 00:17:22
>>972
時計回りなら平面の法線(a,b,c)が上、逆なら下になるわ。
(v2-v1)と(v3-v2)の外積(の正規化ベクトル)ね。
平面の式としては同じだけど、
平面の向きが関係する関数(D3DXPlaneDotCoordとか)では
結果が変わってくるみたいね。
978デフォルトの名無しさん:2005/09/20(火) 00:22:42
とりあえず法線が上になる時計周りにしておけばいいわ。
D3DXPlaneFromPointNormalってのもあって、こっちの方がわかりやすいかもね。
979974:2005/09/20(火) 00:30:41
親切な解説どうもありがとうございました。
こういうドキュメントに載ってないのは、やっぱり
実験実証なのでしょうか。て、それしかなさそうですね。
面倒くさがりな自分....
980デフォルトの名無しさん:2005/09/20(火) 02:41:55
サービスプロバイダとポートだけ設定して
hr = lpDirectPlay8Peer->Connect(&dpnAppDesc, prgHostAddr, prgDeviceInfo,
NULL, NULL, NULL, 0, NULL, NULL, NULL,
DPNCONNECT_OKTOQUERYFORADDRESSING | DPNCONNECT_SYNC);
if(FAILED(hr)) {
//エラー処理
return;
}
として実行したらIP入力ダイアログに何を入力してもエラー処理に行かないで
ダイアログが再度出てくるのですがDPNCONNECT_OKTOQUERYFORADDRESSINGっていうのは
そういう仕様なんですか?
キャンセルしてもダイアログがまた出てくるから強制終了しか出来ないorz
981980:2005/09/20(火) 02:49:18
あー、DirectPlayのサンプルを試したらちゃんとエラー処理に行ってるなぁ。
どこで何間違えてるんだろう…orz
982デフォルトの名無しさん:2005/09/20(火) 03:41:46
>>980
IP は例えばどんな風に入力してる?
983デフォルトの名無しさん:2005/09/20(火) 04:52:57
埋め

後17
984デフォルトの名無しさん:2005/09/20(火) 04:53:56
次たってないのに梅んな
985デフォルトの名無しさん:2005/09/20(火) 05:01:23
鬱だ氏のう DirectX (Part 15)
http://pc8.2ch.net/test/read.cgi/tech/1096649788/
986デフォルトの名無しさん:2005/09/20(火) 07:25:43
>>982
IPアドレスはコーディング段階では未入力で
実行時にDPNCONNECT_OKTOQUERYFORADDRESSINGによって作成されたダイアログに入力してます。
適当な数字、文字列、ポートを指定せずにIPを入力してOK、もしくはキャンセルを押した場合は
即座にIP入力ダイアログが再出現します。
127.0.0.1:2345などの形式で入力した場合は、接続試行をした後再度ダイアログが出ます。
987デフォルトの名無しさん:2005/09/20(火) 08:45:49
>>986
DirectPlayのサンプルが、きちんとエラー処理に飛んでるなら、
絶対どこかに違いがあるはず。
ほんの些細な事でもいいから具体的な違いを見つけ出すしかないかと
988980:2005/09/20(火) 09:59:30
>>987
原因が判明しました。

bool OnConnect () {
//省略
hr = lpDirectPlay8Peer->connect(...);

if(FAILED(hr)) {
MessageBox(NULL, "接続失敗", "ERROR!", MB_OK | MB_ICONWARNING);
return false;
}

としているのですが、このOnConnect()が誤ってループの中に書かれているというお約束のミスでしたorz
お騒がせしました。申し訳ないorz
989デフォルトの名無しさん:2005/09/20(火) 10:18:49
次スレよろしく
990デフォルトの名無しさん:2005/09/20(火) 15:47:09
【C++】 DirectX初心者質問スレ Part6 【C++】
http://pc8.2ch.net/test/read.cgi/tech/1127198808/
991デフォルトの名無しさん:2005/09/20(火) 15:48:02
>>990
乙&梅
992デフォルトの名無しさん:2005/09/20(火) 17:04:47
それにしてもなんで【C++】なんだろw
993デフォルトの名無しさん:2005/09/20(火) 17:19:46
【C++】【C♯】ならともかく何で【C++】を2つ書く必要があるのかってのは前から思ってた
994デフォルトの名無しさん:2005/09/20(火) 17:20:14
おまじない
995デフォルトの名無しさん:2005/09/20(火) 17:24:19
結界張ってんだよ
996デフォルトの名無しさん:2005/09/20(火) 17:27:14
C++ってしーぷらぷらって読むよりしぽぽって読むほうが楽しいよ、ね?
997デフォルトの名無しさん:2005/09/20(火) 17:52:02
ume
998デフォルトの名無しさん:2005/09/20(火) 17:52:36
@2ハァハァ
999デフォルトの名無しさん:2005/09/20(火) 17:53:19
1000は俺が取る!
誰かが1000を狙ってる余寒
1000デフォルトの名無しさん:2005/09/20(火) 17:53:49
俺が1000だ!!!!!!!!!1111111111111111111
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。