トップページgamedev
987コメント315KB

鬱だ氏のう DirectX (Part 5)

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

■旧スレ(プログラム板)
http://piza.2ch.net/tech/kako/966/966655286.html  (Part 1)
http://pc.2ch.net/test/read.cgi/tech/997101556/   (Part 2)
http://game.2ch.net/test/read.cgi/gamedev/1005119775/ (Part 3)
http://game.2ch.net/test/read.cgi/gamedev/1016276254/ (Part 4)

コピペスマソ
0002名前は開発中のものです。02/07/23 00:42ID:???
2ゲットずさー

前スレの宿題よろしく。
0003名前は開発中のものです。02/07/23 01:13ID:???
いまさらDirectX7以前で組んでるエロゲプログラマの書き込みがうざい。
古い話なんだから、分からないことがあれば過去ログあさればいいのに。
それに毎度毎度、「俺はほとんど自前でDirectDrawは使わない」って
自慢しに来る自前描画主義者が出るし。
0004名前は開発中のものです。02/07/23 01:18ID:???
SFC/PS版聖剣伝説クラスのゲームなら俺は自前描画で作るが。
0005名前は開発中のものです。02/07/23 01:55ID:???
勝手に自前描画スレでもつくってやってくれ
0006名前は開発中のものです。02/07/23 02:46ID:3mnZwdQ2
SphereMap用テクスチャの生成ツールって
ありませんか?
0007名前は開発中のものです。02/07/23 02:57ID:???
>>6
死ぬほど複雑なプログラムというわけでもないから、無ければ
作ってみると良いのでは?キューブマップみたいに6面で
見た風景を、円に写像変換する奴。円のメッシュの切り方
がポイントになりそうだけど。

というか、厳密なスフィアマップを作る事に、そこまで意味は
あるのかな?視点が変わったらスフィアマップは正確では
なくなるんだし、ある程度適当でも言いような・・・。というのは
怠け者の意見。
0008名前は開発中のものです。02/07/23 12:00ID:???
>ハードによる差異って、今現在どれくらいあるんだろ。
>以前に比べればカナリ淘汰されてるから、

MSも、ビデオチップごとのレンダリング結果の差を小さくするようあれこれ手を打ったしね。
自前一筋の人はこういう動向も知らんだろうけど。
0009名前は開発中のものです。02/07/23 12:56ID:???
沙羅曼蛇の1面後半に出てくるピンク色の細胞壁ってどうやって実現してるん
だろう? データ的には、ミサイルやレーザーが当たった座標をバッファに
保存して、最も古く破壊された所から順に復活(再生)させているのだろうけど、
グラフィック的な処理が分からない。
0010名前は開発中のものです。02/07/23 14:10ID:???
>データ的には、ミサイルやレーザーが当たった座標をバッファに
この時点で思い違いしている。

それに、ここはDirectXの話するところだろ。スレ違いだ。
0011名前は開発中のものです。02/07/23 14:35ID:???
>>9です。
いたた。スレ違いすまそです。
http://game.2ch.net/test/read.cgi/gamedev/1020950091/l50
こちらに移動しました。
0012名前は開発中のものです。02/07/23 19:08ID:???
前スレで出てた回転する四角形同士の交差判定だけど、お互いに1点ずつ
相手の四角形との内外判定をしてから線分の交差判定をすればOK。
ただし、正方形や長方形ならば点の内外判定は簡単だから(内積2回)、
4点全て判定してしまった方が平均では軽くなると思う。

ゲームなら線分の交差判定までやらなくても、重心とか辺の中点も内外判定
するだけで十分。あまり扁平した長方形を使わなければ、頂点だけの判定で
も十分。

