【C++】DirectX初心者質問スレ Part8 【D】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part7 【C++】
http://pc8.2ch.net/test/read.cgi/tech/1132216611/
馬鹿に餌を与えないでください
DirectX初心者に幸多からん事を。
これ↓テンプレにいれとけ つ 金が無い奴はゲーム作るな
>>10 いくらあっても駄目な奴は駄目。
しかし、必要条件ではある。
前スレ934ですが、940とは別人です。 みなさん、参考になる意見ありがとうございました。
14 :
デフォルトの名無しさん :2006/02/23(木) 10:49:19
DirectXのプログラム立ち上げると マウスカーソルが砂時計のままなんですが 対処法ありますか? とりあえずSetCursor試しましたが すぐに変わらず、クリックすると通常に戻る感じなのです。
>>14 うちは砂時計になったことないぞ。
他のアプリでもその症状なのかい。
>>15 DirectX Sample Browserの
Tutorial 1: CreateDevice
をコンパイルして
実行した時、
起動時にウィンドウの上にカーソルがあると同じ症状(砂時計)が起こりました。
起動時にウィンドウ外にカーソルがあるとノーマルカーソルになりました。
謎です
あーあと、C# 版のCreateDeviceやると症状が起きませんでした。
18 :
14 :2006/02/23(木) 11:29:24
自己解決しました。 Lunaってライブラリでも同じ症状が出てたみたいなので ソース見てみました。 CreateWindowに渡す構造体のカーソルがNULL指定の時起こるみたいでした。 どうみてもスレ違いです。 本当にありがとうございました。 ゴメーヌ
ごめんねで済めば、6面はいらない。
3面あれば立方体つくれるよ
>>18 >CreateWindowに渡す構造体のカーソルがNULL指定の時起こるみたいでした。
CreateWindow?RegisterClassではなくて?
22 :
デフォルトの名無しさん :2006/02/23(木) 15:26:47
DirectXの勉強をするのに参考になるソースはないでしょうか? 特にデバイスロストの勉強をしたいのでヨロシクおねがいします。
( ゚ρ゚)ポカーン
すいません教えて下さい。 d3d9.dllをc:\windows\system32以外に置きたいんですが、 なにか問題とかってあるんでしょうか?
別に。
そうですか。 簡潔かつ冷酷なレスありがとうございました。
正しいので冷酷ではないと思うよ
質問自体、何のためにそうする必要があるのか説明する努力をせず、 手を抜いているのに、他人にはそれを許さない。
あ、すいません、だから25は冷たいんですね。 DirectX9が入ってないパソコンでもそのまま動くようにしたいんです。 つまりd3d9.dllとかをゲームといっしょにするわけです。
駄目だこいつ…
単体では再配布できないから無理じゃね? つーか、DirectXってDLL等置いただけでどうさするんか?
DirectXランタイムが入ってないPCで作動させるのは 無理なのであきらめなさい。
ちゃんとDirectX9を入れないと駄目なんですか? うーん25は問題ないと言ってるし。 今C:\Documents and Settings\Saotome\HyperAzumaにd3d9.dll入れてみましたが動きますよ。
m9(^Д^)プギャー!!
ランタイムのインストーラを一緒に渡せばいいだけ。
>>33 >>25 をそのように補完したお前のIntelliSenseは性能がいいなぁ。
DirectX9がインストールされてるって落ちはないよな。もちろん。
早乙女君、ガンバ。
うわ、あ、すいませんDirectX9入ってました。今ノートで試してみたら動かなかったです。 そうするとCD-ROM入れて遊んでもらうにはちゃんとDirectX9を入れないと駄目なんですね。 うーん遊びたいけどDirectX9入れたくない人はどうすれば。。。
DirectX使わなければいい
DirectX8なり7なりを使えばいい。
早乙女君、古いバージョンで開発するというのはどうだ?
諦める
>>42 OSによっては、DirectX8か7を入れないといけないじゃないか。
結局ターゲットしだい。
つ OpenGL
つ 有無を言わさず突っこむ
もうハイパーアズマは完成に近いのでDirectX9必須なんです。 でもまあDirectX9入れてでも遊びたくなるでしょうからこのままいきます。 ありがとうございました。
つ50 みりすってなに?
52 :
51 :2006/02/23(木) 19:21:17
それはアンカーじゃねーorz
まあ頑張れや早乙女。
早乙女テンプレに入れてくれw
>>54 立方体の場合、任意の視点から見えるのは高々3面しかない。
>>56 ビルボードみたいに視点に応じて回転させるってことですか?
これ↓テンプレにいれとけ つ 脳味噌が無い奴はゲーム作るな
59 :
デフォルトの名無しさん :2006/02/23(木) 21:22:38
質問です。 ロボットのキャラアニメ部分を製作中です。 D3DXFRAME と ID3DXAnimationController 1対1のアニメは成功しました。 最終的には4対1になるのですが、ID3DXAnimationController.CloneAnimationControllerで4対4にする方法しか思いつきません。 パフォーマンス的にそれは避けねばならない場合、どうしたら良いでしょうか?
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【質問をする前に】
金が無い奴はゲーム作るな
時間が無い奴はゲーム作るな
脳味噌が無い奴はゲーム作るな
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
※早乙女には要注意!
前スレ
【C++】 DirectX初心者質問スレ Part7 【C++】
http://pc8.2ch.net/test/read.cgi/tech/1132216611/
61 :
59 :2006/02/23(木) 23:11:27
すいません。 勝手ながら、ココでの質問は無しにさせてください。
なんだ、マルチか
63 :
59 :2006/02/23(木) 23:18:02
ええ。 今から。
達者でな 飯に困ったら土を食うんだぞ
65 :
59 :2006/02/24(金) 00:15:37
勝手に鬱に貼られちゃいました。 お陰さまで、有益な情報が得られました。 どなたか存じませんが、ありがとうございます。
良かったな 最近馬鹿が沸くようになった
早乙女君人気だ。 誰?
早乙女愛だす
まあ、質問する前にヘルプとサンプルを100回読めということだな。 それで大抵の問題は解決するだろう。
ビデオチップ : NVIDIA GeForce FX 5700 SDK : Microsoft DirectX 9.0 SDK Update (Summer 2004) ドライバは最新のものにしています。 DirectX 7でのプログラミングについてです。 ウィンドウモードです。下記のように16ビットのテクスチャサーフェスを作成(スプライトとして利用するため)し、カラーキーを指定しています。 そのサーフェスからバックバッファ(同じ16ビットカラー)へカラーキー付きで Blt をしたとき、 テクスチャサーフェス大きさが、 width, height がともに512以上のときに正常に動作し、 width, height のいずれかが256以下のとき、DDERR_UNSUPPORTEDが返ってきます。 テクスチャの幅や高さの最大値が2048や4096があるのは知っていますが、 最小値は存在するのでしょうか?ちなみにMatrox や VIA のものだと正常に動作します。 どなたか、お分かりになりましたらよろしくお願いいたします。
71 :
続きです :2006/02/24(金) 15:10:44
INITDDSTRUCT(ddsd); // DD 構造体の初期化 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_3DDEVICE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY; ddsd.dwWidth = width; // オフスクリーンの幅 ddsd.dwHeight = height; // オフスクリーンの高さ // 16ビットカラー(R5,G6,B5) ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; ddsd.ddpfPixelFormat.dwRGBBitCount = 16; ddsd.ddpfPixelFormat.dwRBitMask = 0x0000F800; ddsd.ddpfPixelFormat.dwGBitMask = 0x000007E0; ddsd.ddpfPixelFormat.dwBBitMask = 0x0000001F; lpDD->CreateSurface(&ddsd, &lpDDSTex, NULL); // カラーキーでクリアする DDBLTFX ddbltfx; INITDDSTRUCT(ddbltfx); ddbltfx.dwFillColor = 0x0000007E0; lpDDSTex->Blt(NULL, NULL, NULL, DDBLT_COLORFILL, &ddbltfx); (lpDDSTexになにかを描画をする) DDCOLORKEY ddck; ddck.dwColorSpaceLowValue = 0x000007E0; // 緑をカラーキーにセット ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue; lpDDSTex->SetColorKey(DDCKEY_SRCBLT, &ddck); ・・・・ hr = lpddsBackBuffer->Blt(&r_dest, lpDDSTex, &r_src, DDBLT_KEYSRC, NULL);
>「ググれ」「SDK見れ」以外の回答でおながいします。 これ、「SDK」の部分テンプレから外して良いと思うんだが。 最低SDKは見れ。 初心者スレだし、見て分からんのはしゃーないが、 見てもおらんヤツがいっぱいいるだろ。
>>72 >3.SDKを見ても、Googleで検索しても、いまいち理解できない人
本当は、これがあるから、見ても無い奴はスルーするのが良いのだが、
ちょっとかじった奴でも教えられる質問ばかりで、
誰でも簡単に優越感に浸るから。
今気付いたんだけど早乙女BBXにも投稿してねえか?
初歩的な質問は初歩的な回答者のために残しておいてください。 そういう殺伐さが必要だと思うのです。 あなた一人で全部答えてしまったらスレの人材が育ちません><
>>70 最小値
StretchBltの場合、小さすぎると失敗する。
>70 DirectDrawなんてすっかり忘れてるけど、勘で答えれば、 Blt()ってBlt元とBlt先のフォーマットが一致してないと駄目なんじゃないのか? でかいサーフィスを確保した場合、何らかの理由によりシステムメモリに確保されて、 システムメモリ→ビデオメモリの転送時には、 異なるフォーマットでもソフトウェア変換が実行されるようになってるとか。 BltをBltFastに変えて試してみたらどうなる?
78 :
70 :2006/02/25(土) 01:44:52
>>76-77 お返事ありがとうございます。
BltをBltFastで試してみたところ、結果は同じでした。
512x512のサーフェスを確保すると動作します。
また、Bltをしている矩形は貼り付け元(0, 0)-(100. 100)、貼り付け先(150, 100)-(250, 200) です。
今のところドライバの列挙を行い、NVIDIAだったらテクスチャの最小の幅及び高さを 512 にすることでしのげればと思っていますが、
正直なところ、大変気持ちが悪いです・・・。
>>78 貼り付け先のRECTをNULLにしたらどうなる?
80 :
70 :2006/02/25(土) 01:58:43
>>79 結果は同じでした。512x512にしたとたん動作しました。
それから、貼り付け元と貼り付け先のフォーマットについてですが、共にR5G6B5の16ビットでした。
また、貼り付け元のサーフェスのCapsの DDSCAPS_TEXTURE を DDSCAPS_OFFSCREENSURFACE にすると
動作することは確認しているのですが、そのようにすると D3DXDrawSpriteSimpleで描画できなくなってしまいます。
Spriteって8と9で仕様変わってるの? 9で2Dゲーム作りたいんだけどよくわからない
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
SDKは英語ができない人なんで見てない Googleの方は見てみたけどDirectX8のものしか出てこなかった
ふざけてるのか?
本気ですが。
馬鹿にしてるだろ?
してません。
勃起してるだろ?
してますが、何か?
いいこと思いついた お前俺のケツの中でションベンしろ
もう、我慢できないんだろ?
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ 次のかたどうぞ 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
ちょwww悪かった Sprite::Drawの中心位置と配置位置についてだけ教えてくれ
ふざけてるのか?
本気ですが。
馬鹿にしてるだろ?
してません。
自己解決しました( ´∀`)
はい、お疲れさん。
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ 次のかたどうぞ 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
DirectMusicでwaveを再生したんですが、 他のプレイヤー(MediaPlayer、Lilith)と聞き比べて音がこもっているように聞こえます。 DirectX9のドキュメント参考に作ったのですが、 ほかに設定があるのでしょうか?
>>101 試しにクォリティを一番上にする。
レートとか落としてないか確認する。
>>102 探してるんですが、それらをセットする関数が見当たらないんです
DirectMusicでそんな機能あんのか…
んと、DirectMusicのサンプルで聞いても音が悪いんで
おとなしくDirectSound使います。。。
>>102 >>104 回答サンクスです
それが答えなのだが気がつかないのか。
107 :
101 :2006/02/25(土) 11:17:25
それが音質を変更する方法。
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ 次のかたどうぞ 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ さあ、質問をいえ 三.ヽ= (⌒ヽ;:;:;,.二) どんな質問も話だけなら聞いてやろう ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
DirectSoundを自前で作って接続すればプライマリバッファ変更できなかったっけ。 まあ確かにmidi鳴らすんじゃなければMusic使わない方がいいけど。
112 :
101 :2006/02/25(土) 16:34:44
>>111 プラマリバッファ作成→SetFormatですね。
サウンドフォーマットはweveとoggを考えてます。
とりあえず、今エラーで止まって orz ...
Weve?
ウィーブ
DirectMusicでogg再生とかやったなぁ。
CreateTextureでD3DUSAGE_RENDERTARGETを設定したテクスチャを作り、 動的なテクスチャとして使っているのですが このテクスチャにカラーキーを設定することはできないのでしょうか? もしくは他の方法で抜けを実現する方法はありませんか?
だからカラーキーは止めろといったのだ・・・
フォトショとかGimpで透明度を指定したpngとかgifファイル出力 俺はいつもα値設定した画像使ってる
119 :
デフォルトの名無しさん :2006/02/25(土) 22:25:18
DirectXはインストールしてもアイコンは出ないものなんですか?
DirectXはインストールしてもアイコンは出ないものなんですよ。
121 :
116 :2006/02/25(土) 22:36:57
カラーキーを使わない方法でなにか実現する方法ないでしょうか?
>>121 DDSファイルを使えばOKです。
DXSDKに変換するソフトがついてきているはずです。
>>121 テクスチャを動的に作っているのなら、
ターゲットのテクスチャフォーマットをα付きのにして
ソースの抜きの部分は(αテストで)描画しないようにすればいいんじゃないの。
ソースのテクスチャ自体はもちろんα付きテクスチャにした方がいいわね。
特定の色の時だけαをゼロにする、みたいなのは
シェーダでも使わないと無理じゃないかしら。
124 :
116 :2006/02/25(土) 22:59:24
あらかじめ用意したテクスチャを使いたいわけではなく テクスチャ領域をフレームバッファに設定して動的に作ったテクスチャを使いたいのです 例えば、描画負荷の大きい木のモデルを作り一度テクスチャ領域に描画して それをビルボードとして3D領域に複数配置するなどの使い方ってできないでしょうか?
>>122 ファイル格納形式は関係無い
知ったかはすっこんでろ
>>124 そのやり方のメリットが見出せないのだが…
>>125 メリットは関係無い
知ったかはすっこんでろ
光学迷彩(屈折)とかそんな感じじゃなかったっけ?
空のテクスチャ領域を作成でいないのであれば白い画像を用意しないと
レンダーターゲットをD3DFMT_A8R8G8B8にして ターゲットのClear色もD3DCOLOR_ARGB(0,0,0,0) (×D3DCOLOR_XRGB(0,0,0))にすればできそうよね。
131 :
116 :2006/02/25(土) 23:32:33
>>123 レス遅くなってすみません
ターゲットのテクスチャフォーマットを調べてました、ウィンドウモードでもターゲットのフォーマットは変えられるのですね
>>125 木のモデルを1万ポリゴンで作ってビルボード化してそれを100本配置すれば100万ポリゴン
こういう使い方は駄目なのでしょうか?
これ以外でも動的に抜けがあるテクスチャを使い道は色々あるかと思います
>>130 ずばりできました
ありがとうございます
>>131 >木のモデルを1万ポリゴンで作ってビルボード化してそれを100本配置すれば100万ポリゴン
それってあらかじめそういうテクスチャを作っておくのと何が違うの?
133 :
116 :2006/02/25(土) 23:37:18
色々教えていただきありがとうございました 拙い説明しか出来ず申し訳ないです
>>131 >木のモデルを1万ポリゴンで作ってビルボード化してそれを100本配置すれば100万ポリゴン
パソコンの解像度で1万ポリゴンの恩恵は受けられないと思う
何かと使えるテクではあるが、
この木の画像はレンダリングソフトなんかで画像出力しておいたほうがいいz
135 :
116 :2006/02/25(土) 23:42:27
>>132 近くにきた場合はモデル化、遠くの場合はビルボードに切り替えたり
角度が変わった場合にもその場でテクスチャを作成しなおすこともできますし
アニメーションしているものだけをモデルで表示、アニメーションが止まったときはビルボード化など
色々使えるかと思います。
全ての木が同じ向きなら、一つ"向きの整合性のとれた"ビルボードを作れば 一応全ての木で使いまわせるわね、ライティングもできるし。 同じ向きでないなら無難にプリレンダかしらね。
>一つ"向きの整合性のとれた"ビルボードを作れば >一応全ての木で使いまわせる と思ったけど、多分違和感バリバリだからやめた方がいいわw
苦労に見合うリターンは得られないね。
3Dモデルをクライアント座標を指定して設置することはできないでしょうか?
意味が分かりません。 DirectXのチュートリアルをやってから出直してきてください。
ここ初心者スレなんだが
じゃ、初心者以下はお帰りください
143 :
デフォルトの名無しさん :2006/02/26(日) 03:00:14
>>142 ちょ、以下なら初心者も含まれるだろw
初心者未満はお帰りください。
まあ、いまの段階だと、触って理解できることのほうが多いんじゃないかな? 俺もチュートリアルとかちゃんと進めてみることを薦める。
ttp://wisdom.sakura.ne.jp/system/directx/dxg3.html ここのページのプログラムなのですが
WinMain関数内の
pDirect3D = Direct3DCreate8(D3D_SDK_VERSION);の行とhWnd = CreateWindow(の行についてです。
もし先にhWnd = CreateWindow( .. )を処理してからpDirect3D = Direct3DCreate8(D3D_SDK_VERSION);を処理しますと
私の環境ではプログラムが強制終了してしまいます。
なぜでしょうか・・
>>145 ウィンドウプロシージャのWM_CREATEの処理中に
pDirect3Dを使っているんだから当たり前。
っていうか、この程度ならデバッガ使えば5秒で分かるんだから、 デバッガの使い方くらい覚えた方がいいぞ。
>>146 ,147
あ!
すみませんそういうことですかorz
精進しますorz
@ pDev->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_NONE);//頂点フォグ pDev->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_LINEAR);//ピクセルフォグ A pDev->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);//頂点フォグ pDev->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_NONE);//ピクセルフォグ @のようにすると綺麗にフォグがかかり、 Aのようにすると近くのキャラや、2Dで描画しているプリミティブにまでフォグがかかってしまいます。 何故Aの設定で上手くフォグがかからないのでしょうか? 分かる方、お願いします。
>>149 フォグが一種類しか指定できないからだと思うが。。。
>>149 物体1つ1つの描画毎にフォグを有効にするか無効にするか決める必要があんじゃねーの?
>>149 頂点フォグは、ビュー空間での距離に依存するけど、
変換済み座標だと頂点処理が行われないから
スペキュラのアルファ値がそのままフォグ濃度(0.0:100% 1.0:0%)になるみたいね。
この値はデフォルトで0.0だから、フォグが100%になっちゃうわけね。
んでピクセルフォグも、普通は各ピクセルのビュー空間での距離(w)に依存するんだけど
変換済み座標なら多分rhw=1.0にしてると思うから、
フォグのnear距離が1.0以上なら、フォグがかかっていないようにみえるわけね。
それより、Aの"近くのキャラにフォグかかかる"というのは、正しい結果じゃないかしら。
>>149 (2)のほうでちゃんとフォグの設定してないだろ?
154 :
149 :2006/02/26(日) 15:38:44
返答、ありがとうございます。 スペキュラのアルファですか。。。 確かに言われた通り、@でrhw=0.0にすると2Dプリミティブにフォグが100%かかりました。 とりあえず@のままで行こうと考えています。 (ボードの対応は考えなくても良いかな。。。!?) ありがとうございました。
すいません教えて下さい。 CD-Rにゲームを焼いてからプレイするとロードが遅すぎます。(HDで4秒程度なのがCD-Rだと50秒前後) これはDirectX9の限界として諦めるしかないのでしょうか。
それはパソコンの性能じゃないのか
最低限ハード環境と読み込むデータ量ぐらい書けよ。
PENTIUM43GHz/メモリ512MB/ハードディスク40GB/WINDOWSXP/DIRECTX9です。 標準CD-ROMドライブです。 データは全部で430MBぐらいです。
CD読み込みデバイスの限界だな。 コンシューマよろしく、読み込みを細かく制御した上で、 どうしても時間が掛かるところは「now loading...」とか表示しとけ。
ドライブのせいじゃない。 プログラマがアホなのが原因。
CD-ROM?早乙女か?
ちょwwwおまwww全然スレ違いのネタだろ。 大人ならスルー汁
DMA、シーク位置。
内側にダミー書き込んで読み込み速度稼ぐとか。
>>155 そう、DirectX9の限界。
DirectX8にしたら、多分改善される。
dllをCD-ROMに同梱して起動するといいよ。
起動からずっとHDDの中にデータを落とし込めばいいんじゃ?
インストールさせてから、プレイさせれば?
太陽誘電のメディア使えば速いよ
なるほどCD-ROMドライブの限界ですか。 >読み込みを細かく制御した上で、 そうすると最後がFromFileとなってる関数だと丸ごとロードしてしまうので、 べつな方法で一度ロードしておいてから、 最後がFromFileInMemoryとなってる関数を使えばいいんでしょうかね。 ありがとうございました。
>>172 CDとHDDは読み込み速度違うからCDだと遅くなるのは当然
そもそもCDから起動して遅いのであれば、ユーザー側がHDDにコピーすればいいし
CDから起動させるのを前提にしている意味がわからん
早乙女の限界。
172はドリキャスで開発している
176 :
デフォルトの名無しさん :2006/02/27(月) 20:31:52
ビデオメモリに確保したオフスクリーンサーフェス同士でブロック転送をするときに DirectX7 のlpdds->Bltに相当する DirectX9の関数はありますか?
ない
なる
たる
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
>>1 の3廃止しね?
同一人物だと思うが質問を一行で跳ね飛ばされるのはおかしい
>>181 検索は廃止してもいいと思うが、SDKはやっぱり必要だ。
SDKを見ても分からないということは、まだ手を出すレベルではないということだ。
教えてクン乙
悪い、逆だ。 というか、分かりにくいな。 【質問する方】に加えるべき。 ・SDKは全て読んでください。SDKを理解できないがための疑問は諦めてください。 ・Googleで検索をしてください。検索に使ったワードも書いてください。
教えてクンが、ここは初心者スレだ!とかファビョってくるヨカソ・・・
>>185 SDKを理解できないのは初心者以前だろ
XNAって業界的にはどうなんです? 採用されつつあるんですか?
こことは別に超初心者スレ立てるか
( ゚д゚)ポカーン
( ゚д゚)ポンカーン
タダで資料があるのに、それすら読まない奴は切捨てでいいだろ。 読んでも分からないのは、このスレの範疇なんだし。
すいません、コードの質問ではないのですがよろしくお願いします。 GeForce2〜4などのDirectX7、8世代のグラボ(ドライバは最新のDirectX9c対応のもの)に対して、 シェーダー2(3?)などのDirectX9の機能を使ったプログラムを動かした場合、 ソフトウェア的にエミュレートされるものなのでしょうか? それとも動作不定になるのでしょうか? これからDirectXを本腰いれて勉強しようと思っているのですが、 ビデオカードにあわせてDtx8にしようか、最新の9にしようか、考えたいので よろしくお願いします。
下調べも、勉強のうち
>192 >ソフトウェア的にエミュレートされるものなのでしょうか? どうなるかはプログラムの実装次第。 PS2のソフトウェア処理なんてつかいものにならんよ。
195 :
デフォルトの名無しさん :2006/02/27(月) 22:23:06
.NETでDirectXは可能あるか?
化膿
不可能
はっきりしろよwww
それじゃ>195が無能って事で決定の方向で
200 :
デフォルトの名無しさん :2006/02/27(月) 22:40:18
.NETでDirectXは無能あるか...あたわず、とよむのか?
ttp://wisdom.sakura.ne.jp/system/directx/dxg7.html ここの下のプログラムをコンパイルしようと思うのですが、
<D3dx8math.h>を開けません。と怒られてしまいます。
そこでDirectXSDKをインスコしたフォルダのincludeフォルダを覗いてみるとD3dx8math.hが存在しませんでした。
(D3dx9math.hはあるのですが・・)それとライブラリ D3dx8.libも存在しませんでした。
インスコしたSDKは2006(feb)なのですが、これはどうすればいいんでしょうかorz
_,._? ライブラリとヘッダは別物ですよね 言葉足らずでしたらすみませんが、2006febにはD3dx8math.hもD3dx8.libも存在しないのでお手上げ状態なのです 検索しても圧倒的に引っかからないですし
古いSDKを入れる
>>203 だったらソースを D3D9.h D3dx9math.h と書き換えればいいジャマイカ
206 :
デフォルトの名無しさん :2006/02/28(火) 02:23:33
2D表示の質問です。バージョン:feb2006 ID3DXSprite::Draw(引数5個のやつ)でスプライト表示すると、 拡大、縮小され色が変になったりするんです。 引数7個時代の産物ではそのようなことは起こらないのですが、 feb2006では同等の処理はできないのですか?
>>206 ID3DXSprite::SetTransform
>176 IDirect3DDevice9::StretchRect
209 :
206 :2006/02/28(火) 04:13:30
dクス 調べてみます。
>>192 たしか頂点シェーダーはエミュされるけど
ピクセルシェーダーはされなかったハズ
…と見た記憶がある
シェーダーのデバッガって無いんでしょうか? せめて値だけでも表示できれば良いんですが。
212 :
デフォルトの名無しさん :2006/02/28(火) 14:44:05
DirectX9 の ID3DXSprite::Draw で、テクスチャの一部を描画したときに、となりのピクセルが描画されてしまうことを防ぐ方法はありますか?
話し合い
>>212 一部をメモリに読み込んで新たなテクスチャを作っとくとか?
素人が適当に言ってみた。
帰れよ
これから俺も全てのレスにSDKとレスすることにするか
SDKだと分かりにくいから、"ヘルプ、サンプル"に変えないか?テンプレも。 英語しか無いならまだしも、日本語ヘルプすら読まないのは怠慢としか言えないだろ・・・
>>219 失礼ですが、ヘルプ、サンプルはどこにあるのですか?
>>220 MSのサイト
SDK付属って書くと、日本語ヘルプが入って無いからなぁ・・・
ここは大変悪いコミニュティーですね。
SDK嫁で全て解決 そんなの初心者スレじゃない
>>223 読んで分からない所を聞くなら、みんな親切に教えてくれると思うけど。
説明書を読まずに分かりませんって。
そんなの初心者でもなんでもないだろ
教えてクンが必死にがんばってるなw その労力を別の方向に使ったほうがいいぞw
226 :
211 :2006/02/28(火) 20:35:04
出来るみたいね、DX SDK入れるか。
>>211 VC6使いなら、RenderMonkeyか、FX何たら辺りを使うのもいいぞ。バグ多いけど。
>>212 ID3DXSpriteは使ったことないけど、0.5ずらせば解決すると思う
「テクセルとピクセル間の直接マッピング」、「最近点サンプリング」の項辺りに詳しい
228 :
212 :2006/03/01(水) 02:21:23
テクスチャフィルタリングは SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_NONE) で無しにしているのですが、自分が使っている Millennium G450上では右端に指定した矩形の隣のピクセルが少し描かれてしまいます。 同じプログラムで nVIDIA や VIA のもので動かしてみたらそういったことがありませんでした。 Millennium のほうのドライバは最新にしています。 こういった同じプログラムで表示が違うというのは起こり得るのでしょうか? もしあるのでしたら、そのときの対処などありましたら教えていただければと思います。
起こりえる。 対処法は、 1、動作対象から外す。 2、ビデオカードを判別して微調整する。
230 :
212 :2006/03/01(水) 03:00:47
>>229 ありがとうございます。
どうしてもわからなかったので、答えを頂いて少し安心しました。
今日はもう寝ます。おやすみなさい。
>>228 ビデオカード3D設定で、「アプリケーション依存」にする。
232 :
192 :2006/03/01(水) 19:06:10
>>194 >>210 遅くなりましたが
どうもありがとうございます
頂点シェーダはともかく
ピクセルシェーダーは叩いても期待できないと
233 :
212 :2006/03/01(水) 19:40:31
>>231 ビデオカード3D設定というはビデオカード別にあるユーティリティー内にあるのでしょうか?
こちらにある Matrox QuickDesk内にはありませんでした。
>>233 通常は
画面のプロパティ>設定>詳細ボタン
を押した先のタブにある。
知ったかの悪寒
無敵戦士シッタカリオン
ウィンドウサイズが変更された時にWM_SIZEを処理して
カメラの位置の修正
バッファサイズのリサイズ
などをすると思います
しかし私の環境では最小化時に(WPARAMがSIZE_MINIMIZEの時)以下の関数
IDirect3DDevice8::SetTransform();
IDirect3DDevice8::SetTransform();
IDirect3DDevice8::SetRenderState();
IDirect3DDevice8::SetRenderState();
を処理しますと。ご不便をおかけしてすみません略が出てプログラムが終了してしまいます。
なぜでしょうか?
参考にしているサイトは次なのですが・・・(氏もwParam == SIZE_MINIMIZEの時は弾いている)
http://wisdom.sakura.ne.jp/system/directx/dxg8.html
ttp://www7a.biglobe.ne.jp/~GPGA/html/program.html ↑ここのサンプルを参考にスキンメッシュの実装を試みているのですが、
tiny.x を読ませようとすると LoadXFile.cpp の SetupBoneMatrixPointersOnMesh の中で
D3DXFrameFind が NULL を返して失敗しているようです。
SDK の Multianimation や SkinnedMesh サンプルを見ても読み込み部は同様なな処理を行っているようです。
どうすればちゃんと読み込めるのでしょうか?
次スレは 【C++】 DirectX初心者質問スレ Part9 【C++】 ね
で、Delphiなんて知らないんだからねっ! Dよりメジャーだからなんだっていうのよ!!
D3DRS_ALPHATESTENABLE これってなんでTESTって付いてるんでしょう? TRUEにしたままリリースしたらまずい?
/' ! ━━┓┃┃ -‐'―ニ二二二二ニ>ヽ、 ┃ ━━━━━━━━ ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ┃ ┃┃┃ ' Y ー==j 〈,,二,゙ ! ) 。 ┛ ゝ. {、 - ,. ヾ "^ } } ゚ 。 ) ,. ‘-,,' ≦ 三 ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚ '=-/ ヽ゚ 。≧ 三 ==- / |ヽ \-ァ, ≧=- 。 ! \ イレ,、 >三 。゚ ・ ゚ | >≦`Vヾ ヾ ≧ 〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
>>242 アルファテストでググれ
…と思ったがβテストと同じような意味のαテストばかりヒットするか。
物凄く古い記事だが、↓が参考になるかと。
ttp://platz.jp/~moal/colorkey.html ちなみに今はカラーキーなんて物は絶滅していて、αブレンドかαテストを
使うようになっているから、そのサイトの説明とは状況が変わっている。
(D3DXのテクスチャ関係のカラーキーはα値を設定しているだけ)
245 :
242 :2006/03/03(金) 13:38:58
/' ! -‐'―ニ二二二二ニ>ヽ、 ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ' Y ー==j 〈,,二,゙ ! ) 。 ゝ. {、 - ,. ヾ "^ } } ゚ 。 ) ,. ‘-,,' ≦ 三 ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚ '=-/ ヽ゚ 。≧ なるほど。 三 ==- / |ヽ \-ァ, ありがとう ≧=- 。 ! \ イレ,、 ござい >三 。゚ ・ ゚ | >≦`Vヾ ました。 ヾ ≧ 〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
掃除していってくださいよ
質問です。 固定パイプラインで、 α = ((テクスチャのα) - 固定値1) x 固定値2 とやりたいんですが、 TFACTORって1つのパイプラインで1つの値しか使えないもんでしたっけ? 2つ使えると固定値1,2の両方に使えていいなぁって思ったんですが。 あと x固定値2 のところで、元のテクスチャのαよりも振れ幅を大きくしたい場合は D3DTOP_MODULATE4X などを使うのが良いでしょうか? これだとせいぜい4倍の振れ幅にしかならないので、もう少し大きい拡大率を 実現する方法があれば良いのですが。 よろしくたのんます。
248 :
247 :2006/03/03(金) 23:32:48
前者については固定値2のところにスペキュラ値を使うことを思いついた
250 :
247 :2006/03/04(土) 02:28:14
>>249 固定パイプラインで ってわざわざ書いたやんかぁ。
あんまりビデオカードを限定したくないんで。
そこをなんとか。
プログラマブルシェーダー使わずになんでもかんでもできるなら、 プログラマブルシェーダーなんて必要ないわな・・・
プログラマブルシェーダーって早口で3回言えたら
>>247 のちんこうp
質問です。 「DirectX」という言葉の意味に「DirectSound」は含まれますか?
256 :
255 :2006/03/04(土) 13:57:43
age忘れ。
早乙女キタ━━━━(゚∀゚)━━━━ッ!!
>>254 ビットマップをそんな風にリアルタイムで拡大できるフィルタあったら、
誰も大きいサイズのテクスチャなんてつかわねぇよ。
リアルタイムでなければ、かなり綺麗に拡大できる方法もある。
D3DXLoadMeshHierarchyFromXInMemory が重くて困ってます。 軽くするテクニックを教えてもらいたいのですが、、、
自前で組めば解決。
>>262 やっぱすか。。。
フレームは作った事がありますが、アニメーションが。。。
とか思ってたら、クローニングする方法を思いつきました。
クローニングが軽いか重いか知りませんが、一応解決したように思います。
ありがとうございました。
DirectX SDK - (February 2006)が付録になっている書籍を教えてください
ネット環境がないとかじゃね?
>>264 も携帯からとか。
携帯でダウンロード。 今は男を見せるとき。
ネットカフェ
最近の携帯はそんなに大容量ファイルを扱えるのか?
ネット環境が無い初心者が、SDK手に入れた所でまともに扱えるとは思えない。
ネット環境が無い≠初心者
( ゚д゚)ポカーン
開発中に手軽に情報を集められないハンデはでかい。
逆に考えるんだ もしISDNユーザーならかなりのベテラン
OSが割れものだから、ダウンロード前の正規品確認が出来ない ↓ 雑誌でゲト だったりして。
windows2000を使っている人がすべて割れユーザーみたいな誤解を与えることを言わないでくれ
だれも誤解なんてして無いと思うが・・・
windows2003を使っている人がすべて割れユーザーみたいな誤解を与えることを言わないでくれ
根本的な質問いいですか・・・? DirectXとは何ですか? あって何の意味があるんですか? もうこの質問ってでましたかね・・・
根本的な質問いいですか・・・? 人間とは何ですか? あって何の意味があるんですか? もうこの質問ってでましたかね・・・
根本的な質問いいですか・・・? 若さとは何ですか? あって何の意味があるんですか? もうこの質問ってでましたかね・・・
根本的な質問いいですか・・・? マッサーカーとは何ですか? あって何の意味があるんですか? もうこの質問ってでましたかね・・・
283 :
279 :2006/03/05(日) 00:34:31
>>280-282 そんな馬鹿にしなくてもいいじゃないですか・・・
この質問はスルーですか・・・
↓ここで早乙女がズバリ回答
>>279 DirectXとはマイクロソフトが提供するマルチメディア向けソリューションのことなんだ。
アプリケーション開発者向けにはDirectX APIをラッピングしたDirect3DXライブラリを
中心にドキュメントやツール、デバッガを包括したDirectX SDKが用意されていて、
このスレで扱っているのはこれだ。
このDirectX APIに対応したドライバを用意して、なおかつハードウェアで高速化できるものが
DirectX対応ハードウェアだ。nVidiaやATiの製品が有名だがサウンドボードでも
ハードウェア処理が出来ればCPUへの負担が大幅に減るなどのメリットもある。
商用向けだと課金システムまで含めたネットワークソリューションが登場したり、
DirectX向けに最適化されたゲーム機が発売されるなど広がりを見せている。
要するにググれ
嫌なら工学社の刑
>>285 ググルのを薦めるなら答えるな
嫌なら工学社の刑
287 :
279 :2006/03/05(日) 00:46:57
>>285 おお!!!ありがとうございます!!!
エロゲだけのものじゃないんですね・・・w
なるほど、勉強になりました。
DirectXでも色々なことが出来るわけですね!
本当にありがとうございました!!!
>エロゲだけのものじゃないんですね・・・w HSPじゃあるまいし。
>>287 >エロゲだけのものじゃないんですね・・・w
お前がエロゲ厨って事は分かった
>>280 BC800ぐらいでがいしゅつ
ソクラテスでググれ
>>281 Oldメンバが大きくなるとBokkiメソッドが使えなくなる
これはFactoryパターンになっていてChildオブジェクトが生成できなくなるので注意
Vinnyでリーク発生などが主な原因
>>282 オプソ野郎だよ
「真っ赤さ」と揶揄されるほどのコミュニスト
>>286 工学社はプログラムの解説がはじまるまでは良書だぞ
>>287 エロゲもフォース・フィードバックに対応するべきです
そしてふたなり普及のためにもジョイスティックを想定して開発するべきだと
(FF対応上位機種だとソフトウェア制御で棒をうねらせながらプルプル震えることが可能なんです。
これはマイクロソフトがふたなり業界を強力にプッシュしてる証拠ともいえます)
アンケートハガキに書いて送りつけてください
あなたの一票がふたなりを救います
スカトロふたなり
D3DXFRAME コピーしたいんだけど、再帰関数作んなくちゃだめ? なんか便利なのない?
295 :
294 :2006/03/05(日) 01:59:26
物凄くアホな事を聞いたかも知れない。 ヘルプを良く見てませんでした。 すいません。
296 :
294 :2006/03/05(日) 02:33:29
いや、やっぱ良いんだ。 あーもう分かんなくなってきたw 改めて質問。 D3DXFRAME コピーしたいんだけど、再帰関数作んなくちゃだめ? なんか便利なのない?
既存のものに不便を感じたら 「自分でつくれ」の思し召し
>>296 無いんじゃね?
全体でいくつあるかわからん上に階層構造になってるから
力技でもっていくと余計複雑になったりするし、
その階層ごとに用がある場合の処理ってコールバック関数みたいなの
作らなきゃいけなくなるけど、使う側からすればそんなの複雑で使いたくないしで
そういう関数ってないんじゃないの?
299 :
294 :2006/03/05(日) 12:50:08
CAllocateHierarchy なるものを見つけてきた。 ただ、全ツリーの複製はできないみたいです。 やっぱり再帰作ります。 ありがとうございました。
あれなんであんな面倒な作りなんだろうな
VC++でのDirecctX を勉強したいんだが、オススメの書籍かWebサイトってある? C、C++は最低限のことは覚えた。(柴田望洋氏の書籍で学びました)
DirecctX?
だって春休みだもん
ダイレックトエックス!
307 :
デフォルトの名無しさん :2006/03/09(木) 22:22:38
xファイル(某ドラマの方じゃなくて)を、 テキスト、バイナリ、圧縮それぞれ相互変換させる上手い方法ってありますか? ユーザーから受けた数値をもとに様々な大きさ形の、テキスト、バイナリ、圧縮xファイルを出力するようなプログラムを作ろうと思ってるのですが… とりあえず頑張って手書きでテキストを出力させていますが、実はこの出力に関しても上手い方法があるとかありますか?
>>307 DirectX APIで出力したらいいんじゃない?
上手い方法も何も標準でパーサが付いているんだが。 形式を変えるだけなら内容に関知する必用もない。
>>308 >>309 ごめんなさい、もうちょっと根本的なところが分かってないです…
そのパーサとやらがいまいちわからんです…
ググってももいまいちヒットしなくて…
具体的にどんな手順でどういう風にするんですか?
>そのパーサとやらがいまいちわからんです… >ググってももいまいちヒットしなくて… ガンガンヒットするんだが。
>>311 ググるのが下手な私に是非とも検索キーワードを。
つ「パーサ」
ググるもなにもDirectXのヘルプ見りゃわかるな…
>>313 そこまで根本的じゃなくて… パーサ位辞書にも載ってるしそもそもその意味じゃなくて。
だめだコイツw 次のかたドゾー
ヘルプから見つけました… ご迷惑をおかけしました……i|liorz
プログラマがプログラムを放棄する件
手順が書いてある以上、その通りにやれば、*大抵* は上手くいく。 また、この程度書けないと、DirectXを使うこと自体が難しいとおもわれる。 ついでに、そのページに書いてあるキーとなる単語をWebで検索すれば、ある程度出てくる。 日本じゃまだ情報量が少ないみたいだけれど。 =まぁ、頑張れ。
要するに誰もわからないのですね
いいえ、それはトムです
テンプレートを設定してファイルを読み込み、 出力オプションで好きな形式を選んで吐き出すだけ。 迷うところや難しい所などどこにもない。
324 :
318 :2006/03/10(金) 14:15:40
ちょっと背伸びしすぎたみたいです(^^; ご教授どうもありがとうございました。
325 :
デフォルトの名無しさん :2006/03/10(金) 19:47:21
書いたコードが悪いんだろう。
何がどう上手くいかないのか 自分はどうしたかったのか 何も説明しないでzip貼り付けて終わりかよ ここはBBXじゃねぇよ?
BBXってそれでこたえてくれるの? 親切・・・
330 :
325 ◆cMkVYZAp6k :2006/03/10(金) 21:13:12
>>328 >何がどう上手くいかないのか
点光源が実現されません。
真っ暗になります。
>自分はどうしたかったのか
点光源を実現したかった。
光の減退が早いとか 他の光源ではどうなのか
332 :
325 ◆cMkVYZAp6k :2006/03/10(金) 21:28:14
>>331 減衰とかそういうレベルじゃありません。
板を一枚表示してみたのですが、その板が真っ暗になります。
平行光線は期待通りに実現されます。
上記と同じ位置にある板もちゃんとライティングされます。
その他の光源では試していません。
何も見ずに言うが、 RenderStateでライト使用設定&ライト有効化 マテリアルの設定と適応
>>332 てめえで試しもせずにソース貼り付けて直し方教えろってか?
336 :
325 ◆cMkVYZAp6k :2006/03/10(金) 22:18:53
337 :
325 ◆cMkVYZAp6k :2006/03/10(金) 22:22:30
>>335 問題は点光源です。
使用頻度も重く、使う機会の少ないスポットライト等は試していません。
>使用頻度も重く、使う機会の少ない 日本語でどうぞ。
339 :
325 ◆cMkVYZAp6k :2006/03/10(金) 23:17:48
>>338 すいません。
「使用すると重いため、使う機会も少ない」です
真上から薄い板を照らしてないか?
>>325 …なぁ、俺には、DirectXが適切に教えてくれてるように見えるんだ。
0x77e7bc3f で初回の例外が発生しました : Microsoft C++ exception: long @ 0x0012f9fc。
Direct3D9: (ERROR) :SetLight failed.
Direct3D9: (ERROR) :All attenuation factors are 0 for non-directional light
なんだこれは?
答え合わせしとくわね。 x light.Range = 60.0f; o light.Range = 1000.0f; ライト位置が平面にだいぶ近いから、前者で大丈夫に感じるけど、 ライティングは頂点単位で計算されてて、 ライト位置から四角形の4隅までは 60.0f以上あるから、 そのせいでライティングされていないわけね。 あとは減衰係数の設定が抜けてるから、設定して終わり。 light.Attenuation0 = 1.0f; light.Attenuation1 = 0.0f; light.Attenuation2 = 0.0f;
ありがとうございます。
>>340 はい。
>>341 すいません、わかんないです><
>>342 >ライティングは頂点単位で計算されてて、
>ライト位置から四角形の4隅までは 60.0f以上あるから、
これでやっと分かりました!
SDKで頂点頂点って書いてあるやつの意味も分かりました!
>>340 さんの突っ込みの意味も分かりました!
何か目から鱗が落ちた感じです。
1年越しの謎が解けたので安心して眠れます。
本当にありがとうございました。
ピクセルシェーダが自動でかかると思ってたのか・・・ まあ、最近の・・・って感じか・・・
>減衰とかそういうレベルじゃありません。 流石DQNは違うぜ!
すいません、BBXでも質問させてもらったのですがなかなかレスをいただけないようなので
こちらでご助言いただければと思い、書き込ませて頂きます。
内容は、DirectPlayを使った簡単なP2Pチャットアプリでのホストの引継ぎについてです。
DirectPlayは、ホストがセッションから抜けた場合に
自動的に残りのピアのいずれかにホストを引き継がせてくれるそうなのですが、
なぜかその新たにホストになったピアに対して
新しく接続を試みると接続を確立できない、という状況になっています。
一応、ホストの引継ぎ自体は行われているようで、
ホストが抜けた時に発行される「DPN_MSGID_HOST_MIGRATE」を捕まえて
メッセージに付いてきたデータを比較する事で
誰か一人が新たなホストを依頼されたところまでは検出できていますし、
いままで繋がっていたピア同士では、引き続き通信はできています。
しかし、そのセッションに新たなピアが参加するということができません。
ソースは↓に全て上げてありますので見ていただければと思います。
よろしくお願いします。
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=49&vew=81
>一応、ホストの引継ぎ自体は行われているようで、 >ホストが抜けた時に発行される「DPN_MSGID_HOST_MIGRATE」を捕まえて >メッセージに付いてきたデータを比較する事で >誰か一人が新たなホストを依頼されたところまでは検出できていますし、 ですが、このことで新しくホストを任命されたピアがホストとして きちんと機能しているかということまではわかっていません。 ただ自分の所にホスト任命のメッセージが来たということが確認できているだけです。 なのでいまのところ「新しいホスト」に問題があるのか「そこへ接続を試みているピア」に問題があるのか というのははっきりしませんが、 接続する方としては指定されたIPとポートをめがけて接続要求するだけであり、 それまでのセッションはちゃんと同じプログラムで接続を確立できていたわけですから、 やはり待ち受け側の「新しいホスト」に問題があるような気がします。
349 :
デフォルトの名無しさん :2006/03/11(土) 11:49:52
age
質問です。 画像からのテクスチャー作成プロセスを探っています。 ・D3DXCreateTextureFromFile ・D3DXCreateTextureFromFileInMemory ・D3DXCreateTextureFromResource ・D3DXCreateTextureで作ってRtlCopyMemoryで流し込む 上記以外ではどんな方法が存在するのでしょうか?
>350 ・テクスチャのサーフィスがロックできるなら ロックして書き込む。 ・ロックできないなら テクスチャと同じフォーマットのオフスクリーンサーフィスを作って、 それをロックして書き込んで、テクスチャのサーフィスにコピーする。
>>351 下は初耳でした。
早速試してみます。
ありがとうございました。
テクスチャをレンダーターゲットに設定する方法を教えて下さい ○<\_ CreateTexture()でD3DUSAGE_RENDERTARGETを指定してテクスチャオブジェクトを 生成するまではいいのですが、実際にこれに対して描画させる方法が見つけられません SetRenderTarget()の引数に渡すのはTxtureじゃなくてSurfaceオブジェクトだし…
ん?テクスチャのサーフェイスにレンダリングだと問題あるの? もしかしてDXが標準で対応してないテクスチャフォーマットに 対応したいって事かぇ?
どうせ、ヘルプすら読んで無いんだろ。
>テクスチャのサーフェイスにレンダリングだと問題あるの? この意味がわからんのです。TextureとSurfaceは別物ですよね? CreateOffscreenPlainSurfaceやCreateRenderTargetで作った「サーフェスへ描画」なら 判りますが、Textureへの描画ってどう指定したらよいものか…
>356 ヘルプでテクスチャインターフェイスのメソッドを100回見返せ。
GetSurfaceLevel() これか… この名前から動作が想像できんかったよ、正直スマンカッタ
359 :
デフォルトの名無しさん :2006/03/12(日) 15:45:32
D3DXVECTOR3 vecDir; D3DLIGHT9 light; ZeroMemory(&light,sizeof(D3DLIGHT9)); light.Type=D3DLIGHT_DIRECTIONAL; light.Diffuse.r=1.0f; light.Diffuse.g=1.0f; light.Diffuse.b=1.0f; vecDir=D3DXVECTOR3(0.0f,-1.0,0.0f); D3DXVec3Normalize((D3DXVECTOR3*)&light.Direction,&vecDir); light.Range=1000.0f; g_pd3dDev->SetLight(0,&light); g_pd3dDev->LightEnable(0,TRUE); g_pd3dDev->SetRenderState(D3DRS_LIGHTING,TRUE); g_pd3dDev->SetRenderState(D3DRS_AMBIENT,0x40404040); アンビエント光しか反映されません。 助けてください。
361 :
359 :2006/03/12(日) 16:32:59
>>360 法線はあります。
SDkについている色々なXファイルで調べてみたのですが、
私の作成したXファイルと"tiger.x"を表示した場合にのみ、アンビエント光しか反映されないようです。
その他SDKについているドワーフやビッグシップ1、飛行機にはちゃんとライトが反映されます。
法線フイタw
ワロタ、厨の典型だな
365 :
デフォルトの名無しさん :2006/03/12(日) 17:49:14
warning LNK4089: 'ole32.dll' へのすべての参照は /OPT:REF によって廃棄されます。 って警告がでました。どういったときに起こりますか?
367 :
359 :2006/03/12(日) 18:27:30
>>362 すいません、自己解決しました。
DirectX Viewerで「Normals」にチェックを入れると何か出てきたので
それで法線データがあるものと勘違いしていました。
私が作成したXファイルも保存時に法線データを含めずに保存していたようです。
お騒がせ致しました。
DirectInputで、LPDIRECTINPUT8を同一アプリケーションで複数作成できますが、 一つのデバイス毎にLPDIRECTINPUT8一つで対応させても問題はないものでしょうか? この辺りの事はチュートリアルに書いてなかったので、よろしければ教えてください。
D3DPOOL_MANAGEDについて質問です。ヘルプを見ると、 「必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。」 と書いてありました。 つまり、テクスチャをD3DPOOL_MANAGEDで8MB分つくったとしても、 VRAMが8MB消費されるとは限らない、ということでしょうか?
370 :
デフォルトの名無しさん :2006/03/12(日) 20:36:37
>>369 そりゃそうだろ。
俺、ゲーム作るときにビデオメモリの量なんかほとんど気にしたことないぞ。
多分、30MB分テクスチャをつくっても、場合によっては動作環境はVRAM16MB以下になるんじゃないか?
372 :
デフォルトの名無しさん :2006/03/12(日) 21:00:35
マルチパスレンダリングのテクニックについて教えてください。 例えば、2パス目以降はZバッファ書き込みを切るなど 他にこうした方が効率が良いなどありますでしょうか?
dev->StretchRect(pclSrcSfc, &stRect, pclDstSfc, NULL, D3DTEXF_POINT); の使い方で気を付けるべき点を教えてください。 D3DERR_INVALIDCALLエラーが返ってきて困ってます。 @転送元サーフェイスと転送先サーフェイスが同一である。 A拡大と縮小のどちらかが行われるか、またはどちらかのサーフェイスが圧縮フォーマットである (「圧縮テクスチャの使い方」を参照)。 B転送先サーフェイスが単純なオフスクリーンでありながら、転送元サーフェイスがそうでない。 C転送先サーフェイスが単純なオフスクリーンであり、拡大が行われている。 上記のいずれかの時、失敗するらしいのですが、BCの意味が馬鹿なので分かりません(><) BCにはどんな条件が入るのでしょうか?
374 :
373 :2006/03/13(月) 01:37:21
解決してませんが、UpdateSurfaceでやりたい処理を行いました。 ありがとうございました。
>>371 やっぱり、動作環境っていろいろなマシンで試してみないとわからないんだね。
376 :
デフォルトの名無しさん :2006/03/15(水) 08:29:34
DirectPlayで作ったP2Pアプリを 一つのPCで複数クライアントを立ち上げてローカルでテストした場合 ホストとピアのポート番号を同じにすると接続失敗するのはなぜですか?
377 :
376 :2006/03/15(水) 10:12:38
もう少し具体的に書きますと、 IDirectPlay8Peer->Hostの第二引数に渡す IDirectPlay8AddressオブジェクトにAddComponentしたポート番号と、 IDirectPlay8Peer->connectの第三引数に渡す IDirectPlay8AddressオブジェクトにAddComponentしたポート番号を 同じにして一台のPCで二重起動してテストしようとすると接続を確立できない というか、connectする方がホストを発見できなくなるようなのですが。 なぜでしょうか?
スキンメッシュについての質問
スキンメッシュについて、SkinnedMesh サンプルソースを読んでるんですが
このソースの中に出てくる、オフセット行列(メッシュコンテナクラスのメンバ)
というのがいまいちよくわかりません。
SDKのヘルプでは、「図 2. キャラクタの前腕に対するボーンのオフセット変換の効果」
の所で、回転させるためにボーンの根本を原点に移動する行列のようなことが書いてありますが
この「ボーンの根本を原点に移動する行列」という解釈でよろしいのでしょうか?
また、このオフセット行列でボーンを原点に戻して回転させた後には、当然、また元の位置に
戻してやらないといけないと思うんですが、これはどこでやってるのでしょうか?
自分は、親子関係の行列の変換について、↓のホームページの内容のように
directXも行列の変換が行われているのだろうと考えているのですが
これは正しいのでしょうか?
ttp://monsho.hp.infoseek.co.jp/dx/dx29.html 「もんしょの部屋」
DirectXの話 第29回「ボボンボンボン」
>>当然、また元の位置に戻してやらないといけないと思うんですが 実際に移動してるわけでなくてローカル座標だからボーンの場所が原点だと思ってくれって言ってるんだよ
てゆか逆にオフセット指定せずにアニメーションさせてみれば よく分かると思われ
381 :
378 :2006/03/16(木) 18:44:08
>>379 >>380 レスありがとうございます。
>実際に移動してるわけでなくてローカル座標だからボーンの場所が原点だと思ってくれって言ってるんだよ
描画する時↓にオフセット行列を掛けているので、やっぱり実際に座標変換されていると思うのですが・・
ちょっと、よくわかりません。
DrawMeshContainer()より
// set up bone transforms
for (iBone = 0; iBone < cBones; ++iBone)
{
D3DXMatrixMultiply
(
&m_pBoneMatrices[iBone],// output
&pMeshContainer->pBoneOffsetMatrices[iBone],//オフセット
pMeshContainer->ppBoneMatrixPtrs[iBone]
//↑フレームクラスのメンバ(CombinedTransformationMatrix)合成済み変換行列を参照している
);
}
オフセットって自分の親までの変換行列を累積した奴じゃねーの。 だから親が回転したりすればその累積の行列は変化するけど、 自分自身のローカルな回転の行列は変化しない。
そして、つまりそれがFK。
つうかよくSDKのサンプル読む気になるな。 あんな分かり難いサンプルとしてのソースはなかなか無いと思う。 戦意喪失させる力を持っている。
>SDKのヘルプでは、「図 2. キャラクタの前腕に対するボーンのオフセット変換の効果」 >の所で、回転させるためにボーンの根本を原点に移動する行列のようなことが書いてありますが そもそもこの記述が見つからないんだけど、 ヘルプの何処?階層教えてプリーズ。
386 :
デフォルトの名無しさん :2006/03/16(木) 20:52:47
>>385 これで検索→「SkinnedMesh サンプル」
あぁあった。古いやつ見てたわ。
なんかマニュアルの記述って変じゃない? 親の累積の行列を、対象のボーンのローカルな回転行列にかけることで 「あるべき場所」で回転させる、 って意味で相対的にそこが原点とみなせるってだけで、 なんか原点に「戻してる」ってのは誤解を生むような気がするんだけど、 俺って解釈間違えてる?
あのヘルプの翻訳が、「正しいはず」と思っているところが間違っている 英語のヘルプ読めば解決 ただ388に関しては、388が理解できてない気がするな。 ヘルプのどこか分からないから何とも言えないけど。
話しの流れすら分からないアホが したり顔で出てくるのはこのスレですか?
英語のヘルプも怪しいもんだけどな
日本語のヘルプよかマシ
お前ら俺が英語読めないのを知ってか知らずか・・・
少なくとも今の話しの部分については中身は同じなわけだが。
>>393 多分大丈夫だよ。
新聞の記事や説明書に比べて、ほとんど簡単な文法しか使ってない。
高校卒業してたら、辞書片手に読めるはず。
396 :
378 :2006/03/17(金) 12:55:38
>>382 >オフセットって自分の親までの変換行列を累積した奴じゃねーの。
それは、オフセットじゃなくて、下記の
pMeshContainer->ppBoneMatrixPtrs[iBone]
が「変換行列を累積した奴」じゃないんでしょうか?
これは、UpdateFrameMatrices()関数で再帰的に自分の親の変換行列を
掛けて、累積されています。
>>382 さんがおっしゃる、「変換行列」とはD3DXFRAME構造体のメンバーの
TransformationMatrix のことですよね?
pMeshContainer->ppBoneMatrixPtrs[iBone]
//↑フレームクラスのメンバ(CombinedTransformationMatrix)合成済み変換行列を参照している
>>396 そっか。だったらわかんないや。
間違った事言ってしまったようでごめん。
俺も調べてみるから分かったら報告する。
君も分かったら教えてくれ。
さあ、準備体操はここまでだ。 ここからは、メインディッシュのSkinWeightsのMatrix4x4 matrixOffset;について 俺がわかるまで(最低でも6スレ分)続く予定だ。 悪いが他の質問は諦めてくれ。
│ ↑ └─┘ おらっしゃあぁぁ!!! ∩∧ ∧ ヽ( ゚Д゚) \⊂\ O-、 )〜 ∪
>> 398 6スレどころではすまないから却下
401 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 19:18:54
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
早乙女って何?
不良少年がガキの頃にスキー場でその女の命を助けて そんときに額にキズができたっていう話だったと思う
それって、昔の漫画かw 愛と誠だっけ?
406 :
デフォルトの名無しさん :2006/03/19(日) 23:34:43
407 :
デフォルトの名無しさん :2006/03/20(月) 17:10:51
同じテクスチャを断続的に配置する地面を作ろうとしているのですが 下記のようなポリゴン生成していくと隙間が出てくるので いろいろ調べてみたのですが、頂点を共有するというのを みつけたのですが、イメージがわきません。 というのもテクスチャ座標をポリゴン1の右端が1.0f、ポリゴン2の左端が0.0fに ならないとだめな気がするからです。 typedef struct _CUSTOMVERTEX { float x, y, z, thr; //座標 DWORD color; //色 float tu, tv; //テクスチャ座標 } CUSTOMVERTEX; CUSTOMVERTEX vertices1[] = { { 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0.0f, 0.0f}, { 1.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 1.0f, 0.0f}, { 0.0f, 1.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0.0f, 1.0f}, { 1.0f, 1.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 1.0f, 1.0f} }; CUSTOMVERTEX vertices2[] = { { 1.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0.0f, 0.0f}, { 2.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 1.0f, 0.0f}, { 1.0f, 1.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0.0f, 1.0f}, { 2.0f, 1.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 1.0f, 1.0f} }; 共有頂点について、基礎知識を教えていただけないでしょうか? また無限平面とかのサンプルソースのある本やホムペご存知ないでしょうか? よろしくお願いしますm(_ _)m
408 :
デフォルトの名無しさん :2006/03/20(月) 17:12:56
>>401 htmlのレンダリングは初期にCPU容量を必要とするから64ビット化は期待できる
こうじゃなかったか? { 0.0f, 0.0f, (ry { 0.0f, 1.0f, (ry { 1.0f, 0.0f, (ry { 1.0f, 1.0f, (ry
あ、アドレッシングモードのところな。
413 :
デフォルトの名無しさん :2006/03/21(火) 22:27:06
これって1ポリゴンで複数のテクスチャを繰り返し表示では。
407はポリゴンを複数麻衣並べたいのでは。
ポリゴン1とか2とかいってるとこが気になる。
>>407 どっちかね?
Xファイルの描画と頂点シェーダで作成した地形を同時に 描画したいのですが、Xファイルのモデルに地形に貼り付けたテクスチャの 色が混ざってしまいます。 地形に貼るテクスチャの設定を以下のようにしています。 pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP , D3DTOP_MODULATE); pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); D3DTOP_MODULATE を D3DTOP_SELECTARG1 にすると、Xファイルのモデルまで同じ テクスチャが貼られてしまうので、おそらく描画対象がちゃんと区別できていない と思います。 この描画対象の設定の方法をご教授ください。
>>414 とりあえず、DirectXの描画は●と○を描画するとしたときに
(まあ、例としてこんな画面になるとしよう)
● ○
(白と黒の2つの玉が画面に表示されている状態だな)
@●の描画に使うテクスチャAをセット
A●を描画(DrawPrimitive)
B○の描画に使うテクスチャBをセット
C○を描画(DrawPrimitive)
という順番があるわけだ。
ここでAとBの間でなにか他の物体を描画(DrawPrimitive)した場合は
貼られるテクスチャは●のものとなる。OK?
惚れた
NULL
418 :
414 :2006/03/22(水) 00:30:26
>>415 レスありがとうございます。
地形をDrawPrimitiveで描画したあとに、
XファイルをDrawSubsetで描画しています。
Xファイルにはテクスチャを貼らないとしたら、最初のDrawPrimitiveの後にSetTextureの取り消し
が必要っていうことですかね?
419 :
414 :2006/03/22(水) 00:36:03
DrawPrimitiveのあとに
pD3DDevice->SetTexture( 0, NULL )
をしたら解決しました。ありがとうございました。
>>417 やっと意味が分かりました。
>>419 多分、その経験から得られる物は他にもあるぞ。
ステート設定は、殆どその作り。
覚えといた方が良い。
ウィンドウまわりの質問なんですが ウィンドウモードでデバイスを初期化したウィンドウが WM_SYSCOMMANDのSC_MAXIMIZEを受け取った時に IDirect3DDevice9::Resetでフルスクリーンにした場合 もう一度IDirect3DDevice9::Resetでウィンドウモードに戻すと タイトルバーとかが消えてしまい困っています ただしその状態から最小化>元に戻すとやると 何故かタイトルバーまわりが復活し、ウィンドウの位置も元通りになります ウィンドウモードにResetした時点でウィンドウの状態を元に戻すには どうしたらいいんでしょうか? WM_SIZEのSIZE_RESTOREDでMoveWindowしても反映されませんし そもそもGetWindorRectしたらフルスクリーン化する前のままでしたし しかも何故かウィンドウスタイルがTOPMOSTな挙動になってるし…
な。 物体(シェーダ)ごとにステートを設定しなきゃならないなら、 クラスか構造体にでもまとめてくれりゃいいのにな。 って、マイクロソフトのプログラマが考えたかどうかは知らんけど、 シェーダごとステートの設定とプログラム側のステートの設定とどっちが反映されるのか ドッキドッキの状態が今だなw まあ、シェーダで自分が設定してるならシェーダの方が設定されるっぽいけどw プログラム側からシェーダの設定をいじりたいときはやっぱり渡してやらなきゃならないしね。 設定忘れのときはプログラム側の設定が使われるしでなにやら悪臭が漂ってるw
>421 俺も正しいやり方は知らないけどこうやってる //::ShowWindow(hwnd,SW_SHOWMINIMIZED); //::ShowWindow(hwnd,SW_RESTORE); ::SetWindowPos(hwnd,0,0,0,0,0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME); したあと、 AdjustWindowRect
私はずっと15年くらいMS-DOSアプリを書いていたのですが,ここにきてVC++を使おうと思っています. というのは,ちょっとした仕事で,DirectX を使ったプログラムを書かなければならないからです. VC++で,コマンドラインの32bitコンソールアプリを開発できますよね? コンソールアプリにすると,DirectXの機能はどの程度,制限を受けるのでしょうか? 開発しようとしているのは,Direct3Dの画像をフルスクリーンで提示し,時間が来たら修了する,というものです. VC++もDirectXも初めてなので,教えて君になってしまって申し訳ないですが,どなたかご助言下さい.
初めてなのでと、教えて君なのは関係ないと思われ
>>424 キタワー.*:.。.:*・゚(n‘∀‘)η゚・*:.。.:*!!
ありがとうございますっ!
…でも最前面に固定されてるのが直らない(ノД`)
>>427 SetWindowPosでTOPMOSTも変更できるよ。
>>428 えぇと…いちお試してはみてたんですが、
教えていただいたSetWindowPosのパラメータのhWndInsertAfterの所に
HWND_NOTOPMOSTを追加してNOZORDER外してもダメでしたし
直後にHWND_NOTOPMOSTだけ指定したSetWindowPosしてもダメでした…
>>425 君に必要なのは普通のウィドウにHello, World!と表示するプログラムだ。
>>425 ようわからんがやめとけ、コンソールアプリはあくまでエミュ扱いだったはず。
ちゃんとWinMainのあるアプリでも大してかわらんからちゃんと本を読んで作ることをオススメする。
432 :
407 :2006/03/22(水) 10:22:21
>>411 ありがとう><知りたかったのはそれです。
その他いろいろ考えてくださった方サンクス!
>>421 Windowいじる時には一旦隠すもんだがそれはやってるんだよな?
俺はこんな感じ↓
最初にGetWindowLongでスタイルを保持しておく
ShowWindowで隠す
D3Dリセット
SetWindowLongでスタイル変更
MoveWindowで位置とか補正
ShowWindowで表示
取り合えずこれで事足りてる
>>425 DirectXはメッセージを横取りしたりするからコンソールアプリじゃ厳しいはず。
コンソールアプリからでもウインドウは作れるし、DirectXを使う上での問題点は何もない。 ただ一つ、無駄だという点を除いては。
ちょっとお伺いしたいのですが Jpgファイルを表示させるコードを書くことになったのですが、 Jpgファイルの画像サイズ(解像度サイズ)を取得する関数って存在するのでしょうか? ヘルプを検索かけてみたのですが、見つかりませんでした。 矩形のポリゴンにテクスチャとして貼り付け、表示するつもりなのですが、 ちゃんとした比率にする方法がしりたいんです。 もうしわけありませんがどなたかお願いします。
>429 あれ、こっちはこれでちゃんと最前面解除されたんだが、 ::SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSIZE | SWP_DRAWFRAME);
>>436 D3DXCreateTextureFromFileExのpSrcInfo
D3DXGetImageInfoFromFile の事もたまには思い出してあげてください…
>438 >439 ありがとうございます、それらをヒントにがんばってみます
>429 SetWindowPosなんて面倒草くないか? D3DPRESENT_PARAMETERSのWindowedを変更したらReset
jpgフォーマットのデータ構造が載ってるHP知りませんか とか便乗して言ってみるテスト
443 :
デフォルトの名無しさん :2006/03/23(木) 02:36:09
256色bmpのテクスチャーをポリゴンに貼り付けて描画したい場合、 最終的には16bit以上に拡張しなくてはならないのでしょうか? VRAMに書き込む量を減らしたいのですが。。。
テクスチャフォーマットとして D3DFMT_R3G3B2 をサポートしているビデオカードであれば 8bit で格納できるので 16bit 以上である必要はない が、そんなビデオカードは存在しない気がする。
445 :
443 :2006/03/23(木) 03:43:25
>>444 B2 ってあっても無くても良い気がしますw
大人しく24bitにします。
(16bitは対応して無いオンボードがあるっぽい)
ありがとうございました。
>445 いや24bitに対応している方が無いだろ。
447 :
443 :2006/03/23(木) 12:54:36
>>446 なる。
では32bitで。
やっぱりキツイのでトリプルからダブルバッファに変更しました。
448 :
デフォルトの名無しさん :2006/03/25(土) 01:20:32
struct VERTEX2D { float x, y, z, w; float tu, tv; // 頂点FVF enum { FVF = D3DFVF_XYZRHW | D3DFVF_TEX1 }; } / テクスチャを設定 pDev->SetTexture( 0, pTexture ); // 頂点FVFを設定 pDev->SetFVF( VERTEX2D::FVF ); / ポリゴンを描画 pDev->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, VxData, sizeof(VERTEX2D) ); 2D表示はこれでOK?
問題はないが、今後のことも考えてDIFFUSEは対応しておく方がいい。
んだ。ディフューズいじれると半透明にしたり点滅させたりするのが簡単。
451 :
デフォルトの名無しさん :2006/03/25(土) 21:38:35
FPSの計算そすえてー
スレ違い
>452 ありがとうございます double NextTickCount = timeGetTime(); + 16.666666; while (1) { //無限ループ //描画処理をここに記載 //ウェイト while ((timeGetTime() - NextTickCount) < 16.666666); NextTickCount += 16.666666; } でいいんんですね^^
455 :
デフォルトの名無しさん :2006/03/25(土) 22:06:55
>>453 全然駄目。
まず、ちゃんと型をみろ。
誰もdoubleなんて使ってない。
timeGetTime関数の返す型をしっかり確認しろ。
いい加減にやっていい部分じゃない。
そしたら16.66666なんてアホな数使わなくて済む。
お前のプログラムは汚い。かつ、意味がわかってないのまるわかりでみててムカツク。
就活してたら絶対に落としてやるからそのつもりで。
それと何をやるべきかわかってるの?
わかってないでしょ?
FPSってなによ?
そっからしっかり調べろ。
>>454 こだわるなよ。
板とかスレとかあくまできっかけ程度のこだわりにしとけ。
自演乙
このスレは全て俺の自演でできてるわけだが
そのくらい、自分で調べましょう
もう春か・・
461 :
デフォルトの名無しさん :2006/03/25(土) 22:20:52
改良版です。 double nextframe = (double)System.Environment.TickCount; float wait = 1000f/60f; while(frm.Created) { if ((double)System.Environment.TickCount >= nextframe) { //計算処理 if ((double)System.Environment.TickCount < nextframe + wait) { //描画処理 } nextframe += wait; } Application.DoEvents(); } 最強です。
First Person Shooter(ファースト パーソン シューター)の略。 文字通り一人称視点のシューティングゲームの総称。
時間の精度に浮動少数しか思い浮かばない段階でザコなんだよ intをつかって解決する方法を考えてみろ
Wolfenstein: Enemy Territoryを目指して開発しています。 もちろん、作った僕には ・ステルス ・ライフ自動回復 ・武器フルチャージ ・高速移動など 特典もりだくさんにしようと思います^^ >> お前もなー^^
そのくらい、自分で調べましょう
Wolfensteinってソースコード公開してなかったか? どのバージョンか忘れたけど
そのくらい、自分で調べましょう
471 :
デフォルトの名無しさん :2006/03/25(土) 22:35:38
>> ありがとうございます^^ そのままコンパイルすればWETできるのかな、わくわくしてきました^^
QueryPerformanceFrequencey()とQueryPerformanceCounter()を使え
>> できました^^ ありがとうございました^^
474 :
デフォルトの名無しさん :2006/03/25(土) 22:44:58
>> あれ僕が二人いる(@_@;) 驚きです^^ こんにちは。もう一人の僕さん^^
>>470 は固定少数点を使えって言ってるけど
そういう問題だったのか?
FPS制御の基本は1フレームの最短時間を決めることだ そして次にゲームの流れがスムーズに見えるようにごまかすテクニックを学ぶ スキップや早送りだな ハードスペックにより極端に長くなってしまう場合は例外として扱ったほうがいいぞ 大抵の初学者が間違っているが、ループ中に差を求めて16.6秒なのかどうか調べるのはNG ターゲット時間を求めてあとはそれと比べるだけでいいのだ なぜそんなことをするのか? 処理用を減らしたいからだ ゲームでもっともCPUを使う時間が長いのがFPS制御部分 無駄なことは極力避けたい 現在の時刻 + 約16.6秒 を先に求めておく そしてこの時刻と現在の時刻を比べるのだ そうすることで引き算1回分節約できる
478 :
デフォルトの名無しさん :2006/03/25(土) 22:54:30
>> つまり while(1) { if(NextTime<::timeGetTime()) { 描写 NextTime+=1.6; } } でいいのですか^^?
今宵はまた格別に馬鹿っぽいのが来た
480 :
デフォルトの名無しさん :2006/03/25(土) 23:00:06
>> 馬鹿はおまえらだろ
>> でも上のループは処理落ちした場合のこと考えてないよね。 60FPS以内で1ループ終わらすことしか考えてない、 2Dシューティングか2D格闘専用ならいいけどさ。
482 :
デフォルトの名無しさん :2006/03/25(土) 23:19:03
>> つまり、フレームスキップ対策すればいいのですね(^_-)ネッ がんばってみます^^ う〜〜ん複雑だな〜。
てゆうか問題は仕様が決まってないことだな。 いったいどうしたいのかわからないな。 1時間ぐらい過ぎた後に突然起動してもこの動作でいいのか?
484 :
デフォルトの名無しさん :2006/03/25(土) 23:28:24
>> うは〜〜^^
>> うへへへへへへぇぇぇぇぇぇ〜〜〜(・∀・)
1.ある一定間隔で描画をしたい 2.処理落ちのときの動作を〜にしたい 3.かなり時間が過ぎてしまったときの動作は〜にしたい 4.??? 5. ・ ・ ・ とまずやることを書き出してからやらないとごっちゃになってなにやってるかわからなくなるに一票w
>> 突然起動〜、、、、、意味が分かりません^^ 計算が崩れなければなんでもいいのです^^
488 :
デフォルトの名無しさん :2006/03/25(土) 23:58:19
>>478 正解だ!おめでとう
流れはそれで合ってる
1.6という数字が1フレームの最短の場合の時間だね
おそらく16msを希望する場合は桁が違うと思うから各自で確認しておいてくれ
これでフレーム当たりの最短時間を制限することができた
ゲーム内容に対してPCスペックが十分に高ければ安定した速度でゲームが進行する
では、PCスペックが十分でない時はどうだろう
たとえば16.6msで済ます予定が50msかかったとしよう
1秒間で約60回の処理をするはずが20回しか出来なくなる
これは困った
主人公が1回当たり1ドット進むようプログラムしていた場合
60ドット進むところが20ドットしか進まない
これには大きくわけて二通りの解決方法がある
かかった時間に比例してゲーム内容を進める方法と
省略しても問題がない部分を省略してしまう方法だ
489 :
デフォルトの名無しさん :2006/03/25(土) 23:58:24
>> 最近の3Dゲームは 1〜5全部やっているんですかねFPSとかラグナロクオンラインとか^^;
490 :
デフォルトの名無しさん :2006/03/26(日) 00:04:00
>> わーい正解しました〜^^ なるほど、遅いPCだとズレが生じるんですね。 ・比例してゲーム進める方法⇒難しそうだ^^;、しかしコレが一番アールマイティな感じだな。 ・省略⇒つまりフレームスキップってことですか^^?
MMORPGはキーフレームが多いね ある時間にこの場所にいるはずだ!という情報をサーバーから受け取り それをもとに再構成する これはデータ転送量が少なくてすむ だからネットゲームは移動先を指定するタイプのゲームが多い 移動方向を指定するタイプはこの方法は使えない たとえばFPSには使えない
>> なにこのくだすれ
493 :
デフォルトの名無しさん :2006/03/26(日) 00:31:25
>> 改良版。 while(1) { if(NextTime<timeGettime())// 1/60秒たったら動き出す! { //計算 if(NexTime+1.6>timeGettime)// 次のフレームまでまだ時間があるなら! { //描写 } NetTime+=1.6; } } ってかんじですかね^^; しかし計算が1.6超えるとアウトなんですが・・・><
timeBeginPeriod(1); DWORD begin = timeGetTime(); DWORD elapse; float update = 1000.0f / 60.0f; int limit_count = 3;//3フレ落ちまでは救う int count; while(/*メッセージ処理云々(falseでシステム終了)*/){ //経過時間算出 elapse = timeGetTime() - begin; //更新時間判定 if(elapse > (DWORD)update)continue; //タイマ初期化 begin = elapse; //経過フレーム数算出処理 count = (int)((float)elapse / update); //経過フレーム数補正 if(count > limit_count)count = limit_count; //経過フレーム処理 for(int i=0;i<count;i++){ //1フレーム分処理 move(); } //描画 draw(); } とか即興で作ってみたけど、どうだろうか? 俺は本当はこうやって落ちたら落ちたときだけフレームを進めるとかじゃなくて、平均をとってフレーム落ちを計算してるけど。
何だこのトンデモ議論は。 FPS制御に一番時間がかかる?ハァ?wwww
>>495 そんなことは誰もいってねぇぞw
お前、スレを眺めてすらいないだろw
>>496 いや、476が言ってるがw
476は痛い人っぽいから、あえてみんなスルーしてたのに。
どうみても冗談で書いているようにしか見えないが。
メインループで1回回す相田に一度やるような処理で doubleは遅いからintだとか、引き算1回減らすだとか なんで得意顔になってんだ
えーと、DirectX 関係無くね?
>>501 Sleepに何を期待しているのかわからない。
だって7、8年くらい前にぷよーんさんがそうしろって言ってた
504 :
デフォルトの名無しさん :2006/03/26(日) 13:17:36
スペックの超低いPC用なんではあるまいか?
繋がらないから何とも言えないが、8年も前の話か。
>>503 あいつのアプリ、動作することもままならないって感じだったじゃんw
Sleep()使わずに何使うんだ? まさかビジーループ回しっ放しの糞アプリ作るわけじゃないだろう。 Sleepである程度待ってからビジーループで正確に待つというなら分かるが。
おまいら、いまさらなにくらだない話してんだ? 暇だなw
>>502 普通に処理が早すぎた分待ってるだけだけど
つまり10年前から、同じ議論を繰り返しているということか。 進歩無いな。
511 :
デフォルトの名無しさん :2006/03/26(日) 14:18:53
>>507 あのSleepだと「正確」にはまっていない。
1フレの計算と描画にかかる時間は考慮できてないじゃん。
だから何を期待してるのかわからない。
今のCPU/GPUなら2D描画や計算にかかる時間なんて考えなくても大丈夫じゃない? 3D描画は別として
なんかDirectXのUpdateにまかせるとすべてがうまくいってる気がするんだけどw
>>501 Sleepの段階で時間のぶれがおこるので、
カウントはきちんと累積をとるようにしないと、
全体の時間がどんどん狂っていくぞ。
あとはm_ptimeとかメンバ変数にする必用のないものが
メンバに混ざっているのが気になる。
Sleepなんぞもうタイムスライスにしか使わんね。
516 :
デフォルトの名無しさん :2006/03/26(日) 15:15:52
>> サンプルありがとうございます^^ >> サンプルありがとうございます^^ >> なるほど SLEEPは精度が悪いのですね。気をつけま^^; >> いまどきと言うとpen4 .16Gでも平気かな^^; >> UPDATA!!??自動fPS制御ですか〜^^? 最後に、 おはようございます^^ みなさんの暖かい協力よりFSP制御がうまくいきました^^ では、さようなら〜^^ またピンチになったら着ます。
某ライブラリのフレームレート調整関数。 { //-------------------------------------------- // 現在の時間取得 //-------------------------------------------- m_NowTime = ::timeGetTime(); m_DifferenceTime = m_NowTime - m_OldTime; float fWaitTime = 1000.0f / 60.0f; //---------------------------------- // 時間経過を待つ //---------------------------------- if ( (float)m_DifferenceTime) < fWaitTime ) { float fSleepTime = fWaitTime + m_fRestTime - (float)m_DifferenceTime; if ( fSleepTime > 1.0f ) { ::SleepEx( (unsigned long)fSleepTime, true ); } m_fRestTime = fSleepTime - (float)((unsigned long)fSleepTime); } //-------------------------------------------- // 終了 //-------------------------------------------- m_OldTime = ::timeGetTime(); }
正直、フレーム時間調整にfloat使う奴の腕は全く信用できない プログラムは出来てもハードウェアの実際を知らない頭でっかちの典型
519 :
デフォルトの名無しさん :2006/03/26(日) 23:19:17
質問です。 DirectXのサンプルで、returnでS_OKとかE_FAILとか返してますけど これらの詳細を教えてください あと、ifのところによく使われるFAILEDとかSUCCEEDEDは!のマクロみたいなやつですよね?
!のマクロじゃない。
521 :
デフォルトの名無しさん :2006/03/26(日) 23:30:33
>>520 どこかに詳しく載ってませんか?
SDKとかに書いてないみたいなんですが、DirectXで定義されているものではないのですか?
522 :
132 :2006/03/26(日) 23:34:15
>S_OK、E_FAIL 見ての通り成功か失敗かを返してる。型はHRESULTな。 これに限って言えば取り敢えずBOOLの親戚だと思っとけ。 FAILEDとSUCCEEDEDはマクロだけど'!'は論理演算子(論理否定)、マクロじゃねーよ。
523 :
522 :2006/03/26(日) 23:35:13
名前消し忘れた ここの132じゃないので念の為
FAILEDはE_FAILでTRUE SUCCEEDEDはS_OKでTRUE if(FAILED(処理)) MessageBox(NULL,"シパーイ","",MB_OK); とかよくやる
525 :
デフォルトの名無しさん :2006/03/26(日) 23:40:31
>>522 レスありがとうございます。
ただ、!がマクロかどうか聞いているんじゃなくて、FAILEDやSUCCEEDEDが何のマクロか知りたかったんです。
!っぽい感じの意味で使われていたから、それのマクロなのかな?と思っただけです。すみません。
526 :
デフォルトの名無しさん :2006/03/26(日) 23:41:21
>>518 え?関係あるんじゃね?
例えばおなじみの値16.66666666666666666を小数点以下を切ると、
16じゃん。
2フレーム過ぎたこと知るには小数点以下を切り捨てると32だけど、本当は33以上になるはずだよね?
って計算があることを考えると1000/60とかやったときに小数点以下を切り捨てるのはどうかと・・・
まあ、どんな計算するかによるけどさw
SUCCEEDEDは hr>=0 FAILDはhr<0 だっけか
小数点以下の大体の桁数が分っていながら浮動小数使う奴はアフォ。
>>529 timeGetTimeが普通にms単位なんだからそんなわざわざバグりそうなことしなくてもいいでしょ。
小数点4〜5桁考慮してくれりゃいい程度なんだからfloat使っちゃったほうが楽でしょ。
>>518 Windows専用のプログラム書くときにもおまいさんは
ハードウェアの事考えながらソース書くのか?
コンシューマーならそもそもタイマーで
フレームレート合わせるなんてする必要ないんだが。
そもそもWindows自体そんな精度で制御できないのにfloat使う奴はバカ
3Dでfloatの計算をしても、 最後にピクセルとして出力する時にはそんな精度で制御できないのにfloat使う奴はバカ
うちの学校はfloatでやってるんですが人生オワタ\(^o^)/ですかね?
floatで何の問題もないと思うが。 何の問題があるのかまるっきり理解できん。 釣りか?
DirectXを作っている某有名M社が公開しているソースに含まれる変数名 float m_ElapsedTime; float m_FPS;
538 :
デフォルトの名無しさん :2006/03/27(月) 09:58:27
Microsoftはバカだったのか。
そもそもfloatの何がきにいらんのか分からん。 CPUによっちゃintより演算速かったりするんだが。
doubleならワカランでもないが、floatでintより速いってソースキボンヌ
floatが速かろうが遅かろうが、どうでもいいでしょ。 この場合。たかが1フレームごとに数回の演算に使うだけじゃないか。
ゲ製作でfloatが最速って言ってたよ
何で議論になるのかわからん。intなんて使っても、複雑になるだけで 何のメリットもないからdoubleかfloat使うだろ。 そして、doubleだろうがfloatだろうがどっちでもいいだろ。 どっちが速いにせよ、描画に比べてめちゃくちゃ速く終わる計算で、 全く無視できるんだから。
Microsoftがサンプルに使ってるのはfloatだな。 別に速いからとかそういう理由じゃなくて、ただ簡単だからだろうけど。
545 :
539 :2006/03/27(月) 10:38:40
別にフレーム時間調整なんかどうでもいいよ、 floatがintより速い環境があるなら知りたいだけ。
539じゃなかった540だった、スマソ
floatがintより早いとかワロス
ワロスワロス
チュンチュン
ここはDirectXの質問すれだどおおおおおおおおおお
Pentium2以降は浮動小数演算のほうが速い ここまでは誰も異論がないと思う
ちなみに、539や542は俺とは別人だから間違えないでね。
そもそも厳密な60fpsに拘りすぎてる所が頭でっかちと言われる所以 世に出てるゲーム基板じゃ60fpsじゃない物なんざザラ、57.5fpsなんてのもある 所詮Windows/DirectXじゃ厳密なフレーム管理なんざ不可能なのに、いつまで たっても「1Frameは16.666666msじゃなきゃ」とか言ってるヤシは枝葉末節に 拘って大事なところが見えてないただの阿呆
>>554 そんなこといってる奴は皆無。
問題がまるでわかってないな。
60という数字自体に意味はない ハードやOSの差を吸収するのが目的 それがわかってないなら議論に参加しても得るものはないと思うよ
>>554 だから、精度なんか厳密じゃなくてもいいんだけど、
小数使った方が簡単でわかりやすいでしょ?
速度なんかどうでもいいしね。
>>554 とりあえずお前が阿呆だということだけは分かった。
>>557 ハードやOSなんてどうでもいいだろw
それに、ここはDirectXのスレですよw
めちゃくちゃ遅いインタプリタで浮動小数演算を独自にソフトウェア処理してる言語 なら、int使った方がいい場面もなきにしもあらずかも知れん。
>>555 doubleとfloatどっちが速いと思う?
そもそもDirectX使ってる時点でfloatを否定する意味がわからん。 だったらベクトルもマトリックスも全部固定少数にして作れよ。
>>562 多くの場合同じだろ。まあ、fpu設定によるけど。同一コードが
吐かれる場合が多いから。
565 :
デフォルトの名無しさん :2006/03/27(月) 11:27:54
#define SMAX 30000 #pragma comment(lib,"winmm") #include <windows.h> #include <stdio.h> #include <mmsystem.h> int main() { float i,j,sum; DWORD start_time, end_time; start_time=timeGetTime(); for (i=0 ; i<SMAX ; i++) for (j=0 ; j<SMAX ; j++) sum=i+j; end_time=timeGetTime(); printf("%d\n", sum); printf("%d\n", end_time-start_time); } int 3229 3172 3185 float 9628 9532 9528
566 :
デフォルトの名無しさん :2006/03/27(月) 11:30:47
double 23953 23865 23865
567 :
デフォルトの名無しさん :2006/03/27(月) 11:31:46
int最速でした お疲れ様でした
だからどうしたんだよ。くだらん。
で、int で計算した場合、 どれだけ時間を節約できるの?
それを知ってどうするの?fpsから話をそらしたいの?
誰だよ整数型より浮動小数点型の方が速いとか無知なこと言ってるのはwwww
誰も言ってないな。まあ、あえて言えば539か。 572は何を喜んでるんだ?
int 1348 1318 1322 float 10518 10374 10152 double 4190 4194 4192
いい加減にもうやめたら 100万円の買い物をするのに1円の差にこだわってるような議論だろ
int 564 573 551 float 2045 2088 2083 double 2095 2069 2052
>>578 なるほど。いい加減に読んでたから反対の意味に見えた。
まあおそらく
>>551 は浮動小数演算のほうが遅いと言おうとして間違えたんだろう。
580 :
デフォルトの名無しさん :2006/03/27(月) 11:56:55
まとめ >518 フレーム時間調整にfloatを使うな >527 誤差がでるのでは? >529 桁を工夫して整数にしろ >531 そんなことして意味あんの? 〜このあたりからぐだぐだに〜 >532 コンシューマプログラマですがなにか? >533 Windowsのタイマーの精度はintがふさわしいよ(Windowsの精度に合わせようよ派) >534 3Dはfloat精度で計算しても意味ないよ(3Dの話題はここで初出) >535 学校で習ったからfloatだよ派 >536 floatで何も問題ないよ(楽観主義) >537 M社の流儀にしたがうよ >538 (名誉毀損のため削除) >539 場合によってはfloatのほうが速いよ(場合によってはうんこしない派) ←←← 戦犯
おまいまとめ上手いなww
>>580 ていうか、ほとんど全ての人は
「100万円の買い物をするのに1円の差にこだわってるような議論だから意味はない」派
だろ
一部変なのが精度とか速度とかなんとか言ってるだけで。
泣いた
ようするに、float使っても何も問題ないってのが結論だろ。
速度はint 正確はfloat 俺はint派だけどな
■議題
フレーム時間調整にfloat使うべきか否か?
■事の発端
>>517 のソースに対してのレス(
>>518 )
■評価基準
速度
■現在の状況
・
>>565 のコードでintとfloatとdoubleのどれが最速か各自で確認
・何の話をしてたか思い出し中
■今後の展望
飽きてきた
■収穫
整数の計算はintが速かった
そんな事より、フレーム調整なんてDirectXと関係ないのに、なんでこのスレでやってるの?
だから、「速度はint」たって、時間が0.99999倍くらいになるだけで そんだけ速くなたって全く意味ないだろ。
>時間が0.99999倍くらいになるだけで 天才現る
>>589 微々たる差なことは間違いない。
例え話だけど。
591 :
574 :2006/03/27(月) 12:10:40
592 :
デフォルトの名無しさん :2006/03/27(月) 12:10:48
【floatのほうが正確だという主張に異議あり!】 floatで計算すると16.666666666……となり当然ながら小さいながら誤差がでる ところがintで計算する場合は16,16,17,16,16,17と加算する数を変更していくことで 1000ミリ秒でちょうど60回になるような計算になる よってintのほうが正確である
>>587 フレーム調整はそこそこ関係あるんじゃない?
intとfloatの速さになると関係は薄くなるけど。
>>588 この部分だけ見ると3〜8倍の差があるとベンチマークの結果が物語ってますよ?
それにここはいわゆる「ビジーループ」にあたる箇所だ
Sleepで調整するとしても計算回数は秒間数十回、精度を求めるためにSleep時間の割合を減らすと
数千回以上はこの計算をすることになる
20:80理論の20の部分だ
画面に数ドットから数十ドット分点を打つのと、floatで一回演算するのが 同じような速度だと思えばわかりやすいんじゃないかな。 一フレームごとに数十万ぐらいは点を打つけど、その時間に比べたら fpsの計算してる部分なんてはるかに小さいよね。
Athlon64 4000+でさえin計算800止まり
>>576 FX野郎か
>>596 あきらかに20:80の80の部分だよwwww
お前、描画処理とfps制御計算とどれだけ時間に違いがあると思ってるんだ?ww
青いな。 24才位と見た。
>>597 FPS制御中に描画処理を行うのは普通じゃないよね
だからその例えは失敗
>>599 100は何か考えてみよう
Sleepで留まるような部分を苦心してひねくり回して何の価値がある。 本末転倒とはまさにこのこと。
臭せーな。 加齢臭漂ってるぞ。
>>597 の理屈でいくとドット打つのを速くしても意味がないことになるんだが
いや、わかってんねんで
>>601 一フレーム内に両方の処理が入るでしょ。
それで、片方は片方に比べて極端に割合が少ないということ。
つまりunsigned long intが最強ということですね
一フレームは16msとして FPS制御のための計算・・・1ms Sleep・・・15ms とかじゃない?
フレームの描画にかかる時間は0msですか
>>608 1msもとらねーよ。
>>576 とか見てみろよ。float一回の計算が0.1/30000msとかよりもさらに短い時間だろ。
>>605 FPS制御は余剰時間に発生する
つまり割合は関係ない
この部分をいくら速くしてもゲームに寄与しない
という指摘は正しいが理屈が間違っている
(※正確にはスレッドがまわっているだろうが微々たる影響だ)
>>602 ,606
正解
この場合の20:80の100はCPU使用率だ
>>609 0.66666666666666666666666666666666666666666666666666666666666666
>>611 間違ってないよ。描画に時間が取られるから、CPUはその間Sleepしてるわけで。
二重ループだから1/(30000*30000)だな。
int 559 / float 3131 / double 3131 確かにintで計算した方が速いなぁ。 もっとも実際にボトルネックになるのは大抵ピクセルシェーダーやコリジョン・モーションとかだしfloatからintに出来るようなところじゃないけどな。 ついでにint化 { // 現在の時間取得 m_NowTime = ::timeGetTime(); m_DifferenceTime = (m_NowTime - m_OldTime) << 16; // FrameRateが0でない Uint32 WaitTime = (1000 << 16) / m_FrameRate; // 時間経過を待つ if ( m_DifferenceTime < WaitTime ) { Uint32 SleepTime = WaitTime + m_RestTime - m_DifferenceTime; if ( SleepTime >> 16 > 1 ) { ::SleepEx( SleepTime >> 16, true ); } m_RestTime = SleepTime & 0xFFFF; } else { m_RestTime = 0; } // 終了 m_OldTime = ::timeGetTime(); }
>>613 その10倍遅いCPUだって、めちゃくちゃ短い時間には変わりないだろ。
>>616 >もっとも実際にボトルネックになるのは大抵ピクセルシェーダーやコリジョン・モーションとかだし
>floatからintに出来るようなところじゃないけどな。
だから、みんなそう言ってる。floatが速いとかintが速いとかそんなのは無意味だって。
>>609 fps制御やsleepはcpu
その間gpuが描画
floatでやってもintでやっても大して変わりないけどな
#define SMAX 30000 #pragma comment(lib,"winmm") #include <windows.h> #include <stdio.h> #include <mmsystem.h> int main() { int i,j; float fwork=1.0f; int iwork=1; DWORD start_time, end_time; start_time=timeGetTime(); for (i=0 ; i<SMAX ; i++) for (j=0 ; j<SMAX ; j++) iwork/=5; end_time=timeGetTime(); printf("%d\n", iwork); printf("%d\n", end_time-start_time); start_time=timeGetTime(); for (i=0 ; i<SMAX ; i++) for (j=0 ; j<SMAX ; j++) fwork*=0.2f; end_time=timeGetTime(); printf("%f\n", fwork); printf("%d\n", end_time-start_time); }
浮動小数点の方が有利なケース。 VS2005の場合はコンパイルオプションでFast (/fp:fast)を設定すること。 int 3401 float 1700
結論 精度:こだわる意味ないよ 速度:変わらないよ 備考:なんでDirectXスレでやってんの?
>プログラムは出来てもハードウェアの実際を知らない頭でっかちの典型 これが正解だな
>>625 451から始まってたのか。
よく見たら455=463=518じゃねーか?w
そもそも自分で使っている方法以外を見かけると、 馬鹿だなんだと突っかかる懐の浅さと視野の狭さに問題がある。
青いな。 青いくせにパラダイムシフトについて来れていない。 もう駄目かもわからんね。
パ、パラダイス銀河ぐらい知ってるんだからねっ!
伸びてたから期待したのにこの話かよw まあ純粋に命令セットの速度が実際どうなってるのか気になったので Pen4のレイテンシとスループットについて調べてきたよ 命令/レイテンシ/スループット add,sub/0.5/0.5 mul/14-18/5 div/56-70/23 fadd,fsub/5/1 fmul/7/2 fdiv(単精度)/23/23 fdiv(倍精度)/38/38 fsqrt(単精度)/23/23 (おまけ) これ見ると速いのは乗除であって、流石に加減算は整数が上だな。 昔どこかで聞いたことあるんだけど、Pen4の乗算命令は浮動少数に最適化されてて 整数演算はその回路を使いまわしているから浮動少数のが早いってのは本当だったんだろうか。 しっかし除算と平方根が同じ速度とは思わなかったなあw あとSSE並列計算命令のmulpsがfmulより速いのには笑った
んでアップされてたプログラムを乗算に変更してみたけど浮動少数が遅かった。 アセンブリコード見たら計算コードの部位は命令数変わって無いけど(命令は違うが) ループのほうは偉い長くなってた
>>632 の言うパライソなんとかとは何か聞いてみたいな
まさかUINTをfloatにする事とか言ったら笑う
劣化じゃん
パラダイムシフトも知らないのか・・・
yanesdkを使ってC#2.0で開発することがパラダイス銀河だよ!
浮動小数点数は正規化されているから掛け算は位取りを考慮しなくていい分有利なのかな。 考えてみたら昔は2バイト整数で4バイト実数だったけど、今や同じバイト数だもんなぁ。 そりゃぁ、floatの方がintより精度落ちる罠。
>637は皮肉を理解できないご様子
16msの中の0.0001msの部分を速くするために、 レイテンシだのスループットだの持ち出してどうこう言ってるのは アホの極みだろ。
while(1) { if(NextTime<timeGettime())// 1/60秒たったら動き出す! { //計算 if(NexTime+1.6>timeGettime)// 次のフレームまでまだ時間があるなら! { //描写 } NetTime+=1.6; } }
遅いよりは速いほうがいいよ
>>643 同じと言ってしまって良いし、それよりはわかりやすい方が良い。
少なくとも件のソースのわかりやすさに差はない
差はあるだろ。
大体int使うとかって単位はなんだよ。 1/1000msとかかw 随分と意味のないわかりにくさだなw
>>643 あるプログラムが0.0001/16だけ全体的に速くなったとして、
それに何か意味があるのかね?
>644 float使う意味も意図もわかんね
/: . : . : . : . : . : . : . : . : . : . : . : . : . \ , ': . : . : . : . : . : . : . : . : . : . :ヽ\: . : . }: . :.ヽ /: . : . : . : . : . : . : . : . : . : . : . : . : :/´ ̄ヽ: . :ヽ /: . : . : . : . : . : . : . : . : . : . : . : . __/: . : . : . : }: . : .゙, __/: . : . : . : . : . : . : . : . : . : . : . : . : /: . : . : . : ./: . : . :', /: .ィ/ヽヘ/レ'^'´`|: . |_: . : . : ./: . : . : . : . ハ: . : . : .! / /´l| |: . : . : :| ´レ、: ../: /: . : . : . /:.:.: . : . : | / /l| |ィ: . : .ハ| ゙/ /: . : . : . :/: . : . : . : :| /: .:.;| |ハ: . :| ! ;゙./: . : . : . :/: . : . : . : . :l /: :.:/∧ ! |: .| l:i: . : . : . :/: . : . : . : . : :l /:.:./ ´ ゙, !:.l |:!: . : . : ./: . : . : . : . :.. ;' ::/ '、\ レ |!: . : . : /:.:.,. --、: . : ../ お願い!もうやめて・・! '、_`¬ |l: . : . :.バ゙ ,r ';. : ./ floatは悪くないの!全部私が悪いの! | ̄ヾ ゝニ ー_‐_'' ´ |: . : :.| 〈:.:. /:.:/ !::: `´ ̄ ̄`ぅ。|: . : :| ノ // '、 ' :::::: |: . l | _/´ ̄`丶、 \ l: .l: | / ヽ `ヾ、ー ´ ̄'^ヽ ,.ィ: l;.:', | ヽ /` ー-‐彳l ´`ヽリ\ヾ、 `、 { l || ` `lト`ー''´ f:. ヽ
>650 お前のせいか! つか誰だおめー
DWORDと比較すんのになんでfloatなの?
Xふぁいるに法線が含まれてないと ライトがうまく反映されません>< 法線だと容量が・・・ なしでできませんかね^^?
/: . : . : . : . : . : . : . : . : . : . : . : . : . \ , ': . : . : . : . : . : . : . : . : . : . :ヽ\: . : . }: . :.ヽ /: . : . : . : . : . : . : . : . : . : . : . : . : :/´ ̄ヽ: . :ヽ /: . : . : . : . : . : . : . : . : . : . : . : . __/: . : . : . : }: . : .゙, __/: . : . : . : . : . : . : . : . : . : . : . : . : /: . : . : . : ./: . : . :', /: .ィ/ヽヘ/レ'^'´`|: . |_: . : . : ./: . : . : . : . ハ: . : . : .! / /´l| |: . : . : :| ´レ、: ../: /: . : . : . /:.:.: . : . : | / /l| |ィ: . : .ハ| ゙/ /: . : . : . :/: . : . : . : :| /: .:.;| |ハ: . :| ! ;゙./: . : . : . :/: . : . : . : . :l /: :.:/∧ ! |: .| l:i: . : . : . :/: . : . : . : . : :l /:.:./ ´ ゙, !:.l |:!: . : . : ./: . : . : . : . :.. ;' ::/ '、\ レ |!: . : . : /:.:.,. --、: . : ../ お願い!もうやめて・・! '、_`¬ |l: . : . :.バ゙ ,r ';. : ./ 法線は悪くないの!全部私が悪いの! | ̄ヾ ゝニ ー_‐_'' ´ |: . : :.| 〈:.:. /:.:/ !::: `´ ̄ ̄`ぅ。|: . : :| ノ // '、 ' :::::: |: . l | _/´ ̄`丶、 \ l: .l: | / ヽ `ヾ、ー ´ ̄'^ヽ ,.ィ: l;.:', | ヽ /` ー-‐彳l ´`ヽリ\ヾ、 `、 { l || ` `lト`ー''´ f:. ヽ
>>653 D3DXに法線を生成してくれる関数がある。
D3DXのやつってちゃんと計算してくれんのか調べてないんだけど、 正四面体で1つの面だけがやたら細かく分割されてるような場合でも綺麗にグーローかかるん?
>>657 THX 助かりました〜^^
660 :
デフォルトの名無しさん :2006/03/27(月) 19:35:30
何?この糞スレ?
>>518 ,527
始めは速度云々の問題じゃなくて精度についていってたんだよ。
アホが入ってきて話がおかしくなった。
問題は
>>518 がミリ単位での計算しか頭に入ってなかったってだけ。
まあ、それは問題になるかならないかはおいておいて、
16.666666666msなんて数値を当てにしているとしたら、小数点部分の計算はでかい誤差になんじゃねーか?って話。
でも、実運用ではまったく違いはでないかもね。
Windowsのタイマーが糞いい加減だから。
でも、計算式はちゃんとしておきたいよね。
ってただそれだけの話。速度とかいってんのみてらんないさっさとプログラマ辞めちゃえよ。お前なんかいらないだろ。ぷw
こりゃまた酷い釣りだな 餌が腐ってる
>>660 寧ろ精度を求めてfloat使う方がイカレてるんでわ?
以下ループ
そもそもfloatの何がきにいらんのか分からん。 CPUによっちゃintより演算速かったりするんだが。
だからintのほうが精度上だっていってるじゃん
だから、この場合精度なんかfloatで十分だし、 計算速度も速くしたって全く意味がないから、 floatで十分だし、floatなら精度とか気にせず人間に わかりやすいし、何の問題もない。 したがってintにする意味が全くない。 intはわかりやすさの観点からちょっと不自然。
intのほうがわかりやすいし精度もいいし速度も速い floatにする理由がさっぱりわからない
intのほうがわかりにくい。これにつきる。 精度を考えて数をかけたり、ぴったり60fpsにしたりするのの どこがわかりやすいのかさっぱりわからん。 精度も速度も「全く一緒」といって差し支えないぐらいだし。
そもそも、最初はint側がfloatにケチつけてるところから 始まったんじゃないのかよ。 だから、floatで良いって話なのに。 最初は「floatはダメ」だったのに今はfloatにする意味がないって主張が 変わってきてる。 間違いを認めたんだろう。
さー、頭が弱いもの同士の水掛け論が始まりまつよ!!!
ちんこたってきた
>>669 相手にしない方が良かったかも知れん。
>>476 で
>ゲームでもっともCPUを使う時間が長いのがFPS制御部分
>無駄なことは極力避けたい
と言ってる時点でヤバイと思ったが、まさか本気だったとは。
過去レスから言葉を借りるならFPS制御に16.6ミリ秒中16ミリ秒つかってるそうだ つまり全体の96%がFPS制御の時間になりますよ
なにその無駄な計算w
>>672 例えば
>>517 のようなソースを書いた場合、1フレームにつき一回しか
ルーチンが回ってこない。一回のルーチンにつきたかだか
数回の演算をしてるだけ。
そして
>>574 や
>>576 をみると、floatの演算は1回につき0.00001msとかだから、
結局16.6ms中の0.0001ms以下じゃないかな。
教えてください・・orz ビデオキャプチャーを4つほど開きたいんですが、3つは開くけど4つ目が開かない。 ところがメインプログラムのフォームを、CreateProcess()で開いたプログラムの上に持ってきて、マウスで移動したら4つ目が開いた。(しかも再現する) こんな説明ではわからん・・でしょうが、いったい何事が? (これから移動しますので、誰かヒントくれてもお礼は書けません。悪しからず)
/: . : . : . : . : . : . : . : . : . : . : . : . : . \ , ': . : . : . : . : . : . : . : . : . : . :ヽ\: . : . }: . :.ヽ /: . : . : . : . : . : . : . : . : . : . : . : . : :/´ ̄ヽ: . :ヽ /: . : . : . : . : . : . : . : . : . : . : . : . __/: . : . : . : }: . : .゙, __/: . : . : . : . : . : . : . : . : . : . : . : . : /: . : . : . : ./: . : . :', /: .ィ/ヽヘ/レ'^'´`|: . |_: . : . : ./: . : . : . : . ハ: . : . : .! / /´l| |: . : . : :| ´レ、: ../: /: . : . : . /:.:.: . : . : | / /l| |ィ: . : .ハ| ゙/ /: . : . : . :/: . : . : . : :| /: .:.;| |ハ: . :| ! ;゙./: . : . : . :/: . : . : . : . :l /: :.:/∧ ! |: .| l:i: . : . : . :/: . : . : . : . : :l /:.:./ ´ ゙, !:.l |:!: . : . : ./: . : . : . : . :.. ;' ::/ '、\ レ |!: . : . : /:.:.,. --、: . : ../ お願い!もうやめて・・! '、_`¬ |l: . : . :.バ゙ ,r ';. : ./ 悪しからずは悪くないの!全部私が悪いの! | ̄ヾ ゝニ ー_‐_'' ´ |: . : :.| 〈:.:. /:.:/ !::: `´ ̄ ̄`ぅ。|: . : :| ノ // '、 ' :::::: |: . l | _/´ ̄`丶、 \ l: .l: | / ヽ `ヾ、ー ´ ̄'^ヽ ,.ィ: l;.:', | ヽ /` ー-‐彳l ´`ヽリ\ヾ、 `、 { l || ` `lト`ー''´ f:. ヽ
今思ったんだが、シェンロンと同じで
>>676 のAAのちっこい版って結構需要あるんじゃね?
頑張ってきっちり60FPSにしても、モニターの リフレッシュレートが70Hzだったりする罠。 そもそもの目的は、いったい何だ?
ところで俺は
>>621 だから、いまさらintやfloatの話に加わるのは
気が引けるわけだが、floatだと仮数部が23bitしかないから
そこもちゃんと考慮しないとすぐに精度がintより酷くならないか?
適当に電卓叩いてみたけど、2時間半で精度が逆転しない?
いまどきはみんなLCDだから、60Hz(w
>>681 うむ。
普通に60Hzぴったりだ。(何故かw)
LCDでも70Hzや75Hz対応のものもあるが、アレは70回/秒や75回/秒更新してるんじゃないの? 60とは限らないような・・・
俺の液まじやばい! 12HZぐらい見える! ゲーム死亡!
アナログ入力のLCDは60Hz以上の余分なHzを捨ててるんじゃなかった?
/: . : . : . : . : . : . : . : . : . : . : . : . : . \ , ': . : . : . : . : . : . : . : . : . : . :ヽ\: . : . }: . :.ヽ /: . : . : . : . : . : . : . : . : . : . : . : . : :/´ ̄ヽ: . :ヽ /: . : . : . : . : . : . : . : . : . : . : . : . __/: . : . : . : }: . : .゙, __/: . : . : . : . : . : . : . : . : . : . : . : . : /: . : . : . : ./: . : . :', /: .ィ/ヽヘ/レ'^'´`|: . |_: . : . : ./: . : . : . : . ハ: . : . : .! / /´l| |: . : . : :| ´レ、: ../: /: . : . : . /:.:.: . : . : | / /l| |ィ: . : .ハ| ゙/ /: . : . : . :/: . : . : . : :| /: .:.;| |ハ: . :| ! ;゙./: . : . : . :/: . : . : . : . :l /: :.:/∧ ! |: .| l:i: . : . : . :/: . : . : . : . : :l /:.:./ ´ ゙, !:.l |:!: . : . : ./: . : . : . : . :.. ;' ::/ '、\ レ |!: . : . : /:.:.,. --、: . : ../ '、_`¬ |l: . : . :.バ゙ ,r ';. : ./ 全部お前が悪い! | ̄ヾ ゝニ ー_‐_'' ´ |: . : :.| 〈:.:. /:.:/ !::: `´ ̄ ̄`ぅ。|: . : :| ノ // '、 ' :::::: |: . l | _/´ ̄`丶、 \ l: .l: | / ヽ `ヾ、ー ´ ̄'^ヽ ,.ィ: l;.:', | ヽ /` ー-‐彳l ´`ヽリ\ヾ、 `、 { l || ` `lト`ー''´ f:. ヽ
レアケースって・・・
>>687 オマイのしょぼい液晶なんてどうでもいいw
./: . : . : . : . : . : . : . :ヽ、 /: . : . : . : . : . : . : .,>‐'.、 ヽ __/: . : . : . : . : . : . : .7.: . : .}: . ゙, /: ィハヘノレ^l: . ト 、/ . : . ハ: . : .', //l. lハ イ ./: . : /.: : . : . | 職人さんありがとう : /ヘ ' ,リ .li : . /., -、 . : l ゙,\__ '' .l! : .バ.〈;: } . ,' . iー、' `ー=-'l!: .| ノ./: / l:: , ゙ ̄`ぅ。: .| / ̄`ヽ、 ヽ、、__ - 、:::;;l.:.l l ヽ、 `7ー-, イ`l:ハ:ヾ、._ , f:. `、
もう怒った! お前等に呪いをかけてやる! 呪いの言葉↓ クリエイトコンパチクビディーシィー 呪いの言葉↑ これでもうこの関数を使うたびにお前等はこの糞レベルのギャグを思い出さずにはいられない! あまりのくだらなさに思い出すたびに心底腸が煮えくり返る衝動にかられちゃえよ! ちなみに俺も長年解除は不可能だ・・・orz
援護射撃 トライアングルストリップ劇場
援護射撃 セックスファイル
696 :
デフォルトの名無しさん :2006/03/27(月) 23:01:32
援護射撃 ダイレクトセックス
FPS論争のせいで糞スレ化してしまったじゃないか!
板違いを無視してスレ立てするような奴らにまともな書き込みを期待するほうがおかしい
701 :
247 :2006/03/28(火) 05:51:05
ゲームを数日間起動しっぱなしにする奴がたまにいるからdoubleにしとけ
古い名前残ってた・・・orz
>>701 関係ない。
その場合はその前にDWORDの値が問題になるはず。
それに何日間だよ一体w(50日近くつけっぱか?w)
CRT,VSYNCも古い仕様だな 将来CRTが無くなればVSYNCに縛られることもなくなる
(゚Д゚)ハァ?
>>703 >その場合はその前にDWORDの値が問題になるはず。
お前はMSが披露してるtipsすら読まんのか…
DWORDのffffffff→0が問題になるのはアホが組んだ時だけ
問題にすらならんわ
>>706 だからdoubleがいいっていう理由がわからない。
キャラの座標は 左上と真ん中 どちらのポイントを保持して使うべきですか
マルチ乙
>707 ちゃんと嫁 DWORDで問題ないと書いてある
お前達もうちょっと仲良くできないのか
MSの何かのTIPSで __int64 を使え見たいな事書いてなかったか?
>>707 累積時間に対して精度を求めないならdouble使わなくていいよ
上のほうで出てるコードだと累積時間使ってないからfloat/intでええんとちゃう
チャーでいいよチャーで
じゃあ、俺はキムかチョでいく
じゃあGNU MPで
718 :
デフォルトの名無しさん :2006/03/28(火) 21:55:51
おまえら何やってるんだよ(;´Д`) それより大変だ!DirectX7の日本語ヘルプ無くなってた。俺ヤバイ
>>718 もう10がでるっつーのにそんなゴミ使ってるお前の頭が一番ヤバイ。
>>720 なんどでもいってやるよ!クズが!
どうせエロゲPGだろ?
死ねよこのゴキブリ野郎!
チンコおっ立てながらプ
openglが頭を過ぎりました。
さっさと10に移行したいな デバイスロストがないのが地味に最高
俺様は未だに ラデインj7500 64M だぜぇぇっぇ!!!! dRECTX7世代 最強”
725 :
デフォルトの名無しさん :2006/03/28(火) 23:26:18
こちらのページ
http://homepage2.nifty.com/natupaji/DxLib/dxuse_bcc.html を見て進めていったんですけど、[プロジェクト]→[メイク]の段階で
エラー F1009 c:\documents and settings\○○\my documents\c_programs\test2\drawpixel.cpp: 入力ファイル 'c:\documents and settings\○○\my documents\c_programs\test2\drawpixel.cpp' をオープンできない
*** 1 errors in Compile ***
** error 1 ** deleting Debug\DrawPixel.obj
ってエラーが出るんですけど、どうしたら良いんでしょうか?
ご教授お願いしますm(_ _)m
エラー、読めよ 日本語だぞ。
728 :
718 :2006/03/29(水) 00:02:05
>>726 せっかく教えてもらったのですが、DirectX7のヘルプじゃない気が・・・
729 :
718 :2006/03/29(水) 00:04:16
見つかりました! ありがとうございました!(多謝
730 :
726 :2006/03/29(水) 00:05:31
あああああ、すまん他人様のソースファイルだった 代わりに上げといた ってあぷろどしてる間に見つかりましたか 大変失礼しました
731 :
718 :2006/03/29(水) 00:07:48
732 :
725 :2006/03/29(水) 01:19:11
** error 1 ** deleting Debug\DrawPixel.obj って出てるんで、オブジェクトファイルを作ればいいんでしょうけど、やり方がどうにも分からなくて…。
>>732 頭悪いくせにへんなやり方するからだよw
つ ヒント:打ち間違え
typo typo tytyp otyutoppudsaptdjsakld;]sv,lv,l:/a@:[qあsrふぇdtgyふじこl;p@:「」
マルチターゲットレンダリングをつかって、 一度レンダリングした画像をテクスチャとして使いたいのですが、 その画像の背景部(黒)を透明化する方法がわかりません。 今のところ D3DXCreateTexture を使ってテクスチャを作成していますが、 どのようにすればいいでしょうか?
X1R5G5B5 A1R5G5B5 上記のフォーマットに対応していないボードってあるのでしょうか? (オンボードでは対応してないのを1つだけ確認しましたが、、、)
>>735 なんかデジャヴを感じるが…
レンダーターゲットテクスチャをA8R8G8B8なりで作ればいいはず
>737 返信ありがとうございます。 D3DXCreateTextureFromFileEx は使ったことあるので、 そういうノリでやればいいのはわかってるんですが、 ファイル入力段階ではなく、出来上がってしまってからのテクスチャに どういう関数を使えばいいのかが見つけられないのです・・・ デジャヴということはこの擦れにあるのでしょうか、 時間なくて見れてませんでしたが、取りあえずスレを頭から読んでみます。
特定の色を透過するのなら、単純に色を判別してαに書き込めばいいだけ。
>740 その色指定をアルファに書き込む関数をさっきから探してるんですが、みつかりません。 もしかして微妙にずれて考えてますか?
>>741 関数などない。
ロックして自分でテクセル弄れ。
自分でコンバートするわな。ふつー。
>741 そういうことでしたか・・・、そりゃ見つからないですね ありがとうございました、試行錯誤してみます。
745 :
736 :2006/03/29(水) 22:35:48
>>738 解決しました。
ありがとうございました。
なんたらDevice9::Clear() も一応挙げておこう これで十分かもしれないし
>>742 そうなの?
書き込むときにピクセルシェーダ使ってできると思ってたけどそうでもないんだ?
それか、貼るときにマルチテクスチャ→ピクセルシェーダで小細工。とか。
>>747 PS使えば確かに出来るが、
環境依存しない関数はないって事だろう。
749 :
737 :2006/03/29(水) 23:44:13
なんか色々勘違いされてんな…
>>739 ファイル入出力なんざ関係無い
D3DDevice9::CreateTexture()でレンダーターゲットかつA8R8G8B8の空テクスチャ作って
そこに描画すればいいんじゃねーのと言ってるんだが
D3DDevice9::Clear()でクリアするときは引数の4番目に0を渡せ
IDirect3DDevice9::SetRenderTarget メソッド
とあるサイトの引用です。 「最近のDirectX SDKには主要なビデオカードのDeviceCapsのリストが載っている」 との事ですが、どこに載っているのでしょうか? ご存知の方がいらっしゃいましたら、お願いします。
ご存知です。
ひょっとして
>>735 の言っているのはMRTではないのか?
ずっとMRTのことだと思っていて、何でそんなことで悩むのか分からなかった。
MRT使うにはPSが必須だし。
Direct3Dな流れなところすみません。 DirectMusicを使って、MIDIの再生をしています。 MIDIの再生はDirectMusicに任せるのではなく 自前でMIDIメッセージを送っています。 音色には"Default GM Collection"か 自前で用意したDLS音色データを使ってます。 再生自体はうまくいっております。 そこで、このDirectMusicで演奏した結果を WAV(PCM)としてファイル書き出したいのですが 1つのソフト内で完結できるよい方法はないでしょうか。 WINAMPのプラグインで実現できているようですが。 DirectSoundをいじって出来るのでしょうか。 現状では IDirectMusic8::SetDirectSound() にはNULLを指定しています。 環境 WindowsXP SP2 Visual C++ .NET 2003 (MFC) DirectX SDK 9.0 解決方法もしくは参考になるページ等ありましたら教えてください。
DirectSoundのCapture使ってWaveに出力すりゃいけると思われ。
静かになった
こういうときは動かない方がいい
758 :
デフォルトの名無しさん :2006/03/32(土) 01:29:07
もしかして、日付が 3/32 ?
mcode\motelar..nis:per:mo/a/ac/aza/ready mcode\motelar..pebla:mo/1240984421/ac/aza/ready mcode\motelar..dsp:dsp:mo/fcp/nec43554n2mr_/ac/aza/ready dplus[mcode_back/110011/]dsp:dsp/a/ac/aza/ready これ何のプログラムで触るかわかりませんか?
761 :
デフォルトの名無しさん :2006/03/32(土) 23:30:46
らいとってハードで4個までしか対応してないのですか〜><?
762 :
デフォルトの名無しさん :2006/04/02(日) 16:14:31
質問です。XP、.NET 2005 です。 LPDIRECT3DSURFACE9 型のサーフェスが持つビットデータを、直接取得/設定するにはどうすればいいでしょうか。 D3DXLoadSurfaceFromFile を使えば、サーフェスに画像を読み込むことはできます。 が、例えば 座標 (100, 100) の色を調べたい、座標 (100, 100) を黒 (0, 0, 0, 0) にしたい、などの方法が分かりません。 ビットデータのアドレスを取得できればどうにかなるのですが・・・。 よろしくお願いします。
GetDC して GDI 関数使う。
764 :
762 :2006/04/02(日) 17:12:33
>>763 見落としてた・・・ありがとうございます。
普通はその程度でGDIは使わないけどなw Lockできるなら、Lockして直接アクセス。 Lockできないなら、システムメモリにサーフェス作ってそこに転送。
767 :
766 :2006/04/03(月) 00:00:07
>>766 アルファテストはレンダリング最終段階で適用されるので、
その時点でのα値が期待通りになっているようにする。
具体的には、使用する全てのテクスチャステージで
D3DTSS_ALPHAOP, D3DTSS_ALPHAARG1, D3DTSS_ALPHAARG2
を適切に設定する。
レンダリングステートも関係あるものは全てちゃんと設定しないと駄目。
769 :
766 :2006/04/03(月) 01:07:39
どういうわけだかわかりませんが、自己解決しました。 板汚しでスミマセン。
770 :
766 :2006/04/03(月) 01:09:21
>>768 レスくださってたんですね。ありがとう。
レンダリングステート、767のサンプルを
参考に設定したらうまく行きました。
すみません、少々お伺いします ID3DXLineを使って3次元ポリラインを作っているつもりなんですが。 カメラをどのように修正しても、常に位置が変動しない ワールド座標じゃなくてビューポート座標?に表示されてるようなのですが、 これを他のオブジェクト同様、カメラに合わせて変動させるようには出来ないでしょうか? お願いします。
ラインを引く程度なら、直接頂点座標を指定すればいいだけなのに、 D3DXの関数を使わなければならない理由が何かあるの?
773 :
771 :2006/04/03(月) 16:26:40
他にもD3DXをつかったオブジェクトがある事と、 三次元で360度から描画する必要がある事 そんな時にラインを使う必要が出てきたのですが、 D3DX9からライン用のクラスがあると知ったので使ってみようと思いました。 D3DXMatrixIdentity(&mat); D3DXMatrixIdentity(&world); D3DXMatrixIdentity(&temp); D3DXMatrixMultiply(&temp, &world, Cam->GetView()); D3DXMatrixMultiply(&mat, &temp, Cam->GetProj()); m_pd3dLine->DrawTransform(頂点配列, 頂点数, &mat, 頂点カラー); いまこういう状態なのですが今度はまったく表示されません・・・
そんな面倒なことしてないで、素直にDrawPrimitive()使おうや。 あれほど簡単に2D/3Dのラインが引けるものもないだろうに。
775 :
771 :2006/04/03(月) 16:53:36
すみません、自己解決しましあ
pD3DDevice->SetTransform(D3DTS_WORLD, &world);
が抜けてたんですね・・・
>>774 アドバイスありがとうございます、
とりあえず動いたのでこのまま続けてみようと思います
みなさん、こんばんは 2D->3DにはD3DXVec3Unprojectを使えば楽勝です^^
始点 0,0,0 終点 20,50,100 方向ベクトルの求めるときは 方向ベクトル=終点ー始点 でいいでしょうか><? それと D3DXIntersect で 対象メッシュが拡大、回転、移動されていると正常に動かないですがどうしたらいいでしょうか><?
初心者以下はお帰りください。
779 :
デフォルトの名無しさん :2006/04/04(火) 22:07:49
>> そんなこと言わないでください>< 浮上します^^
メッシュに適用しているマトリックスの 逆行列で光線ベクトルを変換してからD3DXIntersectに突っ込め。 それでも分からないなら素直にそこらへんのライブラリでやれ。
>>779 帰れ
お前のせいでレスをどんだけ無駄にしたと思ってんだ
782 :
デフォルトの名無しさん :2006/04/04(火) 22:34:55
D3DXMATRIX mat2,mat;//モデルの行列 mat=モデルの行列(回転 移動 拡大) D3DXMatrixIdentity( mat2);;//単位行列いれます。 D3DXMatrixInverse( mat2, NULL, mat);//逆行列もとめる D3DXVECTOR3 p1(0,0,0),p2(100,100,20);//始点と終点 p2=p2-p1;//やっぱりp2は方向ベクトルに変更です>< p2*=mat2;方向ベクトルに逆行列かけます。 //ついに当たり判定! D3DXIntersect( mesh // [in] テストするメッシュを表す。 &p1, // [in] [in] レイの始点座標を指定する &p2, // [in] レイの方向を指定する &hit, // [out] BOOL へのポインタ。 NULL, // [out] pHit が TRUE の場合、レイの始点に最も近い面のインデックス値へのポインタ。 NULL, // [out] 重心ヒット座標 U へのポインタ。 NULL, // [out] 重心ヒット座標 V へのポインタ。 NULL, // [out] レイの始点から交点までの距離へのポインタ。 NULL, // [out] D3DXINTERSECTINFO 構造体の配列を格納する ID3DXBuffer オブジェクトへのポインタ。 NULL); でおkですかね^^;
783 :
デフォルトの名無しさん :2006/04/04(火) 22:36:46
>> みなさん意地悪ですね><; 僕、怒っちゃいますよ^0^/
またこいつか、スルー推奨。というか強制。
785 :
デフォルトの名無しさん :2006/04/04(火) 22:49:07
>> >またこいつか 違います、前回はぼくの弟です><;
>> 動きましたー^^ ありがとうございました また、ピンチになったらきますねー^^
787 :
デフォルトの名無しさん :2006/04/06(木) 14:03:29
DirectPlayのIDirectPlay8Peerなのですが、 送信側は50ms間隔で数バイトを送信、 受信側はひたすら受け取る(処理速度には余裕有り) 双方をローカルで動作させdp8simで試しています。 dp8simをOFFにすれば、当然問題なく通信できるのですが、 dp8simのlatencyを100ms等にすると、受信側のデータに遅れが蓄積されていきます。 latencyが100msあったとしても、受信側が受け取るのが100ms遅れるだけで、蓄積される要素は無い様に思えるのですが・・ DPNSEND_SYNCや、DPNSEND_GUARANTEEDも指定していないですし。 何故なのでしょうか?
788 :
787 :2006/04/06(木) 19:00:30
なんか、帯域が絞られて、送信側のバッファに溜まってるみたいだ。 latency変えただけで、帯域は制限してないの・・・ もしかして、dp8simのlatencyシミュレート中は他の通信止めるとかいう糞仕様なのか?
通信はWinSockを使う方がいい。 現時点のDirectXでは既に切り捨てられてるしな。
お尋ねしたいのですが、Yahoo!ジオシティーズのアドバンストHTMLエディタで今HPを作っているのですが、 いざ編集を終えて自サイトを見てみると文字化けしてしまいます。 他のサイト全般ではエンコードが「日本語(シフト JIS)」のところが、自サイトは「日本語(EUC)」で通常表示されます。 これを直す方法をどなたかご存知ないでしょうか
で、どこらへんがDirectXの話なんだ?
793 :
790 :2006/04/06(木) 21:37:03
あー、すいません、ちょっと急いでたんで血迷ったことしてしまいました。 スルー御願いします。
794 :
デフォルトの名無しさん :2006/04/07(金) 21:23:32
USBカメラから取得した動画にリアルタイムで字幕や画像を重ねようと DirectShowとDirectGraphicsを使いプログラムを組もうと思っているのですが どうしても文字を動画よりも上に重ねることができません。 似たようなことを解説しているサイト、または実際に作ったという方はいませんでしょうか?
795 :
787 :2006/04/07(金) 22:03:35
>>789 サンクス
保証通信とか、シーケンシャルとか署名とか既製で便利なので・・・
もう少し粘って駄目だったら、諦めてWinSockに移る事にします。
D3DXSprite DrawPrimitiveUP ではDrawPrimitiveUPの方が速い。
D3DXSprite DrawPrimitiveUP ではDrawPrimitiveUPの方が速い。
D3DXSprite DrawPrimitiveUP ではDrawPrimitiveUPの方が速い。
D3DXSprite DrawPrimitiveUP ではDrawPrimitiveUPの方が速い。
組み方次第。
組み方は関係ない。
組み方次第。
組み方に関係なく速度が出るDrawPrimitiveがどこの世界にあるというのか。 三角形10000万個をDrawPrimitive1回で1三角形の計10000回呼び出しと 10000個の三角形を1つのバッファにまとめて1回の呼び出しとで速度比べてこい。
てゆーか今のID3DXSpriteって意外と速くね?
最近のID3DXSpriteは内部でバッファもって ある程度まとめてから一括で描画してるっぽい。
ていうか Begin/End/Flush はそのためのメソッドじゃないのか
>>803 前に俺が測ったときはほとんど差がでなかったの覚えてる。
そういう情報が出た当時はそうだったかもしれないが、 ハードの進化や、ドライバの更新で現在はどうなってるか分かったもんじゃない。 何でもかんでも鵜呑みにするのはどうかと・・・ 結局自分で測定するしかない。
>>803 でもって、そういうの考えるのって意味なくない?
結局、シェーダがちがっちゃえば別のバッファにわけるしかないのに、
わざわざまとめることなんていまの時代絶対に無いっていいきれるじゃん。
テクスチャが違ってもわけるしかないし、アルファが入ってもいっしょにできないし、
必要なuvの数が違っても、アドレッシングモードが違っても、法線、従法線、接線の有無でも、
スペキュラが入っても分けるしかないし。
いっしょにまとめるようにする最適化なんて使われて無いだろ。
サイズ20x20pixelのスプライトで今測ったら、 12000頂点 x DP呼び出し1回 -> 約760FPS 6頂点 x DP呼び出し2000回 -> 約120FPS 昔試した時はこんな遅くはならなかった気がするんだけど、 ドライバ腐ってんのかなあ・・・。 3Dゲーじゃ考えるだけ無駄ってのは同意。
すみません,すこし教えてください 今ピクチャーコントロールを使ってDirectXをレンダリングしています. それでマウスのクリック座標からDirectX内部の座標を検出したいのです そこで以下のように書いてみたのですが,どうも値がおかしい感じです D3DXVECTOR3 MousePoint(pt.x, pt.y, 0);//マウス座標 D3DXVECTOR3 Re; D3DVIEWPORT9 vp;//ビューポート m_pD3DDevice->GetViewport(&vp);//ビューポートの取得 D3DXMATRIX mat;//マトリックスを生成し D3DXMatrixIdentity(&mat);//それを初期化 D3DXMATRIX matProj = *m_cScene.GetCamProj();//カメラのプロジェクション行列を取得 D3DXMATRIX matView = *m_cScene.GetCamView();//カメラのビュー行列を取得 D3DXVec3Unproject(&Re, &MousePoint, &vp, &matProj, &matView, &mat); return Re; Z座標は基本的に使っていません. 何がおかしいのでしょうか・・・? よろしくお願いします.
>>811 何がおかしいって・・・・・頭がおかしいとしか言えない。
奥行きがある限り、方向は算出できても座標は出せない。 地点を求めるなら直線と対象物の交点を出せ。
814 :
811 :2006/04/08(土) 20:43:24
返答ありがとうございます カメラのxy座標と注視点のxy座業が常に同じであっても 交点を出さないといけないのでしょうか?
まずは自分で計算してみろ。 話はそれからだ。
D3DXVECTOR3 mpt1(pt.x, pt.y, 1);//マウス座標1 D3DXVECTOR3 mpt2(pt.x, pt.y, -1);//マウス座標2 D3DXVECTOR3 Re; /* 中略 */ D3DXVec3Unproject(&mpt1, &mpt1, &vp, &matProj, &matView, &mat); D3DXVec3Unproject(&mpt2, &mpt2, &vp, &matProj, &matView, &mat); //Z座標0の時のx,y座標 Re.x = (0-mpt1.z)*(mpt2.x - mpt1.x)/(mpt2.z - mpt1.z)+mpt1.x; Re.y = (0-mpt1.z)*(mpt2.y - mpt1.y)/(mpt2.z - mpt1.z)+mpt1.y; Re.z = 0; こういう風に買えてみましたが、解決してない模様・・・ 根本的に間違ってますでしょうか・・・
>>811 は間違いなくIQテストの三次元分野がIQ一桁だと思われる
818 :
811 :2006/04/08(土) 22:20:28
何度もすみません D3DXVec3Unproject(&mpt1, &mpt1, &vp, &matProj, &matView, &mat); D3DXVec3Unproject(&mpt2, &mpt2, &vp, &matProj, &matView, &mat); D3DXVECTOR3 v1(-10000,-10000,0); D3DXVECTOR3 v2(10000, -10000, 0); D3DXVECTOR3 v3(0, 50000, 0); D3DXPLANE plane; D3DXPlaneFromPoints( &plane, &v1, &v2, &v3 ); D3DXPlaneIntersectLine( &Re, &plane, &mpt1, &mpt2 ); どうにもこうにも・・・ もうすこしヒントいただけませんか
819 :
811 :2006/04/08(土) 23:34:58
>> みなさん 教えてくださいよ〜^^
820 :
デフォルトの名無しさん :2006/04/08(土) 23:36:53
お前かよ スルー推奨。
>>809 2Dのスプライト表示にスペキュラとかシェーダーとか
法線、従法線、接線とか考えるってどんなすごいもん表示してるんだ?
3Dに関しても下手に節約するよりはある程度は使わない頂点突っ込んだまま
一括で処理する方が早い場合も多々あるし、そのためにセグメントバッファを
APIでサポートしたんだろ。
確かに最新とはいえないかもしれないがGPU gems2に普通に書かれてるネタだぞ。
例えばロボットをレンダリングするときでもそれぞれの稼動するパーツを別のメッシュで
持つよりも1ウェイトのワンスキンモデルにした方が高速にレンダリング出来る場合もある。
ATIか何かのやつで今のハードはテクスチャサイズが大きくても別に遅くならんと書かれてたし、
巨大なテクスチャにデータまとめてあとはシェーダーでなんとかするってのが主流になるんじゃないのか?
頂点データに属性のID入れるなりすれば其処までステートの切り替えが必要になるとも思えないが。
まぁ、結局は自分でゲームにあわせてボトルネック調べるしかないけど・・・。
823 :
デフォルトの名無しさん :2006/04/09(日) 20:25:27
>>822 そこだけとっていわれてもねぇ。
アルファ物に関してはまったく同じものでもZが違えば別表示にするしかないじゃない。
俺がいいたいのは、もうそういう手間をかける意味がそもそも無いっていってるの。
考えるだけ無駄でしょ。
824 :
デフォルトの名無しさん :2006/04/09(日) 20:27:12
で、さぁ。 そうやってまとめたとしてそれでちょびっと速度が上がったところで、 その場所のそのときのその一瞬のことでしかないわけじゃない? それでそんな手間かけてそれでどうだっていうの? もう、絶対にやってもしょうがないことなんでそんな意味ありそうにいうの? 頭悪いんじゃないの?お前w
速度のうp自体は全然ちょびっとでもないし、 半透明だけ別にしても普通は不透明のモデルの方が圧倒的に多いと思うんだが・・・。 オープンエアー型のマップにしろBSP使うようなマップにしろ1単位を1メッシュ化できれば それなりのパフォーマンスは見込めるし全体のパフォーマンスにかかわってくると思うんだが・・・。 まぁ重くなったらポリゴン減らせば
826 :
デフォルトの名無しさん :2006/04/09(日) 20:53:38
>>825 はぁ?
その「ちょびっとでもない」ってそれモデルによるけどって話でしょ?
なんでそんな全体に影響しちゃう的ないい方してるわけ?この詐欺師。
仲良くしなさい
>>827 俺は
>>826 の事は釣り師だと思ってるから気にせんでくれ。
>>826 俺に言ってるのは全体のパフォーマンスにかかわるような場所に
適用してこそ効果が得られるって話をしてるんだ。
何もかもが全体に影響するわけはないのは当然。
効果的な場所を見つけて其処に適用するための労力まで惜しむのかって話。
まぁ趣味でやってる分には動けばそれでいいんだろうけど。
GPU能力だけが上昇する現状では確実に影響出ててるよ。 そもそもどの最適化を優先するかは状況次第なんだから そんな必死こいて否定しなくていいよ。
830 :
デフォルトの名無しさん :2006/04/09(日) 22:01:01
>>828 明らかにその状況にあわせた最適化が必要な箇所なのに全体も糞もねぇだろ。この嘘吐きが。
831 :
デフォルトの名無しさん :2006/04/09(日) 22:02:14
「やるとしたら」の話ね。 まったくの徒労だと思うけど。 おそけりゃ遅いでいいでしょ。間に合わなきゃフレーム落ちでもさせりゃ。
>>830 じゃぁわかりやすく言ってみるか。
現状のDirectXとグラフィックスハードウェアで最も簡単と思われる処理の高速化
→DrawPrimitive()を減らす。
セグメントバッファも2Dのスプライトのバッファにまとめて一括描画も
全てここにつながる。
Direct3Dで1GHz程度のCPU上で動作させる場合、
1秒あたりDrawPrimitive()が10000~40000程度でCPU100%使い切るんだそうだ。
60フレームで動かすなら1フレームあたり670回も呼び出せばCPU100%使い切ることになる。
極端な話だが弾幕STGで弾1つを1DrawPrimitive()でやってたらどうなるだろうな。
アルゴリズム的な話はそもそも
送っちゃった・・・・ アルゴリズム的な話はそもそもGPUの最適化とは関係ないからスルー
834 :
デフォルトの名無しさん :2006/04/09(日) 22:42:38
>>832 無駄の極地だな。
まったく売上に貢献しない会社のクズだな。
いや、クズならまだ害はないが、ホントこんな時代遅れのくそったれのもとで仕事しろなんて
言われた日には絶望で途方にくれる。
とだけ言っておく。
時代遅れじゃない最新のやり方ってどんなん?
836 :
デフォルトの名無しさん :2006/04/09(日) 22:58:19
837 :
デフォルトの名無しさん :2006/04/09(日) 23:04:04
つまりシェーダーを使うからあんな前時代的な最適化は出来ない。 結果として画面に表示できるオブジェクトの数が減ろうが、 沢山だして処理落ちしようが今はそういう時代だ・・・って事か。
ようやく理解できたか。
あぁなかなか為になる話だった。 色々な事が理解できたよ。色々な事がね。
>>つまりシェーダーを使うからあんな前時代的な最適化は出来ない。 それは今のシェーダが過渡期で、機能が限定されているからと注釈が必要。 効果ごとにシェーダを切り替えるという方式はいずれ無くなるだろうし そうとは断言出来ないっしょ。
つーかこの手の話って2Dスプライトの話から始まってるのに シェーダ駆使したシーンじゃ意味ねえよって罵倒始めるのが いつも出てくるよね。同じひと?
だったら何か?
843 :
デフォルトの名無しさん :2006/04/09(日) 23:55:56
>>841 「シェーダを使わない」ってのがDirectXの固定シェーダ機能を指してるのであれば最適化なんて語るだけ無駄。
なんで固定で済むのかって例によって汎用性重視の設計だから固定で済むわけだからその分やっぱり遅くなる。
そこでまとめるとどうとかそういう議論は全く意味がない。
>>840 今だって条件分岐はサポートされてるんだから
それを理由にリクエストを減らすための最適化が
出来ないってのはちっとムリがないか?
ある程度ならテーブルをレジスタに入れておいて
インデックスは頂点のw要素にでも入れておくなり出来るんだし。
>>845 CPU負荷をGPUの頂点演算部分の負荷にまわす方法って感じ。
元々DrawPrimitiveの回数を減らすってのは
CPUがきつくてGPUが浮いてる時の回避方法だよ。
リクエストが多くてCPUがネックになるような状況では有効。
ピクセルシェーダーがネックな場合は意味なし。
頂点シェーダーがネックなら逆効果。
さっきの1GHzクラスで1フレーム670回のDrawPrimitive()ってのは
GPUへのコマンド送信にかかるCPU負荷の問題だから、
頂点数が多かろうが少なかろうが関係ない。
DrawPrimitive()は重いAPIだから極力callすんなって
M$も何かで言ってたっしょ。
また速度厨か・・・ 速度語るなら実測値持ってきてから言え。 引用は、あまり意味が無い。
(゚Д゚)ハァ?
>>810 は実測なんだけど。Athlon3GHz+GeForce6600GT
ちなみにDPの間にステート変更の中でもコストが高い
SetVertexShaderを挟むと100fps以下に落ち込む。
>>847 計測も俺は微妙だと思うんだがな。
単純なサンプル用意して計測した結果と
実際のゲームに適用した結果だとあまりにも結果に差がありすぎる。
例えば、
>>810 みたいなことをゲームで実際にDrawPrimitiveをまとめてみても1FPSたりとも速度は上がらなかった。
それどころか、アルファの矛盾を無くすために2度描きまでしてるが1回しか描画しないときと比べて倍時間がかかってるわけではないようだし。(当然だけど)
こういうのって、計測結果がそうであってもそのシーンのその瞬間のことしか証明できてないと思うんだよね。
いくらなんでも850は非道すぎるw
なんかApril2006が出てるって情報流してるサイトあるんだけど 公式で見つからない
いや、本人じゃないけど、
>>850 は正しいと思うよ
なんで
>>850 は、計測=簡単なサンプルで計測なの?
自分の目的に合わせた使いかたのサンプルで測定すれば良いじゃないか。
結果に差が有りすぎるって、計測と実際の違いは、てめぇの実装の差じゃねぇかw
ラインタイムキタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!!
ランタイムだけは、9.0cから上がってな
なにが変わったの?
ま、やり方は何でもいいが可能な限り DPを減らせってのはいまやDirecXじゃ基本中の基本だわな。
俺、まさに2DSTG作ろうとして玉1発毎にDrawPrimitiveしてるワケだが、 DrawPrimitive減らすと言っても具体的にどうすりゃいいの?
わかんないならやらなくて良い
むしろ弾を出さなきゃいい
BitBlt でいいよもう…
三人でかけそば一杯なのですがよろしいでしょうか。
つまりDrawPrimitive減らせって言ってるヤシの程度はそんなもんって事だな レベル低っ!
仕組み的に減らせないよなぁ・・・ 描画するなってのと同義だと思うよ。
>>870-871 いや・・・・・マヂレスを避けてるだけなんだが
まとめてやればいいだけな話だろ
この程度もわからないならグラマやめろよ
俺のおっぱい揉んどけ
っていうかExecuteBufferってのが昔あったのよ これがえらく不評でDrawPrimitiveに取って代わられたのよ それでまた描画コールを減らしたいと? ユーザー様は勝手だにゃー
875 :
863 :2006/04/10(月) 22:42:20
>>872 一つ一つ個別に描画しなけりゃならんのだが?バカ?
そんな事も判らんのなら人間やめればぁ?www
伸びていると思ったら、DrawPrimitive減らすなんて MSのヘルプにも載っているような事に、何延々ケチ付けてるんだ このスレ、まともな質問回答レスが少ないよなw ほとんどが不毛な議論だ
弾幕シュー作りたいんですけどー、だけじゃ描画コマンド毎に std::vectorに頂点突っ込んでまとめてDP、ぐらいしか言うことねえし。 スプライト一個一個にステート変更が必要? それならバッチングは諦めろ。
テクスチャの座標変えてやればいいんじゃないの? 10.0とか、1000.0とか。
ここらでマジレス。 弾はスプライト→△ポリゴンx2で描画→頂点4つでストリップor頂点6つでリストで描画 弾の数を減らさずにDrawPrimitive()を減らすって事は、 一回のDrawPrimitiveで書く頂点数を増やすって事に。 つまり600頂点とか入る頂点バッファを作って、 それを書き込みonlyでLockしてガリガリ頂点を書いていけばいい。 処理的には短なるコピーだし数が多ければ多いほどDrawPrimitiveを呼び出すよりはるかに速くなる。 STGの弾ならステートの変更が弾ごとに頻発するわけでもないからかなり効率よく纏められる。 自由にZでプライオリティ付けられるようなシステムにしておくとこの辺きつくなるから、 レイヤーみたいな構成で1レイヤーが1テクスチャandステートとかにしておくとかなり素敵。 あとは気合。
テクスチャを描画するためだけの板ポリ前提ならその方がいいのだろうが、 まともな3Dモデルを出力する時は、DrawPrimitiveの数をプログラム的に減らすのはほとんど不可能。 モデリングの段階で最適化しておかなければならない。 結局見ている題材が違うんだよね。
>>880 偉そうなこという前に流れ読め
>>796 しっかし最初から下らない流れだなw
こんなので100レスかよ
そもそもD3DXでSpriteとかXFile系の描画機能とか余計なものを用意するのがいけない。
883 :
デフォルトの名無しさん :2006/04/10(月) 23:40:08
しばらくこないうちにレベル低くなったなここは。
結論からいうと
>>850 が正しい。
他の奴は何言ってるのかわからない。
3Dの勉強いちからやりなおせ。
そもそもDrawPrimitiveをまとめていいことなんて1つもない。
ちょっとよく考えてみろ。
そもそも視錐台に入っていない物体の計算までやって速いわけがない。
シーンをまるごとつっこんだとしてカメラの視錐台にはいる=描画する必要のある物体はそのうちのどれだけだっていうんだよ。馬鹿。
DrawPrimitive1つにまとめるとかいってる奴は百回死ね。
描画処理の基本中の基本にして、速度アップにもっとも効果のあるクリッピングをやってねぇ時点で速いわけない。
はい、残念w
レベル上がったらまたおいでw
101回目の死ねポ〜ズ
だってさ
>>863 せっかくアドバイスもらったんだから、
頑張って視錐台カリングを駆使した2DSTGを作ってね。
すいません。超初心者な内容で恥ずかしいのですが、 D3DXCreateTextureFromFileExで、GIF画像は扱えないのでしょうか? GIF画像を指定しているつもりですが、何も表示されなくなってしまいます。(PNGだと映る)
887 :
デフォルトの名無しさん :2006/04/10(月) 23:52:54
2Dだって3Dだって同じだろ。 まさか毎フレーム追加→削除を繰り返す動作なんて速いと思ってんじゃねーだろ? やった時点でVertexBufferの恩恵はほぼないのはわかるよな? 2Dだろうと3Dだろうと1つのDrawPrimitiveにまとめるなんてまったくの無駄。 はい、ちんちんw
初心者だとヘルプは読まなくてもプログラムが組めるの?
hr = D3DXCreateTextureFromFileEx( m_pd3dDevice, "sample.bmp", // ファイル名 0, 0, 0, 0, D3DFMT_A1R5G5B5, // 色抜きを可能に D3DPOOL_MANAGED, D3DX_FILTER_LINEAR, D3DX_FILTER_LINEAR, D3DCOLOR_ARGB(255, 21, 141, 91), // 透過色を指定 NULL, NULL, &set.g_pTexture // テクスチャ名 ); D3DX_FILTER_LINEARが反映されない・・・・なんでやねん!
>>886 「この関数がサポートしているファイル フォーマットは、
.bmp、.dds、.dib、.hdr、.jpg、.pfm、.png、.ppm、.tga」
無理みたい。
>>887 >まさか毎フレーム追加→削除を繰り返す動作なんて速いと思ってんじゃねーだろ?
それをやった結果が
>>810 。ちなみにVBじゃなくてstd::vector
>>888 ヘルプを読むかぎり、bmp,png,jpeg,dib,tgaをサポートとあります。
ですが
>>118 であっさり「gifファイル〜」と話題にのぼっているので、GIFを扱えるテクニックがあるのかと思いまして。
自分で読み込めばいくらでも使える。 D3DXに無いだけの話。
>>887 VertexBufferはDYNAMICで作成すればAGPメモリに配置されるし、
Lock時に書き込みONLYのフラグを指定すれば高速に書き換えられるんだが・・・
実際のそういう資料はいくつも存在するのになんで頭ごなしに否定してるんだ?
出来ないことは恥ずかしいことじゃないぞ。
これから出来るように勉強すればいいんだ。
>>893 STRIPにしても縮退ポリゴンつっこもから結局スプライト1つに6頂点にならねぇ?
>>883 クリッピングやってからインスタンス化できるようなシステムを
考えればいいだけだと思うんだけど。
Indexed頂点使えってことじゃない? 頂点キャッシュとデータ転送量の削減に期待して比較したことあるけど、 かなりヘビーな弾幕シューでもシーン毎に精々10000頂点程度、 しかもライティングは切るし、まず効果は出ない。
縮退ポリゴンってなんだ?英語で頼む
同一座標に2頂点があるポリゴン、、だっけ? ようは面積が0になるからレンダリングされないポリゴン。 シャドウボリュームなんかでも使わなかったっけ?
ちょっと話についていけてないんだが…… 弾の描画なんて三角ポリゴン一枚で十分じゃないのか? どうせ透過するからポリゴンの形なんて関係ない 四角にする必要性がわからない
>>897 それってVertexBufferを毎回確保しなおすから測るまでもなく遅いよw
>>883 読んで考えた。
本当にPrawPrimitive一括描画って計測数値だけでみて速いって言えるんだろか?
不透明ポリゴンの前から描画とかもしないわけだし、なんか都市伝説のような気がしてきた。
IDirect3DDevice9::SetStreamSourceFreq メソッド -------------------------------------------------------------------------------- ストリーム ソースの頻度値を設定します。このメソッドを使うと、複数インスタンスのジオメトリを描画できます。 構文 HRESULT SetStreamSourceFreq( UINT StreamNumber, UINT FrequencyParameter ); パラメータ StreamNumber [in] ストリーム ソース番号。 FrequencyParameter [in] このパラメータには 2 つの異なる値を設定できます。「複数インスタンスのジオメトリの効率的な描画」を参照してください。 戻り値 成功した場合は、D3D_OK を返します。 失敗した場合は、D3DERR_INVALIDCALL を返します。 1年以上前からハードウェアで実装されていて、 GPUGems2なんかでは丸々1章使って詳細に解説されているネタなんだが・・・。 半透明のモデルはそりゃ無理な話だが、極端なはなし草原で草を1本ずつDPで植えていくのか?っつー話だ。
都市伝説でnvやatiがgdc2006まで来て "Often reducing draw calls isn’t trivial" "You can think of this as pretty much a fixed overhead per Draw call in DX9" なんて言わないよ。"Most DX9 games are CPU bound"だってさ。 そ れ に 2 D ス プ ラ イ ト の 話 だ ろ ?
どっちでもいいから実装して完成品作った奴だけが勝ち 小手先の手法であーだこーだいってる頭でっかちは生きてる価値無いから死んでね
何もゲームを作るだけが全てでもないと思うのだが。
某ゲーム会社の面接では上で騒いでるようなことをわざとふる 食いついてきたら落とす それ知らないで暴れてるバカがTOKIWAにいたが ここにも10人ぐらい落とされるのがいそうだな
なんでそれが落とす基準になるんだ?
それが判らないうちは青いってこったな
>>903 全てを一括で描画しようと考えるからいかんのだよ。
無理なくまとめられる範囲で、なるべくまとめて描画しろってこと。
なんでそんなことになっているのかというと、全てはDrawPrimitiveの
オーバーヘッドが常識外れにでかいせい。
Vistaでは改善されるらしいので、3年後には都市伝説になってそうだが。
>>910 技術研究と仕事でのゲーム作りは別だと思ってたがそうじゃないんだなぁ・・・
仕事では60フレで回れば99%使ってようが動いてて締め切りに間に合えさえすればいいと思ってたよ。
まぁコンシューマーはマシンスペック固定だからPCみたいな最低スペックどうこうとか考えなくていいからか・・・。
( ゚д゚)ポカーン
>>911 3年程度じゃVista標準にはならない気がする。
Dx10はVistaでしか動作しないし全機能サポートしてないとDx10対応ビデオカードとはMSから認められないし、
ビデオカードとOS含めて変えざるを得ないほどの利点がなけりゃWin2kで十分だし・・・。
>912 おまいの読解力に乾杯
皮肉が通じないようだぞ
そんなん言われると照れるじゃないか。
ようやく読み終わったわ。いずれにしても、スプライト一つに一回DrawPrimitiveしてる奴は論外だろう…。
煽りじゃなくマジで分からないんだが、クリッピングと、DrawPrimitiveをまとめるってのは、普通同時にやることじゃね?
>>883 とか、俺が何か勘違いしてるのかな。
毎フレーム位置が変わる2Dなら、動的バッファを用意して、クリッピングやアルファ別を考慮しつつ、バッファに書き込み、
有る程度まとまったらDrawPrimitiveで描きだしていく、で良い気がするんだが。
なんかヘルプか何かに、頂点数別の最適サンプルあったよな?
それで思い出した。昔どこかでLockが遅いから、2DスプライトならUP系が良いってサイトがあったけど、
あれはDYNAMICで試してたのかな。
このスレはずいぶんハイレベルだな
2DSTGの弾を位置と角度を変えて2000発(確か蟲姫がこれぐらい)描画しようと思ったとき、 SDKのチュートリアルから学んだ者としてはSetTransform()とDrawPrimitive()のセットを 弾数分繰り返して描画するワケだが、これをTriangleListに直して1回で描画しろってワケか? これって現実的かぁ?
そりゃアホの子の実装だ。 スプライトの位置をSetTransform()で指定するんじゃなくて 自分で変換した頂点をバッファに突っ込むの。
SetTransform()で2Dの変換をやってることに感動した。
>SetTransform()で2Dの変換をやってることに感動した。 回転させようと思ったら普通にやるもんだと思ってたが
>>926 も、もしかしてまだ小学生とか?
だとしたら凄いじゃねぇか小学生でDirectXか!
俺なんてカーチャンの腹の中でSpriteによる描画速度について考えてたぞ
ならん
>>926 2Dなら移動も回転も拡大縮小も全部CPUでやって
それをバッファに突っ込んでDPでレンダリング汁。
2Dスプライトの回転も頂点シェーダでやらずに、 sin cosは遅いから三角関数テーブル使うんだと得意げになるスレはここですヵ?
DrawPrimitiveで一括で描画するとかいってる奴は @クリッピング処理を入れるために毎フレームVertexBufferを確保→解放するコスト(3Dでも2Dでも同じ) AZバッファを使った不透明ポリゴンの前→後描画処理ができない(3Dでも2Dでも同じ。2DだってZ値もたせればいいよね?) よりDrawPrimitiveで一括して描画するほうが速いとかいってる? @はビデオメモリが虫食い状態になるんじゃねーの? AはDrawPrimitiveに一括で入れちゃってるから恩恵はないよね。 なんでこれよりDrawPrimitive一括のほうが速いとか思ってるわけ?
>>933 念のため聞くけど(1)も(2)も釣りだよな?
情報斜め読みした聞きかじりの知識の「ふり」をした釣りだよな?
>>932 > 2Dスプライトの回転も頂点シェーダでやらずに
何を言ってるんだ? シェーダ内でアフィン変換をやらせようとすると
スプライト毎にDPが必要(ジオメトリインスタンシングで解決できるが)
それなら自前で変換してDP減らした方が遥かに負荷が低い、というだけの話だぞ?
>>933 1 -> そんなの必要ないし。
2 -> フィルレート稼ぎ? DP一括でも普通にできるけど?
そもそもフィルが少なくしかもほとんど半透明(とゆーか抜き色)の
スプライトが前にくる2DゲーでZソートは微妙。
Zバッファが勿体無いから俺は切る。
だめだ、面白すぎるw 全角英数字ってことはもしかして883なのか これにマジレスしてた俺とおまえら乙
1)D3DLOCK_DISCARDが何のためにあると思ってるんだ? 2)ソートの不要なオブジェクトをインスタンス化すればいいだけじゃん。 おまえさんの作るゲームは画面上の全オブジェクトが半透明でソートが必要なのかい? 大抵は抜き色+アルファテストで片付くけど。 -------------------------------------------------------------------------- Octorber 2004のドキュメントから抜粋 複数インスタンスのジオメトリの効率的な描画 多くのオブジェクトが同じジオメトリを使うようなシーンがある場合に、そのジオメトリのインスタンスを異なる向き、サイズ、色などで数多く描画できます。 レンダラに提供する必要のあるデータ量を低減できるので、パフォーマンスを大幅に向上できます。 -------------------------------------------------------------------------- 上の機能はちゃんとハードウェアで頂点バッファの連結なんかも実装されているし、 専用のAPIやサンプルのソースコードも掲載されている。 てかコレ以上釣られても不毛な気がしてきた。
>>933 については、他人に難癖つけるレベルじゃないと思うので無視した方が良いだろう。
言ってることが無茶苦茶。本人も良く分かってないんじゃないか。
@ものすごい勢いで確保と解放を繰り返すイメージで怖がってんだろうけど、
過去の遺物の時代を引きずったジジイプログラマの妄想だな。
Dynamicの頂点バッファをLockして返ってくるアドレスが次回も同じアドレスが来る保障がないだろ。
DirectXは当たり前のようにそういう設計なんだよ。
頂点バッファにいろいろ詰め込むとZバッファが効かないと思い込んでるのもアレ杉
2)は不透明のフィルレートの話か。 勘違いしてた。 まぁそんなところ気にするなら素直にオクリュージョンカリング実装すればいいと思うんだが。 ハードウェアで実装されてるしサンプルもソース付きで公開されてたし。
真面目に教えて欲しいんだけど 二つの離れた三角形を一筆書きってできんの?
三角形(A,B,C)と三角形(D,E,F)があったときに、 TRIANGLE_LISTなら→A-B-C-D-E-F。 TRIANGLE_STRIPなら→A-B-C-C-D-D-E-F。
ちと説明足りんかったか。 TRIANGLE_STRIPの方は実際には A,B,C B,C,C C,C,D C,D,D D,D,E D,E,F って感じで6個の三角形が描画されることになるけど、 同一頂点が含まれる(B,C,C)(C,C,D)(C,D,D)(D,D,E)は 面積が0だから実際には途中ではじかれてレンダリングされない。 D3DXConvertMeshSubsetToSingleStrip()もそんな感じでストリップとストリップを連結して1つにしてる。
最近流れが速いね
アフォがくだらない事を必死に語ってるからな
>>937 それってShader3.0必要って書いてあるよ
庶民には関係ない話だお
>>935 >DP一括でも普通にできるけど?
どうやるの?
947 :
940 :2006/04/11(火) 23:02:14
>941-942 説明サンクソ くっつけてSTRIPって手法は納得なんだけど、なんか見えない三角を用意するってのが かなり冗長な気が…この手法で高速化の恩恵って得られるもんなのだろうか…
>>938 はぁ?
結局、頂点分のメモリをビデオメモリに確保→解放する処理は変わらないんだろ?
普通に遅いよ。
なんで一度ビデオメモリに用意したVertexBufferを解放しちゃうような設計で速度がでるんだよ。
なんのために確保させてるんだかまったく理解できない。
アホか。
>>947 その場面場面で測って最適値を探すしかない。
結局つなげて描画なんてやるわけだから、ストリップが短けりゃ恩恵は無いし、
あんまりでかい物体なら今度はクリッピングの恩恵がうけられない。
グラボはうけとった頂点分の計算をしなけりゃならん。
950 :
940 :2006/04/11(火) 23:09:43
>>949 だよねぇ…なんか面倒なだけっぽい
素直にLISTのほうでやりまする
ノシ
>>949 受け取った分の頂点を処理しなければならないのはまったくその通りなんだが、
昨今のビデオカードで頂点処理がネックになることはまず有り得ない。
大抵の場合でネックになるのはピクセルシェーダーかCPUだよ。
2Dのだけど毎フレーム頂点バッファをLock()してDPしてるサンプル。
1スプライトずつDPするのと全部まとめてからDPするやつの比較ね。
ttp://up.spawn.jp/file/up16784.zip
953 :
951 :2006/04/11(火) 23:32:15
>>953 なんかちがくね?
DrawPrimitive毎回呼び出す方はシーンの始めに
VertexBufferで確保しないと比較になんなくね?
つーか、それで速かったとしてもクリッピングとフィルレートの問題にはカスリもしないじゃん。
何がいいたいの?
Lunaの製作者、いい加減にオブジェクト指向理解しろよ マスターヘッダでインクルードファイルまとめ読みするの馬鹿っぽいからヤメロよ
単にDP呼び出しの負荷を考えたサンプルじゃね? それにDxのドキュメントにも事前に十分なサイズのバッファを確保しておくと 書かれてるし毎フレームVB作り直しなんて実装問わず必要ないだろう。
>>955 それ本来は.lib形式で配布されてるから.hはひとつになってるんじゃねーの?
>>956 はぁ?なにいってるのか全くわからない。
DrawPrimitive一括描画の人はどうやってクリッピングしてるの?
クリッピングは毎フレームやらなきゃいけない処理でしょ?
DrawPrimitiveで一括で描画するにしても、クリッピング処理で絞り込んだ頂点だけを対象にするんでしょ?
フレーム毎になんのオブジェクトの頂点が描画対象になるかわからないじゃん。
つーことは、VertexBufferを毎フレーム確保し直すか。
すでに用意してあるVertexBufferをロックして描き変えるかしなきゃいけないってことだろ?
>>957 うざ
ソース付けてるのにlib形式で配布する意味がわからん。
面倒なだけじゃん。
あと、俺の環境ではコンパイル通らなかったな。どうでもいいけど。
んなこた本人に聞け。スレ違いだ。
>>958 だから最初に確保したバッファに必要なものだけ突っ込んでいくんだろ?
ロックして最初からまた書けばいいんじゃ?
確保し直しとか騒いでるアホはVertexBufferの使い方を理解してないから、 みんな無視した方がいいと思う。
全くだ、しかし笑いがとまんね 1フレーム毎にバッファ確保なんて、一回悟れば恥ずかしくて引き下がるかと思いきや…凄いなw
うちの環境で以前計測したときはDPは一定頂点数以下は できるだけまとめた方がそのまま速くなるけど 一定頂点数超えたらまとめるより分割したほうが速くなるという結果が出た
ふりだしにもどる
>>963 ちがうな。
ロックして一度クリアした後で、もう一度書かなければならないはずだろ。
しかも、ロックする動作ってのはビデオメモリからの読み込みが発生するからオーバーヘッドはでかい。
アホか。
よし、わかった。 LPD3DXEFFECT effect; effect->SetValue でシェーダ使って直接座標を渡すってのはどうだ? Lockしなくてもできるぞ。
>>969 だから馬鹿なんだ
WRITEONLYとかDISCARDのフラグの意味も使い方も分かってない
>>972 そのフラグって「ちょっとましになる」程度でしょw
2DSTG限定ならクリッピング必要ないし、フィルレートも全部アルファ物だからたしかに無意味だなw
>>973 「ちょっとましになる」が知識のすべてだとしたら、やはり馬鹿だな。
動的なリソースっていうのは、同じバッファを使ったDrawPrimitiveの動作の完了を待たずに
バッファをロックしてデータを埋めてこうっていう考え方なわけ。そのためのフラグ。
ここは知ったかが無知を曝け出しながら無駄な討論をするスレだからしょうがない。
>>962 基本的にプログラムの最初の方で多めにバッファ確保して終了時に解放する
バッファ内の物を描画する時はDrawPrimitive()の第3引数で
プリミティブの数を指定すれば必要な分しか描画されないだろ
毎フレーム確保解放なんてアホ
>>973 がかわいそう過ぎる・・・・
WRITEONLYフラグは書き込みしかしないという指定。
つまり一切の読み込み「ビデオメモリからの読み出しはしない」という指定。
ロックはそのときのVBのメモリアドレスを取得するだけ。
DISCARDフラグを指定してる場合は描画が完了してなければ他のアドレスを返してくるために、
前のDPが完了しているかどうかは気にする必要なし。
つまり書き込み完了してなければ終わるまでブロックされるようなこともなし。
書き込み処理はシステム→ビデオメモリのためDMAで高速に処理される。
VBにまとめてから書けというのはM$のnVidiaもATiも口を揃えていっている事で、
各社それに対応したハードウェア仕様、APIがきちんと用意されている。
Dx8の頃からこのへんは常識になってると思ったんだが。
なんだかんだで勉強になるな
良い具合のバカが暴れてくれると今更聞けない常識が聞けて勉強になるな
馬鹿なのか、常識なのか、それを見極める頭を持ってないと何の意味もない訳だが。
それもそうだ
ベクトル v0 v1 v2 のスカラ3重積 float を求めたいのですが、どうやったら良いでしょうか?
D3DXで行列式でも求めろ
VERTEX全部一気書きの場合は、テクスチャを個別に 指定できないんじゃないの?
だからでかいテクスチャにパーツ詰め込むでしょ。 テクスチャサイズがでかいからといっていまや大してネックにはならないとATiだかがいっとったし。
今は大体 1024 x 1024 位? ボードによっては 4096 x 4096 とかあるけどね。
1024×1024だと32bitで4Mでしょ。 何種類も詰め込むと、古いビデオカードできつくない?
テクスチャばらしても総量一緒じゃないか? それにDirectXがそのへんの管理してくれるから不要なものを削除して 必要になったらVRAMにロードするようになってるんじゃなかった? ミップマップ使ってる時に下のレベルから使うようにしてくれるかはワカンネ。 今はDXTで圧縮のテクスチャも3Dなら普通に使われてるし。 DirectX9のドライバが用意されててVRAM16MBないってのもレアケースだろうしなぁ・・・
>>955 いまどきオブジェクト指向って……
ひどい時代遅れだ
これからの時代は構造化プログラミングだよな
うちの会社はいまだにC言語ONLYだったりする
>>978 意味がわかんない。
>ロックはそのときのVBのメモリアドレスを取得するだけ。
>DISCARDフラグを指定してる場合は描画が完了してなければ他のアドレスを返してくるために
DISCARDフラグを指定している場合はロックして書き込みしているときにどこに書きこんでるって言ってる?
ダイクストラ先生にGOTOは使っちゃ駄目って怒られたお
こいつ2Dゲー組んだことねえな、とは思ってたが プログラムの経験すら疑わしいな、これじゃ。
>>995 >他のアドレスを返してくるために
っていってるんだから「他のアドレス」なんだろうけどどこなの?
>>993 頂点バッファおよびインデックス バッファの場合、アプリケーションはバッファ全体を破棄します。
新しいメモリ領域へのポインタが返されるので、ダイレクト メモリ アクセス (DMA) と古い領域からのレンダリングが機能停止することはありません。
>>997 結局新しく確保してんじゃんw
どのへんが高速なんだよw
999 :
デフォルトの名無しさん :2006/04/13(木) 01:49:02
お、なんかいいこと思いついたぞ。 DrawPrimitiveのVertexBufferを一括確保してる奴等さ、 一括確保するVertexBufferを2つ用意してフレームごとに交互に使えば もしかして速いんじゃねぇの?
フレームごとじゃないか。 DrawPrimitiveごとか。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。