【C++】 DirectX初心者質問スレ Part16 【C】at TECH
【C++】 DirectX初心者質問スレ Part16 【C】 - 暇つぶし2ch41:デフォルトの名無しさん
08/02/12 11:09:06
>>40
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

42:デフォルトの名無しさん
08/02/12 14:02:42
一方俺は簡易ソフト音源を作ってMIDIファイルを自前で鳴らせるようにした
修羅の道だがなー

43:デフォルトの名無しさん
08/02/12 14:15:40
DirectXというか作法に近い質問かもしれませんが、

LPDIRECT3DDEVICE9は、
グローバルで持っていいものなのでしょうか?

それとも、描画する関数に引数として持たせるべきでしょうか?
void 描画管理(pDevice)
{
...
描画(pDevice)
...
}


44:デフォルトの名無しさん
08/02/12 16:06:42
んなもん好きにしろよ

45:デフォルトの名無しさん
08/02/12 16:42:27
描画クラスのメンバとして持たせるのが一般的です

46:デフォルトの名無しさん
08/02/12 17:11:43
>>41
ありがとうございます。Win32の方でしたか。ちょっと使うぐらいなら断然こっちでしょうね・・・。
>>42
ソフト音源って、まさか自前のWAVEをMIDIデータにあわせて鳴らしてるんですか?
踏み込みたくねーー!すごいよ

47:42
08/02/12 18:52:34
実はそんなにすごく無かったり・・・修羅の道ってほどでもないわ

DirectSoundで効果音を鳴らすくらいは誰でもやるっしょ?
そしたら次に、任意の音程を付けられるようにする
それを任意のタイミングで鳴らしたり止められるように管理する

あとは音の仕上がりをどこまでこだわるか次第
こだわらなければ意外と簡単なのよね

でもoggとかで鳴らしちゃったほうが圧倒的に楽w

48:デフォルトの名無しさん
08/02/12 21:09:30
MPTRACKとか言うソフト使ったらmidiをmp3に変換できたんで、やっぱり
DirectSoundになりそうです。家のPCでmidi再生すると分解能が低いのか
テンポが躓くような感じだったので、これも解決しそうです。

49:デフォルトの名無しさん
08/02/13 22:18:35
D3DXのベクトル関係の関数を使い続ける人と別に用意する人とどちらが多いのでしょうか

50:デフォルトの名無しさん
08/02/13 22:52:17
3D空間上に、リアルな
「炎」や「ビームのような光」、「爆発」など
特殊な効果のオブジェクトを表示させるにはどうしたら良いのでしょうか?

もしかしたら基礎知識なのかもしれませんが、初心者なもので・・。
よろしくお願いします。

51:デフォルトの名無しさん
08/02/13 23:21:26
パーティクルの事を聞きたいのか?


52:デフォルトの名無しさん
08/02/13 23:26:12
>>49
俺は別に持ってるよ
なんでかというと、D3DXに依存すると
Win32にも依存することになって、
いらないモノも一緒に入り込むのがイヤだからだ。
BOOLとかDWORDとか名前空間なしのブツとか。

53:デフォルトの名無しさん
08/02/13 23:28:29
なんだ自己満足か


54:デフォルトの名無しさん
08/02/13 23:45:48
俺は普段プログラムする時は大抵INT,FLOATなど全てVC依存で書いてるよ

55:デフォルトの名無しさん
08/02/13 23:55:04
DirectX使ってる時点で描画レイヤはWin依存を避けられないわけで

56:デフォルトの名無しさん
08/02/13 23:59:24
D3DXのベクトルや行列の関数、CPUが対応してる拡張があれば使って高速化すると聞いたことがある
ただ、それが微妙な精度の差を生んで、CPUが違うとSTGのリプレイなんかがズレたりするとか
自分で確認はしてないが…
リプレイ等がいらないなら、D3DXの関数使っといた方が高速化を期待できるんじゃない?