これ以上は【Collision Detection】スレで
0013名前は開発中のものです。02/07/23 20:28ID:???
Wizardが吐き出すDirectInputの処理がよくわからんヽ(´Д`)ノ
アクションマッピングっていちいち指定しなきゃいかんの?
めんどくさいからデフォルトの「CAD - 3D object control」
(dinput.h:4090行あたり)のままにしてるんだけど、何か弊害があるのだろうか。

日本語版ヘルプ見ても、
 x 軸からデータを取得して車を左右に動かすのではなく、
 DIAXIS_DRIVINGR_STEER という仮想コントロールからデータを
 取得することになる
てことは、結局やってることは一緒だと思うんだけど…概念の問題?

# キーコンフィグを自前で用意しなくてもいいらしいのは助かるけど、
# あまりカッコよくないね
0014名前は開発中のものです。02/07/24 00:28ID:???
ゲームごとじゃなくてジャンルごとにマッピングでるってこと。
普通のジョイスティックで車ゲームを遊ぶ人はX軸をステアリングにするけど
ネジコンで遊ぶ人は捻る軸をステアリングにするでしょ?
ネジコンで遊ぶ人は車ゲームを遊ぶときは必ず捻る軸をステアリングにするし
車ゲーム以外なら十字キーの方を使う。そのマッピングを楽にするのが、
アクションマッピングの役目。
0015名前は開発中のものです。02/07/24 11:35ID:???
>>14
何となくわかった気がする。
サンクス。
0016名前は開発中のものです。02/07/24 12:48ID:???
3Dで走り回るサンプルを作ったんですけど、
格ゲーの体力ゲージのようなものはどうやって表示するんでしょう?

オフスクリーンサーフェスはどこへいったぁぁぁぁ!
サーフェスに描いてCopyRectか自分で転送するしかないのかな…
0017名前は開発中のものです。02/07/24 13:05ID:???
>>16
板ポリゴンにテクスチャ貼りつけるじゃ駄目?
0018名前は開発中のものです。02/07/24 13:13ID:???
>>17
ありがとう
そうすると、カメラの移動とともにポリゴンを移動させねばなりませんね。
やってみるか。

(ちなみに、マリオ64やサルゲッチュのようなサンプルです。)
0019名前は開発中のものです。02/07/24 14:29ID:???
>>18
トランスフォーム済み頂点をつかって
スクリーン上の2D座標を直接指定すればいいのでは?
002016=1802/07/24 19:00ID:???
>>19
ソレダ!(・∀・)
正月の朝に新品のパンツに履き替えたみたいにすっきりした。
ありがとう。
0021名前は開発中のものです。02/07/24 21:20ID:???
>>17
何故ゲージごときにテクスチャがいるのか、小一時間問いつめたい
0022名前は開発中のものです。02/07/24 21:43ID:???
>>21
凝った絵柄にするなら必要じゃないか?
0023名前は開発中のものです。02/07/24 23:21ID:???
>>21
なぜ「ゲージ=単色」と考えるのか、小一時間問いつめたい
0024名前は開発中のものです。02/07/24 23:40ID:bCFuNa3Q
変換済み頂点設定にしろよ
0025名前は開発中のものです。02/07/24 23:59ID:???
>>23
何故「テクスチャを使わない=単色」と考えるのか、小一時間問いつめたい
0026名前は開発中のものです。02/07/25 00:03ID:???
頂点カラーを使えばグラデーションも簡単に出来るし、
ゲージ部分にわざわざテクスチャを使って重くする必要は無いと思うが?
0027名前は開発中のものです。02/07/25 00:06ID:FyiymMBk
その位で重いって…
ゲージも3DモデルにしてX軸回転させてウマー
0028名前は開発中のものです02/07/25 00:06ID:???
というかあくまで好みの問題で、こういう議論は意味が無いような・・・
0029名前は開発中のものです。02/07/25 00:09ID:???
グラデだけじゃうまく表現できないんじゃないの?

+-----------------------------------------------+
|+------------------------------------+        |
||<------------グラデ----------------->|        |
|+------------------------------------+        |
+-----------------------------------------------+
こんなの。
0030名前は開発中のものです。02/07/25 00:13ID:???
>>29
どううまく表現できないのか分からないですが、
それならポリゴン4枚で用が足ります。
0031名前は開発中のものです。02/07/25 00:43ID:???
>>29
つまりポリゴンの使い方が分かっていないから、矩形一つという発想しか出来ず、
テクスチャとか言い出したという落ちか

模様として使うなら全く別問題だし、凝ったものと言っても枠の部分も別問題
ゲージの長さを表す部分をテクスチャで描くとすると、
変化するたびにテクスチャをロックして書き直すのは無駄が多すぎる
0032名前は開発中のものです。02/07/25 01:07ID:???
イマドキ貧乏くせぇこというなよ〜〜〜〜〜〜
アルファ付テクスチャで角のまぁるくてかわぃぃ模様のゲージにしようぜ。
0033名前は開発中のものです。02/07/25 01:10ID:???
グラデーションにテクスチャを使う事は賛成。
この程度ではfpsに影響するほどパフォーマンス的な差はないし。
線形補間のグラデーションだけでみんな満足?
0034名前は開発中のものです。02/07/25 01:17ID:???
この程度の問題が自力で解決できないようなら、ゲージに
凝る以外にもっとやるべきことがあるとは思われるが。
0035名前は開発中のものです。02/07/25 01:24ID:???
トランスフォーム済み頂点を扱えることを知らなければ、
自力で解決のしようがないと思うが。
0036名前は開発中のものです。02/07/25 01:27ID:???
>31
>変化するたびにテクスチャをロックして書き直すのは無駄が多すぎる

ゲージと模様を別テクスチャにすれば解決するんじゃ、、、
それで板ポリゴン2枚で済むけど、致命的な速度低下に繋がるのだろうか、、、
0037名前は開発中のものです。02/07/25 09:44ID:???
正直どうでもいい
0038あのう02/07/26 02:03ID:???
すごい厨房質問で申し訳ないですが
DirectInputで入力デバイスからの情報を受け取るのって
描画部分の関数の先頭にかかれてるじゃないですか。
このボタンが押されたら前に進むとかそういう感じに。
でも、ってことはFPSの違う環境でプレイしたらプレイヤーの移動速度が
変わってしまうってことにならないですか?
0039あのう02/07/26 02:08ID:???
すんません、初心者質問はここではないようですね。
失礼しました。
0040名前は開発中のものです。02/07/26 02:08ID:Cdb3asbE
1ミリ秒あたり移動量 * フレーム間の時間 移動量を求めるので 変わらないよ
0041あのう02/07/26 02:14ID:???
ああ、ありがとうございます。
たとえば十時キーの上ボタンをおしたら
move.z+=1.0f;
にして
下の方のプレイヤーを描画する部分
D3DXTranslation(&mTrans,0.0f+move.z,0.0f+move.y,0.0f+move.z);
なんて感じにしたらやっぱFPSが高ければ高いほど
前に進んじゃうのかななんて思ってしまいまして。

もうすこし概念的な部分からDirectXを勉強する必要があるみたいですね
どうもありがとうございました。
0042名前は開発中のものです。02/07/26 03:42ID:???
41は40を理解してなくて、忘れた頃にFPS論争やりだしそう
0043名前は開発中のものです。02/07/26 04:11ID:???
ってかDirectXの問題じゃないよな。
41で言えば
move.z += 1.0f * d;
で、dは基準にしたfpsに対する実際のfpsの割合係数。
要するに多く呼び出す分だけコマ毎の移動量を減らすんだよ
0044名前は開発中のものです。02/07/26 07:49ID:???
DIRECTXでキーボードのスキャンてどうやるの?
方向キーを同時に押すと取り込まれないんだけど。
0045名前は開発中のものです。02/07/26 08:36ID:???
何のためのDirectInputなのか?
0046名前は開発中のものです。02/07/26 08:37ID:???
まさか、同時押しできないハードウェアがわの問題じゃないだろうな。
0047名前は開発中のものです。02/07/26 11:32ID:???
同時入力をちゃんと受け付ける、いいキーボードを使いなはれ。Realforce106とか。
0048名前は開発中のものです。02/07/26 14:08ID:???
DirectX8.1の質問
サーフェスのDCって取得できなくなったの?
myDC = pSurface->GetDC()
画面キャプチャしたいんだけどどうすればいいのか???
0049名前は開発中のものです。02/07/26 15:27ID:JZcpJvLw
>48
はじめのDX初期化のときに使うウインドウハンドルでGeDC()すれば?
00504802/07/26 18:56ID:???
>>49
なるほど。thx
0051名前は開発中のものです。02/07/26 20:01ID:???
>>48
それだとフルスクリーンでFlipしてるときに上手く取り込めないよ。
キャプチャしたいならIDirect3DDevice8::GetFrontBufferがいいかと。
D3DFMT_A8R8G8B8に変換された状態で取得できるから、その後の取り扱いも楽。
0052あのう02/07/26 22:06ID:???
41です。
43さんの説明でやっとわかりました。
先が思いやられますが、DirectX9がでる前に一通りできるようにがんばろうと思います。ありがとうございました。
00534802/07/26 22:23ID:???
SetRenderTargetでテクスチャをターゲットにして、改めてレンダリングしますた。。。
0054名前は開発中のものです。02/07/26 23:04ID:???
>>53
GetRenderTargetでバックバッファを取得するのでは駄目なの?
0055名前は開発中のものです。02/07/27 00:35ID:???
>>54
そのサーフィスロックして、直接アクセスすればピクセルは
持ってこれるよね・・・。というか、テクスチャから保存できる
プログラム組んでるなら、Bltで転送すれば良いんだし。

というのを以前Zバッファでやろうとしたら自滅しますた。
Capsビューアで見ると、ZバッファってLockableなサーフィス
を持つかどうかもビデオカードとドライバ次第なんだね。
Radeonは出来ると出ていたのに出来なかった・・・。

OpenGLだと例外なく出来るけど、遅い。
0056名前は開発中のものです。02/07/27 01:27ID:???
>>54
そのあとCopyRects()使うのかな?
アレ遅いんだよねぇ…
0057名前は開発中のものです。02/07/27 01:58ID:???
DirectX8やってるんだけど、ビデオカードがオンボードになってるPCの
人から「動きません」って言われてしまった
ビデオメモリ4MBらしいんだけど、この環境で動かす事ってできるのかな?
0058名前は開発中のものです。02/07/27 02:05ID:???
>>57
モノによる。
それ以前にドライバが入ってないとかDirectX7でしたとか…
0059名前は開発中のものです。02/07/27 02:10ID:???
>>56
何故そこでCopyRectsが出てくるの?
そのままLockすればいいんじゃないの?
00604802/07/27 02:13ID:???
>>54
テクスチャとして取得したいのですが、可能でしょうか?
FF7などでバトル突入するときの効果が作れそうですし。

んで>>53のような方法を思いついたわけですが、なぜかポリゴンの描画順がばらばらに。ヽ(`Д´)ノ
IDirect3DDevice8::SetRenderTarget()のステンシルバッファへのポインタをNULLにしてるんですが、マズイでしょうか?
IDirect3DDevice8::GetDepthStencilSurface()で取得したポインタ使うと D3DERR_INVALIDCALL になっちゃうし。
0061名無しサソ02/07/27 02:54ID:???
>60
 テクスチャと普通のバックバッファ領域の大きさは同じじゃないから、
当然Zバッファも割り当て直さないといけないよ。それをしないと、描画順
が当然滅茶苦茶になる。ちゃんとしたテクスチャサーフィスへの描画方法
は、CubeMapのサンプルを見てみると良く分かるよ。
00624802/07/27 03:08ID:???
>>61
ああん、一歩遅かった。
書いてからもしやと思って割り当てなおしたらできますた。
要領悪くてごめんなさい。

widthとheightが512とかじゃないとダメなのかな…
ミップマップ関連のせい?
0063名無しサソ02/07/27 03:27ID:???
>62
 テクスチャは2の乗数の正方形と相場が決まってるんだけど・・・。
128とか256とか512。それが嫌ならバックバッファから読んで保存すると
いいのでは?リアルタイムでバンバンキャプチャしていく方針なの?
0064名前は開発中のものです。02/07/27 03:35ID:???
>>63
遅くなるが、別に2の乗数でなくてもテクスチャは作れる
0065名無しサソ02/07/27 03:40ID:???
>64
 今までそれ以外で作ってなかったから、考えても
いなかったよ。ありがとう。かつてVoodooとかでは
もっとおかしな制限があったことを思い出してみたり。
0066名前は開発中のものです。02/07/27 08:20ID:???
遅くなるかどうかは実際に調べたことがないので分からないが、機能については
色々と制限があったりするので注意。
詳しくはD3DPTEXTURECAPS_NONPOW2CONDITIONALの説明でも読んで。
ちなみにGeForce3/4はこの制限にひっかかってる。
あんまり関係ない制限だけどね。
0067名前は開発中のものです。02/07/27 09:32ID:???
>>58
「DirectX8が正常に作動してる」って言ってるんで信用するしか無いんだけど。
でもモノによる、か。サンクス
0068名前は開発中のものです。02/07/27 11:17ID:.3MPTeOs
テクスチャ256*256はクソ。
0069名前は開発中のものです。02/07/27 13:33ID:???
>>63
正方形である必要はない
適当なことを書く前に試せ

>>64
一部に作れるものが存在するかもしれないが
ほとんどのビデオカードは2の乗数でしか作れない
0070名前は開発中のものです。02/07/27 13:46ID:???
1024*512でもテクスチャは作れるな。
俺のマシンでは2の乗数じゃないとダメぽ…
0071名無しサソ02/07/27 17:45ID:???
>69
 おうちにあるVoodooシリーズにはそう言う制限があったんだよ。
お試し済みなので、一応。今となっては意味がないと言われるかも
知れないけど、あまり意味のない制限で動作ハードウェアを減らすのは
どうかという主義だから、テクスチャは正方形かつ2の乗数を普通に
使ってるんだけど・・・。

 主義が違う、と言うんならゴメソ。
0072名前は開発中のものです。02/07/27 17:51ID:???
2の「乗数」ってネタですよね
0073名前は開発中のものです。02/07/27 17:57ID:.3MPTeOs
価値はある。だが今の金のない厨房たちにとって手が届く範囲なのかどうか。
値段下げればもっと売れるとおもうんだが。
しかし、2000からどんどん素材の質が下がってきてるな。
先頭画面に配置されてるドラゴンなんか見る影もない・・・
00747302/07/27 17:57ID:???
誤爆
0075名前は開発中のものです。02/07/27 18:58ID:???
IDirect3DDevice8::CreateTexture()
で作成したテクスチャをRelease()で開放しても使用メモリが減らないのは何故??

CD3DFont(AppWizardが吐くヤツね)使ってて、
最初にCD3DFont::InitDeviceObjects呼んで、
最後にCD3DFont::DeleteDeviceObjectsで開放してんだけど。
俺だけ?

Windows2000 VisualC++6.0 DirectX8.1 Debug/Release
0076名前は開発中のものです。02/07/27 19:30ID:???
Voodooは何か制限あるってハナシは聞いたことあるな。
てことは、たとえば640*480のテクスチャ貼りたいとおもったら、
512*512を2枚用意しろってコト?
0077名前は開発中のものです。02/07/27 19:59ID:???
>>76
Voodoo3まではテクスチャの最大サイズが256*256なので、
その場合は256*256のテクスチャを6枚用意することになるよ。
0078名前は開発中のものです。02/07/27 20:20ID:???
>>77
うげ、マジすか
自分でテクスチャクラス作って、ビデオカードに合わせて内部で処理を切り替えるか…
それとも256*256で基準で作ればいいのかな?
まさか64*64までしか作れないなんてビデオカードはあるまい…
0079名前は開発中のものです。02/07/27 21:48ID:???
>>78
インストーラで、テクスチャ解像度を選択させてインストールという手もある。
市販ゲームでもよく使われてる。
0080名前は開発中のものです。02/07/27 23:11ID:???
>>69
>適当なことを書く前に試せ
試す前にヘルプを読め
008169じゃないけど、ちと調べてみた02/07/28 00:23ID:???
>テクスチャが正方形?
日本語版8.0のヘルプを「正方形」で検索したけど出てこなかった。

IDirect3DDevice8::GetDeviceCaps()で得られる情報の、
TextureCaps が D3DPTEXTURECAPS_SQUAREONLY の場合は正方形でないとまずいだろうけど
そうじゃなければ別にいいのでは?

