トップページgamedev
1001コメント352KB

鬱だ氏のう DirectX (Part 7)

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。02/12/10 17:34ID:tkEwMMYm
DirectXについてマターリと技術情報交換&雑談するためのスレッド。
初心者用相談室では扱わないような少し高度な話題も受け持つ。

■ 過去スレ
Part 1 http://piza.2ch.net/tech/kako/966/966655286.html (プログラム板)
Part 2 http://pc3.2ch.net/test/read.cgi/tech/997101556/ (プログラム板)
Part 3 http://game.2ch.net/gamedev/kako/1005/10051/1005119775.html
Part 4 http://game.2ch.net/gamedev/kako/1016/10162/1016276254.html
Part 5 http://game.2ch.net/test/read.cgi/gamedev/1027351925/
Part 6 http://game.2ch.net/test/read.cgi/gamedev/1033920036/
0103名前は開発中のものです。02/12/22 16:14ID:mBDSZwTf
>>99
実はプログラム技術板にもDirectXスレがあったり…

鬱だ氏のう DirectX 2
http://pc3.2ch.net/test/read.cgi/tech/997101556/l50
0104あぼーんNGNG
あぼーん
0105名前は開発中のものです。02/12/22 17:22ID:sSsEI5R3
以前DirectX7で作ったノベルゲームをDirectX8で作り直そうと思いやってみたのですが、
テクスチャを使うと背景画像やキャラ画像が512x512になってしまいます。
やはりサーフェイスを使うべきでしょうか?
DirectX8のスプライト機能は重いって聞くけど、
ポリゴンにテクスチャを貼るようにしたほうがいいのでしょうか?
0106名前は開発中のものです。02/12/22 17:37ID:IeNHUVjA
WinAPIで組むかテクスチャをよりでかいサイズを使うぐらいしか解決策がねぇな。
後は7以前で組むとか。
0107名前は開発中のものです。02/12/22 17:47ID:ab12EPgU
DX9の2D描画系ではダメか
0108名前は開発中のものです。02/12/22 18:01ID:sSsEI5R3
>>106
DX8の2D系はあまり良くないみたいですね。
もう少し弄ってみてダメそうなら諦めます。

>>107
DX9はまだ触ってないのでなんとも言えません。
触るのはもうちょと先ですね・・・
0109名前は開発中のものです。02/12/22 19:06ID:Zc9XiYaJ
8は中途半端だから、俺はまだしばらく7を使うよ。
7なら大抵の環境で動くしな。1年後くらいに9に移行する。
0110名前は開発中のものです。02/12/22 20:55ID:O6Yda65i
今から9やってそのまま一年経過させれば良いのでは?
0111名前は開発中のものです。02/12/22 23:33ID:3R93okVP
DirectX8.1を使ってメッシュの頂点配列やマテリアルなどのオプション子データを
抜き出して、メッシュを表示しながらそれらを編集するプログラムを作って
います。
D3DXLoadMeshFromXofでメッシュを作ると、そのメッシュXfileDataの中に
あるマテリアルリストのデータやメッシュノーマルのデータ等の子データが
GetNextObjectで取得できなくなってしまいます。先にその子データを取得すると今度は
D3DXLoadMeshFromXofの方でエラーがでるため、多分この関数内でGetNextObjectを
やっているのだと思います。そのせいでこの関数が子を取得するとこのメッシュデータ
の子を自分で取得できなくなる、という風に考えているのですが、どうにかして
GetNextObjectでの子オブジェクトの参照カウントを元に戻す方法ってありますか?
AddrefやReleaseをしてみても何も変化はないです。教えて下さい。
011211102/12/22 23:36ID:3R93okVP
>先にその子データを取得すると今度は
>D3DXLoadMeshFromXofの方でエラーがでるため