57:デフォルトの名無しさん
08/02/14 01:46:15
D3DXの行列が速いとか、どこの都市伝説だよ(w


58:デフォルトの名無しさん
08/02/14 05:45:32
>>57
> D3DXの行列が速いとか、どこの都市伝説だよ(w

59:デフォルトの名無しさん
08/02/14 07:15:23
OS 依存避けたきゃ普通は OpenGL 使うわな。

60:デフォルトの名無しさん
08/02/14 14:09:40
最大テクスチャサイズの制限を回避する方法を教えてください。

1枚7680x2048の画像を同解像度の専用ディスプレイにスプライト表示させたいのですが、
テスト環境は普通のSVGAディスプレイなため、エラーが出てしまいます。

61:デフォルトの名無しさん
08/02/14 14:12:03
たくさんの小さなテクスチャに分割してタイル状に貼り合わせる

62:デフォルトの名無しさん
08/02/14 14:18:37
いえそういうチキン技を教えてほしいんじゃなくて、(それぐらい知ってますし)
何か自前で読んでコピーすれば回避できるとか聞いたんです。

63:デフォルトの名無しさん
08/02/14 14:20:33
自前で3Dエンジンを組む

64:デフォルトの名無しさん
08/02/14 14:20:57
スプライトなら2Dエンジンでいいか

65:デフォルトの名無しさん
08/02/14 14:36:42
>>61
その方法でやってみます。

>>64
デジカメで撮った写真を等倍で表示するビューア作ってるんですが、
最近の10Mピクセル超えの場合、ぱらぱらやった時に表示が遅すぎて
DirectXを使ってみようと思った次第です。

が、何分素人なもので右も左もわからない状態で、エラーでまくり
色々制限があるという事が判明し困っていた次第です。

66:デフォルトの名無しさん
08/02/14 15:03:28
対応するテクスチャサイズは環境によっても違うからな。
まあ1024×1024ぐらいならどの環境でも使えると思うから
それで小分けタイルでいいんじゃねーの?

67:デフォルトの名無しさん
08/02/14 15:03:47
>>65
DirectXを使ったからって魔法のように速くなったりはしないよ。
その程度で遅いってのは単純に組み方が悪いだけ。
「ぱらぱら」の意味が分からんが、スライドショー的なことを言っているなら
DirectXを使う意味が全くない。

68:デフォルトの名無しさん
08/02/14 15:06:41
カード性能がよければDirectX使う方がまあ早いだろう。

69:デフォルトの名無しさん
08/02/14 15:12:27
>>67
いや、あるだろ。
グラボ積んでるなら、システムメモリーからVRAMよりも、VRAM間の方が断然早いわけで、
先にVRAMへ画像を読み込んでおけば、大きな画像ほどVRAM間の方が早く表示されるはず。
例えば、hamanaなんかはDirectX使って表示するビューアだったはず。

70:デフォルトの名無しさん
08/02/14 15:14:22
まあ別にDirectXじゃなきゃVRAM扱えないわけじゃないけどな

71:デフォルトの名無しさん
08/02/14 15:23:16
メッシュは表示されるが割り当ててあるはずのテクスチャが
表示されない場合、まずどの辺から疑ってかかるべきですか?

SUCCEEDED( D3DXCreateTextureFromFileEx(...) )が通ってる
(=画像を読んではいる)ところまでは確認できてます。

72:デフォルトの名無しさん
08/02/14 15:37:53
>>71
とりあえず固定機能パイプラインなのか
頂点・ピクセルシェーダーなのかくらい書こう

それすら関係ないところだと
頂点情報の中にテクスチャ座標がきちんと格納されてるかとか

73:デフォルトの名無しさん
08/02/14 15:57:53
>>70
と言うからにはもちろん使えるんでしょうな?(・∀・)ニヤニヤ

74:デフォルトの名無しさん
08/02/14 16:01:42
>>72
固定機能かシェーダーなのかわかりませんがDirectX 9についてるサンプルプログラムです
全部テクスチャが表示されないんです
画像を読んでるところも問題ないですしセットしてるところも通ってました

一応パソはこれです Pentium3-1G 512MバイトRAM 8GバイトHD Milenium-2M SB Windows XP SP2

75:デフォルトの名無しさん
08/02/14 16:06:34
> D3DXの行列が速いとか、どこの都市伝説だよ(w

一応、D3DXの場合、ランタイムでSSEとかが利用可能かチェックして、使えれば使ってるみたいだし、かなりの最適化はされているはず。
自分で普通にC++で書いたコードよりは速いんじゃない。


76:71
08/02/14 16:14:15
>>74 勝手に便乗すんなw
>>72
固定機能かシェーダーなのかはわからないですが
下記URLサンプルのCMapModelクラスを移植しておかしくなりました。
URLリンク(www.cmagazine.jp)

元のサンプルは正常に表示されるのでどこかで移植ミスやったか、あるいは本家SDKの
チュートリアル頼りに組んだDirect3Dの初期化処理周りがおかしいかとか考えていたのですが
(最初はメッシュも表示されなかったがClearでZバッファ消してなかった)

77:71
08/02/14 16:47:12
ちょっと試行錯誤してて気づいた点があったので補足。

・移植元と問題ので同じメッシュを作りD3DXSaveMeshToX()で
Xファイルを吐きださせたところMeshNormalsの値が違う
移植元は0.000000;1.000000;0.000000;が延々と続くが
問題の方は0.250000;0.500000;0.000000;<br>0.500000;0.500000;0.000000;と
2行ごとに0.25ずつ増えていき24で0に戻るループになっている。

・メッシュの壁と床に別々のテクスチャを張り付けているが、テクスチャファイルを
入れ替えたところ、表示されているメッシュの色が入れ替わった。
(片方が微妙に黄ばんでいる。ちなみにテクスチャは両方ともモノクロ)

つまり
・テクスチャを読めてはいる。かつ反映・表示もされている。
・反映のされ方がおかしいか、初期化の仕方がおかしいかで
ちゃんとテクスチャの模様が表示されるところがツルッツルになっている
・しかしどこがおかしいのかまでは突き止められていない。

78:デフォルトの名無しさん
08/02/14 17:00:51
とりあえず1ポリで試してみろ

79:デフォルトの名無しさん
08/02/14 17:49:25
>>70
明示的にVRAMに確保できるわけじゃないし、Vistaだとシステムメモリに
確保されてしまうけどね。

等倍表示程度では、DirectXを使う意味は全く無い。
スライドショーなら、ユーザの入力を待たずに次の画像を読み込んでおくとかの
工夫の方が遥かに大事。

>>77
テクスチャ座標が設定されてないだけかと。

80:71
08/02/14 18:20:01
ありがとうございます。解決できました。
構造体D3DVERTEXの定義がおかしかったのが原因でした。

81:デフォルトの名無しさん
08/02/14 18:27:41
ワロス

82:デフォルトの名無しさん
08/02/14 23:04:32
質問者なりすまししてフザけてるバカでトンマな能無しが居るので質問者はトリップでもつけれ。

83:デフォルトの名無しさん
08/02/14 23:36:33
OpenGLのNVidia拡張を使うのは機種依存のうちに入るの?

84:デフォルトの名無しさん
08/02/15 02:21:38
DicrectSound を使うための
サンプルコードなのですが

//聞き手の位置の設定
//(x,y,z) ... 3D空間上の座標
void CWaveControl::SetListenerPos(double x,double y,double z)
{
if(lpDS3DListener!=NULL)
lpDS3DListener->SetPosition(D3DVAL(x),D3DVAL(y),D3DVAL(z),DS3D_IMMEDIATE);
}

error C3861: 'D3DVAL': 識別子が見つかりませんでした
というエラーがでてしまって 先に進めない状況です
どうしたら解決するでしょうか?


85:デフォルトの名無しさん
08/02/15 19:44:56
>>84

D3DVALUEなら知っている。
ただの float。

typedef float D3DVALUE;


86:デフォルトの名無しさん
08/02/15 19:49:03
ぶっちゃけdoubleってほとんどつかわないよな

87:デフォルトの名無しさん
08/02/15 19:55:45
3D だと使わないだろうね。
逆に科学計算だと float が役に立たないが。

88:デフォルトの名無しさん
08/02/15 20:02:09
俺はむしろ、3Dゲー制作で 256bit 浮動少数とか使いたい。
特に物理演算。float 市ねといいたい。


89:デフォルトの名無しさん
08/02/15 20:22:57
URLリンク(up2.viploader.net)

90:デフォルトの名無しさん
08/02/15 20:28:04
みやみやなにやってんの?

91:デフォルトの名無しさん
08/02/15 22:03:49
>>88
具体的にどんな演算をしていて精度が足りなくなったの?

92:デフォルトの名無しさん
08/02/15 22:16:54
ミサイルの弾道計算だろ

93:デフォルトの名無しさん
08/02/15 22:28:18
>>85

確認してみたのですが
D3DVAL で間違いないです


94:デフォルトの名無しさん
08/02/15 22:50:43
>>93
何を確認してみたのよ

95:デフォルトの名無しさん
08/02/15 22:55:50
>>93
たぶん参考にしてるものがめちゃくちゃ古いバージョンなんだよ


96:デフォルトの名無しさん
08/02/15 23:25:01
>>94
参照してるコードですが

>>95
たしかに 参照してるページ自体
古いものでした
別のサンプルを探してきます

ありがとうございました

97:デフォルトの名無しさん
08/02/15 23:43:33
floatは駄目だけどdoubleではOKです、なんて
それはちょっと違うだろ。
自分のソフトが誤差に対応出来てないだけだろ。
double並みのダイナミックレンジが欲しいってなら別だが、
本当に必要なのかあやしいもんだ。
って、俺もこれを克服出来なくて挫折した部類な訳だが。




98:デフォルトの名無しさん
08/02/16 00:46:32
D3DVALは型じゃなくてD3DVALUE型を生成するマクロだよ。
#define D3DVAL(val) ((float)val)

99:デフォルトの名無しさん
08/02/16 01:12:36
どっちみちそんなの標準装備のだと他で上手くいかないんじゃないか?

100:デフォルトの名無しさん
08/02/16 01:36:59
肝心なこと書き忘れたけど、7までのd3d.hにはあるけど
8以降はない>D3DVALマクロ

101:デフォルトの名無しさん
08/02/16 02:19:38
VC使ってる奴にとってマクロは
インテリセンス機能が働かなくなる嫌がらせにしか見えない

102:デフォルトの名無しさん
08/02/16 03:12:38
単一色で塗りつぶされたテクスチャを作りたいのですが、サイズや色が
変わる仕様です。どうするのが一番簡単でしょうか?

103:デフォルトの名無しさん
08/02/16 08:49:01
単一色ならテクスチャである必用はありません。

104:デフォルトの名無しさん
08/02/16 09:13:28
>>103
>単一色ならテクスチャである必用はありません。
いえディフューズとテクスチャでは色が異なりますから、
正確な色を必要とするときはテクスチャである必要がありますよ。

たとえばマテリアルは256階調でしかやれませんが、
テクスチャなら1024階調まで表現できます。

105:デフォルトの名無しさん
08/02/16 09:32:36
正確な色が出せないのは固定機能ならステートの設定を理解していないか、
シェーダなら書き方がおかしいだけです。
自分の頭が悪い理由を他に求めるのはやめましょう。

106:デフォルトの名無しさん
08/02/16 10:25:40
>>105
たとえばD3DRGBマクロは256階調になっていますよ。
これ以上の何を理解しろというんでしょうか。

107:デフォルトの名無しさん
08/02/16 10:46:06
色が変わるのは精度の問題ではなく計算方法が間違っているからです。

108:デフォルトの名無しさん
08/02/16 11:44:58
確かに単一色ならテクスチャを使う必要はなさそうだな。
シェーダ定数やテクスチャブレンディングファクタで代用出来るだろう。
(>>104のようにレンジを考えなければ)
だけど>>103の指摘は余計なお世話なんじゃないの?

109:デフォルトの名無しさん
08/02/16 11:52:04
マテリアルで良いじゃんっちゅー話なんじゃねーの。余計なお世話とも思わんが。
ところで、単一色を「正確に」モニタに表示するのにレンジを気にする意味がわかりません。

110:102
08/02/16 13:16:27
レス、ありがとうございます。
発想が良くなかったみたいなので元の問題の方を教えてください。
ある色で塗りつぶされた背景に文字列を表示しようと思っています。
背景は動きます。文字列も変化します。
文字の色は黒にする予定ですが、変わるかもしれません。
これを10~50程度表示します。
どの様にするのが良いでしょうか?

マテリアルは今からぐぐってきます。

111:デフォルトの名無しさん
08/02/16 13:37:33
背景塗りつぶされてるのに
背景が動くとか言ってることに不安を感じる
正しく直せ

112:デフォルトの名無しさん
08/02/16 14:11:52
質問です。
以下のサイトで
URLリンク(www.geekpage.jp)
ローカルの動画ファイルを再生するにはIMediaControl->RenderFileを使用する事が分かったのですが、
自分でメモリ上に展開した動画データを直接再生する方法が分かりません
何か方法はあるでしょうか?
宜しくお願いしますm(__)m

113:デフォルトの名無しさん
08/02/16 17:17:11
スレリンク(tech板)

114:デフォルトの名無しさん
08/02/16 21:15:54
>>113
誘導ありがとうございます
そちらの方へ行ってみます

115:デフォルトの名無しさん
08/02/17 21:16:31
すみません質問です。
LPD3DXMESHに入った巨大なメッシュを絵画する時に
「カメラからどの辺の距離まで絵画するのか」を制御するにはどうすればよいですか?

116:デフォルトの名無しさん
08/02/17 22:17:38
絵画するって面白い言葉だな

117:デフォルトの名無しさん
08/02/17 23:19:32
普通は描画な

118:デフォルトの名無しさん
08/02/17 23:26:48
さらに巨大になると壁画とか

119:デフォルトの名無しさん
08/02/17 23:32:59
小さくなると漫画か。

120:デフォルトの名無しさん
08/02/17 23:39:14
総合するとこういうことか?

D3DXMatrixPerspectiveFovLH( D3DXMATRIX* pOut, FLOAT fovy , FLOAT Aspect , FLOAT manga , FLOAT hekiga );

121:デフォルトの名無しさん
08/02/18 01:12:05
>>115
メッシュの各頂点のうち、カメラに最も近い点までの距離を
カメラの近平面の距離とすればいいんじゃね?
もしくはバウンディングボリュームでもいい。

122:デフォルトの名無しさん
08/02/18 01:56:45
Far Clipping 以前に、絵画しちゃっている時点でちゃんとレンダリングできているのかどうかが心配。


123:デフォルトの名無しさん
08/02/18 02:10:44
>>122
「絵画しちゃっている」という言葉を使い続けている時点で日本語ができているのかどうかが心配。

124:デフォルトの名無しさん
08/02/18 04:04:11
新しく覚えた言葉を使いたい年頃なんだろうねぇ
うんうん、分かるよ
俺も幼稚園の頃そうだった

125:デフォルトの名無しさん
08/02/18 07:05:22
マスタリングDirectXとかいう本買って飛行機のxファイル読み込んで表示して
左右に揺らす。っていうところまで来たんですけど、パラメーターの設定多いわややこしいわ
で泣きそうなんですが、ここさえ乗り切ったら後は楽ですか?

126:デフォルトの名無しさん
08/02/18 08:35:58
>>125
その本は知らんが、正直DirectXの関数は全部そんな感じ

127:デフォルトの名無しさん
08/02/18 08:37:17
>>123
「絵画しちゃっている」という皮肉に本気で突っ込んでいる時点で本当に日本人か心配。

128:デフォルトの名無しさん
08/02/18 09:43:04
>>125
その本おれも買ったけど分かりにくくて結局ネットで解説してくれてるサイト見て勉強した
ある程度分かってから見てみたらあぁこうやって書くといいのか、とか分かって
かなりいい本だけど正直一からDirectX勉強する用には向いてないと思う
内容は初歩的なことだけど解説とか少なくてDirectXまったく知らないと分かりにくい
とりあえずDirectXはWinAPIみたいに最初はつらいけどある程度分かってくると
楽になるからGoogle駆使してがんばれ

129:デフォルトの名無しさん
08/02/18 17:10:42
DirectXは

・引数の指定の複雑さに嫌気がさしてラップクラスを作る
・欲がでてきて、「OpenGLも使える様にすれば汎用的になるんじゃね?」と妄想する
・VectorクラスとMatrixクラスを作って力尽きる

ここまで来て初心者です

130:デフォルトの名無しさん
08/02/18 17:58:46
>>129
それどこの俺?

131:デフォルトの名無しさん
08/02/18 19:53:42
ラップクラスを作るだけで力つきました

132:デフォルトの名無しさん
08/02/18 19:58:20
とりあえず絵画して挫折した

133:デフォルトの名無しさん
08/02/18 19:58:33
似たようなの作っては捨てて後に残るはゴミばかりって感じ

134:デフォルトの名無しさん
08/02/18 20:17:07
DirectXに限らず、無駄なコードを書くのは初心者

135:デフォルトの名無しさん
08/02/18 20:53:29
だが、無駄なコードを書いているときが一番楽しい。

136:デフォルトの名無しさん
08/02/18 21:05:51
勉強には無駄なコード書くのが一番

137:デフォルトの名無しさん
08/02/19 00:17:34
初心者は黙って絵画してろ

138:デフォルトの名無しさん
08/02/19 01:13:20
正直一回作っちゃえばあとはそれをコピペしてちょこちょこっと値かえるだけ

139:デフォルトの名無しさん
08/02/19 08:16:06
まぁ構造的に使いまわせる部分は多そうだよな
実際にはそうそう巧くいかないもんだが

140:デフォルトの名無しさん
08/02/19 12:57:47
セーブファイルを作りたいんですが、文字型配列が上手く書き込めません。
TCHAR a[10];
…略…
fprintf(sfp,"%10c",a);
…略…
ファイルを見ると文字化けしています。

141:デフォルトの名無しさん
08/02/19 13:02:31
ヒント:マルチバイト文字列

142:デフォルトの名無しさん
08/02/19 13:04:02
さらに大ヒント:スレ違い

143:デフォルトの名無しさん
08/02/19 14:46:44
アニメーションメッシュ、スキンメッシュを表示するプログラムはできたのですが、
例えばびっくり箱のような、
両方が含まれているXファイルを表示すると、
アニメーションメッシュのオブジェクト(箱)が変な位置に表示され、
かつアニメーションがされません。
スキンメッシュの方(じゃばらみたいなもの)は正常に表示されます。
1ファイルのアニメーションメッシュ、スキンメッシュ両方を表示する方法を教えてください。


144:デフォルトの名無しさん
08/02/19 15:11:45
まずはデータがどうなってんのか。

145:デフォルトの名無しさん
08/02/19 15:17:15
>>144
DXViewerでは正しく表示できているので、
データには問題ないと思ってます。

146:デフォルトの名無しさん
08/02/19 15:46:10
じゃあDXViewerを参考にすればいいんだな。

解決。

147:デフォルトの名無しさん
08/02/19 17:26:43
相対座標が間違ってるから変な位置に表示されるんだよ
座標計算を見直せ

148:143
08/02/20 00:11:19
解決しました。
頂点ブレンディングをオンしたまま
アニメーションメッシュの描画をしてました。


149:デフォルトの名無しさん
08/02/20 05:57:14
directXの3dを初めて間もない者です。MFCで作成していてCSplitterWnd を使って二つにウィンドウを分割して、片方には画像、片方には3dモデルを表示したいのですが、どうしてもエラーが起こってしまいます。
メニューから画像を読み込もうとすると終了してしまうのです。directxとそれ以外は混在できないのでしょうか?


150:デフォルトの名無しさん
08/02/20 06:58:11
できます

151:デフォルトの名無しさん
08/02/20 08:01:12
ボーンアニメーション再生サンプルって、SDKのどれですかね。

152:デフォルトの名無しさん
08/02/20 14:25:42
>>149
要点が伝わってない、とりあえず画像を読み込もうとしている関数を教えれ。
それと、一部分にDirectXを使うだけならView Matrixでウィンドウ上の一部を設定するだけでいい。

153:デフォルトの名無しさん
08/02/20 15:02:22
>>151
一体どこを探したら見つからないんだってくらいに
Sample Browserにそのまんまのモノが。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch