■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

【C++】 DirectX初心者質問スレ Part5 【C++】
1 名前:デフォルトの名無しさん :2005/07/22(金) 20:20:54
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
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
http://www.microsoft.com/downloads/details.aspx?FamilyID=3ad9f0d1-8d81-40c8-9815-924dcd4cd2c5&DisplayLang=en

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
いいお

15 名前:9 :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


19 名前:9 :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
んなわけない。

29 名前:25 :2005/07/23(土) 21:46:37
ttp://www.c3.club.kyutech.ac.jp/~sukiyaki/
こちらのサイトを見ながら勉強してるのですが、こちらの「テクスチャ」の項には
DirectXは2のn乗じゃないと画像を作れない、画像のサイズは全て256*256で統一した方がいい、
とあったのでそう思い込んでました。

テクスチャの読み込み方法をD3DXCreateTextureFromFileしか知らないのですが、
一般的にキャラクタースプライトを表示する手順というのはどのようなものなのですか?

30 名前:969 :2005/07/23(土) 22:13:58
assertがスルーされた
一体どこから呼び出されてるのか
皆目検討がつかん・・・。

31 名前:969 :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を使用し、自分で正しい実装をする。

42 名前:25 :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でどう?

50 名前:969 :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された次の要素の判定が飛ばされるような気がします。

52 名前:969 :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
ニートじゃないけど見てみます
ありがとう

61 名前:969 :2005/07/26(火) 10:49:04
>>53
今頃ですが、やってみました。
シンプルで感動した!コレでやってみます
ありがとう

62 名前:デフォルトの名無しさん :2005/07/26(火) 12:04:23
イテレータはSTLの基本中の基本だからちゃんと勉強しようぜ

63 名前:55 :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の最適化ありのコンパイラに差し替えて使うように。
最後の一行は訳わかめだしふざけ過ぎ。

65 名前:55 :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を
ちゃんと設定しているか?

76 名前:71 :2005/07/29(金) 03:05:09
>>73
SetTexture( 0, NULL )
これでラインがきちんと白色で描画されました
どうもありがとう

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

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

SettextureStateState() に D3DTOP_DISABLE を
渡すのが正しい処理なのでしょうか?
実際に試してみたら、この方法でも白色で描画されました
これでいいのかな?

77 名前:71 :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ってフラグで同期・非同期を選択できましたよね。


83 名前:82 :2005/07/29(金) 18:49:38
一部修正です。

具体的には、自前のレンダーターゲットに、ピクセルシェーダーを使って描画し、
  ↓
具体的には、規定のバックバッファにピクセルシェーダーを使って描画し、


84 名前:82 :2005/07/29(金) 19:10:45
ageます

85 名前:デフォルトの名無しさん :2005/07/29(金) 19:48:19
DrawXXX()どころかEndScene()やPresent()すら描画が終了している
保証はないみたいだよ。(SDKドキュメントに書いてある)
描画コマンドとの同期はIDirect3DQuery9で調べてみると幸せかも。
あとV-BlankはGetRasterState()で自前で検出できるみたいだからそっちも試してみたら?


86 名前:82 :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時間近く捜してます (´ー゚#)

88 名前:71 :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時間近く捜してます
だから何?

93 名前:87 :2005/07/30(土) 00:21:44
もう見つかりませんよー
計算の仕方がわかりませんよ・・
ソースみたら多少はつかめると思うんです
うざいかもなのでこれで最後 だめなら諦めます

さ ん ぷ る く だ さ い みっからないんです、よろしくお願いします

94 名前:デフォルトの名無しさん :2005/07/30(土) 00:38:34
>>88
あやしいという訳ではなく、足りないということ。
レンダーステートというのは明示的に変更しない限り保持される。
最初のDrawPrimitiveと次のDrawPrimitiveでエフェクトを描画効果を変えたいなら
当然ステートを変えなきゃならんでしょ。
テクスチャの影響を無くしたいのなら、テクスチャのサンプリング自体を止めるのが正道。
それが>>78

95 名前:71 :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年版を両方探しました。
だれか居場所をご存じの方教えてください。


108 名前:107 :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はもういらん

111 名前:107 :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
>>137
>>66-70

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
哲学的だな。

141 名前:121 :2005/08/04(木) 00:01:35
>125
解放しないとメモリーリークしませんか?

>126
どこのメモリを使っているのか自明でないと不安なんです。


142 名前:デフォルトの名無しさん :2005/08/04(木) 00:30:18
>>141
p_GroundBuf->Lockの中の人がせっせとメモリを確保してくれるのだから、その前に自分でnewを書く必要はない。

143 名前:121 :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 は増幅をサポートしていない。
と書いているのですが………

150 名前:144 :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がボリュームコントロールのスライダーの位置最大ということでしょうか?


153 名前:144 :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;
}

161 名前:158 :2005/08/05(金) 20:49:40
>>159
レスありがとうございます。
法線関係調べましたら座標と法線逆に指定してました(ノ∀`)

162 名前:156 :2005/08/05(金) 23:58:22
>>157
ありがとうございます。
おかげさまでうまくいきました。

・・・なんで気がつかなかったんだろう。

163 名前:デフォルトの名無しさん :2005/08/07(日) 20:24:43
DirectInputなんですが、接続しているジョイスティック一覧を取得するときに
ジョイスティックの名前を取得できませんか?
コントロールパネルのゲームコントローラーで出てくる名前を取得したいんです。

164 名前:163 :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
・・・・・・やっぱり、これかな(笑)

185 名前:184 :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
却下

195 名前:186 :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なんでは

202 名前:197 :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言語の勉強した方がいいかと…
ヘッダとかエラーメッセージを見たら分かることなんだし。

205 名前:197 :2005/08/12(金) 00:50:50
戻り値のHRESULTの
DEC値が -2005530516
DXGetErrorDescription9で見てみると
Invalid Call

呼び出し無効?引数が間違ってるって事でしょうか…?

206 名前:デフォルトの名無しさん :2005/08/12(金) 00:51:58
DirectX 8.1のSDKって今でも手に入りますか?

207 名前:206 :2005/08/12(金) 01:50:27
すいません、自己解決しました。ありがとうございました。

208 名前:デフォルトの名無しさん :2005/08/12(金) 01:59:06
>>197
D3DXCreateFontのドキュメントを良く見るんだ。
戻り値について解説がある

209 名前:197 :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
>>224
http://homepage3.nifty.com/tosikazu/pch/pchREP4.html

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
デザパタスレの常連キチガイがこちらにも来たみたいだな


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.