鬱だ氏のう DirectX (Part 7)
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
02/12/10 17:34ID:tkEwMMYm初心者用相談室では扱わないような少し高度な話題も受け持つ。
■ 過去スレ
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/
0739733
03/02/18 18:29ID:BxcSfeKFそうですね。
4:3に慣れてしまったので違和感がありますが、、
>>737
256x256だと Voodoo も含めOKと。
>>738
それって難しくないですか?
絵を貼り付けた板を移動するときとか
今は一枚なのか二枚なのか意識しなくちゃならないし
自分がヘタレなだけかもしれませんけど。
最近の市販ゲームだと Voodoo には対応してません
と明記してあるやつが多いですけどそういうやつは
どのぐらいのサイズで作ってるのかなと。
と思ったら >>4 のサイトで調べられますね、、、
Rage Mobilityやi810ですら 1024x1024 いけるんですね。
不勉強でスミマセンでした。
0740738
03/02/18 18:58ID:PMYVEmVG難しくないよ。
スプライトクラスとかを作っておいて、
そのスプライトクラスのメソッド
例えば、CSprite::Load()とかで、テクスチャーを作成する時
ハードの制限等を調べて、分割なり、修正なりすればよい。
描画する時は、描画メソッド
例えば、CSprite::Draw()とかで、テクスチャーの修正情報に従って、修正描画すればよい。
1回スプライトクラスを作っとけば、使う時は何も考えずに使えるよ。
自分は大体こんな感じでやってるけど、みんなは違うのかな?
0741名前は開発中のものです。
03/02/18 19:19ID:BxcSfeKFなるほど。
Spriteクラスは1枚以上の板から成っている、と。
私がこの間3D始めてやっとこさ作ったSpriteクラス(Billbordクラス?)は
1インスタンス = 1枚という感じだったので、、
勉強になります。
0742あぼーん
NGNG0743名前は開発中のものです。
03/02/18 20:29ID:OmAR/C8b俺もラッパークラス作って使いまわしてるよ。
0744名前は開発中のものです。
03/02/18 21:17ID:VM4ycalOヘルプを見て、いきなり
>1. COM の初期化
>DirectMusic オブジェクトを作成するためのヘルパー関数はないので、
>CoInitializeEx を呼び出して COM を初期化する必要がある。
この関数(CoInitializeEx())の使い方、意味、次への繋げ方がもう分からんのですが。
[定義されてない識別子です。]
ヘルプ通り、objbase.h ってのIncludeしたのに!!!ヽ(`Д´)ノ
0745名前は開発中のものです。
03/02/18 21:34ID:3N95F/Cv0746名前は開発中のものです。
03/02/18 21:36ID:oY4uuy6qCOMのこと知らないみたいだからCOMの勉強すれば。
あとはサンプルやウィザードが吐くコードを見るとか。
0747名前は開発中のものです。
03/02/18 23:57ID:SbwOx8MJそもそもDirectX8で動くんか?
0748名前は開発中のものです。
03/02/19 04:01ID:3HHIicMN0749名前は開発中のものです。
03/02/19 04:34ID:K2W4Cmx9どのクラスに保持させていますでしょうか?
とりあえずDirectX8のサンプルにあるフレームやメッシュと同じ感覚で、
モーションデータをパーツ毎に持たせてみました。
しかし、これでは動作がボトムアップといいますか…一元的に管理できない感じで…。
かといって、モーションクラスを作り、トップダウンに個々の
パーツを管理するのも、主体が2重になりそうで…。
言ってることが曖昧ですいません。要するにモーションデータの管理について
悩んでいまして…なにか示唆をいただければ幸いです。
0750あぼーん
NGNG0751名前は開発中のものです。
03/02/19 06:34ID:b63auc8G0752名前は開発中のものです。
03/02/19 06:49ID:athMsZgq上位では階層化メッシュクラスのサブクラスで
アニメーションメッシュクラスを作って管理してます。
内部では各フレームごとにモーション情報を持たせてます。
自分的にはシーングラフには内部の詳細は不要なので、
混乱せずに扱えて便利だと思ってるです。
0753749
03/02/19 10:38ID:K2W4Cmx9レスが遅れて申し訳ありません。ついウトウトと…。
おお!フレーム毎に持たせてらっしゃるのですね。
私も内部の詳細は一切触らず(触れず)に、ただ状況に合わせて
アニメーションさせるだけなんです。やっぱり分かりやすいのが一番ですよねぇ…。
ただ初めての3Dということもあって、もしかしたらこういうのは
トップダウンの方が把握しやすのかなぁと、不安になりまして…。
おかげで安心しました。レスありがとうございました。
0754名前は開発中のものです。
03/02/20 01:00ID:aBMYS0Zfブレンド数やライトやらスペキュラを自由にOn/Offしようとすると
かなり破綻しそうなんですけど…。
9.0のフラグメントナントカって使えるかなー?
0755名前は開発中のものです。
03/02/20 01:16ID:CqEeT/jMマテリアルとかうまく管理しているならそれとよく似た方法で管理すれば問題ないはず。
# というか、シェーダーだけそんなに特別か?
0756あぼーん
NGNG0757名前は開発中のものです。
03/02/20 05:22ID:kkYbtpSU例外を返していますか?
0758名前は開発中のものです。
03/02/20 07:46ID:9HTvRHMZそもそもDirectXで例外ってあんまりみたことない。
(経験不足名だけかもしれないけれど)
DirectXのエラーを例外で処理するメリットが見当たらない。
0759名前は開発中のものです。
03/02/20 09:27ID:E8JYbNB2C++つかってるのに例外を使わないなんて考えられない。
0760名前は開発中のものです。
03/02/20 10:16ID:qrgwODJk予測可能かつ対処可能な失敗コードなら復帰を試みるけど。
DirectXが戻り値でエラーを通知するのはかなり限られた
ケースなんで、ほとんどの場合は例外になると思う。
0761名前は開発中のものです。
03/02/20 11:26ID:weLWt0f50762名前は開発中のものです。
03/02/20 11:35ID:E8JYbNB2関数一つ一つをtry catchで包むわけじゃないのでトータルすればif elseより速くなる(場合もある)。
0763名前は開発中のものです。
03/02/20 11:37ID:deJb/6Zdメインループをtryで包んで、対処不能なエラーとか出たら
例外投げて終了するようにしてるんですがダメでしょうか…。
0764名前は開発中のものです。
03/02/20 11:55ID:weLWt0f5まあそりゃそうだがね。
1つずつ包む(w)なんて使いかたしなきゃコードも見やすくなるし利点は大きいわな。
0765名前は開発中のものです。
03/02/20 13:59ID:tbIY2ozEなんかどこでエラー起こったか良く分からないこと多いし
自作のエラー処理ならどのファイルの何行目で起こったか一目瞭然だし。。。
0766名前は開発中のものです。
03/02/20 14:09ID:v3dcluNUJAVAの例外処理は遅くならない形で実装されている…らしい。
そもそも単にエラーを検出するための手段が本筋のプログラムの動作に影響していたら本末転倒だしね。
もしその発想がC++の設計思想にもあるのなら、エラー検出以外にも使わないのは損じゃない?
0767名前は開発中のものです。
03/02/20 15:03ID:RfvJUoXOむしろ例外使わないほうが破局に至ると思うが。
どこで起こったかわからないって、そら適切にキャッチしてないからやろ。
0768765
03/02/20 16:40ID:tbIY2ozESTLとか使ってるとたまに例外出るけど
どこでそれが起こったのかさっぱり分からん(英語で何やら書かれているけど・・・
0769名前は開発中のものです。
03/02/20 19:45ID:sNEDXPjVもともと遅いからあんまり気にならないだけ。
0770名前は開発中のものです。
03/02/20 21:44ID:iMrHJGZqJavaとか.NETのようなGC環境では、throw後スタックを
リワインドする時に破棄すべきオブジェクトを識別しなくて
いいからちょっとだけ速いと。
C++とかは、tryの時点で、throwされた後に破棄する
オブジェクトを区別する仕掛けをセットアップするので
ちょとだけ重いと。
C++なら、DirectX呼出し毎にtryやthrowしてては大変なので
せめてtryは大局的に使おう。と。
キーボードにマヨネーズが飛んだからこの辺で。と
0771名前は開発中のものです。
03/02/20 22:53ID:zbgoXdj/みなさん、C++なんですか?
0772名前は開発中のものです。
03/02/20 23:04ID:Xe8g5iFj0773名前は開発中のものです。
03/02/20 23:50ID:zbgoXdj/0774名前は開発中のものです。
03/02/21 01:32ID:gtRtCCD/7以前の、DltFastみたいに、画像の(10,10)から(100,120)を表示するにはどのような関数を使えばよいのでしょうか?
0775名前は開発中のものです。
03/02/21 01:42ID:gnTzXupSBltなら、CopyRectsが相当するのでしょうか?
Helpで検索して見てよ。
でも、クリッピング、カラーキー、拡大縮小、αブレンドは対応してないと思ったけど。
8だと、Spriteが推奨されてるよ。
つうか、DirectX9に切り替えれば?
Blt復活してますよ。
0776あぼーん
NGNG0777名前は開発中のものです。
03/02/21 02:00ID:gtRtCCD/Blt復活?
今手元には、I/O別冊DirectX8.03Dアクションゲーム・プログラムだけあるんだけど、概要だけの本なのでちとつらい。
自分で調べようと思って、ヘルプを今見ていたんだが、どうせヘルプで1からやるなら9がいいかなと思っていた。
9に以降しまつ。
おすすめHPなど教えてください。
0778名前は開発中のものです。
03/02/21 02:35ID:gnTzXupSUSAのマイクロソフトのDLから
SDKと日本語HELPが落せた筈。
HELP最強。
日本語HELP最高に手っ取り早い。
…日本をサポートしてるのか、馬鹿にしてるのか分らん。
お得意さま言語HELPって意味なのか、
お前等、英語も読めないんだろ?なのか…
後、WEBサイトも、そこからリンクしてるデベロッパー系は
良い感じだよ。勿論、英語サイトだけど。
0779あぼーん
NGNG0780名前は開発中のものです。
03/02/21 08:15ID:ELxn+ZjCなぜかDirectXだけは日本語ヘルプもすぐ出るんだよねー。
他は間違えが何年も修正されずに放置されていたり、
英語版のみとかも多いのに
0781名前は開発中のものです。
03/02/21 11:35ID:gKZl/37S将来的にはないがしろにされるかもだけど。
0782名前は開発中のものです。
03/02/21 13:06ID:dNbvFHWg0783あぼーん
NGNG0784名前は開発中のものです。
03/02/21 13:54ID:XXQkdBhC0785名前は開発中のものです。
03/02/21 14:27ID:6qw0d6w5インデックス付頂点の扱いに困っております。
テクスチャ座標まで共有してしまうので、テクスチャが猛烈に貼りにくいの
ですが、どうすればいいんでしょうか?
きめ細かくテクスチャを貼るには、インデックスを使わない方がいいのでしょうか?
あと、 ペイピッポォ てなんですか?
0786あぼーん
NGNG0787名前は開発中のものです。
03/02/21 18:26ID:kpJPL22d自分でやるよりもビデオカードに任せたほうが速いとおもうんだが。
0788名前は開発中のものです。
03/02/21 18:30ID:tmDKHZRLドアが10000個ある地平線までまっすぐな廊下があったとして、それを常に
全て描画するのか?
0789あぼーん
NGNG0790名前は開発中のものです。
03/02/21 20:32ID:VSou5xSw半分半分でやるのが一番いいんだよ
0791名前は開発中のものです。
03/02/21 20:35ID:QwtlXNtBその質問はDirect3DでもOpenGLでもFAQかもしれん。
結論からいうと、頂点を重複させ、テクスチャ座標と一対一にするしかない。
しかしそうすると形状アニメーションが面倒になる
(重複させたことを覚えておく必要がある)
形状アニメーションするのなら、indexをあきらめる。
形状アニメーションしないのなら、重複させる。
ところで、形状アニメしない(=静的な形状)のなら、
ビデオメモリ上に頂点データを置けるから、indexにしてもしなくても
パフォーマンス的にあんまり変わらんと思うがどうか。
超ハイポリかつtriangle stripがウマくできてる、なら解らんでもないけど。
0792名前は開発中のものです。
03/02/21 20:39ID:QwtlXNtB軽くエリアに分けて、見えない、あるいは遠くのエリアの描画を省く、
ぐらいはやったほうがいいと思うズラ。
エリア内の描画については、荒い単位(ポリゴンでなくオブジェクトとか)
でソートして、手前から描いてあげるのがZバッファ方式上、有利。
0793名前は開発中のものです。
03/02/21 22:51ID:I6GtB43Nポリゴンを描かないのが最速だとも書いてあるが。
0794名前は開発中のものです。
03/02/22 01:57ID:CQoZjhp0可視判定とZバッファを混同してないか?
間単に説明すると、Zバッファ処理をしてる時点でアウチ。
つまり、描画を減らすというのは、
Zバッファ処理するまでも無く、描画しないって判定する事。
2Dで例えると、640×480でやってるときにx,y (1000, 1000)のピクセルを
描画しても無駄だろ?
それと同じ。つまり、一番簡単なカメラ視錐台カリング(ニア、ファーを含む)をして
更に、壁や他オブジェクトに隠れて丸々見えなから描画しないって処理をして
画面に見えるだろ物だけ、描画する。
この判定を、ハード実装してるグラボなんて無いと思ったが…
0795名前は開発中のものです。
03/02/22 02:30ID:UI8UEUuI実際にやってみな。
手前にドア(板ポリ)つくって、その後ろに100000個くらいの立方体置いたりとか。
0796名前は開発中のものです。
03/02/22 08:26ID:j5AJmFEFBeginPaint()
EndPaint()
をいちいち呼び出さないと駄目なんですか?
0797名前は開発中のものです。
03/02/22 10:12ID:qCupw7ulいいからビデオカードよお前描いてみろっつったほうが速い場合はあるかもな。
0798名前は開発中のものです。
03/02/22 10:52ID:hOkqwskMそれを描画しようとするコスト
・テクスチャやマテリアルのセットアップ
・頂点バッファのセットアップ
・描画コマンド送信
に比べれば遥かに小さい
0799名前は開発中のものです。
03/02/22 11:19ID:LP9w95za漏れはキャラクタの首が見えなくなるバグを作ってしまった。
(オブジェクトごとに判定してなかったのがいけなかったんだが)
0800名前は開発中のものです。
03/02/22 12:18ID:CQoZjhp0何気に凄い処理ですね。
メッシュを、首と体別々に持っていたのでしょうか?
一つのメッシュを、分割表示なのですか?
気になりますね。自分の場合、そのメッシュのボリューム判定が
少しでも視錐台にかかるなら、
例えメッシュの極一部しか見えないってなっても、描画としています。
0801名前は開発中のものです。
03/02/22 12:27ID:UUoLrIYq昨日重い腰をあげてDirectX9にしたんですね。
やってることは水面シミュ(KanoさんのデモのTLWaterみたいなやつ)。
時間の大半は水面の更新なのでDirectXとはあまり関係なさそう。
ソースコードも〜〜8って奴を〜〜9に変更するくらいしかしてない。
多分一番大きな変更がシェーダをvs1.0から1.1に書き換えたくらい。
で、そのようなコードなのにDirectX9に移植しただけで速度が半減。。
ほんとに不思議でしょうがないです。
DirectX9に移植したときに重くなった人ってほかにいません?
0802名前は開発中のものです。
03/02/22 14:51ID:MaM2JdGhD3DPRESENT_INTERVAL_IMMEDIATEにするとかじゃないすかね?
0803名前は開発中のものです。
03/02/22 15:14ID:UUoLrIYqありがとうございました。今やってみました。
なんか微妙にCPU負荷率が落ちてる気がしました。
なんというか、実行するたびに負荷率がだいぶ変わってて、
これだ!という原因がつかみにくいっす。
もうちょい色々テストしてみたいと思います。。
0804名前は開発中のものです。
03/02/22 18:28ID:pnxUDlK2どうもDirectX9が若干重い。
vsync切って 同じ場面で DirectX8で180fpsでるのが 140fps位に落ちる。
知らないうちに高い負荷に変わった何かがあるのか
ドライバがこなれてないだけにも思えるし・・・どうなんだろ
環境は WinXp P4-1.8G GeForce3 Det-v41.09
0805名前は開発中のものです。
03/02/22 20:03ID:i/hNL3SRそれだけでそこまで重くなるとは思わないが。
0806あぼーん
NGNG0807名前は開発中のものです。
03/02/22 23:03ID:YJQ3/Z0M俺もGeForce4Ti4600だがDX8の方が速い。
どうせごく一部除いて出来ることは変わらないのだし、
DX9ハードでない限りはDX8のままの方が良い、という判断。
ちなみに>>804に聞きたいことがある。
大抵のDX8->9変更箇所はマクロで対応できるけど、
シェーダおよびその管理部分はどうしてる?
俺は仕方ないから全部書き直したよ、数百個のシェーダを(w
0808804
03/02/23 08:06ID:jmiZ+vZfゲーム側はアセンブル済みの*.vso *.psoを読み込んでる。
DX8用はnvasmでやってる。
0809名前は開発中のものです。
03/02/23 13:36ID:zQF/wWtGつまり、首から上と首から下の目主をいくつか用意して
組み合わせることによりキャラクタのパターンを増やそうとしたわけで・・・
(2Dのころの考えに支配されていたわけね)
最初のころ空中に首が浮くバグもありました。
0810名前は開発中のものです。
03/02/23 13:43ID:jr18wf/oGetDeviceStateで直接取得するのと
キーボード・バッファからデータを取得するのとありますが
どちらを使うべきですか?
0811名前は開発中のものです。
03/02/23 13:49ID:VqWTKByv再度 float型に変換されるんで効率悪いなあ。
0812名前は開発中のものです。
03/02/23 13:52ID:5OVLhKi6DirectInputを使いましょう。
GetDeviceStateは遅くなる、…気がしました(笑)。
キーボードバッファから取得する場合、微妙なタイムラグが生じないとも限りません。
0813名前は開発中のものです。
03/02/23 14:52ID:DZwsf0lm効率がいい方法があるの?
0814名前は開発中のものです。
03/02/23 15:30ID:d99B5g5xネタですか?
0815名前は開発中のものです。
03/02/23 15:30ID:KI1SEAxf0816名前は開発中のものです。
03/02/23 15:55ID:d99B5g5xP2Pのネットワークゲームをつくたいんですけど、
ロビーサーバって 自前で 専用サーバー立てなきゃいけないんでしょうか?
無料ホームページでCGIを使って作ることはできますか?
チャット、IP取得、ゲームグループ管理ができればいいのですが。
その場合は、perl ruby なんかで作成できますか?
クライアント側は、WinSock or DirectPlayを 使うつもりです。
0817名前は開発中のものです。
03/02/23 17:20ID:sdUsP92z意味分からん
0818名前は開発中のものです。
03/02/23 19:37ID:VqWTKByv全部 doubleで計算して最後に floatに変換するとちょっとだけ速くなるよ。
もっとも、俺は普段はテーブル使うけど。
0819名前は開発中のものです。
03/02/23 20:53ID:Ghw0OMuysinf,cosf,powf,sqrtfを俺はずっと使ってきたのだが、それは間違いだったのか?
0820名前は開発中のものです。
03/02/23 21:15ID:EYrNDjwT0821名前は開発中のものです。
03/02/23 21:15ID:EYrNDjwTYahoo規制解除かな?
0822名前は開発中のものです。
03/02/23 21:32ID:VqWTKByvきみのマシンのCPUはなんだね?
0824名前は開発中のものです。
03/02/23 23:40ID:2Vs9uH0jMicrosoft Visual Studio .Net をインストールする必要があります。
VC++6.0しかないんだが・・・
どうすればいいのだ・・・
マジで教えてください
0825名前は開発中のものです。
03/02/24 00:00ID:NAL5jQF5Managed DirectX 9.0 ってなに?
リファレンスとはちがうの?
もしそうなら
C:\DXSDK\doc\DirectX9\DirectX9_c.chm
0826名前は開発中のものです。
03/02/24 00:30ID:GMktSEElVC++6.0からManaged DirectX 9.0は使えないから
そのドキュメントを読む必要は無いと思われ
0827名前は開発中のものです。
03/02/24 00:49ID:45UBPIAmC:\DXSDK\doc\DirectX9\DirectX9_c.chm
のディレクトリは作られてなかった
dxwebsetup.exeとdx90_sdkextras_jpndocs.exeをインストールしたんだが、なんかたんない?
http://www.microsoft.com/japan/msdn/directx/downloads.asp
から日本語ヘルプダウンロードすんだよね?
*日本語ヘルプ=DirectX9関数の意味とか乗っているやつ
0828名前は開発中のものです。
03/02/24 02:33ID:uTM8GmS80829Leliel(れりえる)
03/02/24 03:37ID:/oQQqKmFdx90_sdkextras_jpndocs.exeを実行した後(展開先)に、単独でDirectX9_c.chm(JPN)があると思いますが、如何でしょう?
ちなみに、Visual Studio .NETに統合(関連付け)する場合には、****.msiを実行してインストールすると思ったけど...
0830あぼーん
NGNG0831名前は開発中のものです。
03/02/24 09:01ID:O2UwAQOZ一度、検索をかけてみるのがいいと思われ
0832名前は開発中のものです。
03/02/24 14:52ID:/Ss8nDaBきみのマシンのCPUはなんだね?
この質問の意味がマジでわからないんですけど。
ちなみにP4の2.23ですが。
0833Leliel(れりえる)
03/02/24 15:22ID:/oQQqKmF> 一度、検索をかけてみるのがいいと思われ
「問題の趣旨を間違っているよ」という意味でしょうか?
>>827さん
Managed DirectXですが、ヘルプに以下のように書かれていましたので、利用は無理かと...
以下、抜粋です。
> 問題点
> Managed DirectX ドキュメントは、Visual Studio .NET IDE ヘルプ システム経由でのみ利用可能である。
参考までに、多分DirectX9_m.Hx*がヘルプ(chm)相当になると思います。
まぁ、問題点らしいので、DirectX9.1SDK位の時には、直るのではないかと言ってみるテスト(w
0834名前は開発中のものです。
03/02/24 17:12ID:WlBHZJfXヘッダファイルぐらい読めよ。
Alphaとかじゃなくてx86つかってるならsinf(x) は (float)sin((float)x)
そもそもfloat型命令がCPUにないんだから仕方がないことなので
気にする必要なんてないがな。
0835あぼーん
NGNG0836名前は開発中のものです。
03/02/24 22:43ID:Le/4D7YYというか、Device Type が HAL しかない。なぜだろう?
0837名前は開発中のものです。
03/02/24 22:51ID:eNzJcwmh0838836
03/02/24 23:07ID:Le/4D7YYd3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.Windowed = TRUE;
で他は 0 なんですが。
もちろん D3DCREATE_SOFTWARE_VERTEXPROCESSING です。
■ このスレッドは過去ログ倉庫に格納されています