間違えました。エラーはでないのですが、マテリアルリスト等の子データを
持たないメッシュができてしまい、表示がおかしくなります。
0113あぼーんNGNG
あぼーん
0114名前は開発中のものです。02/12/23 13:40ID:NO9DtWWS
なんでDX9SDKのC++のサンプルにはSkinnedMeshがあるのに、
Managed DirectX(C#とVB.NET)にはないんだろう。
単に省略しただけなのか、使えない理由があるのか。
0115名前は開発中のものです。02/12/23 15:55ID:EfpKXfeu
Managedで書きにくいサンプルは全部はしょったとか。
あまりに遅くて泣く泣く削った… では無い事を祈る。
0116名前は開発中のものです。02/12/23 16:11ID:qFc82hVW
DXチームにC#の熟達者がいないんだよきっと
011711402/12/23 23:44ID:NO9DtWWS
どーも
まー、たいした理由でないといいですな。
0118名前は開発中のものです。02/12/24 01:15ID:JJdtC4Ut
DXチームにC#に興味ある奴がいないんだよきっと

やつらは3Dがやりたいんであって、C#やVBは上からのお達しで
仕方なくやってるdake

0119名前は開発中のものです。02/12/24 04:52ID:U9xcR896
単純に労力の問題じゃないか?俺としては初めてC#対応したのにこれだけの
数のサンプルを用意してきた事に驚いたけど。

本音を言うと、C#のサンプルなんか用意するよりもD-MAPやMRTのサンプルを
作って欲しいんだが。毎度のことだけど、売りであるはずの新しい機能の
サンプルが無いんだよな。
0120名前は開発中のものです。02/12/24 06:10ID:IMP3us1S
超初歩的な質問だけど、教えて。

DX9落としたんだけど、サンプルがコンパイル出来ません。
UINTPTRが未定義とか言われる。
basetsd.hてのに宣言されてるけど、エラー出ていてるヘッダファイル
D3D9.h(かな?)には、#includeそのものがない。
どうなってるんでしょうか?
同じエラー出た人います?
(オプション>ディレクトリのパスは通してます(C:\DXSDK\include))
0121名前は開発中のものです。02/12/24 06:18ID:6zRcQ9qZ
>>120
そのディレクトリの検索順は一番上にageてあるか?
0122名前は開発中のものです。02/12/24 12:23ID:RrtXDOZR
DX9キター
0123名前は開発中のものです。02/12/24 20:46ID:CjExnJI6
>>105
テクスチャサイズは2の累乗にしなくちゃいけないんじゃなかったっけ?
0124名前は開発中のものです。02/12/24 20:51ID:8FHlCXa7
DX9来てもマターリしてるなぁ。
0125名前は開発中のものです。02/12/24 22:14ID:sve9Duu3
>>123
DX8から部分的にサポートされてるよ
ただし利用方法が激しく制限されてるので
2^nの一部を使ったほうがまだマシ
0126名前は開発中のものです。02/12/24 23:39ID:wBChHQUX
>>125
どこが激しいのか疑問。
ミップマップ以外は制限とは言えない程度のささいな事じゃん。
2^nであってもCLAMPにしたらテクスチャラッピングは使えないから、
実質的に制限は2つだけ。
0127名前は開発中のものです。02/12/24 23:54ID:sve9Duu3
>>126
使ったことないのに無理しないで。
あとサポートしてる環境を把握してる?
0128名前は開発中のものです。02/12/24 23:58ID:nM8z+tpm
>>126
痛い香具師ハケーン
0129名前は開発中のものです。02/12/25 00:28ID:5yYW1Zio
>>127
そういう自分こそ使ったことない&把握してないのでは?
あの制限のどこが問題になるのか説明してくれる?
0130名前は開発中のものです。02/12/25 00:41ID:o5sX+mEC
DirectX8でフルスクリーンにして、最小化して、元に戻そうとすると、
戻らないのですが、元に戻すには何かしなければいけないのですか?
0131名前は開発中のものです。02/12/25 00:56ID:C+V8gp8b
>>130
Resetが必要なんではないか。
詳しくはサンプルを参照。
0132名前は開発中のものです。02/12/25 01:06ID:loF3ndqX
DX9 でも D3DX は dll じゃないの?
0133名前は開発中のものです。02/12/25 01:23ID:MT7gu6YF
↑電波
0134名前は開発中のものです。02/12/25 03:30ID:PtOPqJI+
>>130
D3Ddevice 作り直さないとだめなのよ〜ん(タブン)
0135名前は開発中のものです。02/12/25 03:44ID:Km2eVg0y
んなこた〜ない
0136あぼーんNGNG
あぼーん
0137名前は開発中のものです。02/12/25 07:41ID:BoDn9JVh
5 REM
10 DEFINT A-Z:SCREEN 3,0,0,1WIDTH 80,25:CONSOLE 0,25,0,1:CLS 3
20 device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
30 RELEASE(device);
0138あぼーんNGNG
あぼーん
0139名前は開発中のものです。02/12/25 10:23ID:vBfJXHZb
最近、DirectX系のHPって見ないなぁ。
BBXも野郎BBSも閉鎖だし、ここはこんな風だし…

日本のアマチュアゲーム開発は終了だな。(´・ω・`)ショボーン
0140名前は開発中のものです。02/12/25 10:45ID:N0hSeH2R
BBX閉鎖するの?
0141名前は開発中のものです。02/12/25 11:55ID:ztzHsFBr
if氏のHPってなんで閉鎖したのかな
0142名前は開発中のものです。02/12/25 11:58ID:srbFeJO+
>99
http://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi

教えて欲しかっただけだろ?
0143名前は開発中のものです。02/12/25 11:58ID:cEvsDgEI
BBXもif氏のとこも閉鎖してないぞ
0144名前は開発中のものです。02/12/25 12:06ID:6xTmGeBz
[厨房法則]
調べることができない人間ほどBBSに頼りたがる
BBSに頼りたがる人間ほど移転しただけで閉鎖したと勘違いする
勘違いする人間ほど自分が頼るものを失った時点で全てのアマチュアプログラマが開発を終了したと思いこむ
0145あぼーんNGNG
あぼーん
0146あぼーんNGNG
あぼーん
0147名前は開発中のものです。02/12/25 16:10ID:o5sX+mEC
DirectXAudioについて聞きたいことがあるのですが、いいでしょうか。

自分のプログラムでは、MIDIを再生すると、リバーブ等のエフェクトが
最大になってしまいます。一度再生すると、全てのMIDIとWAVがこうなってしまいます。

そこで、エフェクトを削除する方法がわかったので、SetFX(0, NULL, NULL)で
エフェクトを削除したら、すでに再生しているMIDIがとまってしまいました。

で、もう一度MIDIを再生しようとすると、またエフェクトがかかってしまうのです。

エフェクトを削除したら、再生しているMIDIがとまったというのは、
工学社のサンプルでもそうだったので(コードも同じでした)、そういうもんなのだと思ったのですが、
では、どうすればいいのでしょう。

そもそもMIDIを再生した時点でエフェクトがかかるのが間違いですか?
0148あぼーんNGNG
あぼーん
0149名前は開発中のものです。02/12/25 18:50ID:srbFeJO+
( `∀`)オマエガナー
0150名前は開発中のものです。02/12/25 20:54ID:PzwC4Far
すつもん、よろしいでしょか?

メッシュにxファイルを読み込みたいのですが、
そのファイルはどこら辺に入れておいたらよいのでしょうか?
本を買って勉強しているのですが、その辺がどうもわからなくて、つい。
0151名前は開発中のものです。02/12/25 21:16ID:NnnYhCf/
>>150
カレントデレクトリ
0152あぼーんNGNG
あぼーん
0153あぼーんNGNG
あぼーん
0154名前は開発中のものです。02/12/25 22:05ID:PzwC4Far
>>151
 お返事ありがとう!
 …つまり、プロジェクトが入っているフォルダ?
0155名前は開発中のものです。02/12/25 22:09ID:NnnYhCf/
>>154
VisualStudioから実行した場合はたぶんそうだけど
普通はexeファイルがあるところ、
カレントディレクトリをゲットする関数(Win32)とかもあるんで
調べてみたらいいかも?
0156名前は開発中のものです。02/12/25 23:29ID:/fn3aOJD
DirectX8.1のSPRITE(LPD3DXSPRITE)を使って自分のライブラリを作ってるんだけど、
SPRITEで半透明ってできませんか?
0157名前は開発中のものです。02/12/25 23:29ID:lmj/8fOx
>>150
カレントディレクトリはプログラムの実行の仕方や、実行中の操作で変化
するから、できればフルパスで指定した方がいいよ。
でも、大抵の場合はカレントディレクトリから読み込んで問題無い。

VisualStudioから実行した場合は、デフォルト設定のままならプロジェクト
のある場所がカレントディレクトリになるけど、プロジェクトの設定の
作業用のディレクトリで変更できる。

ちなみに、実行中にファイル選択ダイアログを使う場合は、このダイアログ
がカレントディレクトリを変更してしまうので要注意。
0158_02/12/25 23:34ID:7ccBlzyE
>>154
どうやるのが一般的か知りませんが、自分は
char path[_MAX_PATH];
GetModuleFileName(hInst,path,_MAX_PATH);
で、exeファイルフルパスを取得したあと、邪魔なファイル名を削ってカレントディレクトリを取得しています。

実行ファイル名の削り方は、
char pDrive[_MAX_DRIVE+1];
char pDir[_MAX_DIR+1];
char pFname[_MAX_FNAME+1];
char pExt[_MAX_EXT+1];
_splitpath(path,pDrive,pDir,pFname,pExt);
でフルパスを分解してから、
string currentDirectory=pDrive+pDir;
currentDirectory+="\\";
くらいでいいのでは。

例えば、
Text.xというxファイルを、exeのあるフォルダにいれたとしたら、
ファイルを読み込むときに、
string filename=currentDirectory;
filename+="Test.x";
のようにかいて、それをファイルを読み込むメソッドの引数に入れるとか。
う〜ん、わかりずらいですね…。
015915802/12/25 23:37ID:7ccBlzyE
すまん。↑のコード
currentDirectory+="\\";
は必要なかった。
0160名前は開発中のものです。02/12/26 00:15ID:IJOtQDAy
悪いことはいわない。
ぜぇっっってぇーフルパスにしとけ。
なにがなんでもフルパスを使うくせをつけろ。
0161名前は開発中のものです。02/12/26 00:18ID:hDb5j8vT
>>156
テクスチャのα値をいじれば?
0162名前は開発中のものです。02/12/26 00:49ID:ZW5MFsfx
>156
DirectX8のスプライトはあまり良くないので、ポリゴンでスプライトの代用した方が
自由度が高いよ。
0163_02/12/26 00:52ID:p7bBeRQy
>>156
ID3DXSprite使ったこと無いけど、たぶん
ID3DXSprite::Drawの引数D3DCOLORのα値を指定するのかと。

例えば50%半透明なら、
D3DCOLORにD3DCOLOR_ARGB(128,255,255,255)を入れればいいと思う。

>>162
同意。ID3DXSpriteには、あまりいい噂はききませんね。
0164名前は開発中のものです。02/12/26 02:43ID:8elQi3d2
フルパスマンセーの奴がいるが、正気か?
exeのある場所を最初にカレントにして、そこから相対パスってのが基本だろ。
0165名前は開発中のものです。02/12/26 02:49ID:u+QTkfIN
> exeのある場所を最初にカレントにして、そこから相対パス

開発中はdebug\hoge.exeとかになってるぽ
0166名前は開発中のものです。02/12/26 03:48ID:9RUwBm5s
>>164
コモンダイアログのファイル選択ダイアログを使ったことがあれば
フルパスマンセーになるぞ。
ゲームならあまり使わないかもしれないがツールだとまず確実に使う。
0167名前は開発中のものです。02/12/26 05:51ID:AGlHM0EQ
>>166
ファイル選択ダイアログのフラグにOFN_NOCHANGEDIRつけとけばカレントディレクトリかわらないよ。

まあ、毎回元のディレクトリから始まるようになるので、
遠くのファイルを何回も選ぶ場合には面倒だけど。

嫌なら毎回ディレクトリ保存しておいて復元してもいいし。
0168あぼーんNGNG
あぼーん
0169名前は開発中のものです。02/12/26 07:04ID:ePwyo9mV
問題は開発の誰かがカレントを変更してしまうおそれがある。
ってのが一番面倒、ぶんなぐれ。
でかいツール作ってるときは誰がなにやってくれるかわからない。
ゲーム本体でもユーザーに保存場所を選ばせる場合だと必要になるから、いっそフルパスマンセーのが楽に逝ける。
0170名前は開発中のものです。02/12/26 07:08ID:oxPiSeR2
VCを個人で使ってるなら作業ディレクトリ設定できるからカレント云々は困らないけどね。
017115602/12/26 07:10ID:h8wBSWcJ
>>161,>>162,>>163
お、ちゃんとα描画できました。
SPRITEの方が簡単に作れると思ったのですが、やはり普通に
ポリゴンで扱ったほうがいいみたいですね…。
ありがとうございました(・∀・)
0172あぼーんNGNG
あぼーん
0173名前は開発中のものです。02/12/26 07:52ID:f4uAG8Os
お、ディレクトリ管理の話ですか。標準でついてるExporterが
Xファイルのテクスチャをフルパスで吐き出すのが困りものなのよね。

 ところで、フルパスからカレントパスを作るのも意外とめんどい
んだけどなんか良い関数ないもんですかね?
017415002/12/26 09:15ID:ik1sR7sq
 答えてくださった方、ありがとう。
 こんなにレスがつくとは思いもよりませんでした。
 

 本当にありがとうございます!!
 では引き続き作業を頑張ります。
0175名前は開発中のものです。02/12/26 09:53ID:8elQi3d2
nvidiaのサイトからcg_toolkitが落とせない。
どっか他にない?
0176名前は開発中のものです。02/12/26 11:22ID:8ZNjq3av
>>175
ftpからはおとせたYO!
ftp://download1.nvidia.com/developer/cg/
0177名前は開発中のものです。02/12/26 11:34ID:AGlHM0EQ
>>173
PathRelativePathToあたりどう?

環境(IEのバージョン?)によっては動かないかもしれないけど。
0178名前は開発中のものです。02/12/26 11:46ID:Tz6MkjNI
DirectX初心者です。
現在.hackの様な視点の3Dゲームを作ろうとしているのですが、
周りの物体が妙に傾いたように描画されてしまいます。
プロジェクションマトリックスのセットはこんな感じです、
D3DXMatrixPerspectiveFovLH(&mProj, 60*PI/180 , 1.0f , 0.5f , 640.0f);
何か解決策は無いでしょうか。
0179名前は開発中のものです。02/12/26 12:12ID:u+QTkfIN
引数三つ目のアスペクト比は1.0でいいの?
画面の縦横比をいれなきゃダメよ。
0180名前は開発中のものです。02/12/26 12:19ID:Tz6MkjNI
アドバイスありがとうございます。
早速アスペクト比をWIDTH/HEIGHTで入れたのですが、
やっぱり画面端に行くにつれ、木などが傾いてしまいます。
0181名前は開発中のものです。02/12/26 12:34ID:j+J1+fQK
1.0のところを変えてみたらどうでしょ。

ってか、連書き規制きびしすぎねえ?1時間以上経つのにかけなかったよ
0182名前は開発中のものです。02/12/26 12:40ID:W0NkvfZI
そういえば、アスペクト比でDirect X7かなんかの本のサンプルが逆になってたな
640*480の解像度で1.33333fとか入ってるの。
0.75だろうが!って突っ込みたかった。
0183名前は開発中のものです。02/12/26 12:47ID:+a+DZGj7
60*PI/180の60を減らしてみよう
0184名前は開発中のものです。02/12/26 13:18ID:u+QTkfIN
DXは横を1とした縦のサイズだったかな。
あとはfloatにキャストしてないとか
int W = 320;
int H = 240;
D3DX...( ... , W/H, ...);
じゃあダメよ。
0185あぼーんNGNG
あぼーん
0186名前は開発中のものです。02/12/26 16:50ID:rNK9GIom
>144

ありがちだな
0187名前は開発中のものです。02/12/26 17:30ID:Tz6MkjNI
みなさんのアドバイスを参考に、
D3DXMatrixPerspectiveFovLH(&mProj , 35.0f*PI/180 ,(float)WIDTH/(float)HEIGHT , 1.0f ,640.0f);
と、してみたところ結構マシになりました。
ありがとうございました。
0188名前は開発中のものです。02/12/26 17:39ID:u+QTkfIN
>>187
おめでとう。
あと、WとHが逆だったかもしれん。
0189名前は開発中のものです。 02/12/26 18:25ID:SuFqab0r
DirectX3Dにはフラットシェーディングとグーローシェーディング
があるそうですがどの関数で切り替えられれますか?
019018902/12/26 18:38ID:SuFqab0r
解決しましたが、フラットシェーディングとグーローシェーディング
では処理速度はフラットの方が速いでしょうか?
0191名前は開発中のものです。02/12/26 20:39ID:bqU4KP+U
>190
試してみるのが一番だ。
0192名前は開発中のものです。02/12/27 07:45ID:md1EDfNJ
>>190
激しく環境依存ってことも忘れずにね
0193あぼーんNGNG
あぼーん
0194名前は開発中のものです。02/12/27 12:24ID:7dHzV0a8
スプライトのBeginとEndの間に書ける処理って、
スプライトのDraw「だけ」なんですか?
ポリゴンを描画しようとすると、自分の環境では表示がおかしくなるのですが、
ほかにおかしそうなところが見当たらないので、そういうもんと認識しても
いいのでしょうか。
0195名前は開発中のものです。02/12/27 13:20ID:vFPVFOou
>>147
パフォーマンスの初期化のところでデフォルトのオーディオパス・タイプをみて
DMUS_APATH_SHARED_STEREOPLUSREVERBになってませんか?
DMUS_APATH_DYNAMIC_STEREOにすればエコーがなくなります。
019619502/12/27 13:22ID:vFPVFOou
// パフォーマンスの初期化
hr = g_pPerformance->InitAudio(
NULL, // IDirectMusicインターフェイスは不要
NULL, // IDirectSoundインターフェイスは不要
NULL, // ウィンドウのハンドル
/*DMUS_APATH_SHARED_STEREOPLUSREVERB*/DMUS_APATH_DYNAMIC_STEREO , // デフォルトのオーディオパス・タイプ
64,// パフォーマンス・チャンネルの数
/*DMUS_AUDIOF_ALL*/NULL, // シンセサイザの機能
NULL); // オーディオ・パラメータにはデフォルトを使用
if (FAILED(hr))
{
DXTRACE_ERR("DirectMusicPerformance8の初期化に失敗", hr);
return FALSE;
}
参考書コードの修正後ソース・・・この方が分かりやすいかと・・・
0197あぼーんNGNG
あぼーん
0198名前は開発中のものです。02/12/28 18:56ID:pcScEEbX
レベル低すぎ

終了
おまえら首吊れ
0199名前は開発中のものです。02/12/28 21:55ID:EVvwHmrD
シェーダ使えない環境でDirectX9のメリットってあるの?
0200名前は開発中のものです。02/12/28 23:48ID:KFOt0L7z
>>195
うわぁ〜。すごいすごい。
その通りやったら見事直りました。

ありがとうございました。
0201あぼーんNGNG
あぼーん
0202名前は開発中のものです。02/12/29 04:51ID:mxtUttMf
>>199
まともな製品作るならシェーダで突っ走るに決まってる。
糞ユーザーのためにシェーダ使わない選択するのは愚挙。
そういうときはソフトウェアで頂点シェーダ動かしてピクセルシェーダは放置
0203名前は開発中のものです。02/12/29 05:46ID:YZiM0Z3W
俺はWinXPに標準で載ってる8.1を選ぶぜ。

それは別として、DirectX 9の日本語HTMLヘルプがウィンドウサイズ記憶してくれない……。
どうなっとるんでしょうかこれわ。8のはちゃんと覚えてくれるのに。
■ このスレッドは過去ログ倉庫に格納されています