# DirectX Graphics > プログラミングのヒントおよびツール > パフォーマンスの最適化
#  > テクスチャサイズ …によれば、256 × 256 のテクスチャが最速らしいが。
0082名前は開発中のものです。02/07/28 01:01ID:???
>そうじゃなければ別にいいのでは?
そうじゃなければ別にいいけどさぁ・・・
0083名前は開発中のものです。02/07/28 03:36ID:???
>>69
>一部に作れるものが存在するかもしれないが

NVIDIAはGeForce3以降、ATiは初代RADEON以降、MatroxはG200以降、Intelは830で
作れるようになったけど、それが一部?現状の半分くらいは行ってると思うが。
(815が対応してないのが痛い)

SQUAREONLYの方はNeoMagicやVIAまでチェックしてみたけどYesのは見つからなかった。
Riva128やVoodoo3でもNoだった。
逆にこれがYesでDirectX8が使えるチップがあったら教えて欲しい。
0084名前は開発中のものです。02/07/28 04:46ID:???
>>83
そうムキにならなくても…
0085名前は開発中のものです。02/07/28 08:43ID:???
正方形必須のはまだ見たことないなあ...
0086名前は開発中のものです。02/07/28 09:16ID:???
VRAM256M標準になったら正方形必須でも構わん
0087名前は開発中のものです。02/07/28 09:35ID:???
>>85
初期のViRGEとかはそう。昔はそれに加えて、半透明の対応度が
各社マチマチで酷かった。
0088名前は開発中のものです。02/07/28 17:01ID:???
いまさらながら「鬱だ氏のう」ってタイトルがぴったりくるなあと実感。
0089名前は開発中のものです。02/07/29 16:43ID:???
大体ここに質問できるって時点で、
自己解決できる奴が大半なんだよね。
すごいや。
0090名前は開発中のものです。02/07/30 00:22ID:???
質問すらできない奴ってどんなんだ?
0091名前は開発中のものです。02/07/30 03:08ID:???
>>90
誇り高き孤高の天才プログラマ
0092名前は開発中のものです。02/07/30 08:56ID:???
つーか天才なら余裕でしょ。
0093名前は開発中のものです。02/07/30 16:04ID:???
>81
>#  > テクスチャサイズ …によれば、256 × 256 のテクスチャが最速らしいが。
これは128*128テクスチャを4つ切り替えるよりも256*256にしたほうが速いってことで、
サイズは小さいにこしたことはない。





って話が旧スレにあったような
0094名前は開発中のものです。02/07/30 23:15ID:???
MIPマップが存在する意味を考えれば分かりそうなものだが
0095名前は開発中のものです。02/07/31 05:40ID:???
MIPMAPは速度よりも画質のために使うってのが本音かな
0096名前は開発中のものです。02/07/31 06:55ID:a9hxPLQ6
DirectX8でmidiを鳴らしてるんだけど、音質がすごい悪いんです。
mciで鳴らした方がぜんぜん良い。mciの方は環境に依存されるんだろうけど
それでもぜんぜんまし。
改善する方法ってありますか?
0097名前は開発中のものです。02/07/31 08:26ID:???
DirectX8でポリゴンにてくすちゃはっつけて画像表示したいんですが、
意図したサイズになってくれません。
描画開始位置は正しいのですが、たとえば
 :
vertex[3] =_TLVERTEX( x2, y2 , 0, 1, D3DCOLOR_XRGB(255,255,255), 2, 2);
とかやっても、画像と画像のあいだに画像の60%近い隙間ができてしまいます。
画像サイズが通常の4割減されてるようです。
Zの距離の問題でしょうか、さっぱりです。
ちなみにまだ3D空間や行列には手をつけてません。
どうかご進言ください。
0098名前は開発中のものです。02/07/31 10:07ID:???
>>97です。
もしかして、ときどき話題にはあがってたようですが
スプライトのサイズって(2^n)ピクセルにしないといけないんですか?
それでやったら直ったんですが・・・・・・
マジですか。
0099名前は開発中のものです。02/07/31 10:14ID:???
>>98
マジです
■ このスレッドは過去ログ倉庫に格納されています