【C++】 DirectX初心者質問スレ Part15 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part14 【C】
http://pc11.2ch.net/test/read.cgi/tech/1189257706/
2 :
1 :2007/11/27(火) 16:57:10
3 :
1 :2007/11/27(火) 18:28:32
次スレがなかったようなので、適当に建てました。 14のヤツをそのまま(前スレだけ変えた)持ってきたので、必要なヤツは↓で追加してくれ。
おつ
DirectXのアプリケーションウィザードってVisualStudio2005じゃ使えないのでしょうか?
使えないし、使う必要性もない。
SDKのサンプルに入ってる DXUT使えば同じくらい低コストで導入できるんじゃね?
8 :
5 :2007/11/29(木) 18:45:59
>>6 それを使わないとほとんどの内容がムダになってしまう本を読んでいるんですよ・・・。
>>7 ・・・さっきネットオークションで旧バージョンのVSを3万近くで入札しちゃってそのまま
落札しそうなんですが、すっごいムダなことしてしまったでしょうか(多汗)
ソフトじゃなくて本を変えればいいのに
質問です 現在STGを作っていてBGMとSE再生にDirectMusicを使っています BGMに10秒程度のwaveデータをループ再生で使用しているのですが FPSが60を下回る程度に重くなると頻繁に音飛びしてしまいます どうすれば音飛びをなくせますか?
11 :
5 :2007/11/29(木) 20:07:17
その書籍の名前は?
>>10 その程度の量ならDirectSoundでバッファに全部詰めてループ再生すべき
>>13 waveの再生にはDirectSoundの方が適していると言う事でしょうか。やってみます
15 :
5 :2007/11/29(木) 21:36:42
>>12 今給黎さんの書かれたDirectX9シェーダプログラミングブックという本です。
>>15 つーかお前50ページくらいしか読んでないだろ
その本もってるけど
ぜんぜんアプリケーションウィザードが必須って内容じゃないぞ
たぶんお前のこの本は早すぎる
もうちょっとWindowsプログラミングの知識をつけてからにしたほうがいいぞ
そもそも
アプリケーションウィザードが吐き出した
サンプルコードがついてるんだから
新規作成できなくてもサンプルコードをベースに
自分で書き直せばいいんだが
ウィザード?何それ? そんなもの使ったことないけど、今じゃDirectX10で開発している俺様が通りますよっと。
18 :
5 :2007/11/30(金) 00:19:06
>>16 72Pまで読みました。
まずはシェーダ記述の部分を学びたいので、それ以外の枠組み的なところはできるだけ
著者の説明に沿うカタチで進めたいんです。
そうしながらシェーダ記述が構造全体の中のどの位置でどのように働くかの理解も深まると
期待しています。
サンプルコードはうまく書き直せず、コンパイルが通りません。
というか.net 2002を落札しそうです・・・。
こんな単純な構造も扱えないなんて・・・
割り込みで質問すいません。Visual C++ 2005を使っているのですが、下記のプログラムを書いたところDirect3Dデバイスが作成されませんでした。 D3DCREATE_MIXED_VERTEXPROCESSINGの部分を色々いじってみたのですが駄目でしたorz どなたか解決策をご教授いただけたら助かります。 PCのスペックはCore2Duo E6600、Geforce 8600GTSです。 問題のところだけ抜粋してみました。 HRESULT InitD3d(HWND hWnd) { if( NULL == ( pD3d = Direct3DCreate9( D3D_SDK_VERSION ) ) ) { MessageBox(0,"Direct3Dの作成に失敗しました","",MB_OK); return E_FAIL; } D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.BackBufferFormat =D3DFMT_UNKNOWN; d3dpp.BackBufferCount=1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; if( FAILED( pD3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_MIXED_VERTEXPROCESSING , &d3dpp, &pDevice ) ) ) { MessageBox(0,"HALモードでDIRECT3Dデバイスを作成できません\nREFモードで再試行します",NULL,MB_OK); if( FAILED( pD3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd, D3DCREATE_MIXED_VERTEXPROCESSING , &d3dpp, &pDevice ) ) ) { MessageBox(0,"DIRECT3Dデバイスの作成に失敗しました",NULL,MB_OK); return E_FAIL; } }
>>18 >著者の説明に沿うカタチで進めたいんです。
進めたいっていうか知識がないから
そうするしか手段がないだけだろ
素直に入門書から入れって
その後にもう一度その本を読んだほうが絶対に身になるから
>>20 GeForce6世代以降だと
そもそもREFがサポートされてないボードもある
CapsViewerでReferenceがサポートされてるかチェック
8600なら頂点シェーダが使えるから
HALでD3DCREATE_HARDWARE_VERTEXPROCESSINGで作ればいいんじゃね?
もうちょっと汎用でつくるなら
頂点シェーダのバージョンを調べて
2.0以上ならD3DCREATE_HARDWARE_VERTEXPROCESSING
未満ならD3DCREATE_SOFTWARE_VERTEXPROCESSING
で切り替えるとか
初めて質問させていただきます。
Visual C++ 2005 Express Editionを使って「Microsoft DirectX SDK (Nov 2007)」をインストールしてパスも通しました。
解説HP等を巡ってサンプルをいじったりしていたのですが、
ttp://www.plustarnet.com/aspil/Programming/ ↑こちらの「スケルトンプログラム」を実行しようとすると
fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
という風なエラーが出てしまいます。
DirectXのIncludeフォルダの中にも'dmusici.h'というファイルは見つかりません。
インストールを失敗したかと思い、インストールしなおしましたが同じ結果になってしまいます。
Directxのバージョンとかは関係ないですよね?
よろしくお願いします。
24 :
22 :2007/11/30(金) 19:02:54
>>23 素早い回答ありがとうございます。
結果は見事エラーが消えてくれました!
ですが、コンパイラのほうでエラーが出たので修正にいそしみます・・・
22じゃないんだけどAugust 2007 DirectX SDKはMicrosoft DirectX SDK (Nov 2007)に上書きしていいの?
26 :
デフォルトの名無しさん :2007/11/30(金) 21:55:54
この本に付いてたソースを弄って現在DirectXについて勉強中です。
http://www.sbcr.jp/books/products/detail.asp?sku=4797329807 ソースうp(一部いらん事を追加してますが、WindowProcのif文だけコメントアウトしてもらえればOKです)
http://www.uploda.org/uporg1136704.zip.html 容量減らすためコンパイル済みファイルは削除しています。
うpした物のwindow.cpp内WindowProc関数から3Dオブジェクトの、とりあえずX軸とY軸のみの操作をさせようとしています。
そこで、WindowProc関数のswitchを使って、キーを押した際に矢印キー(37,38,39,40)ごとにx+1 やy+1みたいな方法で
移動させようとしていたのですが流石に3Dはこれでは無理だと気づいたため中止。
調べなおしていると、Scene.cpp内のScene::DrawでD3DXMatrixTranslationを使えば移動できるような事を見つけたのですが、
window.cppでのキー入力で得た情報にに基づいてScene.cppへy+1やx+1のような情報を送る方法がわかりませんでした。
どのようにすれば3Dオブジェクトを操作できるように出来るのか、どなたかお教え頂けませんか?
27 :
デフォルトの名無しさん :2007/11/30(金) 21:56:36
ちなみに、グローバル変数も使おうとしたんですけどなぜかダメでした。 ファイル構成は ・window.cpp ・Renderer.cpp Renderer.h ・Scene.cpp Scene.h Scene.hでグローバル変数x,yを宣言して、Scene.cppの最初にまず0入れて、 Window.cppのWindowProc内にて case WM_DOWN(): if(wParam==38){ ここにx+=1; } みたいな方法でグローバル変数操作しようとしたんですがだめっぽくて・・・どうすればいいんでしょうか。。
>>27 ここはWindowsプログラム初心者スレじゃない。
基礎からやり直せ。
Windowsプログラム以前の問題だな C言語そのものをよく理解してないだろ とりあえず WinMain内の // シーンオブジェクト Scene scene; をグローバルにして if (wParam == 37){ scene.x-=0.1f; } if (wParam == 38){ scene.y+=0.1f; } if (wParam == 39){ scene.x+=0.1f; } if (wParam == 40){ scene.y-=0.1f; } とすれば君のやりたいことはできるよ そんな設計でいいのかどうかは別として
ATI Radeon9700 + DirectX9.0cですが Direct3D、リファレンスデバイスのcaps.MaxActiveLightsがUINT_MAXを返します。 しかし、SetLightはそこまで大きいインデックスには対応していないらしく ある程度の値でエラーを返します。 これはバグってるんですかね?それともSetLightのインデックスの最大値は別の方法で 取得する必要があるんですか? また、Direct3D9の固定機能パイプラインで、テクスチャ座標値をそのままピクセル色として 出力することは可能ですか?ピクセルシェーダを使わないと無理でしょうか?
DirectXに関してはまったくの初心者なのですが、どうしても分からないことがあるので質問させて下さい。
DirectDrawEnumerateEx関数を用いて、DirectDrawの初期化前にデバイスを列挙しようとしているのですが、
Unicode版のDirectDrawEnumerateExW関数がE_NOTIMPLでエラー終了してしまいます。
Ascii版で同様のコードに書き換えると問題なく実行されるのですが、
どうしてUnicode版だけエラーが発生するのか、全く理由がわかりません。
(一応VCのデバッガでアセンブリをステップ実行して中を追ってみたところ、
Unicode版では分岐もなしに無条件returnしているように見受けられたのですが、
DirectXの呼び出し規約等はまったく知らないので、かなりの確率で私の勘違いかもしれません)
そこで質問なのですが、
1) DirectDrawEnumerateExは、互換性を考えると本来使うべきではない関数なのでしょうか。
2)みなさんは、DirectDrawでマルチモニタをサポートするとき、どのようにデバイスを列挙していますか。
DirectDrawEnumerateExについて詳しく説明している資料がほとんど見つからず、困っております。
どうかご教授いただければ幸いです。
OSはXPSP2で、開発環境はVC2005、DirectXは9.0c(およびJune 2007のSDK)をインストール済みです。
ddraw.dllは2004/08/04のバージョン5.03.2600.2180になっていました。
グラボはRadeon X700 Pro (ATI製ドライバ 2007/09/28 8.421.0.0)を使用しています。
簡単ですがレポートと再現コードをまとめておきました。
参考にご覧ください。
http://kissho.xii.jp/1/src/1jyou20706.zip.html
DirectSoundの質問です。 waveファイルを扱うとき、mmioOpenで開き、ファイル形式、チャンクのチェック等という処理をしていくと思います。 このファイルを開く処理の時、ハードディスク上のファイルではなく、メモリに読み込んだデータを 使いたいのですが、可能でしょうか?また、どのようにすればいいのでしょうか? 宜しくお願いします。
34 :
33 :2007/12/02(日) 02:31:42
自己解決しますた
>>10 で質問した者ですが、DirectSoundを使うことで音飛びしなくなりました。
しかし同時に複数の音が再生できないようなので、BGMはSound、SEはMusicで再生しています。
DirectSoundとDirectMusicを同時に使っても不具合が起こったりしないでしょうか?
質問です。 画像をキーボードを使って移動できるようにしたのですが、 Alt + Tabでデバイスをロストすると、画像はちゃんと表示されるのに、キーボードを使っての画像の移動ができなくなってしまいます。 何が原因でしょうか。 移動にはDirectInputを使って直接キーボードからの入力を取得しています。
>>36 画面が復帰したときに
Acquireしなおせばいいんじゃね?
DirectXの導入について質問です。
http://www.plustarnet.com/aspil/Programming/ を見ながらDirectXをBCC Developerで使おうとしているのですが、DirectX Novenber 2007をインストールしてもコントロールパネルにDirectXの項目が出てきません。
この状態で上記サイトのサンプルプログラム(2D編の始めのところにあるsampleSTG)が出来るかどうか試してみたのですが、エラーが大量に出て上手くいきません。
これはそもそもDirectXのインストールをやり直すべきなのでしょうか、それともサイトが古いから仕様が変わったのでしょうか。
>>38 いつからだったかコンパネにはでなくなったような
プログラムメニューの
DirectX Utilitiesの
DirectX Control Panelで同じのがみれるよ
ただNovenber2007は見てないのでなかったらすまん
おそらくエラーと上記は無関係
とりあえずincludeのパスは通したのかい?
通してエラーがでてるのなら
エラーコードをいくつか書いてみそ
話はそれからだ
VistaとD3DCREATE_SOFTWARE_VERTEXPROCESSINGについての質問です。 DirectXのサンプルプログラム SkinnedMesh を例であげますが、 Vista(GF8600GT,AthlonX2 5000+)だと D3DDEVTYPE_HALにおいて D3DCREATE_HARDWARE_VERTEXPROCESSINGと D3DCREATE_SOFTWARE_VERTEXPROCESSINGでのパフォーマンスの差が30倍以上出るのですが、 Vista?ではこんなものでしょうか? 自宅で確認できる他の環境では XP(R9600, P4 2.8G)だと倍程度の差しかでないようなので・・・ D3DCREATE_SOFTWARE_VERTEXPROCESSINGだけですが、 2000(onBoardGF4MX, Athlon 1G)の方がVistaの3倍以上のパフォーマンスが出ています。
>>40 すまん、お前の日本語はどうも理解しがたい
具体的に書いてくれ
42 :
40 :2007/12/04(火) 10:30:05
VistaでのSoftware vertex processing処理は遅いのでしょうか? Hardware vertex processingだと840fps以上でるのですが、 Software vertex processingだと28fps程度まで落ちます。 XPや2000だと性能の低いGPUを使ってSoftware vertex processingを指定しても 100fps前後が出るのに・・・ Vsitaなのか他の条件なのかがはっきりしなくて質問しました。 動作プログラムは DirectXのサンプルプログラム SkinnedMesh です。
28は遅すぎる REFで動いてないか?
あとSDKのライブラリのリンクは きちんとx64のほうを指定しているのかい?
45 :
40 :2007/12/04(火) 11:56:04
REFだと1fps程度ですね。 x64でリンクってのは、この場合はサンプルexeなので SDK付属のexeを実行してるだけです。 参考までに、Vista環境の方で、どの程度のfpsが出るのでしょうか?
ノートですまんが 32bitVista Cor2DuoT7500 GeForce8600GTM スキニングのタイプで多少は前後する SOFTWARE 300fps HARDWARE 350fps くらい
47 :
40 :2007/12/04(火) 14:25:29
どうやら私の環境だけのようですね。 自分がコーディングしたプログラムだけなら何かミスがあるのかなと考えたのですが、 SDK付属のサンプルexeでも同じような状態だったので・・・。 どなたかご指摘の点とかないでしょうか? 一応、Debug/Retail Runtimeは確認しています。
48 :
デフォルトの名無しさん :2007/12/04(火) 18:59:52
初心者なので変なことを言ってたらすみません。 ゲームを作っているのですが、 キャラクターが壁などのオブジェクトにぶつかった時に進む方向を 自動で変えるにはどうしたらよいですか? 壁にぶつかる角度などで、向き変えたい方向が違うのでif文での場合わけがわかりません。 よろしくお願いします。
if (vector==0) { //右へ移動する //壁にぶつかると変数vectorの値を変える } else { //上へ移動する }
>>48 お前はDirectXとかうレベルではなく、それ以前の問題。
そんな初歩的なアルゴリズム、管質いってやってくれ。
51 :
デフォルトの名無しさん :2007/12/04(火) 19:40:16
3Dでやっていて、どのような角度で壁にぶつかっているのかがわかりません。 進む方向は回転行列を使って変えていて。。 バイオハザードの、壁にぶつかってもキャラクターは走っているのに、 ぶつかった時の入射角によって左右のどちらかに、 キャラクタの座標がずれていくようにしたいのですが。。
回転行列に使ってる角度はどこに消えたんだよw
「壁ずり」でググるんだ。 ここはDirectXの質問スレであって、ゲーム開発の質問スレじゃないんだ。 だからもう迷い込むなよ。
壁ずりを理解したら次は床ずりも理解してくれ
ライトを設定しないでも、読み込んだモデルは色付きで表示されて見える状態ですけど、 ライトの光が当たる部分だけ照らされて、当たらない部分は真っ暗にするにはどうすれば良いでしょうか?
>>55 すげぇ抽象的な質問だな
とりあえず
固定機能パイプラインでやるのか
ピクセルシェーダーでやるのかくらい書こうぜ
57 :
55 :2007/12/05(水) 23:24:22
59 :
デフォルトの名無しさん :2007/12/06(木) 09:58:02
【質問テンプレ】
[1] 授業単元: DirectX
[2] 問題文(含コード&リンク):サンプルソースを元に入力クラスを作成して、表示させた画像を動かす。
(車を動かすので、可能ならアクセルとブレーキを再現)
サンプルソースを下記にうpします。(mainとヘッダーがあるためzipファイルです。)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5415.zip [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: どちらでも可
[4] 期限: 2007年12月6日 17時
[5] その他の制限: 制限はなし
すっかり課題を忘れてて手をつけていない
よろしくお願いします
ここは宿題を片付けますスレではないんだが・・・ そもそもサンプルに不備がある 技術的な問題でなくたんなる初期化の問題 こんなの誰もやりたがらん いくらか出してくれるなら話は別だが
そもそも設計がおかしくね? DirectInputインターフェイスを親クラスで static宣言して 複数生成されるかもしれないデバイスを その子クラスで作るって 気持ちは分かるがいまいち再利用性に乏しいような いったいどこで初期化させるつもりなんだろう? 単に静的メンバの使い方の学習の一環でこんなことしてるのだろうか?
62 :
59 :2007/12/06(木) 13:52:40
>>60 、61
そうなんですね。
授業全く聞いてなかったから、何がなんだかわからなくて
うpしたファイル見て頂いただけでもありがたいです。
こんな授業に金出してるのか・・・。 しかも、聞いてなくて課題ができないとかって。 君、学校(?)に行く目的は課題の達成なの? それとも、学校に行くのが目的になってるの? どっちにしても、すでに健全な状態ではないよね。
プログラム実行時に Direct3D9: (ERROR) :Device cannot perform hardware processing. ValidateCreateDevice failed. って出るんですが原因と解決法とかわかりませんか? とりあえず見た目は正常に動いてるようには見えるんですが気になります。
何も無いところにエラーは出るはずないので 必ずそのエラーを吐いている関数があるはず とりあえずデバックで順次実行してみて そのエラーを吐いてる箇所を絞り込んでみたら?
俺にはハードウェアを(その環境が)サポートしてないっていうエラーに見えるんだけど。 エラーの発生源ってデバイスの初期化部分じゃないか? グラボを積んだ環境で試してみろよ。それかソフトウェアエミュレートに切り替えればいいはず。
68 :
デフォルトの名無しさん :2007/12/08(土) 16:12:52
自宅のノートパソコンでプログラムを起動すると起こるバグなのですが。 『アニメーションメッシュを表示した途端に、その他のただのメッシュやテクスチャが全て表示されなくなる』というバグです。 細かい状況は ・学校のデスクトップパソコンだと起こらない ・極端に軽いアニメーションメッシュの場合、起こらない ・アニメーションメッシュを読み込んだだけで、表示しないのなら起こらない ・アニメーションメッシュ自体は、一番最初に表示した1種類のみ何体でも表示できる ・一度表示すると途中からflgをFALSEにしてアニメーションメッシュを表示させなくしても、テクスチャなどは消えたまま ・一度表示するとアニメーションメッシュを解放して2週目に入ってアニメーションメッシュの読み込みすらしなくてもテクスチャなどは消えたまま ・zバッファをOFFにしたテクスチャだけは表示できる なので状況としては「一度でもアニメーションメッシュを表示させると何があってもテクスチャなどは消えたまま」 という状況です。 ほぼ間違いなく、アニメーションメッシュの表示部分が悪いというところまでは分かるのですが…。 要領を得ず、長文で申し訳ありませんが回答をいただけたら幸いです。
>>68 その自宅のノートのGPUはどこの会社のどのバージョンよ。
話からするとハードウェアに問題があるのは間違いなさそうだけど、公表されんといいようがない。
70 :
デフォルトの名無しさん :2007/12/08(土) 19:35:00
71 :
55 :2007/12/08(土) 19:40:45
>>70 単なるスペック不足
3Dの開発ができるVGAではないな
73 :
デフォルトの名無しさん :2007/12/08(土) 20:00:31
>>72 さん
やっぱりそうなんですか…。
ありがとうございました^−^
ただ、何とか「勝手に消す」→「カクカクでもいいから動く」ようにしたいのですが
そこの辺りはDirectX側で変更できないのでしょうか?
>>73 なんとも判断に困る。
ドライバとDXのバージョンは最新?最新でもノートのドライバは3Dを前提に考えて作ってないことが多いから、
バグが残ってるのかも。
俺の結論としては、オンボードであることと、一つ目のメッシュだけは表示できるというところからも、メモリ不足が一番怪しいと思う。
アニメーションメッシュって比較的メモリを食うはず。
対策としては、PCを変えるのが一番手っ取り早いけど、
それでもノートでしたいならBIOSの設定でSDRAMのグラフィックメモリ割り当てサイズを増やしてみたら?
一回最大割り当てでやってみて、それでも無理ならほかの要因かもしれん。
75 :
デフォルトの名無しさん :2007/12/08(土) 21:25:39
>>74 さん
とにかく、何か特殊な事をしなければ動かないということですよね。
ここはやっぱり「万能に」は諦めて説明書に「他の3Dゲームが出来る事を確認した上で起動をお願いします」
と注意書きを入れるべきですね…。
卒業生の代表作品として、体験入学参加者などに配られる予定なので
何とかして、せめてカクカクでもいいからどこでも動くようにしたかったんです。
76 :
74 :2007/12/08(土) 21:35:16
>>75 ものすごい面倒だが、もしかすると旧DirectXのバージョンでコンパイルすると行けるかもしれん。
俺はやったことないから保証は出来んが、DirectX8とかなら古いPCでも通るかも。
まあノートでゲームの性能を期待するなっていうのも本当だが。
77 :
68 :2007/12/08(土) 23:03:39
>>74 さん
返信が遅くなって申し訳ありません。
SDKの方は旧バージョンがあったのでやってみたのですがやはり動きませんでした。
僕のプログラムだとDirectX8ではちょっと動かない関数を使っているので無理です;
友人宅のデスクトップでは動いたので、恐らく動かないほうがおかしいのだとは思います。
前にこのノートパソコンにかなり軽めのMMOを入れてみたときに、本当にカクカクではあったのですが動きました。
なので、何か方法はあると思うのですが…。
新聞奨学生なので今日はもう眠らなくてはいけませんが、治らなかった場合、また後日より詳しい状態を調べた上で書かせていただきます。
それでは長らくお付き合いいただき、誠にありがとうございました。
> 本当にカクカクではあったのですが REF なんじゃろうなぁ...
79 :
デフォルトの名無しさん :2007/12/10(月) 20:15:23
HLSLでfor文回してるんですけど、 かなりの数ループできないんですが・・ 命令数って限られてるんでしょうか? そうだとしたらその理由は?
お前はもう終わってる。 マルチポストは死亡フラグなんだよ。
普通のプログラムでも1Gもサイズがあったら動かなくなるんじゃない?
82 :
デフォルトの名無しさん :2007/12/10(月) 21:43:51
マルチポストとはどういう意味?
浮気者
誠氏ね
ちょっと聞きたいのだけど、Directxと32Apiを組み合わせてプログラム を組めますか? Win32Apiのラジオボタン等の機能と組み合わせて作れれば良いなあ と思ったもので・・・
Win32APIっていうか GUIにアクセスして Windowsコントロールを描画することはできるけど GUIの速度がDirectXと比べ物にならないくらい低速だから DirectXを使うメリットを殺すことになる
>>87 有難うございます。
何と言うか漠然としすぎて何とも言え無いです。
出直してきます
自分のPCにはSDK9.0が入ってます。 あるサンプルをダウンロード、中を確認したらd3d8.hとd3dx8.hがインクルードされてたので これをd3d9.h、d3dx9.hに直し、追加の依存ファイルも8から9に直してコンパイル したら何百ものエラーが出てきました。 色々試したけど原因が全く分からないのでよろしければ誰か教えてください><
バリバリ原因が丸わかりだろ。
>>89 完全下位互換と言うわけではないからファイルが違うと全くの別物と考えたほうがいい。
同じファイル名でも中身は何度も添削しているから当時のバージョンじゃないと使えない場合もあるし。
>>91 そうだったんですか・・・
9.0以前のものは全て使えると思ってました^^:
ご返答ありがとうございました。
Xファイルに関して質問です。 ひとつのモデルに対し、複数のアニメーションをさせることはできるのでしょうか? たとえば、あるキャラクターで、Aを押したらパンチ、Bを押したらキック、という風にしたいのです。 やはり、パンチ用とキック用でXファイルをわけるしかないのでしょうか。
>>93 二つのアニメーションを連結して、それぞれのアニメーションでフレームを補正して使う。
例えば、AとBのアニメーションを連結したら、
Aの初めは、0
Bの真ん中は、0.75
っといった感じ。
>>93 できる
SDKサンプルのtinyも実は
複数アニメーションを持ったXファイルだ
ただし切り替えに関して詳しく説明されてるところはあまりない
ID3DXAnimationControllerでぐぐればヒントくらいはみつかるかも
HLSLを使ったサンプルでLPD3DXEFFECTのPassを使おうとしてエラーが出ます。 LPD3DXEFFECTにPassが無いのですが別のものに替わったのでしょうか。
BeginPass EndPass
メジャーバージョン変えずにAPI蛙のやめれって感じですよねほんと
どうしても1パス終了ごとに PassEndを入れさせたい「事情」があって 開始時の互換性をなくすことで 両方セットで変更させようとした。ってオチじゃねぇの?
地獄への道は善意で敷き詰められている。 職場では変更を極力抑えるのが美徳だけれど、その繰り返しが死の行軍を生み出すのが常である。
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); これらの引数を使いこなしたいんだけど分かりやすく解説している ページないべ?
これはひどい
104 :
デフォルトの名無しさん :2007/12/21(金) 11:00:39
ttp://wisdom.sakura.ne.jp/system/directx/dxg2.html ここのページ下部にある背景が緑の部分のソースをまるごとコピーして、VisualStudio2005の無料版でコンパイルしました。ところが
「fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?」
というエラーが出てコンパイルできません。エラーで検索してみたところ、ソースの最上段に #include "stdafx.h"
を加えればコンパイルが通るらしいので試してみた所
「fatal error C1083: include ファイルを開けません。'd3d8.h': No such file or directory」
と表示されてコンパイルが通りません。
DirectXSDKはさっき落とした最新版(サンプルみたらDirectX10も使えそう)で、パスはたぶん通ってます。
どうしたらコンパイルができるようになりますか?
まず、stdafx.h関連はスレ違い。DirectX以前の話なんで、よそで勉強して頂戴。 で、最新のDirectX SDKって何?November2007ならリリースノートに この DirectX SDK には次のコンポーネントは含まれていません * Direct3D8 およびそれ以前の全てのバージョン ってあるから、Direct3D8はサポート外なんじゃないの? もしインストールしたSDKのIncludeディレクトリにd3d8.hがあるんなら、Includeパスの設定を再確認しれ。 あと、少なくともJune2006にはd3d8.hは入ってるのを確認した。
106 :
デフォルトの名無しさん :2007/12/21(金) 20:10:39
November2007です、d3d8.hがなくて、代わりにd3d10.hが入ってました。 アンインストールしてJune2006入れてきます。ありがとうございました。
June2006にもd3dx10.hはあるけどね。 あと、そのページはDirectX8について記されてるんだけど DX10がやりたいならよそを見たほうが良いよ。 初期化まわりは8→9→10で全然変わったからやり直しになるし。 あと、DX10は動かすにはVistaがいるから。念のために。
108 :
デフォルトの名無しさん :2007/12/22(土) 22:01:46
すいません 2Dでゲーム作成をしているんですが LPD3DXSPRITE gSprite; // シーンの描画設定(2D画像の描画) RECT SrcRect = { a,b,120,120 }; // テクスチャ内でスプライトに使う範囲 D3DXVECTOR3 Center(0,0,0); // スプライト内の中心の位置 // 出力 gSprite->Draw(Texture, &SrcRect, &Center, NULL,D3DXCOLOR(0, 0, 0,0 )); 正常に絵を呼び出せるのですが Rectのrightとbottomに1とか100とか何か値を入れるだけで フレームレートが50も下がります・・・ &SrcRectの部分にNULLを入れてもなぜか50下がります ですが0を入れると正常に動作します なぜでしょうか、ご教授ありましたらお願いします
Direct3DでWM_PAINTで描くのはありですか?
110 :
デフォルトの名無しさん :2007/12/22(土) 22:07:59
108ですが、読み込み部分です //画像ファイル情報を取得 hr= D3DXGetImageInfoFromFile(name,&ImageInfo); Width= ImageInfo.Width; Height= ImageInfo.Height; // スプライトに表示するテクスチャの初期化 if ( !key ){ hr = D3DXCreateTextureFromFileEx( g_pD3DDevice, name, Width,Height,1,0, D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT, D3DX_DEFAULT,D3DCOLOR_ARGB(255,0,0,0),NULL,NULL,&Texture); }
111 :
108 :2007/12/22(土) 22:11:38
連投すいません 問題点の大元が判明いたしました D3DXCreateTextureFromFileEx( g_pD3DDevice, name, Width,Height,1,0, D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT, D3DX_DEFAULT,D3DCOLOR_ARGB(255,0,0,0),NULL,NULL,&Texture); } widthとheightに大きな値を入れると重くなりました 1とか10だと正常です・・・
プロファイリングしたら? D3DXSpriteなんてただでさえDirectXのバージョンに依存するからみんな回避してるのに、 この情報だけで分かるエスパーは居ないと思う。 つPIX for Windows つDevPartner Profiler まずは、どこで処理時間が落ちてるか見たほうが早いよ。
113 :
108 :2007/12/23(日) 09:34:36
>>112 ありがとうございます
その後の調べでどうも大きな絵を大量に呼び出すと落ちる様子
たとえ呼び出し側での大きさの縦横は1*1でも、元の絵が大きいと
どのPCどんな処理でも避けられないらしいので
妥協して少し絵の大きさを改善してみますm(_ _)m
お答えありがとうございました
てか、元のテクスチャのサイズがでかかったら パフォーマンスが落ちるのは当たり前じゃ
あなるほど
116 :
108 :2007/12/23(日) 11:43:53
>>114 いや、initでの呼び出しで重くなるのはわかるんですが
メインループの中では1*1でも重いんですよ・・・
表示で小さくしてるってことは 内部的に縮小してるってことだ LPD3DXSPRITEがどういうアルゴリズムで 拡縮してるかはしらんがバイリニアってことはないだろうし ぼけたりすることを考えるとなんらかのフィルターをかけているのは想像つく それを巨大なテクスチャに適用してるんだから重いのは当たり前
118 :
108 :2007/12/23(日) 12:11:19
私の書き方がわかりにくくてすいません 要は2000*2000の画像をinitで読み込んで 1*1の部分しか表示していないのにそれを10個ほど並べたら重いんです 3個くらいなら正常なんですが・・・・ フィルタ関連で重くなるようなら少し見直して見ますm(_ _)m ありがとうございました
だから・・・ >2000*2000の画像をinitで読み込んで この時点で重い処理がすべて終わってるわけではない 簡単に言うとここではVRAM上に 2000x2000の領域を確保して画像の色情報を格納してるだけ 基本的には毎回描画のたびにこの 2000x2000の領域にアクセスして そこの情報をバックバッファに転送することになる 元のサイズが大きければ大きいほど 転送のための時間がかかるし 何らかの処理をかければ当然重くなる 基本的には表示するサイズでテクスチャを作るのが普通
ビデオカードによっては 2048×2048にしたら多少は改善されるかもね
121 :
108 :2007/12/23(日) 13:17:50
>>119 >>120 そうですか・・・initで読み込んだら以降はもう関係ないものだと勘違いしておりました
スキル不足を痛感いたします
ご教授本当にありがとうございました
リファレンスでやってるだけでね?
たかだか2048のテクスチャで最近のビデオカードが遅くなるかね〜? なんか、致命的な間違いをしていると思われ。
124 :
108 :2007/12/23(日) 14:28:32
そもそもVRAMが足りなくなってて システムメモリ上に作られてるとか あるいは システムメモリとVRAMが共用になってて バス速度がボトルネックになってるとか
実はDX8で開発していますとか言い出すんじゃないだろうな。
127 :
デフォルトの名無しさん :2007/12/23(日) 17:59:09
DirectXを使ってWindowsのゲームを作りたいのですが、 お勧めの入門書を教えてもらえませんか? 作りたいのはビートマニアのように音とシンクした、 シューティングゲームです。 3Dグラフィックは使いません。
今のDirectXで3D使わずに絵描くのって無理じゃ
ぶっちゃけ DirectX関連で「これ1冊あれば」って本はないんだよなぁ 3〜4冊やってようやく あ、なんとなく分かってきたかも。となる どの本もだいたい「サンプルを動かすための」ソースになってるから なんでそうなってるのかが説明されてないし 応用しようとするととたんに動かなくなったり・・・ 数をこなすと何をやってるのかがだんだんわかってくるので 自分でいろいろ応用することができるようになる
130 :
127 :2007/12/23(日) 19:02:13
何も知らない状態で、何から始めるのがいいか、
アドバイスをもらいたいです。
>>128 3D描画しかできないんでしょうか?
3Dを使って2Dの描画ができるならいいんですが、
あまり効率がよくないならDirectXを使うこと自体考え直します。
メインでやりたいのは音の制御なので、描画はそんなに凝りません。
シューティングゲームなので、図形の衝突判定ができると便利かもしれませんが。
>>129 それじゃあ、とっかかりとして何を参考にするのがいいんでしょうか?
サンプルを見て数をこなして、少しずつ把握していくしかないんでしょうか?
>>130 ゲーム製作初心者なのか
DirectX初心者なのかにもよる
>>130 3Dを使って2Dの描画ができるならいいんですが
OK
>>130 DirectX9でスプライトが一番お手軽だと思われ。
>>130 シューティングゲーム製作本出てるぞ
それを参考にすれば?
>>124 なるほど。VRAM足りてないね。
1024*1024のA8R8G8B8テクスチャが大体4MByteね。
2048テクスチャだと4倍の16M。それが15個で240M。23個なら368M。
ちょっと無茶な設計になってると思われ。
不要なテクスチャは必要な時だけ確保するようにした方が良いし、
テクスチャは効率的に隙間無く活用した方が良いよ。
136 :
127 :2007/12/23(日) 21:10:44
>>131 >>131 ゲーム制作初心者です。プログラミング歴も1年程度です。
ただ、Javaで簡単なシューティングゲームを作ったことはあるので、
シューティングゲームのアルゴリズムに関してはだいたいどうやるか決めています。
分からないのは音の精密な制御で、ゲームの進行と正確にシンクさせる部分です。
その部分をどうやっていいのか、イマイチ当たりがつかない状況です。
>>136 入門書の枠からは外れてるかな。
再生時間'(再生位置)を取得させれば良いだけの話だけど、
この手のゲーム以外で使うことはほとんど無いため扱わない。
ストリーミングバッファの解説が載っていればそれを応用すれば出来ることに気付くかも知れんが。
広大なマップを作りたいんですが、バカ正直にモデルを作って読み込んだら物凄く重たくなってしまいました。 程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??
>>138 東京から大阪へ行くのに新幹線で行くのでしょうか? という質問をされてどう答えろと。
東京の六本木を歩いてるだけのシーンでも、ニューヨークとかパリとか地球全部描いてるわけか? そんな恐るべき無駄は止めた方がいい
141 :
138 :2007/12/24(月) 01:09:58
地面はまっ平ら 木はビルボードにしか見えないんだが
ワラタ
>>141 アプリケーションに正解なんて無いぜ?
>程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??
つまり
>>139 の例で言うと新幹線で行くのも正解だし、バスで行くのも正解、歩いていくのも正解だろ。
自分の案があるならそれを試した上で軽くなる方法が無いか聞かないと。
DX9 2007Nov .Net HLSLについての質問です。 以前PassがBeginPassとEndPassに変わったと言うやりとりがありましたが 上がっているHLSLのサンプルがことごとくエラーを出して正常に実行できません。 サンプルにSDKのバージョンを合わせれば動くでしょうが、そこから最新のバージョンに動かすように修正が出来ませんでした。 現在のバージョンで動くHLSLのシンプルなソースや解説をしているサイトは無いでしょうか。 せめてHLSL部分だけでもあればいいのですが、fxファイルが正常に読み込めエラーが出たりとか・・orz
きちんとヘルプが付いてきているだろ。 それで何が問題なんだ?
>>145 別にHLSLの部分は何もかわってないぞ
fxファイルが読み込めないのは
どっかに構文エラーがあるからじゃね?
>>145 >上がっているHLSLのサンプル
どこのサンプルだよ?
150 :
138 :2007/12/24(月) 12:31:45
>>144 分かりました。
ありがとうございました。
>>149 俺もうごかねぇや。
てか自前のでさえ動かなくなってた。
詳しく調べてないから分からんが仕様が数箇所で変更されてエラーが複雑化しているように思える。
ぶっちゃけ去年辺りのSDK使えばいいんじゃね?
VC++2005、windowsSDK、DirectX9 SDK(October 2006)の環境で
2Dの簡単なゲームを作ろうとしている所です
フルスクリーンモードでSetDialogBoxModeを使用している
全ソース付きのサンプルプログラムはどこかにありませんでしょうか?
できればフルスクリーンモードでのメニューバー表示のサンプルがあると助かります。
一応自分でもこれを実現するために
こちらの方のページを参考にしてほぼ丸写し状態でやってはみたのですが、
どうもメニューが表示されません。
ttp://www.geocities.jp/is3000nx/reading/dev/dev.html ただ、SetDialogBoxModeを呼び出しても呼び出さなくても、
メニュー自体は存在しているようで、マウスで画面の上のあたりを
クリックなどしますと、瞬間的にメニューが現れ、メニューコマンドが実行されますが^^;
こちらに書いていない部分(DX初期化関連、ウィンドーモード、メッセージ処理etc…)
などで何か気をつける点でもあるのでしょうか???
あ、VC++2005はExpressEditionです。よろしくお願いします
板ポリゴンとかにテクスチャを貼ると、テクスチャが何故か右下にずれるのですが、何故なのでしょうか? どうすれば直りますか?
どうすれば直りますか?
間違いを修正する
どうすれば間違いを
どうやって貼りましたか?
161 :
デフォルトの名無しさん :2007/12/25(火) 09:11:08
DirectX9.0bSDK(2004October)付属サンプル2の、虹色の三角形表示プログラムについての質問です。 改造して四角形を表示させたいのですが、うまくいきません。 CUSTOMVERTEX vertices[] = に { 50.0f, 50.0f, 0.5f, 1.0f, 0xff0000ff, }, を追加することで頂点を4つにし、 Void Render()内の g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); を g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); にすることで、2つの三角形を連続して描画し、結果的に四角形になるかと思ったのですが 三角形一つしか表示されません。 また、 g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); を g_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLESTRIP, 0, 0, 4, 0, 2 ); にすることで上記と同じ効果になるのかと思ったのですが、今度は三角形自体消えてしまいます。 どうしたら四角形が表示されますか?
カリングされてるんじゃないかね? SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE)
163 :
161 :2007/12/25(火) 10:00:08
できました! あと頂点の順番?がおかしかったみたいで |X| ←こんな形になったけど、頂点入れ替えたら四角形になりました! ありがとうございます!  ̄
は? 頂点の順序が間違ってたのが原因、って事?
165 :
161 :2007/12/25(火) 10:52:03
>>164 三角形が一つしか表示されないという問題は
->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
で解決したんですが、今度は頂点の順番がおかしいせいか欠けた四角形になったんです。
/| と |\ の三角形の組み合わせで |X| こんな形に
 ̄  ̄  ̄
>>161 どうでもいいけどoct2004は9.0cだったと思うが
疑問に思ったんだけど、四角形を描画する場合、頂点バッファを作ってDrawPrimitive()で描画するのと、 作らないでDrawPrimitiveUP()で描画するのとどっちが速いですか? 頂点バッファは頂点数が多いほど効果を発揮すると聞いたような気がするのですがどうなのでしょうか?
疑問に思ったんだけど、なんで自分で試さないんですか?
>>167 DrawPrimitiveUPのほうが早いですよ。
多くの方が様々なOSやビデオカードで検証済みです。
とか言ったらこいつは何も考えずにDrawPrimitiveUP使うんだろな。
>>169 ありがとうございます。
やはり、頂点バッファは頂点数が多いほど効果を発揮すると言う事でしょうか?
>>170 そうです。Microsoftが検証済みです。
>>152 私も同じ事やろうとしたけど、どうも上手くいかないですね
でもこの人の作ったゲームだと実装されているっぽいし…
本当にSetDialogBoxModeを使ってるのかなぁ
この関数使ってまともにメニューが表示できた人っていますか?
というかフルスクリーンのメニュー表示はみなさんどうやってます?
ステートブロックがいまいち良く理解できません。 1.普通のステート変更を最小限に抑えて変更する 2.(CreateStateBlock()で)キャプチャしたステートブロックを毎回適用する 3.カスタムステートシーケンス(BeginStateBlock()〜End...()まで)を適切に使用する と三つのやり方があると思うんですが、 何も考えずに2.のやり方でも効率的にできるんでしょうか。 それとも多少のやりくりは必要なんでしょうか。 ピュアデバイスだとステート変更は変更するたびに行われるんでしたっけ? ステートブロックの仕組みとかがわからないのでちょっと迷ってます。
効率いいかなんてやってみればわかるだろ。アホか
このスレっていったいどんな質問なら答えてくれるの?w
パラドックス
初心者ホイホイなのかな
初心者であろうがなかろうが、自分で試せるものを試さないってのは単なる怠慢だと思うが。 やり方が分からないんであれば、どっちが効率的?などと聞くんじゃなく素直にやり方そのものを質問すべき。
このスレいらねーなwwwww
レンダリングステートを変更する事は、結構重いコストとして扱われるので、 Dx6まではコロコロ変化させずに、同じレンダリングステートのメッシュやターゲットを纏めて レンダリングしたり、ステートの変化が最小になる順番でステート郡をレンダリングしてたりしたんだけど、 ステートブロックを使えば、複数のレンダリングステートの変化を一度にデバイスに適用出きるので、 上記の事をあまり意識しなくて良いレンダリングループが作れるようになったわけ。 でも、別にレンダリングするターゲットやステートの種類によってはステートブロックを使わなくても そんなに処理が重くならないのも事実で、自分が作成しているプログラムでステートの変更が 重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの? GPUとGPUへのバスの帯域、レンダリングするプリミティブの数、ステートの変更量といった要因が あって、トータルで考える必要があるから、なんでもかんでも管理するのは効率的ともいえないし、 大規模エンジンを作るのに、ステートの管理コストを嫌って管理しないのも効率が逆に悪くなるし。 ケースバイで。効率的ってのは目的が無いと決定しない項目だから。
>重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの? そうなんだが、それを自分で試そうとしない輩が多すぎるな
VisualC++2005、DirectX9.0c SDK、Windows SDKの環境です。 キャラクターのアニメーション等をさせる場合、 画面を毎秒60とか30フレームとかで更新、のような処理をしなければならないと思うのですが その毎回の画面の更新タイミングはどのような手順で取るのでしょうか
何を試せばいいのでしょうか
「ゲームループ」でぐぐれ
少し荒れてる状況で質問したのはタイミングが悪かったな
マルチコア設計の描画エンジンだとステートブロック使うのは問題外の糞www というnVidiaあたりのプレゼン資料なかったっけ
191 :
180 :2007/12/26(水) 20:58:26
>>190 まあ、実はステートブロックは、固定パイプライン時代の産物だから、基本的に
レンダリングステートなんてほとんど変えずに、シェーダでやれってのがDirectX9以降の
正しいGPUの使い方なんだと思う。
こんなの、実は悩むところじゃないと思うな。
固定パイプライン使ってても、レンダリングステートの変更なんて大した
負荷になってないっぽいもんね。所詮DirectX7時代の話だし。
一々ステートブロック作らなくても十分高速に動いてるし。
ステートブロックの解説も怪しいところあるから、普通利用を避けるんじゃないかな。
>>173 は何故こんな事に疑問を持ったのか、謎だ。
(どこかの処理で実際に遅くなった、とかならわかるけど。)
192 :
173 :2007/12/26(水) 23:38:39
え、いや、普通な感じで
実装前にセオリーとか聞きたいなって…荒れさせたようでごめん
忘れて
>>180 さん、なんかすいません…とても参考になりました…どうもでした
>>180 さん、ごめん、俺のせいで
193 :
173 :2007/12/26(水) 23:39:49
>>
>>180 さん、ごめん、俺のせいで
>>182 さん、ごめん、俺のせいで の間違いです ホント申し訳ないw
194 :
182 :2007/12/27(木) 00:22:56
>>185 ありがとうございます。_tWinMainの中でtimeGetTimeを使って
60分の1秒を数える方法を使ってみました
Windowsゲーは同期とかはキニシナイでいいんでしょうかね
>>193 いえいえキニシナイでください
196 :
182 :2007/12/27(木) 02:55:23
え?そうなんですか?
>>195 さんはどういった手順でやってるんでしょうか
俺は可変フレームレートのが好きだな 要は1フレームでどんだけ時間が進んだかで アニメーションの進行速度を変えればいいわけだから そんでフレームの終わりにフリップすれば
>>197 あれってどうやって実装してるの?
フレーム間の時間をグローバル変数にでも格納して参照するんだろうか。
199 :
デフォルトの名無しさん :2007/12/27(木) 04:22:17
DirectX9SDKを入れて、バージョンは8で開発したいんだけど、d3dx8.hとかないのね d3d8.hとかはあるのに。 どうすればいいんだろ。どっかでDirectX8SDKを見つけてこないと駄目かな?
9のOct2004だけど、d3dx8.hあるよ。
仕事でどうしても必要じゃなきゃ9使った方がいいと思うけど。 まあ9x系対応とかだとDx9のOct2006までじゃないとダメらしいが
>>199 リリースノートくらい読めよ・・せっかく日本語に訳してくれてるんだから。
------
この DirectX SDK には次のコンポーネントは含まれていません
Direct3D8 およびそれ以前の全てのバージョン
Direct3D RM
・・・・・・
これらのコンポーネントを使いたい開発者は、
MSDN から August 2007 DirectX SDK をダウンロードする必要があります。
~~~~~~~~~~~~~~~~~~~~~~~~~
まあオーガスト2007だと8で作る意味が全くなくなるけどな
204 :
デフォルトの名無しさん :2007/12/27(木) 11:12:48
DirectX9でゲームを作ってたんだけど、DirectX9の独自の機能使ってないし、誰でもすぐに遊べる様にしたいからDirectX8にしたかったのさ。
>>200 >>202 サンクス。
とりあえず古いバージョン拾ってみよう。古いバージョンで上書き出来ればいいけど
>>203 そうなの?
結局XPの初期状態とかで動かないのかな?
>>204 だからリリースノートを読めと。
----
すべてのプラットフォームでのインストール上の注意
・現在の DirectX SDK をインストールする前に、DirectX SDK の前バージョンを削除することを推奨します。
----
どのバージョンがどのOSに対応しているかも全てリリースノートに書かれている。
もう、ほっといた方がいいかと。
一度受けた注意を怠るわ、質問している立場なのに偉そうだわ。
d3dx8.hの話にしても、
>>104-105 で出てた話題なのに、
同じスレ内ですら検索かけてないし。
2Dの描画で描画数がかなり多くなるため(1フレームに3000程度の数字テクスチャを描画)頂点バッファを利用して 1フレームに頂点バッファ一括ロック→memcpy→アンロック→DrawIndexedPrimitive としているのですが、3000個描画するとシーン時間が6〜7ms程掛かってしまいます(それなりに良いスペックのPCで) 6000ポリゴン程度の描画でこんなに時間が掛かるはずがないと思うのですがやり方が間違っているのでしょうか?
なんかmemcpyがボトルネックになってそうだけど どの処理に一番時間がかかってるのか もうちょっと絞り込んだ方がいいんじゃない?
まず対照実験として、画面をクリアするだけで何も描画しない場合の速度を計るべきだと思う。
ロック/アンロックが臭いと思うな。変なロックは速度に影響でかいから。 ロックを止めて、ダミーバッファにmemcpyする処理に置き換えてフレームレートを計測したら? あと、頂点バッファは、まとめてる?ロックがボトルネックなら、頂点をまとめて1フレームにロックする回数を 1回にしてしまった方が良いよ。 それと、毎回コピーする頂点の計算処理は重くない?
ところで、そろそろ
>>152 の質問に回答してくれる方はおりませんでしょうか?
ネットを漁り、アキバでDirectX関連の参考書を読みふけりましたが
どこもこの問題についてはあえて避けてるようにしか思えません
SetDialogBoxModeをマスターされました神様、いらっしゃいましたらお願いします
とりあえず、フルスクリーンでメニューとダイアログが表示できるようになればいいので
いい解決方を知っている方でも大歓迎です
斜め投影した場合、投影されたCGがあえて歪んで見えるようにしたいです。 どこをいじればいいか教えてください。
>>211 全ソース付のサンプル、か。
google code search で SetDialogBoxMode で検索したら結構引っかかったんだけど、やってみた?
検索結果の始めのほうはラッパのヘッダとか意味ないのばっかだけど
結果の後の方まで見てみると結構有用っぽいのがちらほら。Lunaとかも引っかかってたり。
ただライブラリ系ばっかでサンプルになるかどうかは分からん。
214 :
207 :2007/12/27(木) 20:43:50
レスありがとうございます やはり描画部分が結構重いみたいです… 1フレーム当たりの時間が ロック/memcpy/Drawを一切しない → 80μs ロック→16000頂点分memcpy→アンロックでDrawしない → 450μs 一つ上の条件でスプライトを2000個描画 → 3210μs いずれも他の描画以外の処理を含む時間で、memcpyは実際には描く分だけのサイズで行うので最悪条件でテストしています
ロックしない/memcpyしない/アンロックしない/Drawする っていうのも測った方がいいと思う。 頂点データがないのはアレなんで、計測外で初期化時にでも放り込んでおいて。
PIXで、実際どのAPIが時間食ってるか調べてみたら? GPUが忙しいのか、CPUが忙しいのか、プログラムが悪くってどっちも 遊んでる状態になってるのか、それを切り分けないと始まんないと思う。 あと、スペックに対しての期待値がどれくらいで、3210はどの位そこから遅いのか? SDK付属ドキュメントの「Direct3D API 呼び出しの正確なプロファイル」あたりは一回読んでる?
>>211 今てきとーに使ってみたら一応表示はできるみたいだがのー。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER忘れてるとかそんなオチじゃないよね?
しかし案の定XPとVistaじゃ挙動違うっぽいし、あんまし深入りしたくねぇなこれ。
Dialogは普通に表示出来たけどメニューは あんまりメリット感じないから使った事無いや。
PIXの使い方がわからねぇ
おれもおれも まぁちょっとだけならわかるけど つっこんでは分からねぇ
助けて 頂点テクスチャフェッチのためにVertexShaderでtex2Dlod(Sampler,float4(In.tex,0,1))すると真っ黒になってしまいます float4(In.tex,0,0)、float4(0,0,0,1)などでも同様でした テクスチャのフォーマットはA32B32G32R32Fで、SM3.0にも対応しているのですが tex2Dlodなどでぐぐってみたところ、MSのフォーラムなどで似たような症例がありましたが解決策がよくわからず・・・ 原因に何か心当たりある方はいないでしょうか?
222 :
221 :2007/12/28(金) 04:29:27
ちなみにサンプラーは MinFilter = Point; MagFilter = Point; MipFilter = None; AddressU = Clamp; AddressV = Clamp; です
等高線の形どおりに厚紙を切って重ねると、立体地図が作れますよね この立体地図をプログラムで描画したいのですが、躓いてしまいました 今手元には等高線が書かれた白地図があるので 「等高線ごとに領域を分割し、各々に高さを与える」 といった処理にしようと思ったのですが、等高線ごとに領域を分割というのがどうしたらよいのか見当がつきません このような処理の実現のしかたを教えてください よろしくお願いします
ダイレクトX関係ないじゃんといいたいが ・等高線が作る一つの輪を1リングとし、リング毎の高さと領域情報を保持 ・高さの同じリングをまとめたものを1グループとして管理する ・グループ毎にY座標を変えて表示する でいいだろ もちろん、外壁も表示するのには各リングの輪郭線から頂点を自動算出して 外壁ポリゴンも作らんといかんけど
すみません 3次元空間内の物体をピック処理をして、マウスの移動量で移動させたいのですが ピックするところまでいったのですが その後マウスの移動分動かすのはどうしたらいいのかわかりません。 初期値→移動後のマウス座標を得て、それをどのように3次元空間の座標に戻すのか 視点が回転したときに、xyzの移動量と向きはどうしたらいいのか この二つがわからなくて壁に当たってしまいました。 ご指南お願いします
>>225 視点から注視点の面上にあるポイントを結んだ物がマウスポインタのベクトル。
そのベクトルを対象オブジェクトまで伸ばし、ベクトルが変化した分だけ移動させればいい。
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | お断りします | |________| ハ,,ハ || ( ゚ω゚)|| / づΦ
>>227 質問が抽象的すぎ
>斜め投影した場合
>投影されたCG
>歪んで
それぞれ具体的に
231 :
224 :2007/12/28(金) 17:42:08
>>230 山の事しか考えてなかったな
穴がある形状を考えるのを忘れてた
まあ、そもそも論として線だけ書かれたデータをそのまま読み込んで
処理しようとすんなら無理があるわな
232 :
デフォルトの名無しさん :2007/12/28(金) 18:33:17
頂点テクスチャフェッチ使えばできる 等高線の領域ごとにハイトデータで塗って 細分化した平面ポリゴンに適用すればできる 線のみからでもハイトデータを領域の関数で割り当てればできなくもない 自分ができないだけなのに威張ってるプログラマってカコワルイよね
すみません、始めたばかりのところで理解できないのがあるのですが デプスバッファの深度を書き込む/書き込まない というのがあったのですが、そうすることでどうなるのでしょうか デプスバッファ、というバッファ(1枚?)にZ値を書き込むというのはわかったのですが 書き込まないと、そこはどうなるのでしょうか? いまいち何をしてるのか、したいのかが把握できなくて
抽象的すぎてすいませんでした。
Xファイルを読み込んでCGを画面の中央に描画しているのですが、
そのCGを映しているカメラの位置をキー操作で変更できるようにしています。
で、カメラの位置を変更した場合に、
http://www.beamax.co.jp/Projec/PROJECframe.html の「斜め投影」の項にあるように歪んでみえるようにしたいのです。
D3DXMatrixIdentity(&m_view);
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( cameraX, cameraY, cameraZ),//カメラの位置
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),//カメラの向き
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));//カメラの傾き
pD3DDevice->SetTransform(D3DTS_VIEW, &m_view);
一部ですが今こんな感じでカメラ配置をしています。
cameraX,cameraY,cameraZ はキー操作で増減するようにしています。
プログラムは、ソフトバンクの「DirectXゲームグラフィックスプログラミングVer.2.1Vista」という本を参考にしています。
よろしくお願いします。
>>233 最終的にスクリーンに描画するときに
各ピクセルに色を塗ると同時にそこにある物体が
カメラからどれくらいの距離にあるかをZバッファに記録しておく
そうすると
別の物体を同じピクセルに描画しようとしたときに
Zバッファの値を参照して
以前の値よりカメラに近ければ
新たな色を塗りZバッファの値も書き直す
以前より奥にあるものなら色をぬらない、という処理が可能になる
これをしないと後から描画したものでどんどん色を上書してしまうので
奥にあるはずのものが手前にあるものの上に描画されてしまう
したがって描画するときに奥にあるものから描画するというようなソート処理が必要になる
>>234 それはビューの設定とは無関係
カメラの位置を変えたって、そんな変化は起こさないだろ
オブジェクト側を調整しろ
>>237 さん 回答ありがとうございます
つまり
______
|近 遠 近 …
|
Z値が書き込まれていって、それを参照するわけですね。
これは2次元平面に射影された状態ですよね
ある物体○△□が 奥行き方向に1列に並んでたとき
物体ごとにデプスバッファに
○ 書き込む 遠い
△ 書き込まない ↓
□ 書き込まない 近い
としたら、最終的に一番近いのは□ですが、○が描画される、ということになるのですよね?
>>232 ?
線のみから求めてるわけじゃないじゃん
結局手動で山と穴の区別をつけたデータが必要だろ?
241 :
223 :2007/12/28(金) 22:31:06
>>223 です
皆さんありがとうございます
231さんが仰るように「線だけ書かれたデータをそのまま読み込んで処理」というものを想定していました
穴を含む形状については今は考えず、概形が出来上がった後に改めて考えることにします
頂点テクスチャフェッチなど初めてきく言葉が沢山あるので、まずは片端から調べてみます
ありがとうございました
>>239 違う
基本的に描画関数を呼んだ順に描画されるので
○△□の順番で描画した場合は問題ないが
□△○や△□○の順で描画した場合
一番遠いところにあるはずの○が一番上に描画されてしまう
それを防ぐために先に近いものが描画されていたら
それより遠いものを描画しないためのもの
>>242 さん
何度もありがとうございます。その点は理解できました。
描画の時にデプスバッファに書き込む物体と
書き込まない物体が混在したときにどうなるのでしょうか。
そこがわからなくて。
最終的にデプスバッファに書き込んでいる物体がちゃんとならんで
デプスバッファに書き込まない物体は描画順ということになるのですよね
>>213 >>217 ありがとうございます
そのオプションをつけてウィンドウスタイルなどをいじってみたら、
開発環境のXPマシンだと、一応は表示されるようにはなりました
ですが、フルスクリーン→ウィンドウへと切り替えた場合に
ウィンドウ化しなかったり、古い98マシンで試してみた所
メニューを表示した瞬間に画面が激しくちらつくようになってしまったり
ダイアログは表示されなかったりと、挙動が酷くおかしいようです
とりあえずもう少しだけ教えていただいたサンプル等と見比べて
頑張ってみようと思います
最近のエロゲーとか、ホントこれどうやってるんでしょう?
やっぱり、DirectXで描画したなんちゃってメニュー&ダイアログなんですかねぇ
そもそも標準のメニューを使っているようなエロゲーはDirect3Dなど使っていない。
いや最近のエロゲは結構DirectX使ってるよ とりあえず今入ってるはぴねすってエロゲーはDirectXで動作してるし フルスクリーンメニューもちゃんと出てる
もはや3Dも2DもDirectGraphicsで統合されてるし
メニューやダイアログを表示中に ゲーム画面が変化しているやつは見た事無いから、 そこに解決の糸口があるんじゃないかな。
メニューループにはいったら普通に他は止まるだろ
まさかとは思うが、メニューがある場所に、自分で別の物を描画しておきながら、 ちらつくとか表示されないとか馬鹿なことをぬかしているわけじゃないよな?
>>250 ちらつく、というのはWin98環境の方だけで、XPでは画面上に
しっかりと表示されているので、それはないかと思います
>>248 いくつかフルスクリーンメニューのあるゲームを起動してみたところ
どうもメニューが出た時に画面が下にずれているものが多いようです
なんとなく思うのは、これはDirectXでのフルスクリーンモードではなくて
実際にはウィンドウモードなのではないかと。
画面いっぱいのクライアント領域をもつメニュー付きの通常ウィンドウを作って、
必要に応じてウィンドウを縦方向にずらしてメニュー表示しているのでは?
それが可能だとすると、環境によって挙動があやしげなSetDialogModeに
たよるよりも安定しそうな気もします
SetDialogModeはおいといて、まずこの方法でできるかどうか試してみようかと思います
システムに依存することは止めたらどうかね?
となるとダイレクトXなんて使えたもんじゃありませんな
システムに依存しないWindowsプログラムってどんなんだよ
問: 次の条件を満たすプログラムを作成せよ。(30点) 1) システムに依存しない 2) Windows上で動作する
256 :
デフォルトの名無しさん :2007/12/29(土) 14:06:22
Javaを使うお
Javaか
DirectXのサイトって数が多い分今の自分に合ってるの探すのがきつい・・・ せめてSDKの日付とかあって欲しい。 あの,Direct3Dのプログラミング始めたいんですが何をそろえればいいですか? バージョンは9.0でやろうとしているんですが、パッケージによって違いとかあるんですか? もう1週間くらいネットを這いずってるんですが良く分かりません・・・お願いします。
Javaだな
>>258 ネットが活用できないのなら本屋に行け。
さすがJavaだな
実際Javaって使い物になるの? 携帯ゲームなら有りかもしれないけどさ
何を作るかによる。 目的を定めずに手段だけを論じるのは愚か者の極み。
スレ違いの質問に対して答えをいただけただけでもありがたいと思え
>>258 もう書かれているがマジレスすると、AmazonでDirectXで検索して、
初心者向けで売れてる本を一冊でも買ったほうがいいと思う。
別に本が優れてるとかじゃなく、ネットの活用が上手くなくて、SDKについても何も分からないんであれば
本に頼るしかないだろう。
>>266 ご指南ありがとうございます。
どうか最後にこれだけ教えてもらえないでしょうか?
Microsoft DirectX SDK (November 2007)だけあればできますか?
Visual Studioが必要です。
パソコンも必要です
気力も
あとはJavaだな
>>267 Windows上でここに書き込んでいるんだとすれば、ソフトウェアとして最低限必要なのは開発環境とSDKだけ
Macなのですが、無理ですか?
Intel Mac なら Windows をインスコすればいい。
何この流れ 釣りは無視しろよ
Javaの人気に嫉妬
>>256 がJavaを使うなんて言ったばっかりに・・・
>>272 まじであざーした!
がんばってみます。
xファイルから得たポリゴンの任意の点の座標を変更する、ってのはどうやったらできる?
データが入っている場所の頂点データをいじれよ。
>>280 メッシュというと複雑そうにみえるが、中身は頂点バッファやインデックスバッファその他もろもろが集まってるだけ
なんでまずはロックなど頂点バッファの基本的な操作さえ覚えてしまえば後は流れ的にJavaが全て解決してくれる
JABAすげー
Japan Amateur Baseball Associationか
285 :
152 :2007/12/30(日) 01:39:13
こんばんは、
>>152 です。
画面いっぱいのウィンドウの方はできないこともなさそうな感じではありましたが
大きい→小さい画面への変更で、デスクトップアイコンや他アプリの位置等がずれるため
やめることにしました
その後もう一度SetDialogBoxModeのやり方でウィンドウのフラグをあれこれいじってみたら
フルスクリーン→ウィンドウでも上手くいくようになりました
うちにある家族用の別メーカーのXPマシンでも正常動作したようなので、
まあ、今時Win98で動かなくてもしょうがないかなぁと自分を納得させる事にしました
ささっていたビデオカードも、 GeForce4 MX440 SE というかなり昔のボードで
ドライバの配布すら終了している代物でしたので
このボードのドライバがDirectX9.0cに完全対応していなかったのかも知れません
質問に答えてくれた方々、どうもありがとうございました。
XP以上のみサポートでぶっちゃけ問題ないよ。
シェーダで3次元テクスチャを二つ載せようとしたのですが なぜか片方しか表示されません。 3次元テクスチャ1つと1次元テクスチャ1つは問題なかったのですが なぜ… やり方教えてください
DXライブラリみたいにビデオメモリに 直接アクセスするのってどうやるんでしょうか?
>>289 DirectXのSDKをインストールすると入ってるよ
>>290 前にインスコしたSDKには入ってなかったのです。
Microsoft Platform SDK for Windows Server 2003 R2
また400MBも落とすのに○時間も掛かるのはシンドイっす
_, ._ (;゚ Д゚)
PlatformSDKは、まぁ、ボケなんだろうけど サンプルはSDKのバージョンによって中身がかわってるからな 少なくともAugust2007には入ってなかった でも手元にあった9.0bSDKのCDには入ってたので デベロッパセンターに行って Updata〜とついてないSDKを落とせばたぶんついてくるんじゃね?
JAVAネタ、いい加減にしつこい
…JAVAですか。 確認する前に書き込んでしまいました
298 :
デフォルトの名無しさん :2007/12/31(月) 08:36:54
自機・フィールド共にXファイルから読み込んで、3Dゲームを作っています。 自機と地面や壁との衝突判定をさせたいんですが、Xファイルから自動的に描画されているので、自分でも壁の座標が分からないです。 壁や地面の座標はどうやって求めればいいんでしょうか?
そもそも自動で描画されるなどあり得ない。
300 :
298 :2007/12/31(月) 09:56:49
すみません。自動的というのは、頂点の座標を自分で把握していなくても描画ができるという意味です。 SDK Tutorial6のソースをほとんどそのまま利用しています。 計算式はぐぐれば出てくるんですが、計算するための座標がどこなのかが分かりません。
まさかチュートリアルの1から5を飛ばして6やってるって オチじゃあるまいな?
302 :
298 :2007/12/31(月) 10:10:29
! 4,5飛ばしてました。 今から見てきます。
たまにエスパーが現れるから困る
CheckDeviceMultiSampleType() でビデオカードがマルチサンプルに対応しているか調べたのですが、 自分のものだと対応していないことが分かりました。 ビデオカードのメーカーのページにはこれに対応しているかどうかの記述がないようですが、対応している ビデオカードはどのようにして見つければよいでしょうか?
引数間違っている可能性が高いような。 非対応見つけるほうが大変でね?
307 :
305 :2007/12/31(月) 17:41:23
>>306 え!?
自分のカードはGeForce 8600GTで、関数の引数は以下のようにしました。
m_pD3D->CheckDeviceMultiSampleType(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL , D3DFMT_R8G8B8,
FALSE,
D3DMULTISAMPLE_2_SAMPLES,
NULL ) ) )
戻り値は
D3DERR_NOTAVAILABLE
でした。
最初の引数を
pCaps->AdapterOrdinal
としても同じでした。
てか8600GTは D3DFMT_R8G8B8フォーマットをサポートしてるのかい? 最近のだと D3DFMT_X8R8G8B8とか D3DFMT_A8R8G8B8とか
>>307 D3DFMT_R8G8B8 なんて、バックバッファはおろか、テクスチャのフォーマットとしても
対応してるアダプタなんて現時点では存在しないぞ
素直に D3DFMT_X8R8G8B8 でやれ
310 :
305 :2007/12/31(月) 20:57:54
>>308 >>309 ありがとうございます。
D3DFMT_A8R8G8B8で対応してました。
実際の効果を見てみたのですが、通常のレンダーターゲットに描くときはしっかりと効いていました。
しかし、どうもアプリ内で用意したテクスチャをレンダーターゲットにすると、そこでは効かないようです。
なぜなら、レンダリングしたテクスチャを板ポリに貼り付けて通常のレンダーターゲットの全面に表示
すると、ジャギーが強く残っているからです。
(テクスチャ解像度はレンダリング対象の1/4と低いものの、AAがかかった痕跡が見られません)
テクスチャをレンダーターゲットにしたときもAAが効くようにするにはどうすれば良いでしょうか??
今DirectDrawとDirect3Dの機能をそれぞれクラス化してるんですけど、 このクラスのインスタンスを作るとき何をstaticにして何をインスタンス作ったら いいですか?Direct3D複数作ったらなんかやばいんでしょうか?
>>311 質問の仕方が悪すぎる。あんたのクラスの設計も具体的にやりたいことも
わからないのに答えられる問いではないよ。
とりあえず「Direct3D複数」がIDirect3D*とIDirect3DDevice*のこと言ってんなら
複数作成するのは稀だから、まだ余計なこと考えなくていいよ。
貴様のオナニーの仕方なんぞどうでもいい
何も表示されないのかウィンドウすら表示されないのかエラーで起動しないのか。 「どう」動かないのかを書きましょう。
316 :
314 :2008/01/01(火) 03:20:09
>>315 すみません。
デモのプログラムは起動するのですが、波のサンプルの場面で、波が発生せず、真平らな板ポリ
状態になっています。
波は随時勝手に発生するプログラムのはずなのですが・・・
317 :
311 :2008/01/01(火) 09:53:29
>>312 すいません。そしてありがとうございます
寝ぼけてて文章まとまってなかったんですが、
ふつうDirectDrawをウィンドウモードで使う場合はLPDIRECTDRAW+LPDIRECTDEVICEを1つ作って
サーフェイスを必要なだけ作ってプライマリに転送で十分ですよね?
ただウィンドウを複数作るならウィンドウ1つにつきLPDIRECTDRAW+LPDIRECTDEVICE1つ用意
ということでよろしいでしょうか?
あけましておめでとうございます。 こちらはManaged DirectXについての質問もOKでしょうか? Managed DirectXスレが11月で止まってしまっているので…。
>>316 確かにそのままだと動かないね
7900GTでは普通に動いてて
そっちで自分用に書き直したプログラムは
8600GTでも普通に動いているのだが・・・
どこ直したのか覚えてないや
320 :
314 :2008/01/01(火) 14:14:29
>>319 けっこう環境に左右されるみたいですね。
自前で組んでみようとしましたが挫折しました。
ありがとうございました。
>>321 OpenGL
// 行列モードに射影行列を選択
glMatrixMode(GL_PROJECTION);
// 射影行列を生成
glFrustum(,,,,
DirectX(固定機能パイプライン使用)
//射影行列を生成
D3DXMATRIX matProj ;
D3DXMatrixPerspectiveFovLH(&matproj,,,,,
//デバイスに射影行列を渡す
device->SetTransform(D3DTS_PROJECTION, &matProj);
頂点シェーダを使って行列変換をするなら
D3DTS_PROJECTIONは使わない
直接生成した行列をエフェクトに渡すなりすればいい
あ、すまない glFrustumなら D3DXMatrixPerspectiveOffCenterLH のほうが近いか
そして、さらに連投すまそ OpneGLは右手座標系だったね D3DXMatrixPerspectiveOffCenterRH ってことで
丁寧にありがとうございます。 つまづいたらまた質問させてください。
c#でMDIなフォームに対して、親フォーム、子フォーム、各コントロールを DirectXで描画しようとしてよく分からなくなっています。 SwapChainとかいうのを描画対象の分だけ作るというところまでは 調べたのですが、具体的にどういう風に書けば良いのかが分からず、解説サイトを 探しているのですが、ヒットしない状況です。 c#で、そこら辺を解説してあるサイトがありましたら、教えていただけますでしょうか。 よろしくお願いします。
すいません。 今、DirectX 9.0SDKを使っているのですが、 DirectX関連の書籍を購入したら、付属のCDに、DirectX SDK (Fedruary2007)が入ってました。 このバージョンをインストールした場合、9.0SDKを使ってた時に作った物が 動かなくなる可能性はあるでしょうか? Fedruary2007の方は、DirectX9に対応しているSDKのようなのですが、 何か心配なので教えてください。 両方共、殆ど同じ仕様なら良いのですが・・・
>>327 ほとんど同じではあるが
まったく一緒ではないんで動かなくなる可能性はある
メッシュやエフェクト関連で
互換性の無い変更があったので・・・・
まぁ、でもいつまでも旧バージョンに
しがみついていられるわけでもないので
いい機会だからさくっと修正してみるのも良いかもしれない
たいした変更ではないしね
>>328 そうですか。
ありがとうございます。
メッシュ機能も使ってるので、ちょっと恐いですが、
ほとんど同じなら、動かなくならない事を祈って新しい方に変更してみます。
DirectX9.0cで、モニタの解像度を切り替えられるようにしたいのですが、 プログラムが実行されるPCでの利用可能な解像度を取得するには どのようにすればいいのでしょうか
>>330 // 適当
int retW[32] ;
int retH[32] ;
// 引数は自分の調べたいアダプタとフォーマットで
int num = (IDirect3D9)->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8 ) ;
for ( int i = 0 ; i < num ; i++ ){
D3DDISPLAYMODE dm ;
DXUTGetD3DObject()->EnumAdapterModes ( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &dm ) ;
retW[i] = dm.Width ;
retH[i] = dm.Height ;
}
332 :
330 :2008/01/02(水) 16:59:51
DXUTGetD3DObject()は忘れてくれ そこは自分の作ったIDirect3D9インターフェースで
線分を描画する際、線分の太さを変更したいのですが可能でしょうか?
334 :
333 :2008/01/02(水) 19:05:16
自己破産しマスタ
>>331 ありがとうございます。うまくいきました
3Dを回転させるのにクォータニオンを使おうと考え色々と調べたのですが思うように回転してくれません。 D3DXQuaternionRotationAxisを使う時に回転の軸を設定する必要があるようなのですが、この軸の設定がいまいち分からず・・・。 どうかこの回転の軸の設定をどうすればいいのか教えてください、お願いします。
>>336 Matrixでyawrollpitchから生成して、matrix to quoternionで変換したら?
640×480の画面と800×600の画面で全く同じ画面イメージで描画したいのですが スクリーン座標を変換するのをDirectXが自動でやってくれるような設定はありますか? それともバックバッファサイズを統一するとか自前で座標変換するかしかないですか?
341 :
330 :2008/01/03(木) 16:02:08
>>339 ビューポートの設定をきちんとすれば
アス比も一緒だしまったく同じように描画されるはずだが
>>340 SetしてないものをどうやってGetするんだ?
てか、戻り値が何かくらいチェックして報告しろ
342 :
340 :2008/01/03(木) 16:52:23
>>341 早速ありがとうございます。m(_ _)m戻り値は引数エラーのコードでした。
アホな発言かもしれないですけど、もしかしてプライマリサーフェイスって
PCのディスプレイのサイズで作られるんですか?
>>341 レスありがとうございます。ですがさっぱりわかりません。
2Dのスプライトを同じようにしたいのですが
640×480と800×600の場合、ビューポートというのは
どのように設定すればよろしいのでしょうか?
ちなみに今だとD3DXMatrixTransformation2Dで2D座標を取得する際に 拡大比率のX,Yの値に ( 800 pixsel / 600 pixsel ) = 1.25 を指定しています ビューポートというのを設定するとこのやり方より処理は軽くなりますか?
800 / 640でしたorz
>>345 なんでそういう質問が出るのかがよくわからんが一般的に
D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = 640;
vp.Height = 480;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;
(device)->SetViewport(&vp));
と設定すれば
射影行列変換後の座標を
640x480のスクリーン座標に自動変換してくれる
どういう射影行列をつくってるのかは知らんが
射影行列変換後までの座標は
x=-1〜1、y=-1〜1、z=0〜1となり
どれらいのスクリーンに引き伸ばすのか?というのが
ビューポートだと思えばいい
>>346 たびたびすいません。それってスプライトの座標指定を-1〜1の座標で
指定しなくてはいけないと言う解釈でいいのでしょうか?
例えば640×480のフルスクリーンの画面上で、スプライトの座標をX = 64,y = 48という
座標で指定した場合の見た目の位置と同じところに
800×600のフルスクリーン画面上でx=64,y=48というスプライト座標を指定した時に
画面上の同じあたりの位置に表示したいという事なんですが
そこで示されてるようにビューポートを指定するとこのようにできるのですか?
ちょっと説明が足りませんでした スプライトの描画時にx=64、y=48という座標を指定した場合に 640×480の画面の場合はX=64、y=48 800×600の画面の場合はX=80、y=60の位置に描画したいという事です
350 :
298 :2008/01/04(金) 06:27:46
SDKのサンプル見たんですが、やっぱり分かりません・・・ SDK Tutorial6のトラの代わりに、地面に見立てた板ポリゴンのXファイルをロードしています。 地面との当たり判定は(自機の高さ - 自機から垂直に降ろした直線とポリゴンの交点の高さ) でできると思うんですが、"自機から垂直に降ろした直線とポリゴンの交点の高さ"の求め方がさっぱり分かりません。 かなり検索したんですが、数学的な解説しかしているサイトがなくて、肝心な、自分が分からない部分が書かれているサイトが見つかりません。 ヒントか答えか参考になるサイトがあったら教えてください。
Xの読み込みをD3DXに頼らないでやるところから始めろ。 そうやって怠けて手抜きをするから途中で詰まる。
352 :
298 :2008/01/04(金) 08:59:56
>>351 D3DXライブラリというやつですか?
なんか難しそうですがやってみます。
353 :
喜一 :2008/01/04(金) 14:12:47
くだらない質問なのですが・・・ DirectXをアップデートするにはどうしたらよいのでしょうか・・・
あ、ランタイム版はアンインストールの必要はないっぽいです
>>339 ,343,349
D3DXMatrixOrthoOffCenterLHで射影行列を設定すればいい。
画面の左上と右下の座標値を設定するだけ。
ワールド行列とビュー行列は単位行列にする。
頂点フォーマットは未変換のもの(rhw無し)を使う。
RHWのRHって何の略ですか? LookAtRHとかのRHとは別物ですよね?
reciprocal of homogeneous
レイプ変態わいせつの略です
システムメモリー上のサーフェイスに直接アクセスするときは Lockしなくていいってほんと?いきなりddsd.lpSurfaceにアクセスできる?
DirectX SDKをインストールしたんですけどインストールしたバスの場所が分かりません 一応{D¥Program}にインストールしたつもりですが{DIRECTX9SDK}が見つかりません {Redist}{Samples}{Utilities}{Developer Runtime}{Documentation}{Extras}{Include}{Lib}はあるんですけど プログラムの追加と削除には登録されてるみたいなんですけど肝心のバスが分かりません バスの調べかたなど知ってる方がいたら教えてください
VCを使ってたら知る必要もないけど別ので作るのかな SDKはあくまで金槌や釘などと同じく道具だから本体は無い。 重要なのはIncludeフォルダとLibフォルダで、まぁ説明書と目次みたいなものか。 IncludeフォルダとLibフォルダが分かっていれば、それぞれのパスを登録するだけでOK
レスありがとうございます もう1つ質問なんですけど、VC++で使うにはサブシステムのバス通さなきゃいけないと思うんですけど(ネットや書籍で書いてた) ですがdxsdk_november2007では勝手に登録してくれるんですか? インクルードファイルに{Include}が登録されてあったり ライブラリファイルには{Lib\x86}が登録されてるんです ちなみにインストール前は登録されてなかったです これはどういうことなのでしょか?この上に新しく登録しなきゃいけない?それとも自動で行われてるからやらなくていい? 分かる方いたら教えてください
別に説明書や目次が重複しても問題ないだろ、無駄なだけで。
なるほどじゃぁ登録します ありがとうございました
366 :
デフォルトの名無しさん :2008/01/05(土) 20:41:02
VisualStudio2003 Spoke VersionのMSDNライブラリにはVisualBasic以外のDirectXの解説を インストールできますか?VisualBasicしか検索でてこないので・・・ お願いします。
ビルドは正常終了するのにデバックだとエラーが出るんですけどどうしてなんでしょうか? エラー文は以下の通りです ------ ビルド開始: プロジェクト: MuscatBoy, 構成: Debug Win32 ------ コンパイルしています... StageMenu.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Stage4.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Stage3.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Stage2.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Stage1.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Ranking.cpp
D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory Option.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory MyGameLib.cpp D:\Program\Microsoft_DirectX_SDK(November2007)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800 d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\muscatboy\MyGameLib.h(16) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory コードを生成中... ビルドログは "file://d:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\BuildLog.htm" に保存されました。 MuscatBoy - エラー 8、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== よろしくお願いします
ビルド自体失敗してるやんw
見間違いしてましたビルドでも失敗してました ですがこれサンプルなので自分では一切さわってないものなんですけど・・・ サンプル自体糞ということですか?
>>368 SDkNovember2007から
DirectMusicをサポートしなくなった
てことはAugust 2007 DirectX SDKをDLしないといけないんですね 助かりましたありがとうございました
DirectMusicなくなっちゃったのか 音の再生はMusicしか使ってないと言うのに
374 :
デフォルトの名無しさん :2008/01/06(日) 11:57:29
一昨日最近アップされた(?)DirectX9.0C(4.09.0000.0904)ってやつに したんだけど、次の日からパソコンが立ち上がらなくなり(黒い画面で 左上に文字カーソルが点滅のまま)仕方ないので、F8で前回正常にっての 選んでから起動させたんだけど、今日完全に起動しなくなった・・・ 人によっては、最悪なケースになるのかな?
DirectX3位までは、ドライバまで置き換えられることがあって、 その結果起動しなくなったって話がたまにあったよね。
DirectX「3位」ってなんだろうと思った
d:\ゲーム製作案追加\ warota(w
>>374 ぶっちゃけDirectXのせいじゃないんじゃね?
ランタイム入れなおしたなら
再起動求められたはずだしそのときは正常起動したんだろ?
他になにかやらかしてないかよく思い出せ
あと一昨日アップされたやつなんてあったっけ?
>d:\ゲーム製作案追加\ ワロタw
>>380 おまえは何を言ってるんだ?とか思われてる予感。
DirectX7のDirectDrawのヘルプを見る限り、
そんな保証はどこにもされていない。
ただし、現実問題としてはできるらしい、と。
非Lock状態だからといって、わざわざアドレスを動かすような理由も無いし。
ちなみに
>>381 のサイトは既に6年以上も前の記事だから現状は不明。
仮にLockしたところで、パフォーマンスへの影響は無いに等しい気がする。
DirectMusicなくなったのかよ DirectShowでMP3とかしか流せなくなったのか?
DirectX9のサイトとか普通にあるけど
てか それこそ自分で試してみれば良いんでね?
所詮、現在のグラフィックカードは、IntelかAMDかnVidiaしかないも同然だから、 3種類試せばおkじゃね。
388 :
367 :2008/01/06(日) 21:19:00
August 2007 DirectX SDKをインストールしたのですがまたエラーがでました 分かる方いたら教えてください 'MuscatBoy.exe': 'D:\ゲーム製作案追加\アクションゲームプログラミング\マスカットボーイ\ソースファイル\MuscatBoy\Debug\MuscatBoy.exe' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。 'MuscatBoy.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\user32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\gdi32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\ole32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\advapi32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\rpcrt4.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\d3d9.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\d3d8thk.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\version.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\winmm.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\d3dx9_35.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\dinput8.dll' を読み込みました。シンボルが読み込まれていません。 プログラム '[4068] MuscatBoy.exe: ネイティブ' はコード 0 (0x0) で終了しました。
別にエラーなんか出てないだろ。 デバッグ実行してみたけど、シンボル情報がない、というInfoだけ。 最後は、MuscatBoyが終了した、ってだけ。
390 :
367 :2008/01/06(日) 21:25:23
そうだったんですか デバック後アプリ出てこなかったのでエラーだと思ってました ありがとうございました
>390 悪いことは言わんからツクールでも使っとけ。
バンプマップでメカのモールドを表現しているんですが、これだと環境光だけの陰の部分は溝が 出てこず、のっぺらりんとしてしまいます。 これの対応策としては、テクスチャで描いた溝と組み合わせる、くらいでしょうか? 他に良い方法があるようでしたらご教示ください。
ピクセルシェーダからスカラ値を出力 -> 入力したいんですが、
レンダリングターゲットのビット深度が最高16bit x 2だったので
それを32bit x 1にする変換を組み込みました。
// ピクセルシェーダ出力
vOutColor.x = sSrcColor * 65536.0f;
vOutColor.y = sSrcColor * 65536.0f * 65536.0f;
vOutColor = floor(vOutColor) / 65536.0f;
vOutColor = frac(vOutColor);
↑この出力を↓この入力に
// ピクセルシェーダ入力
sInColor = vSrcColor.x;
sInColor += vSrcColor.y / 65536.0f;
しかしこれだと、ノイズが乗って正しく処理できないのか画像にゴミが出ます。
普通に16bit x 1でおこなった場合はゴミは出ません。
シェーダの精度の問題かと思い、65536.0fではなく256.0fでやっても同様でした。
せっかく高精度にしたのに、逆の結果になって哀しいんですが
何でだと思いますか?
GPUはラデオン9700です。
>>392 バンプマップが光の入射ベクトルと法線ベクトルの差で
陰影をつけるテクニックなら、無指向の環境光で
陰影がつかないのはそれで正しい結果だと思うけど。
対策としては、ディレクショナルライトに変えるか
環境光に擬似的なライトの位置や方向を設定してみては?
395 :
デフォルトの名無しさん :2008/01/07(月) 00:59:35
参考書についてきたアニメーション入りのXファイルはちゃんと動くのだが、 どっかから拾ってきたXファイル(アニメ入り)が動かない(表示はされる)。 現在は再帰でフレーム走査して云々って処理してるんだけど、 これは拾ってきたXファイルが悪いのだろうか? ちなみにXファイルをダブルクリックして起動するソフトで見るとメチャクチャ。
>>395 Xファイルのフォーマットに癖があるからw
少なくとも俺は、どのフォーマット(Xファイルの方言みたいなもんw)にも
対応したXファイル読み込み→表示ってのは見たことない
書き込み→読み込みも同様
ちなみに
・メッシュのみ
・フレームとメッシュ混合
・アニメーション+アニメーション対応フレーム+メッシュ
・アニメーション+アニメーション対応フレーム+メッシュ+フレーム(アニメーション非対応)
・ワンスキン
・ワンスキン+アニメーション
・スキンメッシュ+アニメーション+フレーム(アニメーション非対応)+メッシュ
・なんだかよくわからん名前でモデルのインスタンスを共用してるやつ(イミフw読めたのみたことないw)
・他多数
等、すべてに対応しようとすると組み合わせが鬼
結論:Xファイルは考えるだけ無駄(考えるな感じろ)
補足
まあ、どっかの入門サイトでそいつができるって言った方法や内容以外の用途で使わないのが頭のいい使い方
そうすると応用が利かないし、ツール上で1つばっかりモデル作ってはいおしまいなんてありえないから
実際はXファイルなんて使ってなんとかしようとすると「ああ、こんなことなら違う方法でやっときゃよかった」ってなるんだよね
ま、アニメーション使わなきゃ余裕だし、結構使えるから自分ができる範囲でなんとかしなさいな おしまい
>>394 その式は 0.0≦sSrcColor<1.0 ならいいけど、
sSrcColor=1.0 の場合 多分 0.0 になっちゃうわね。(frac(1.0)=0.0)
vOutColor = frac(vOutColor); を
vOutColor.y = frac(vOutColor.y); (上位側(x)をfracしない)
にしてもダメかしら。
>>397 直りました!
まさにそれでした。
ありがとうございました。
>>394 それで本当に精度がよくなってるか、確認した方がいいかと。
俺は以前ピクセルシェーダで1/640を計算させただけで精度が悪くて
使い物にならなかったよ。
クライアント領域全体をキャプチャして.jpgなどの画像として保存できる関数ってありますか?
ありません
402 :
デフォルトの名無しさん :2008/01/07(月) 13:17:11
>>396 レスサンクス。やはりフォーマットの問題だったか。
どっかでフォーマットに注意すべし!って聞いたことあったのでもしや・・・と思ったがやはり。
まぁ、注意するだけで何もできないのだけどw
つまり、アニメしなかったらグラフィッカーに文句言えばおkってことですね。
403 :
K田 :2008/01/07(月) 13:36:38
FortranをC言語に直すことが出来なくて… やってくれ☆
Direct3Dのついて質問です。 デバイス初期化の際にHWNDが必要ということは、複数のウィンドウが開かれるアプリケーションの場合 ウィンドウごとにデバイス初期化が必要ですよね? ということはそのデバイスを通じてロードされるテクスチャもウィンドウ毎にロードする必要があるのでしょうか? 例えばAというPNGファイルをロードしたテクスチャを、ウインドウAでもウインドウBでも使いたい場合、A用B用と@別個にロードするのでしょうか? VRAMもったいないなぁという気分なのですが…)
>>405 >1 つの Direct3D デバイスのみを使う。複数のターゲットにレンダリングする必要がある場合は、SetRenderTarget を使います
これですね
ありがとうございます。
昔作ったSwapChain管理クラスひっぱりだします(何のために作ったのかを失念してましたわ…)
407 :
374 :2008/01/07(月) 17:51:32
>378 すいません、一昨日というのは4ゲーマーを見た時でした。 で、インストール完了後は再起動を求められなかったのでその日は そのままパソコンを落としたと・・・ で、次の日に起動したらその症状が出てたという訳です(^^;
>>402 データを追ってどこに問題があるのか確認するのがプログラマの仕事だろ。
使えないなら自分でまともなエクスポータを書いてグラフィッカーに渡
409 :
392 :2008/01/07(月) 18:59:03
>>394 >陰影がつかないのはそれで正しい結果だと思うけど。
それを承知の上での質問です。
>環境光に擬似的なライトの位置や方向を設定してみては?
なるほど!
ありがとうございました。
410 :
304 :2008/01/07(月) 21:49:45
今まで、
// 射影行列の初期化
D3DXMatrixIdentity(&m_proj);
D3DXMatrixPerspectiveFovLH(&m_proj,
D3DXToRadian(45.0f),//カメラの画角
aspect, //アスペクト比
1.0f, //Nearプレーン
1000.0f); //Farプレーン
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
と参考書のサンプル通りにしていたところを、
>>322-324 さんのを参考に
D3DXMatrixIdentity(&m_proj);
D3DXMatrixPerspectiveOffCenterLH(&m_proj,
-CLIENT_WIDTH * 0.5f,
CLIENT_WIDTH * 0.5f,
-CLIENT_HEIGHT * 0.5f,
CLIENT_HEIGHT * 0.5f,
1.0f,
1000.0f);
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
に変更しました。
すると、Xファイルを読み込んでCGを描画していたのですが、表示されなくなってしまいました。
何が原因なのでしょうか?
>>410 OffCenter の引数をちゃんとカメラ座標系で指定しているか?
シェーダ解説本を見ていると、アプリケーションからシェーダ変数を設定する際にハンドルを介して 行うものがありますが、直接"(シェーダ変数名)"で指定するのに対し、どういった利点があるのでしょうか?
>>412 パフォーマンスが上がる
ハンドルは固定なので
一番最初に一度だけ取得するだけで良い
414 :
412 :2008/01/07(月) 23:31:05
C言語でコンパイルすると○○(ファイル名).OBJが開けませんと出るんですが、 原因は何でしょうか?
416 :
415 :2008/01/08(火) 00:33:48
すみません、誤爆しました。
設定されているパスにそのOBJがないからです
418 :
410 :2008/01/08(火) 17:13:47
すいません、これを忘れていました。
#define CLIENT_WIDTH 770
#define CLIENT_HEIGHT 480
>>411 DirectXは左手座標系ですよね。
-CLIENT_WIDTH * 0.5f = -335
CLIENT_WIDTH * 0.5f = 335
-CLIENT_HEIGHT * 0.5f = -240
CLIENT_HEIGHT * 0.5f = 240
になるので、特におかしくない気がするのですが…。
>>418 glFrustumも
D3DXMatrixPerspectiveOffCenterLHも
クライアントサイズを指定するものじゃないぜ
OpenGLの知識があって
OpenGLのプログラムをDirectXに移植するとかで
こんな面倒なことしてるんじゃないのか??
そもそもDirectXに座標系など無い。 決めているのはプログラマ自身でDirectXは何の関係もない。
使ってるモデリングソフトにあわせると吉 そうでなくても吉
目的がよくわからんな 2Dと同じ座標感覚にしたくて ニアクリップ面を画面サイズに合わせて 適正な画角になるようにカメラを設置するってことなのか?
2Dゲーなら大事だけど3Dゲーではたいして大事ではない
ファーストフードにはあるけどコンビニにはない。 auにはあるけどdocomoにはない。
425 :
410 :2008/01/08(火) 23:29:33
行列変換理解しろ。
無理じゃねぇかなぁ
glFrustumもD3DXMatrixPerspective*****も あくまで透視変換をするための行列を生成するものだから どういじろうと物体が歪んだりはしない 簡単に言うと カメラの近くにある物を大きく遠くにある物を小さく描画するためのもの もし行列変換でやるなら その斜め投影変換とやら専用の行列を生成する必要がある てか斜めにしたいだけなら 適当な板にレンダリングして頂点を移動するだけでいい気もするんだが そもそもなんでそんなことしたいわけ?
>>425 411,419が何を言ってるのか理解できるまで、もっと勉強しる。
410のパラメータのD3DXMatrixPerspectiveFovLHで得られた行列と
D3DXMatrixPerspectiveOffCenterLHで得られた行列を見比べるだけでも
何が間違っているのかなんとなく分かるだろう。
D3DXMatrixPerspectiveOffCenterLHに何を与えれば、元の行列と同じ行列が
得られるのか考えてみろ。
DirectX9.0cなのですが、 DirectMusicで、今現在再生しているセグメントの曲の再生が 終了したかどうかというのを調べるにはどうすればいいのでしょうか 再生終了していればそのセグメントを開放し、そこを別の曲に差し替えたいのですが 肝心の終了したかどうかの判別の仕方がわかりません 知っている方いたら教えてください。よろしくお願いします
431 :
430 :2008/01/10(木) 21:50:25
自己解決しました
自己じゃねえだろ マルチな上に嘘まで書くのかよ
433 :
430 :2008/01/11(金) 00:58:35
>>432 あなたがマルチとおっしゃっているのは外部サイトの話ですか?
そこを見ればわかりますが、自分で解決していますよ。
それ以外の方法も教えてもらうことができましたけど。
それに、このスレッドのテンプレには外部で質問してはいけないなどと書いてないですし。
色々なサイトを利用して、できる限りの情報を集める事がそんなにいけない事なのでしょうか?
どのスレでも同じルールだと決め付けるのはやめましょう。
>>433 一般的な常識として、複数箇所に同じ質問を投げるのは避けるべきです。
>>430 >>432 じゃないが、マルチと分っててやってるなら尚更だが、
そういうのはいけない事。どのスレでも・・・・とかのLvじゃなくて、ネットでは原則的なぐらいのルール。
心がせまいなぁ 俺ルールをネット原則とかもうね
そうそう、「俺様ルール」を持ち出して、マルチを正当化するなんてどうかしているよね。
439 :
430 :2008/01/11(金) 01:20:38
>>436 はあ。ネット原則なのかどうかはともかく、嫌う人も多いのだということですね
こちらで答えてくれる人が早くいらっしゃれば、外部で質問する事もなかったのですが…
これからはなるべく気をつけて書き込む掲示板を選ぶ事といたします。
ご忠告どうもありがとうございました
訳 : 使えねー掲示板だな。もうこねーよヽ(`Д´)ノ
いいんじゃねーの別に。マルチ嫌うって感覚はよくわからんよ しょせん掲示板なんて使い捨てなんだしさ
ネチケットもしらねえのか
ネチケットわきまえてるような人種はここにはいないんじゃないかな
ま、向こうの解答者は間違ってるけどな IsPlayingはスピーカーで音が鳴ってるかどうかを判断するものだから Playした直後でも鳴ってないという結果になる場合がある 結局の所、メッセージ拾う方が確実に終了を検知できるんだよ
所詮MSですから
ネチケットとかもう死語じゃね? 掲示板であろうとログが残り、そのログは将来同じような問題を抱えた人間にとって有益なものとなりうる。 複数サイトでの同様の質問は検索を困難にさせ、解決方法を見つけにくくなる。 そうなればまた同じ質問をすることになる。ネットの世界であろうとリソースは有限なので無駄であることに変わりはない。 とかキモイこと書いてみましたw ぶっちゃけ回答する側の人間はいろんなサイトを回っていることが多く、マルチは実際問題よく見かける。 解決したならその方法や、今回の場合であれば解決した側のサイトのアドレスでも張ってくれれば多少はよかったかな?
むしろ複数サイトに書いてあったほうがみつけやすくていいよ
何も答えもしない相手に解決方法書く馬鹿がどこにいるんだよ
一箇所にしかない答えってのは結局、他の可能性を潰してるだけだと思うんだ その答えが真である保証だってどこにもないんだから 一箇所にしかない答えより、複数の答えがある方がずっといい
ぶっちゃけそんなの気にする奴はたいしていない 短気な奴の方が声が大きいのはネットもリアルも同じと言うだけの話
俺は2ちゃん以外みてないからマルチOKだよ マルチが嫌な人は2穴責めが嫌な人だと思う
これはひどい自演ですね。
454 :
454 :2008/01/11(金) 10:37:00
自己解決しました
カスラックみたいな事言うなよ コピーワンスなんて馬鹿馬鹿しいものが導入されたせいで 後世に文化を繋ぐことが困難になってしまったというのに
カスラックは好かんけどコピーワンスと文化云々は関係ねーだろ(w
関係あるだろ マイナー番組を録ったメディアが劣化したら取り返しが利かなくなるんだから
俺はマルチよりあおいちゃんの方が好きだな
なんでDirectX関連以外の話題だと盛り上がるんだよw
DirectXゲームグラフィックスプログラミングVer.2.1Vistaのサンプルで //カメラのパラメータ設定 // ビューポートの取得 D3DVIEWPORT9 vp; if(FAILED(pD3DDevice->GetViewport(&vp))) { return; } // アスペクト比の計算 float aspect; aspect = (float)vp.Width / (float)vp.Height; (以下略) とあるのですが、 vp.Widthとvp.Heightを見てみると0と770になっていました。 vp.Widthが0になっているせいでaspectが正常に取得できません。 なぜ0になっているのでしょうか?
>>460 俺がよく燃える燃料を投下してしまったからorz
>>461 SetViewportしてないからじゃ
ちゃんと設定してるかい?
direct Showの解説してるサイト知ってる方居たら教えてください。 VC++6.0です。
Direct Show 解説で検索
DirectShow で解説、だよなあ。
解説じゃなくて検索だった。
これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人
>>463 セットしないといけないんですね。
サンプルに見当たらなかったので追加してみました。
//カメラのパラメータ設定
// ビューポートの取得
D3DVIEWPORT9 vp;
if(FAILED(pD3DDevice->SetViewport(&vp))){
return;
}
if(FAILED(pD3DDevice->GetViewport(&vp))) {
return;
}
// アスペクト比の計算
float aspect;
aspect = (float)vp.Width / (float)vp.Height;
(以下略)
すると、
Direct3D9: (ERROR) :Viewport width or height is zero or negative
というエラーが延々とでてきてしまいました。
もしかしてSetViewportの使い方間違ってます?
SetViewportは自分でビューポートのサイズを指定するんだYO・・・
もはや頭が悪いとか言うレベルじゃないぞ。
DirectXを理解していないとかC++を理解していないとかじゃなく プログラミング自体を理解していないんだな
ワロタ(w エラーメッセージくらい読めよ
そんなエラーメッセージ出してくれるのか 親切だなw
477 :
デフォルトの名無しさん :2008/01/13(日) 06:35:13
VC++2005ExpressEdition DirectX 9.0を使用しています。 Game.h Game.cpp Input.h Input.cppというファイルで入力によって値を変えようとしてるんですけど、Game.h内で class Game{ <略> privete: struct AIRPLANE{ FLOAT v; FLOAT roll; FLOAT pitch; }airplane; } と構造体を宣言して、Input.cpp内で構造体の値を入力によって変えたいんですがうまくいきません。 error C2061: 構文エラー : 識別子 'AIRPLANE' とエラーが出てしまいます。Input.cppの実際に値を変えようとしているところは #include "Input.h" <略> void Input::GetInput_Game(AIRPLANE airplane){ if(KEY_Z == TRUE){ airplane.v += 0.001f; } でInput.hのクラスでは "Game.h"をincludeして void GetInput_Game(AIRPLANE airplane); としています。キー入力はうまくいくのですが、構造体の受け渡しがうまくいきません。includeのやりかたが悪いのでしょうか?
ひょっとしてそれはギャグでいっt
. ィ .._ .......、._ _ /:/l! :~""''.>゙' "~ ,、、''‐'、| _ ゙、'、::::::ノ:::::::_,.-=. _〜:、 /_.}'':, ``、/:::::::::__....,._ `゙'Y' _.ェ-、....._ /_゙''i゙ノ、ノ ,.--l‐''"~..-_'.x-='"゙ー 、`'-、 ,:' ノ゙ノブ " .!-'",/ `'-‐'') /\ `/ でノ-〈 .-''~ >'゙:: ‐'"゙./ ヽ.,' ~ / //::::: ', / ,:'゙
>>477 君それ、DirectX全く関係ないから。
DirectXに手を出す前に、とりあえず君はコンソールアプリでも作って
クラスと構造体、引数の受け渡しの勉強をしなおせ
// 構造体定義
typedef struct {
FLOAT v;
FLOAT roll;
FLOAT pitch;
} AIRPLANE;
// クラスメンバに構造体を加える
class Game
{
private:
AIRPLANE airplane;
(略)
};
void Input::GetInput_Game( Game *game )
{
if( KEY_Z == TRUE )
{
game->airplane.v += 0.001f;
}
}
どういう動作をさせるつもりだか知らんが、だいたいこんな感じか
志村ぁ、属性属性!
ああすまんwprivete→privateだけ気になってて間違えた privateじゃなくてpublicねw
ありがとうございます。 上手くいきました。
DirectX SDK を使いたいんだけど、インストールの仕方がいまいちわからんのです。 いろいろ試したところ以下の操作でビルドできるようになったけど、これって正しい? 1. DirectX 9.0b SDK をダウンロードして c:\dx90bsdk に展開する 2. DirectX SDK - (November 2007) をダウンロードして c:dx90bsdk に上書きコピーする 3. インクルードパスに c:\dx90bsdk\Include を追加する アドバイスあればお願いします。
普通に実行すればインストーラーが勝手にやってくれるだろ 頭にウジが涌いているのか?
>>484 1はいらない
2はアップグレードじゃないので単体で動作する
むしろ、前のバージョンのSDKは抜くべき
3はその動作だけじゃ足りないはず
わからなければ入門書を買ってきたほうがいい
時間とお金を考えたら1人で考えるのは無駄かもわからんね
本は自分で立ち読みして探せ
致命的なのは1と2
なんでこんなことした?
普通に最新のSDKをダウンロードしてこい
アップグレードキットはない
>485 まず DirectX 9.0b SDK をインストールしてビルドを試みたところ、最近のコードをビルドできなかった。 で、DirectX SDK - (November 2007) をダウンロードして上書きコピーしたらとりあえずビルドできた。 「そんなことしなくても○○をDLして入れればおk」とかアドバイスがあれば知りたいなと思って聞いてみた。 スマン>485
>>486 アドバイスありがとう。明日、本屋にいってみるよ。
ばーか
>>487 >ダウンロードして上書きコピーしたら
これ駄目
レジストリとか環境変数とかなんも考えないのか?
ファイルだけ書き加えて動くもんなんてそうそうないから
動いた→OK
は全体の構造を把握してない限りありえない
一度アンインストールしてもう一度インストールしなおせ
その状態で進めるとまた問題が起こったときに何が原因かさっぱりわからなくなるぞ
491 :
デフォルトの名無しさん :2008/01/13(日) 19:16:51
DirectX9.0c以上ってどれをダウンロードしたらいいんですかね? いつも確認したら8.0になってるんですよ・・・
Windows95はDirectX8.0aまでの対応だよ。
そうだ まずOSのバージョンの確認からだな たまに古いの使ってる分際で開発なんてしようと思うキチガイがいるから閉口する とりあえずXPにしろよな つか、もっというと金がない奴はゲーム開発なんてやろうと思うな 色々楽をしようとするたびに出費がかさむ職業だぞw なんでもケチるとなんにもできない上になんにもわからない だからなんのゲームもできない 入門書のこともそう 読めばわかるようなことだけど自分で調べるとなるとひと月ふた月平気で過ぎていく なんにも金を出さないと2年たっても3年たってもいつまでたってもゲームなんかできない
5000円の参考書買って役に立たなくても 「はずれか、チッ」としか思わなくなるようでないとだめ
古い環境での動作、古い環境での開発が求められる場合もあるだろ まあガキの遊び程度だったら新OSでやった方が色々と楽だが あと、別に今時本がなくったって検索ワードを使いこなす技量があれば さほど情報に困ることはない もちろん本があるにこしたことはないけどね 楽をしようとするたびに出費がかさむというのには同意 馬鹿は大人しく金を使った方がいい
VC++2005の本を買ったけど、.NETフレームワーク開発が主体だと気づいて 結局ほとんど使ってない俺
>>493 は言い過ぎかもしれんが、俺も専門書にかかる出費はけちるべきではないと思う。
この分野はプログラミングの中でもニッチな方だから、 Web常に情報の蓄積がなく、本にしか書いてない基礎的情報も多い。
>>495 ていうか、調べてもいいけど該当する情報を見つけるまでかなりかかる場合もあるしね
お前が本がなくてもなんてのは本を十分みたり、たくさんの人と話す機会があって何かを学んだいま
だからこそいえることだろ?
なくてもいいというにもたくさん本をみたうえでないとなくてもいいといえないわけだから
そういう情報なんだよね必要なのって
あるものごとを決める平均値みたいなもの、最適な判断材料は糞も糞なりに全部みないと
最後の解は得られない
たくさんの選択肢を判断できるだけの情報力があればあとは時代が変わるごとの
差分値だけで済む
こうなってしまっている状態の人間を基準にしてもしょうがない
はじめはなんでも買ってなんでも吸収する気でないととても普通にプログラムが作れるレベルまで届かない
低賃金の割りに意外とつらいと思うぜ
ごめん。俺本買ったことないけど、使いこなせてるや。
金出して買う程の書籍とかないよな。 ネットで十分。
まあ初心者レベルの情報だったら買うほどのこともないだろう 本屋に通えるだけの行動力があればいい
>>500 わかってるつもりで実はわかってない
ってのはよくある
ゲーム系から業務系にいったときにちょっとだけ苦労した
実務の正確さがちょっと足りなったかな
精度を高めるためにちょっとした苦行がいった
でもそれだけだったけどw
ゲーム系は速さ重視だからな 業務系だとどうでもいいような決まりが多そうだ
505 :
484 :2008/01/13(日) 23:35:48
484です。
個人サイトとか MSDN とかを見て Visual Studio 2008 Express Edition で
DirectX SDK のサンプルをビルドして実行できるようになった。
特に
>>486 のコメントが参考になったよ。どもです。
ところで、DirectX (特に3D) プログラミングをするのにおすすめの本とかある?
ネットで十分っていうコメントもあるけど。
ちなみにスキルは win32 API プログラミングはペゾルト本で一通りやってて、
ベクトル・行列の計算は苦にならない感じ(予習したから)。
すすめられる程の本は無い。 ネットでOK。 DirectXに特化した本はロクなのない。
>>505 1冊も買わないか
全部買って良いとこ取りするかのどっちかしかない
1冊あればOK的な本はない
508 :
484 :2008/01/14(月) 00:53:51
>>506 >>507 そうか。しばらく DirectX SDK のサンプルと API リファレンスでがんばってみる。
>>508 一冊も買わないなんて効率悪いだけだと思うぜ俺は
細かい技術が足りてないくせにできると思ってる奴のいうことだと思う
俺のこれまでの経験でいうとネットなんてざっとしか載ってない
おおざっぱに知るだけ知って知った気でいる分にはそれでもいいけど
はじめはいろんな本を読んでまず技術の土壌を固めるべき
そっちのが速い
いらないとか言ってる奴は自分は過去に他の分野の本を読んで細かい技術を身につけてる場合が多い
そういう奴は新人とか育てるのものっすごい下手なのであまり信用しないほうがいい
これまで自分が出会った人とかちょっとの間でも教え請うた人の存在とかすっかり頭から抜けてる
馬鹿で恩知らずな奴なのでもうこういう奴が技術的に伸びることはもうない
本を読むことは人を知ることでもある
ネットでは薄い
色んな人の色んな考えを吸収するには本をたくさん読む必要がある
プログラム構成がめちゃくちゃ下手糞な奴とかいるけど
アイディアが浮かばないとか素質がないんじゃなくて単純なスキル不足である場合がほとんど
グローバル変数・関数使いまくりのままとか糞なソースばっかり書いて何年たってもグローバル変数を使う初心者のままとか結構ザラw
>509 それじゃ、一冊本のタイトルあげてみ?
まあ本買うやつなんて旧世代の人間だけだな。
本だったら電車の中とか布団の中とか喫茶店でも読めるだろ
DirectX SDK のサンプルってどうやってみれるの?
>512 俺に聞かんでも自分で良書と思うもんあげればおk。
>>514 DirectX Sample Viewer
俺のオススメ Game Programming Gems 1-6 日本語版 (単行本) ゲームプログラミングのための3Dグラフィックス数学 (単行本(ソフトカバー)) 難しいので初心者にはオススメできないけど 絶版になる前には買っておいてほしいと思う 初心者にいいと思ったのは irectX ゲームグラフィックス プログラミング Ver. 2.1 Vista [NextCreator] (NEXT CREATOR) (大型本) ゲームエフェクトマニアックス (C MAGAZINE) (大型本) がおもしろいと思った 小さいプログラムを組みながら覚えるといいと思う 読んでないけどなんかいいかなと思った本は アクションゲームプログラミング (大型本) ホントに初心者がアクションゲーム作れるようになるかどうかやってみてくれw
518 :
484 :2008/01/14(月) 03:46:42
>>512 たしかに自分が win32 API プログラミングを調べていたころを思い出すと
ペゾルト本を読まなければ理解に時間がかったかも。
一度理解すれば API リファレンスでなんとかなるけど
道しるべとして本を頼るのも手だな。
>>509 の社内人間関係を綴った本が出版されたら買う(w
俺も一冊では足らず、DirectXでゲーム制作する本を四冊くらい買ったかな しかしどうしても本では理解できず 最終的にネットの情報に助けられた事もあるのも確かだな 国内のサイトじゃなかったけど
Managed DirectXでお勧めの入門書ってある? 洋書で黒い表紙の本がなかなか良かったんだけど、 和書だと見つからないんだよトニー
>>523 ないと思う。自分もさらっと調べてみた事あるけど
XNA以上に日本じゃ通らないような感じうけるしねぇ。
きっと和訳やその他の場合でも出版で十分なリターンが見込めない領域と思われてる
そう邪推するぐらいにはManagedはないねぇ。
C++/CLIでMDXしたいよぅ
526 :
484 :2008/01/14(月) 14:46:55
それなら、「ネットだけで十分」じゃなく、「本は使えない、ネットの方がマシ」ってなるだろ 先に国語の教科書買った方がよかったんじゃない?
工学者のDirectXの本はヘルプをなぞるようにできてるだけだけど 色んな要素がつながってない初心者には全体が見渡せていいと思う 俺は超オススメ ただ、緑っぽい外装で中身が違う類似品があるので中身は見て買わないとw
>>523 ManagedってUnmanagedとどう違うの?
関数名やクラス名が違うだけであんまり変わらないと思うんだけど。
.NETかそうでないか
>>517 Game Programming Gemsはなかなか絶版にならないよ
>>517 初心者用の2Dアクションゲーム本ならソフトバンクから出してるよ
534 :
533 :2008/01/14(月) 17:26:44
あっ出てたw
>>533 うーん、ただ2Dで満足してほしくないな
3Dを知ってる人間が作る2Dゲームのほうが圧倒的に出来がいいからw
3Dを知ってるのと2Dゲームの出来は別に関係ないよ エフェクトに3Dを使う事もあるだろうけど、それは純粋な2Dゲーではないから もっとも、DirectX自体が2Dを3Dの一部とする考え方なので 2Dゲーを作るにも3Dの知識が少しは必要になる
>>537 全然わかってないな
見た目は2Dでもゲームの空間を3Dにする技術のことを言ってるんだよ
表現次第でグラがいくら2Dでもゲームの空間を3Dにすることは可能
3Dの機能なんて理解してて当たり前
だからそれは見た目2Dなだけの3Dゲーだっての
タクティクスオウガみたいなのを想定しているのか?
>>538 が2Dゲーだと思ってるのは3次元上にビルボードを貼り付けた
3Dゲーの事を言ってるんだろ
レイフォースが使ってる表現なんかのことじゃないの?
まあFFなんかでも2Dの美麗マップ上を3D空間座標で キャラが移動してたりするからな それを2Dゲーと見るか3Dゲーと見るかは人それぞれ
>>543 そうそうそういうことそういうこと
高低差とか奥行きとかあるマップとか理解してもらえるといいと思う
螺旋階段とかw
ま、一般的には3Dゲーって言うけれども
>>545 2Dゲーっていうんじゃない?
だって見た目3D機能使ってないように見えるんだよ?
内部の演算まで見通して「あ、これ3Dだ」っていえないと思うんだよね
2Dでうまくやってるかもしれないし
あらかじめレンダリングしたデータを 2D で持ってるだけっしょ。 z-order などを工夫して立体っぽく見せてるだけで。
本当に重要なのは2Dか3Dかではなく、回転有りか無しかだけどな。 回転無しの3Dは全然難しくない。
正確には、回転と移動の組み合わせが難しい。 思い通りに座標点を制御するのはプログラムそのものだけじゃなく、 最低でも高三以上の線形代数の知識が必要。
Release()し忘れたDirectxTextureなどを検出する方法ってありますか
CComPtrでも使っとけ
>>517 アクションゲームプログラミング (大型本)持ってるけど玄人以外にはいいと思う
ページ構成は糞だけど
>>547 3Dを表現した2Dの絵に当たり判定(地形なども含む)を合わせるときなんかは
どうしても内部は3Dでもったほうが楽だ
フラグとか利用して根性で2Dでも表現できるっちゃできるけど、
開発が長引いたときに地獄みると思うw
回転を一切使わない3Dって成り立つのか?
>>554 何の話だよw
カメラ固定なら拡大縮小だけでいけるんじゃね?w
スマブラみたいに基本を2Dで、モデルを3Dでっていうのは成り立つ。 そういうのはあんまし線形代数の知識はいらん。
>>556 GCで出たのは結構小技が冴える出来だったけどな
板ポリレーザーなんだけどカメラをぐるぐるまわしてもちゃんとレーザーに見える・・・みたいな
>>554 ジャンプできる2Dアクションゲームは大抵、中身は回転を一切使わない3Dだよ。
古い例だとサークとか。
VRシステムは回転をサポートしていません。
パースペクティブシャドウマップで質問です。 スポットライトの場合、 matrix4x4 toShadowSpace = cameraView * cameraProj * lightView * lightProj; のようにするのが一般的だと思いますが、このlightProjの作り方がわかりません。 cameraの射影空間では、スポットライトのコーンがひしゃげてしまい ワールド空間のように、コーンから一意に射影行列を求める訳にはいきません。 現在はひしゃげたコーンから近似的に射影行列を作っていますが、 満足のいく精度ではありません。世の中一般ではどうするのが普通なんでしょうか?
LPDIRECT3DTEXTURE9 pTexture; と宣言していて、デストラクタで pTexture->Release(); と解放しようとすると 0x004897d1 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcccccccc を読み込み中にアクセス違反が発生しました。 とエラーが出てしまいます。 初期化では D3DXCreateTextureFromFile(pD3DDevice,"sample.bmp",&pTexture) としています。 環境はdirectx9.0 , Visual C++ 2005です。 解放の仕方が悪いのでしょうか?
ロード失敗したのに解放しようとしてるとか
>562 そう思って if ( pTexture != NULL ) { pTexture->Release(); } としてみたんですが、それでもエラーが出てしまいます。
NULLで初期化してる?
>564 やってないことに気づいて if(FAILED(D3DXCreateTextureFromFile(pD3DDevice,"select_back.bmp",&pTexture))){ pTexture = NULL; return E_FAIL; } としてみましたが、やはりエラーが出てしまいます。
if ( pTexture != NULL ) { pTexture->Release(); pTexture = NULL; } 次はこれだ! ・・・なーんか違うような気もするが・・・w
なんかたくさん聞かなきゃいけないけど そもそもD3DDeviceは取得できてるの? それとテクスチャロードして、それ使って表示できてる?
当然アドレスは調べたんだろうな。
>567 すいません、初期化やる場所が悪かったみたいで、コンストラクタ内でやったらか解決しました。 ありがとうございます。
} catch (...) {
変数の初期化は、その変数を最初に作ったときに必ずするべきだ クラスのメンバ変数なら全てコンストラクタで初期化すべし
>>569 はぁ?
しばらく悩みそうだなお前・・・w
Win32APIはある程度書けるけど、DirectXはまったく知らないって状態なんだけど どの本買って勉強すればいい?
ネットで十分
そもそも何をしたいのかすら説明するのを面倒くさがる、 その必要性を鑑みることの出来ない人間が何をやっても無駄。
反論できずに罵倒しか出てこない場合、図星だったってことだ
579 :
デフォルトの名無しさん :2008/01/17(木) 18:34:42
DirectMusicが 2007November からなくなってしまいましたが、代替手段はどうしていますか? やっぱりDirectSoundでゴリゴリ書くしかないのでしょうか……
581 :
579 :2008/01/18(金) 18:39:32
>>580 情報ありがとうございます
まだ混沌としているみたいですね。落ち着くまで古いバージョンのSDK使うことにしました
SDIで開発してるんですが、各コントロールにリアルタイムで動くグラフを書きたいんですが、 SwapChainであってるんですか? またその後の方法もわからんです・・・
スレ違いの予感 グラフ描くだけならGDIで事足りるだろ
統合シェーダ型GPUって、DirectX9.0でも動的にVS、PSの振り分けしますよね?
586 :
584 :2008/01/20(日) 10:02:27
>>573 本が好きなら本屋で自分好みのDirectX本を探せ
あと、どうでもいいコメントはスルーしろ
588 :
デフォルトの名無しさん :2008/01/20(日) 21:08:22
DirectXを使ってWindowsゲームを作ろうとしてます。 買った教則本ではDirectX 9bを使ってましたが、 Microsoftのサイトに行くと、 9とか10とか数字のバージョンが書いてなくて、 DirectX SDK (Novemeber 2007)というのがありました。 これでいいんでしょうか?
当然C++は理解してるんだろうな?
590 :
588 :2008/01/20(日) 21:29:48
>>589 俺あてでしょうか?
大丈夫です。CとC++は1ヶ月くらい勉強しました。
591 :
588 :2008/01/20(日) 21:41:07
Novemeber 2007をインストールしてみたら、 教則本で使ってる<d3dx9.h>ってのが入ってたので、 9も使えるっぽい感じでした。
592 :
588 :2008/01/20(日) 21:58:32
と思ったら"d3dx9dt.lib"と"dplayx.lib"がないです。。。 前者は"d3dx9d.lib"で代用できるっぽいですが、後者はないんでしょうか。
593 :
588 :2008/01/20(日) 22:27:22
つまずきました。。。InitD3d(hWnd)ができません。 エラー「'InitD3d': 識別子は、引数依存の照合を使用しても見つかりません。」 #include <d3dx9.h>はできてるのに、なんで?
595 :
588 :2008/01/20(日) 22:39:58
<d3dx9.h>に入ってるのかと思ったら、 InitD3dは自前の関数だったようです。。。
また今度な。いちいちお前のレポでスレ消費したくない
>>588 ここの住人は辛口だが、これくらいで挫折するなよ。
それからはじめから全部理解しようとするな。
まず本に書いてあるとおりに開発環境を整えて、
DirectX SDKのサンプルコードをビルドして実行しろ。自力で。
599 :
デフォルトの名無しさん :2008/01/21(月) 00:28:08
601 :
588 :2008/01/21(月) 02:20:31
初心者質問スレなんだからいいじゃん。。。 なんとか2Dのスプライト描画ができました。
お前のチャットルームじゃねーんだよ甘えんな糞ガキ
はたしてクソガキに見えるレスをしているのはどちらだろうか。
お前らクソガキクソガキ書きたいだけちゃうんかとクソガキが
>>601 分からないなら参考書と同じSDKを入れるのが一番いいと思うぞ
最近ARToolkitがはやっているので使ってみようと思いましたがどうもうまくいきません. Direct3D9.0cをつかってメッシュとWebカメラからの動画の合成をしたい. 色々やってみるけどマーカーを移動させても方向はあっていても明らかに移動量が違ったり回転する軸が違ったり. 行列の生成までは多分問題ないと思うからOpenGL形式の行列(double[16])からDirectX形式の行列(D3DXMATRIX)への変換がうまくいっていないのだと思う. arGetTransMat, argConvGlpara関数で作られたdouble[16]の配列をD3DXMATRIXに変換するにはどうすればいいですか? ウィンドウサイズは640x480で背景に同じサイズのWebカメラから入力した動画を貼り付けている. プロジェクション行列はD3DXMatrixOrthoLH(&proj, 640, 480, 1.0f, 1000.0f); ビューイング行列にARToolkitで作った行列をセットして一辺50.0の長さの立方体を描画する.
>>607 たしかOpenGLとDirect3Dでは、行列の行と列が逆だけどそれは直してる?
それとOpenGLは右手座標系だから、そこも直さないと駄目かな。
表示だけできればいいなら、プロジェクション行列を〜RH系の関数で生成するのが
手軽でいいかも。全体を右手座標系で統一する必要があるけどね。
609 :
607 :2008/01/22(火) 05:53:56
>>608 変換行列は転置しました.
けど右手→左手の変換に手間取っています.
行列計算は関数にたよりきりで行列の中身はブラックボックスとしてプログラムしてたので,Z軸を反転させればいいという話ですけど,どの成分をいじればいいのか試行錯誤しています.
またD3DXMatrixOrthoRHで変換してみると物体が消滅しました(変なところに移動したみたい),あれー?
double[16]からD3DXMATRIXへの行列のコピーで単純に間違っているのかもしれません.
今日右手→左手への変換のサンプルソースが手に入ったのでそれを参考にがんばってみます.
アドバイスありがとうございました.
すみません質問です。 SLIって、作る側で特に何かやらなくても、 ハード側で構成されていれば自動的に有効になるんですか? 自宅にSLI環境がないため、試すことができないので質問しました。 また、2枚のボードででSLIを構築した場合、 DirectXでデバイス数を取得した場合は1が返ってくるのでしょうか?
あざーっす!
613 :
デフォルトの名無しさん :2008/01/22(火) 17:16:00
D3DCOLOR_ARGBマクロでは255までの値、 D3DXCOLORのコンストラクタでは1.0までの値を指定するんですか?
2D画像を画像の中心座標を基点に回転して描画させたいんですが、 D3DXMATRIX matrix; D3DXMatrixRotationZ(&matrix, 角度); ID3DXSprite::SetTransform(matrix); とすると、(0,0)を基点に画面全体で回転してしまいます。 指定した座標を基点に回転させる行列を作る関数ってないでしょうか?
>>614 wmatrix=ワールドマトリクス
matrix1=演算用マトリクス1
matrix2=演算用マトリクス2
D3DXMatrixRotationZ( &matrix2, 角度 );
D3DXMatrixMultiply( &matrix1、&wmatrix、&matrix2 );
D3DXMatrixTranslation( &matrix2, スプライトの移動値 );
D3DXMatrixMultiply( &matrix1、&matri1、&matrix2 );
lpSprite->SetTransform( matrix1 );
lpSprite->Draw( lptex, lprect, lpcenter, NULL, color );←ここのlpcenterにテクスチャ中心座標を入れる
だいたいこんな感じで
ありがとうございます。非常に助かります。
617 :
デフォルトの名無しさん :2008/01/22(火) 23:29:44
DirectShowを用いて二つのカメラからの信号をそれぞれサンプルグラバフィルタを使用して入力し、 RGB情報をカメラごとの配列に入れて画像処理で用いたいのですが、なかなかうまくいきません。 どのようにすればいいか、ご教示願えませんでしょうか。
すみません、質問です。 MicrosoftのページからDirectXをインストールしようとしているのですが、 最終的に「インストールに失敗しました」と出ます。 インストールしようとしたときに、空き容量が少ないので、 〜〜クリーンアップを行うとも出ていましたが関係はあるのでしょうか? 状況の情報が少ないですが、改善の方法はありますか?
連続ですみません。 「コンポーネントのインストール」初期化しています・・・・というのが出て、 「ファイルをダウンロードできませんでした。後でもう一度実行するか、ネットワーク接続を確認してください。」 が表示されます。 英語版をダウンロードしてみたり、ダイヤルアップでしてたりするのですが、うまくいきません。 何かパソコンに問題があるのでしょうか?
621 :
デフォルトの名無しさん :2008/01/23(水) 00:31:15
ゲームを作りたいんですが、 描画にかかる時間が不安定で、処理スピードを一定にできません。 IDirect3DDevice9::Present( NULL, NULL, NULL, NULL ); これだけを実行するのに、だいたい1ミリ秒もかからないんですが、 連打すると何回かに一度16ミリ秒以上かかるところがあります。 秒間60回描画したいので、1回の描画が16ミリ秒を超えて欲しくないんですが、 回避方法はありませんでしょうか?
PCゲームで秒間60回固定なんて夢物語です。 フレーム数を少数で計算するなりして、その増分コマを進めるなどで 対応しましょう。
623 :
デフォルトの名無しさん :2008/01/23(水) 00:56:10
D3DPRESENT_INTERVAL_DEFAULT
>>623 それは描画を待つってだけで超えてるものの対処にはならんでしょ
625 :
622 :2008/01/23(水) 01:05:00
俺レス番ずれてるのかな
627 :
621 :2008/01/23(水) 01:21:08
621でした...
>>624 D3DPRESENT_INTERVAL_DEFAULTとtimeBeginPeriod(1)で、
長くとも1回10ミリ秒を超えることはなくなりました。
>>627 確実に1コマずつ表示する事にそれほど重要性がないのなら
>>622 のようにした方がいいと思うよ。
最初はそれでもいいだろうけど、処理が増えていけばそう簡単じゃないんだし
PCの環境によっても変わってくる。
629 :
621 :2008/01/23(水) 01:47:57
>>628 そうですね。
うちのPCは結構ハイスペックなので、
他の環境のことも考えて工夫してみます。
>>621 それで正常。
ttp://www.atmarkit.co.jp/fdotnet/directxworld/directxworld01/directxworld01_03.html >他方、最近の環境ではドライバ層以下でも比較的長大なパイプライン処理が行われている。
>マイクロソフトは、ドライバに対する画面更新命令がウィンドウ当たり最大3回までキューイングされることを許している
Presentがキューイングされた場合はそもそも画面更新が完了する前にメソッド呼出しから戻ってくる。
一方キューイング数に最大3回という縛りがあるので、それを超えそうなときは
少なくとも1回分の画面更新が終わるまで待たされる。
これは別に嫌がらせをしているわけじゃなくて、GPUを遊ばせないための最適化の結果。
確かにPresentで常に描画完了を待つようにしたらPresentの挙動は安定する。
でもこの場合GPUの性能を100%引き出すのは難しくなる。
これはDirect3D9だと変なトリックが必要だけどVista以降ならAPIで設定可能。
631 :
610 :2008/01/23(水) 08:49:51
たびたび質問すみません。 SLIを構成した際にデバイスが一つと認識されるのはわかったのですが、 そこにもし2つのディスプレイをつなげてデュアルモニタにした場合も シングルGPUのデュアルモニタ同様に、DirectX9ではデバイスが2つ認識されて マスタデバイスが一つとなるのでしょうか?
632 :
621 :2008/01/24(木) 01:14:51
>>630 情報ありがとうございます。
ビデオカードによって違うと何がいいか決めるのは難しいですね。
あまり固定にこだわらず、性能重視で考えてみることにしました。
>>631 予想に過ぎんが、たぶんそうなるんじゃないか?
D3DXCreateBox()で一辺が100.0の立方体は作成、表示できるのですが、 メタセコで立方体を作成、Xファイルで保存し、Xファイルを読み込んで一辺100.0の立方体を表示するにはどうすればいいのですか? どこで大きさを指定できるのか、すればいいのかがさっぱりわかりません。 実際は立方体でなくもうちょっと複雑な物体を表示したいので、 Xファイルでなんとかしたいです。
>>634 DirectX関係ないやん・・・
基本図形から立方体を選択
「作成」を押す前に「詳細設定」で各軸のサイズを100にする
Xファイル出力するときに
出力オプションで拡大率を1に直してから保存
初歩的な質問ですみません。 DirectX逆引き大全500の極意のサンプル(088 メッシュをレンダリングする)を用いて自分で作成したメッシュを表示させたいのですが実行しても何も表示されません。 メッシュのほうはDirectX Viewerでは正常に見ることができます。 何が原因なのか教えていただけないでしょうか。
>>636 ぱそこんがこわれてなければ
がんばればなおるよ!
ハ_ハ
('(゚∀゚∩ なおるよ!
ヽ 〈
ヽヽ_)
>>635 関係ないといいつつ答えてくれる優しさに感動した
うまくいきましたありがとう
これからDirectXの勉強始めようと思うんでオススメの本教えておくれ
真面目な話、C/C++ちゃんと理解してればSDK付属のチュートリアルとヘルプで充分。
DirectXを勉強する前にWin32APIも理解している必要ある? ウインドウ生成までのソースが長すぎて挫折しそうorz
C++でやるならWin32とCOMの基本は知ってて当然
COM は DirectX を通して勉強したので俺は特に問題なかったが。
>>641 ウインドウ作るのに必要なAPIなんて5つくらいだろ。
それで挫折するような奴がDirectXなんて扱えるわけないだろ。
1000行以上の他人のソースを一日で全部理解できるぐらいじゃないと
WinAPIなんて単語の集合体
1000行ってずいぶん少ないなw
Xファイルからメッシュを読み込んで半透明表示したいんですけど以下のような方法でメッシュをレンダリングしたら半透明化できるファイルとできないファイルがあります. 具体的に半透明化できるのはMetasequoiaLEで出力したXファイル,半透明化できないのはRokDeBone2で出力したモーションXファイルです. どっちも形状はでてくるんですけどRokDeBone2で出力したXファイルは以下のように材質指定しても陰影は着いているものの真っ白なままなんです. D3DMATERIAL9 m; ZeroMemory(&m, sizeof(D3DMATERIAL9)); m.Diffuse = D3DXCOLOR(1.0f, 0.0f, 0.0f, 0.8f); p->SetMaterial(&m); pMesh->DrawSubset( 0 ); 原因はなんなのでしょうか,どうしたら半透明化できるのでしょうか.
>>647 一日で理解する量としては適度だと思うけど
>>649 詳細まで理解するとなるとちょっときついな
フラグの1つ見逃しただけで内容が逆転することもあるしね
概要をつかむ分にはいいけど
理解できる=詳細動作まで完璧
と理解されると困るね
プログラム知らない奴と仕事で語りたくない内容だな
相手にとっての
理解できる=XX
がどの程度の話か底が見えない
仕事で「できた」の内容をバグが1つもでないまで
完璧ととらえる人ととりあえず動く程度の人とで報告する内容が変わるのといっしょだというと
ちょっと理解できるかな?
>>641 VC++ と DirectX SDK で開発するなら、
『プログラミング Windows 第5版(上)』の「第3章 Windows とメッセージ」を読んで
Win32 API プログラミングの概要を理解することをおすすめするよ。
30ページくらいだから立ち読みできるだろ。
DirectX プログラミングで GDI とかコントロールは使わないから
3章以外はあまり理解しなくていい。
金があるなら上巻だけでも買って実際にサンプルコードを打ち込めば理解が深まると思う。
つか、SDKのサンプルは驚くほどの最小コードでウィンドウ作ってたなw
>>650 この場合、他人のコードを呼び出すわけじゃなくて
実際に類似コードを書く必要があるから
詳細まで把握してないと結局は躓くことになるよ
「とりあえず動く程度」にも人それぞれ程度が違うけど
それでも出来る限りバグ取りをしてからでないと
それが溜まって後で苦労することになるし
>>653 デバイスロストでもしてるんでね。
つーか別スレッドにしろ。
>>653 てか、なんでWinMainで描画処理やってるんだよ
WM_PAINTでやれ
で、WM_PAINTを呼び出すためには適度のタイミング(例えば60分の1秒とか)で InvalidateRectで再描画指定してやる
別にWM_PAINTで描画することとPresentで止まることは関係ないだろ 恐らくデバイスロストなんだろうが
で、肝心の問題部分は、見た感じ D3DPRESENT_PARAMETERSのhDeviceWindowにウィンドウハンドルが指定されていない LPDIRECT3DDEVICE9のGetBackBuffer()でバックバッファーを取得してない 多分これが原因だと思うよ
>>659 さすが・・・
パっと見てこういったことが分かるようになるまで何年くらいかかるんでしょうか?
単に自分のやってるのと比較しただけだよ ある程度手順を知っている人なら誰でもわかるよ まあこれを直せばちゃんと動くかどうかは知らんけどw
662 :
653 :2008/01/27(日) 19:10:36
こんなにレス付くとは・・・ありがとうございます。 描写する前から間違ってるとは・・・ どうやら初期化で使用する型をよく調べなかったせいで 初歩的な失敗していたようです。 完全に知識不足でしたもう少し勉強してからにします あとWM_PAINTに書かなかったのは描写のタイミングが知りたかっただけです。 本当にありがとうございました。
どう見ても精子です
Microsoft DirectX SDK (Nov 2007) をDirectX Developer Centerからダウンロード しインストール後、 ”C:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\”の下にManagedフォルダがありませんでした。 すべての”Managed\Common”以下のサンプルを入手する方法を教えてください。 (とりあえずdxmutmisc.csが必要なのですが・・・。)
「vectorを使った動的配列」の配列、ってのは作れないのでしょうか? vector<int> num[10]; みたいな形は受け付けてくれませんでした。 複数用意した各動的配列に対して同じ処理をやりたいのですが、 配列にできないとforとかでまとめられなくて困っています。
その質問のどこにDirectXが出てくるのかね?
>>665 つ[std::vector<std::vector<int> >]
つーか、スレ違い。
>>664 ReadMe見りゃわかるがNovember 2007からManagedのサンプルとドキュメントが削られてるよ。
前バージョンのSDKから引っぱってくるしかない。
Xファイルをexeファイルの中に埋め込むにはどうすればいいのでしょうか?
リソース
>>670 素早い反応ありがとうございます
無事xファイルをリソースに登録することができました
たびたびで申し訳ないのですが質問をさせてください
リソース移したxファイルを
前まで入れていた "***.x" の部分へ持ってくることはできないのでしょうか?
673 :
デフォルトの名無しさん :2008/01/28(月) 22:29:12
VC++/DX9です リリースビルドのとき、LPDIRECT3DDEVICE9の関数を呼ぶと access violationがおこりプログラムが強制終了してしまいます。 LPDIRECT3Dの関数を呼んでも問題はないみたいです。 どなたか原因わかりますか struct DirectX{ LPDIRECT3D9 lpdirect3d; LPDIRECT3DDEVICE9 lpdirect3ddevice; D3DLIGHT9 light; D3DXMATRIX gProjection, view, world; LPDIRECT3DSURFACE9 depthBuffer; Camera camera;//D3DXVECTOR3を3つまとめたもの }; ここが問題の部分みたいです if(!(app->directX->lpdirect3d = Direct3DCreate9(D3D_SDK_VERSION))) return -1; D3DDISPLAYMODE dm; if(FAILED(app->directX->lpdirect3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &dm))) return -1; D3DPRESENT_PARAMETERS p = {0}; p.Windowed = TRUE; p.BackBufferFormat = D3DFMT_UNKNOWN; p.BackBufferWidth = app->window->width; p.BackBufferHeight = app->window->height; p.SwapEffect = D3DSWAPEFFECT_DISCARD; p.EnableAutoDepthStencil = TRUE; p.AutoDepthStencilFormat = D3DFMT_D16;
674 :
デフォルトの名無しさん :2008/01/28(月) 22:30:10
続きです if(FAILED(app->directX->lpdirect3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, app->window->hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &p, &app->directX->lpdirect3ddevice))) return -1; D3DXMatrixPerspectiveFovLH(&directX->gProjection, D3DX_PI / 4.0f, 1.25f, 1.0f, 100.0f); setCamera(directX); 発生 directX->lpdirect3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); directX->lpdirect3ddevice->SetRenderState(D3DRS_ZENABLE, TRUE);
>どなたか原因わかりますか app->directX->lpdirect3d->CreateDevice app->window->width お前の頭の構造が原因。 なんだこの設計は。
676 :
デフォルトの名無しさん :2008/01/28(月) 22:42:35
struct Window{ HWND hWnd; WNDCLASS wc; MSG msg; int width, height; Window(int w, int h); }; struct DirectX{ LPDIRECT3D9 lpdirect3d; LPDIRECT3DDEVICE9 lpdirect3ddevice; D3DLIGHT9 light; D3DXMATRIX gProjection, view, world; LPDIRECT3DSURFACE9 depthBuffer; Camera camera; }; struct Application{ HINSTANCE hInstance; Window *window; DirectX *directX; Cursor cursor;//int x,y Application(); Application(HINSTANCE hInst); };
ワロタ
命名規則がまったく考えられてない(w
ワロタ
> D3DXMATRIX gProjection, view, world; すばらしいww
嫌いじゃないぜ、こういうの。
他の部分のソースも見てぇ。
>>669 回答ありがとうございます。
リリースノートにてご指摘のの記事を発見しました。以後、気お付けます。
さてここで新たな疑問なのですが、SDKに含まれないコンポーネント
(今回の場合はManaged DirectX サンプルとドキュメント 等)がある場合は、
どのような手順でアップデートすべきなのでしょうか。リリースノートには前の
バージョンを削除する事を推奨していますが、削除すればもちろん含まれない
コンポーネントは使えないわけで・・・。Managed DirectX サンプルなどは退避
しておく事により使う事ができそうなのですが・・・。
August 2007 DirectX SDK をインストールした状態からどうするのがセオリー
なのか教えてください。
アンインストしてインストしてサンプルとったらアンインストしてインストすればいいだろボケ 横着しようとするなカス
> ここが問題の部分みたいです > if(!(app->directX->lpdirect3d = Direct3DCreate9(D3D_SDK_VERSION))) > return -1; appをnewしたかどうか/directXをnewしたかどうか
688 :
デフォルトの名無しさん :2008/01/29(火) 16:55:09
>>687 app directX共にnewしてあります
あ、ミスった
>>673 回答じゃないが、そこまで構造化するならクラスを覚えたほうがいい。
あとメアドにsage入れよう。
DirectXを勉強している一初心者ですが分からないことがあったので質問させてください DrawPrimitive系のメソッドは実行後描画完了して制御を返すわけではなくキューイングしているだけだそうですが その場合、DrawPrimitive→計算→FlipとしてFlipするまでに計算をしておけば時間を有効に使えるという考えで良いのでしょうか?
続きです > if(FAILED(app->directX->lpdirect3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, app->window->hWnd, > D3DCREATE_SOFTWARE_VERTEXPROCESSING, &p, &app->directX->lpdirect3ddevice))) > return -1; > D3DXMatrixPerspectiveFovLH(&directX->gProjection, D3DX_PI / 4.0f, 1.25f, 1.0f, 100.0f); > setCamera(directX); > 発生 directX->lpdirect3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); > directX->lpdirect3ddevice->SetRenderState(D3DRS_ZENABLE, TRUE); 途中まではapp->directX->だったのが発生箇所ではdirectX->になってるな appのほかにグローバルにdirectXが存在してる?
>>691 最近のドライバだとFlipすらキューイングするだけ。
>>685 指摘されている方法でサンプルの取得は可能ですが、November 2007 DirectX SDKでは
以下のコンポーネントも含まれていないようです。これらを使える状態でバージョンアップ
する場合どのようにするのでしょうか。
・Direct3D8 およびそれ以前の全てのバージョン
・Direct3D RM
・DirectAnimation
・DirectMusic
・DirectInput7 およびそれ以前の全てのバージョン
・DirectPlay
・DirectPlayVoice
>>686 両方入れているとの事ですが$(AppPath)\Microsoft DirectX SDK (August 2007)\に上書き
インストールという事でしょうか。それとも$(AppPath)にAugust 2007とNovember 2007が別々
にインストールされているといことですか。
Managedなのに最新の物入れる意味って有るの?
>>695 上書きはしてないよ
別にインストールしてる
698 :
691 :2008/01/30(水) 04:29:08
Flipもキューイングだけなのですか…レスありがとうございます これが本当だとすれば(パフォーマンスと言う観点だけから見れば)スレッド分けても分けなくても同じじゃない?と思い 実際に自分の環境でもスレッド分けたものシングルでやったものとを比較してみたのですが全く差がなかったので質問してみました
>>695 それが入ってるSDKのインストーラ解凍してIncludeとLibだけコピーして
それにパス通せばいいだけだよ。(デバッグ)ランタイムが欲しいなら
一度SDKをインストールせにゃならんかもだけど。
常に最新のSDKを入れつつもD3DXランタイムのバージョンのからみで
リリース用に前バージョンのIncludeとLibを残しておくヤツはたまに見る。
>>698 そもそもお前よく考えろよ
そんなんで時間って短縮できるの?マジで?
だってさぁ、プレイヤーの入力を受け付けるから次の画面が決定する場合のが多いじゃん?
↑↓→←な
で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし
入力を受け付けるまで次の画面って描画する意味ないじゃん
ていうか内部の処理が決定しなくね?
キューイングなんてどれだけ意味があるのかさっぱりわからないんだけど?
画面更新が仮に1sごとにくるなら1s以内で処理を終えても
次のフレームの処理なんてやってもたかが知れてると思うんだけど?
ていうか安定しなくね?そんな設計にしちゃそもそも駄目じゃね?
1フレ内での時間短縮は意味があるかもしれないけど
フレーム間同士の時間短縮ってなんかやる意味あんの?
日本語でおk
>>700 >入力を受け付けるまで次の画面って描画する意味ないじゃん
アニメーションって言葉知ってる?
エロゲプログラマには縁が無い言葉なんだろう
さすがに今の時代エロゲにも必要だろ 画面切り替え一つとってもフレーム単位の処理が必要なのに 瞬時に画面切り替えするゲームなんてねーよ
画面更新1s
>>698 てか、VistaのWDDMドライバーとかだと全てがキューイングだよ。
もう同期処理なんてドライバー内部で複数エンジンを同期するときくらいしか使われてないよ。
質問です。 よくゲームでフルスクリーンモードとウィンドウモードを切り替えるのに キーボードのAlt+Enterが使われますが、これはAlt+Tabの用にWindows の機能ではなく、製作者が「Alt+Enterが押されたら切り替える」と プログラムしているのでしょうか?
>>708 ありがとうございます!
ずっとWindows(又はDirectX)の機能だと思ってました…
Alt+Enterがよく使われているだけで、別にどのキーに割り振ってもいいんですね。
昔DirectXを使ったゲームのデザインのガイドラインで色々定義されていた希ガス
>>709 DirectX10ではDirectXの機能の一部になってて便利っすよ!
>>702 キャラのモーションだとして
フレームはじめのキー入力でボタン押されたら
前のフレームに描画済みの画面はどうなるの?破棄すんの?
みんなCGは何で作ってるの?
メタセコイア!
ゲーム製作用途にならメタセコは糞だろ
>>712 いつの時代からタイムスリップしてきたの?
今時キャラ部分だけ個別描画でもしてるの?
というかキー入力と描画は切り離して考えないの?
キャラが動いたら前のフレームに描画済みの画面はどうするの?破棄しないの?
画面更新が1sってなんなの?毎秒一回しか動かないの? それってストレスたまらないの?
やっぱりエロゲプログラマだったか
Maya欲しいがアカデミックでも糞高いんだよな…
ラーニングエディションで充分さ
>>716 キー入力された内容っていつ反映すんの?
ゲームって一定時間毎にキーを取得する必要があるし
キューしてある間のフレームの位置づけって謎杉ね?
貯めてあるフレームっていつ表示されてんの?
んでもってそれってやっぱキー入力は遅れてる内容なわけっしょ?
描画とキー入力って絶対に切り離せないと思うんだけっちょそんなことない?
まあ、ようは画面を作って貯めておくことに意味を感じないわけよ俺は
どうせ1フレ内の時間余ってるならよ
マップデータの先読みでもしたらいいんじゃないか?
キーを入力してもしなくても画面は動くってことがわからないのかなこの人 敵キャラクターはプレイヤーがキー入力しないと動きませんか。そうですか。
メッセージドリブンを理解すれば疑問が解消するんじゃないかな Win32APIをちょこっとかじってみるといいかもね あとスレッドの仕組みも
>>723 キー入力があるまで画面が一切更新されないゲームという前提条件に無理あり過ぎ。
今時エロゲでもねえよ、そんなの。
逆にいえば、上記の前提条件を満たすなら、言っている事は正しい。
最近のエロゲは演出凝ってるぜ
エロゲ用の紙芝居プログラムなんてほとんど同じなのに、なんでブランドごとに作ってるんだろうな。 一つあれば市場のゲームの90%は事足りそうなのに、自前で作るところに限って機能が糞だし。 もう一つに統一して、みんなそれ使えよ。
キー入力がなかったら画面更新しないってマジで時間が止まってそうだな
キーを押すとグラフが更新されるとか、そんな宿題しかやってこなかったんだろう DirectXに手を出してみたはいいが何をすればいいのかわかってないっぽい
>>726 そんなこと言ってるんじゃなくて
キー入力があったときにどういう動作をするの?
って聞いてるの
キーレスポンスがデフォで遅延してるゲームを想定してるんでしょ?
キー入力があってから即時反映ってキューイングしてたらできないわけだし
ぶっちゃけ1/60秒遅れても誰も気がつかない。 今もキーボードから文字を入力しているが、 それが表示されるまで1/60よりも遙かに表示されるまで時間がかかっているはずだが、 別に気になっていないのと同様。
>>731 お前、本当にDirectX触ったことあんの?
>>732 それは1フレームを競う格ゲーマーへの挑戦か?
>>711 それ便利だけど、いろいろ考えるとやっぱ無効化して自前で実装したくなるんだよね
マルチモニタでフルスクリーンに切り替えるときに2つのウィンドウが同じディスプレイ内にあると死ぬ…
おれの組み方が悪いのか?
で、IDXGIFactoryのMakeWindowAssociationで無効化できると思いきやうまくいかん
どうなってんだこれ
>>732 確かに止まった画面から何かが動いたとき1,2フレームの遅延は気付かんが、
動き続けてる画面が1フレーム跳んだら気づくだろ。ってかアクション系のFPS固定は基本。
>>731 キー入力は描画時の状態を変化させるだけで
キー入力があろうがなかろうが描画は定期的に行えばいいだけなんだが
キーのレスポンスとして描画をするってアホかと
そもそもハード的問題でキーボードを押してからOSがその情報を拾うまでのラグが相当あるのに、 描画の部分だけ即座に反応しなければならないと考える時点でアホとしか言いようがない。
さらに追い打ちをかけるようだが、 そんなパッシブな描画だとウィンドウモードの時にウィンドウを重ねると、中身が全部消えてしまう。
いつまでも話題ひっぱるほうもアホとしか言いようがない。
初心者の質問に答えてるだけだし 気に入らないなら他の話題でも出せばいいのに。
自分の無知が原因なのに逆ギレするほうがアホとしか言いようがない
>>737 はぁ?馬鹿?
大げさに書くと
キューイングが3枚あったらキー入力が反映された画面は
キー入力がされてから4枚目にならないとキー入力が反映された画面にならんだろが
要するにキーレスポンスが飛びっきり悪くなる
4/60で0.0666秒遅れたのを人間が判断できるのかやってみるといい。 程度わざと反応を遅らせてプログラムを書いてみれば分かるが全く判別不可能。
そもそもこのお馬鹿さんは漠然とキューイングなどと言っているが、 描画画面全体のバッファを3つ4つもつとでも言わんがばかり。 フロントバッファ、バックバッファとは別に二枚以上持つのか。大変だな。
>>743 とりあえずさ、つべこべ言わずにDirectXでプログラム組んでみようよ
話はそれからだ
まあ、キー入力にタ対する反映スピードとはなんの関係もないけどな。 固定フレームでしか動かない頭の悪い構造で作るなら仕方ないが。
>>747 彼の言わんとしてるのがバックバッファにしてもコマンドバッファにしても、
次フレームの描画に3回分も間に合わないほど描画命令詰め込んでたら
1,2フレームが重要になるようなゲームを想定した場合には
どの道キーレスポンス以前にコマ飛びがひどくて話にならない。
1回分の描画命令を発行し、その間に他の処理を行ってコマ落ちがなくなれば、
レスポンスの遅れも当然なくなるわけだし、キューイングなしより効率がいい。
多分、
>>700 が文盲なのが全て悪いと思うよ
>で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし
>入力を受け付けるまで次の画面って描画する意味ないじゃん
これを
>で、時間短縮ってさぁ、プレイヤーの入力の判定は一定タイミングでくるし、
>入力の判定とそれに伴うもろもろの処理を行うまで次の画面って描画する意味ないじゃん
こうすると、少しは
>>700 の言いたいことがわかってくるんじゃないかと思う。
こいつはキーレスポンス絶対主義者。
こいつの考え方だとコマ飛びも絶対に発生しないよ。
その代わり、コマの停止が頻繁に発生するが、そんなの知ったことじゃないだろう。
そんなにレスポンスが重要なら、PS3の無線コントローラなんて、反応が遅くて遊べないんだろうな。 キー押してから検知するまでラグが大きいキーボードなんて使えない。 遊びのあるアナログコントローラなんて以ての外。 一定のモーションを検知してから動くwiiのゲームなんて論外。
ようするに、1フレーム分キューイングすると、入力が反映されるまでに
1フレームの遅延が発生するけど、60fpsなら1/60秒だから普通は無視できる。
でも、
>>700 は1fpsだから無視できない。
こういうことだろう。
>>750 上の文章だとどこから見ても、「キー入力がなければ次フレームは描画しない」
と言っているようにしか見えないよなw
ていうかワンフレ遅れはかなり目にあまる アクションゲームだとかなりウザイ 2フレ遅れでRPGぐらいしかできない 3フレ遅れは商品じゃない そんな感じ
ちょっと考えたんだけど人によって環境が違うから感じ方が違うんじゃね? 最新PC:120fps出てるから3フレーム遅れぐらいなんともねーよ 旧型PC:30fpsしか出てねえから3フレーム遅れはものすごく目立つんだよ
120FPSってどんな環境だ? 大抵みんな液晶だろ? すると垂直同期にあわせると60〜75じゃねぇか? せめてワンフレ落ちで死守しないとガコガコ感じるだろうな わざわざ遅らす必要もないだろ
糞性能PCの場合にどうするかって話なら 固定フレームよりは可変フレームの方がまだマシだわな。 特にネトゲなんかじゃお互いの環境が違うのだから 固定フレームゲーなんてまずありえないし。
どちらにしろ
>>700 は秒間1フレームだから、商品どころの話じゃないが
>>758 デフォでキーレス遅れてるのにはなんか意味あるの?w
BBXに書き込む奴でもここまで馬鹿はいなかったけどなw
>>760 自分の脳内で文章を補間するのはやめような。
相手に伝わるようにレスしよう
BBXの掲示板って、はなんか知らんがキャッシュを見ようとするとめちゃくちゃ重いんだよなぁ
紙芝居でも作ってたのかね
それにしても秒間1フレームはありえないがw
>>763 IE6の重くなるバグのせいじゃないのか?
それならわざわざDirectX使う必要なくね?
もう>700はそっとしといてやれよ
たしかに仕組み考えるとキー入力遅延するだけだな
必死すぎて泣けてくるw
たった一つのレスで50以上引っ張らせるとは、ある意味すごいなww
この辺昔から話題にするたびにおかしなこという奴がいるんだけど ワンフレごとキー入力を取得してるってことすっかり頭から抜けてる状態で 話するからおかしなことになる キー入力を反映した画面を「即座に(←これ重要)」作らなきゃいけないってことを忘れてる ユーザのキー入力を反映した画面を作らなきゃ意味がまったくない レスポンスの悪いゲーム作るだけ キー入力によってカメラの移すものが変わっても全画面更新だし 横にちょっとスクロールしても全画面更新、 決定ボタンが押されても次のシーンに移るのに全画面更新だし、 キー入力を受け付けない状態での画面描画のキューイングにいったいなんの意味があるのか問いたい
>>770 =
>>700 ユーザーがキー入力をしようがすまいが全画面更新するわけだが^^;
頭大丈夫か?最初から指摘されてるのにまだ理解できないのか?
もういいよ、こんなどうでもいい話題は。 DirectXとかゲーム制作関連のスレだと訳のわからん自己解釈厨が出てくるのはどうしてなんだろうね。
>>770 >この辺昔から話題にするたびにおかしなこという奴がいるんだけど
>ワンフレごとキー入力を取得してるってことすっかり頭から抜けてる状態で
>話するからおかしなことになる
おかしいのはお前の頭だということに気づこう、な?
>>700 は、「キー入力有無の判定」の事を「キー入力を受け付ける」と言ってるんだろうな。
日本語がすっかり頭から抜けてる状態で話するからおかしな事になる
>>772 だからな
ユーザがキー入力を押しっぱなしのときを想像してみろよ
池沼が必死に自作自演で擁護してるなwwwwwwwwww
>>776 だからな
いつキー入力しっぱなしの状態が前提になったんだよ
お前の脳内を前提に話をするな
>>777 自作自演というか、本人丸出しじゃないか?別に隠す気もないと思うよ
どうみても
>>700 です。本当にありがとうございました。
>>700 って見た目偉そうな書きかたしてるけど
実際は何一つ理解してないバカなんだと思う
どうせだからコテつけてくれよ。あと200レスちょい釣られてやっから。
>>780 一応少しは勉強したつもりなんだろ
実際キューイングやスレッド分けをせずに描画待ちするんなら
激重PCでのキー反応に関してだけはマシになるんだし
秒間1フレでゲームになるかどうかはおいといて^^;
日本語が不自由な可哀想な人ってだけ
キー入力を押しっぱなし
700がアーケードゲーム作るとシンクロ連射て言葉も生まれなかったのかな。
すげー、まだ続いてたのかw
そもそもまともなゲームはキー入力を受け取ってから、 加速時間などをおいてキー操作をわざわざ延滞させて自然に動くようにしているだけどね。 ハンドル操作なんかもわざわざ遊びを作って操作をダイレクトに反映しないようにしているのに、 自動車の運転すらしたことがないんだろうな。
音ゲーはまともなゲームじゃなかったのか…
音ゲーが入力された応答をサウンドバッファに蓄えてから、 実際に再生されるまでの延滞は描画フレームの遅れの比じゃないんだが、 全然動作原理を理解しないで表面しか見ていないからそういう馬鹿な発言が出るんだろうな。
>>787 加速時間をおくためにキー入力を遅延させるだあ?
んなわけねーだろ。本当に加速を表現したいなら、ハンドルの角度と角速度設定して、
キー入力を角速度に反映すればいいだけの話。もちろんキー入力に延滞なんか起こるはずもない。
ハンドル操作の遊びなんて、入力を遅らせるのとどんな関係があるんだ?
そりゃ単に一定以上キーを押し続けないと反応しないようにしているだけだろうが。
結局、おまえの言ってる”キー操作をわざわざ延滞させて”やってみても、
単に画面の更新が遅いゲームしかできないんだが。
それでどうやって加速時間やハンドルの遊びを表現するって言うんだ?
とりあえず、DirectXやゲームの作り方の基本を学ぶ前に、日本語を学んだ方が言いと思う
脳内の混乱をそのまま文章にする能力に長けているマとは対極に位置する ある意味詩人
793 :
792 :2008/02/03(日) 14:30:15
アウチ! 構文解析を掛けたらエラーではじかれる様な文だ
「キー入力を押しっぱなし」ワロタ 本当に日本語を知らないんだなw
昔のエロゲーなんかは画面更新が1秒毎どころか何十秒もかかっていたんだぞ
だから
>>700 は正しい。
いつから昔のエロゲ限定の話になってたんだ
Windows自体がキーの入力を一定周期で拾うことすら不可能な現実をまるで理解せず、 見える部分の描画にしか注意が行かないのはとても幸せなことだ。
>>798 Windowsの救えるタイマの限界が10msだとするとキューイングを3フレすると
キー入力は30msの遅延が起こるんだよね?
なんか明らかに駄目にしか見えないんだけど?
>>799 >Windowsの救えるタイマの限界が10msだとすると
日本語もWindowsのプログラムの知識も全くないのは分かった。
多少のレスポンスのずれよりも比較的滑らかなアニメーションを優先すれば可変フレームだし ガタガタな動きだろうと、とにかくキー入力反映の確実性を優先したいなら固定フレームでいい そういう話ならいいんだが、このお馬鹿さんは他人も自分の思うとおりにならないと どうしても許せないらしい.。 彼の脳内の叫び 「何があろうとキー入力を優先しないとダメなんだ!それ以外は許さん!」
そもそもメインループの回数と、描画の回数がイコールではないという概念すらないんだろう。 キューイング云々以前にフレームスキップなんかも理解していないんだろうね。
>>800 100レス記念、おめでとうございます。
後日
>>700 から記念品が贈られますので、住所、氏名、年齢、ご感想をこのスレでさらしてください。
>>802 だからそれってキー入力のレスポンスが遅れるってことじゃないの?
メインループの回数と描画の回数が違うってことは、
メインループの回数が多いときに、キー入力が描画に反映されないことを意味するっしょ?
>>804 定義が曖昧すぎる。
そもそも入力と描画の差を0にすること自体不可能なんだから、
どれだけ差が出たら遅れたと言える状況なのか明確な数字を出せ。
もうやめて! 人はなぜ憎み合い殺し合わねばいけないの?
>>804 というか他のレスもちゃんと読もうよ。
難しい日本語が書いてあるレスからは逃げてるのかな?
>>801 が全てだろ。何がそんなに気に食わないんだ
>>700 は
キューイング3フレにやけに拘っているが、頻繁にそうなるほど描画時間がかかるPCで
固定フレームゲーなんかにしたら、どれだけ糞遅いゲームになるんだよ。
どっちにしてもそのゲームの動作環境としては不適切だ。
コンシューマやアーケードゲームは通常は固定の60FPSで画面更新されるが、
それはほぼ確実に60FPSで動作するように組まれているからだ。
画面が頻繁にガクつくような事があったら商品として失格だ。
ましてや秒間1フレームなんてもっての他。
見た目の動作がガクついたり遅くなるのが嫌な奴もいれば、
見た目を犠牲にして入力優先させるような奴もいる。
どっちをとるかってだけの話だろう。
そうだ。やおいが全てなのだ
>>700 は尻を差し出すべきなのだ
>>810 うん。既存の固定フレームゲーだとそうなってしまうよね。
可変フレームゲーの場合はならないけれど。
固定フレーム派には厳しいわな。
よく知らんけど、ようはそのグラフィックカードの仕様に発狂した固定フレーム信者が 可変フレームにやつあたりして暴れてるって話?
>>810 >VSYNC同期をオンにしたまま60fps以上で動作するゲームを遊ぶと
意味不明
ユーティリティ側で周期の変更は出来ても、
同期待たないアプリに対して同期を強制するのは出来ないはずだが、
いったい何を言ってるんだ?
>>813 アプリ側がDirectXの初期化時にVSYNC同期設定にした状態で
それに加えてゲームループの同期をタイマーでとってるとかかな
そのずれでキューイングされたコマンドバッファが
残ってしまう場合があるって事では
もう実際にDirectX使っているやつ以外話さなくていいよ。
DirectX10を使えばアプリ側でキューイングの上限数をセットできるから 固定フレーム派はそれを0にすりゃいいんじゃないかね。
>>816 IDirect3DDevice9Ex使えばDirect3D9ゲーでもちょっとの手直しでできるしね。
Vistaのその辺はもっと評価されても良いような気がする。
>>814 その状況でアプリ側が周期を超えるデータを放り込んでいるって事?
それはサウンドバッファが1MBとられていたら、わざわざそのバッファを埋め尽くしてから、
後から入れた音がとんでもなく遅れて再生されると言っているようなもの。
>私は最近はそれほど重いゲームは遊ばないので
>>810 のリンク先の奴に、そんなアホな作りの重いゲームとやらを是非教えて欲しい物だ。
実際にもってるFPS系ゲームでMax frames to render aheadをいじって比較してみたが、
さっぱり違いが分からない。
>>819 東方シリーズでVSYNC同期をドライバ設定で強制的に切らないと、
酷い遅延が発生するってのが有名な話。
ドライバはキューに溜まった分は一切スキップせずに描画するから、
プレゼンテーションをVSYNC同期にしていると、60fps以上で動作するような
プログラムは、いつまで経ってもキューが最大まで溜まった状態になる。
ttp://d.hatena.ne.jp/NyaRuRu/20050329/p1 ↑やそこからリンクされてる日記にも色々書いてある。
CPUがボトルネックで平均fpsが60を下回るゲームの場合は、この問題は
あまり関係ない。
欧米のゲームは60fps維持には拘っていなくて、20fps程度を下限と
見てるっぽいから問題ないのかもね。
>>700 の相手をしてるよりは興味深い内容になったな
>>819 >それはサウンドバッファが1MBとられていたら、わざわざそのバッファを埋め尽くしてから、
>後から入れた音がとんでもなく遅れて再生されると言っているようなもの。
その認識は正しいんだけど
・バッファが勝手に作られて勝手に埋めさせられて勝手に待たされる
・Direct3Dのドキュメントやチュートリアルでちゃんと解説されていない
という理由で意図せずそうなってるのが問題。
>そんなアホな作りの重いゲーム
同人シューティングとかほとんど全部じゃね?
東方シリーズとか。
どうでもいいけどリンク先の人、新坂さんだね。
XFCとかBio時代からDirectX見てる人でないと知らんかもしれんが。
最近窓の杜で見て懐かしくなった。
ttp://www.forest.impress.co.jp/article/2008/01/21/aspect_zoom.html
>>820 マジかw
ずいぶん馬鹿な奴がプログラム組んでるんだな
今、カメラをFPS視点にしようとしているのですがうまく写してくれません。 どこをどのようにしたらいいのでしょうか・・・? D3DXVECTOR3 viewvecE(0.0f,1.0f,0.0f),//カメラ(視点)位置 (キャラを原点とする) viewvecL(0.0f,0.0f,3.0f);//注視位置 D3DXVECTOR3 viewvec; D3DXVec3TransformCoord(&viewvec,&viewvecE,&matRotation); D3DXVECTOR3 vEyePt( //どこでみている VecCamera.x + viewvec.x, VecCamera.y + viewvec.y, VecCamera.z + viewvec.z ); D3DXVec3TransformCoord(&viewvec,&viewvecL,&matRotation); D3DXVECTOR3 vLookatPt(//どこをみている VecCamera.x + viewvec.x, VecCamera.y + viewvec.y, VecCamera.z + viewvec.z ); D3DXVECTOR3 vUpVec(0.0f,1.0f,0.0f); D3DXMATRIXA16 matview; D3DXMatrixLookAtLH( &matview, &vEyePt, &vLookatPt, &vUpVec ); pDevice->SetTransform( D3DTS_VIEW, &matview ); どうぞよろしくおねがいします。
>>l824 DirectXは俺も初心者だけど、3人称視点ができてるんなら まず座標をあわせて次に向きを合わせればできると思うよ
STGを作る奴ってのは頭が悪いからSTGを作るってことが証明されましたw
知らなかった奴が言う台詞でないけどなw
>>828 だからはじめからキューイングはキー入力遅延するっていってるだろw
完 全 勝 利 !
833 :
824 :2008/02/03(日) 22:05:42
>>825-826 D3DXMatrixPerspectiveFovLHの部分を書き忘れてたのが原因でしたすごくアホな質問失礼しましたorz
もう放っておいてやれよ あんまりつつくとまた意味不明な日本語で喚き散らすぞ
結局、キューイングに意味があるとかいってたキチガイでもはどうしたの?(笑) ずいぶん強気な態度であさってなこと言ってたけどもう尻尾巻いて逃げちゃった?w こんな単純な仕組みもわからないでよくゲームなんか作るつもりでいると思うよw ホ ン ト 馬 鹿 っ て 恥 ず か し い か ら 死 ん だ ほ う が い い よ ね
勝利宣言キター
スレ伸びてると思ったら、まだやってたのかよ。
>>838 話理解できてる?
従来の固定フレームゲーでは修復不能な遅延が発生。
可変フレームゲーなら遅延が出ても修復可能。
ところで、キチガイでもっていうのは何かのデモの事かい?
>>841 この状況でそんな見苦しいいいわけは逆効果だぞw
なんなんだこの詭弁のガイドラインの典型例みたいな奴は
やっぱり理解できてないみたい^^; キチガイでもとか言ってるぐらいだから仕方ないが
なんだかなぁ。 コマンド発行するだけで他に処理を回せるんだから意味はあるだろ。 自分の作る固定フレームゲームで遅延が修復できないからって、 他も一緒だと勘違いされてもなぁ。 別にDirectX10を使えばキューイング0にもできるんだし 自分が使いたくないなら使わなきゃいいだけだと思うんだけど。 グラフィックカード自体は世に出てるんだから、自分のわがままで ユーザーに設定を強要するわけにもいかないだろうに。
>>847 入力によるなんらかの応答が必要なアプリ全部に対して必要なくね?
んでもってそんなアプリにこんなキューイングみたいな機能っているの?
ほぼ動画とかそんなんしかないと思うけど
まあ
>>700 =838は相変わらず日本語でおkって事で。
>>848 アニメーションって言葉知ってる?^^;
>>850 それって3Dモデルの?
2Dのパラパラ漫画?
どっちにしてもキー入力が入ることによって描画結果が変わることになったら再描画必須だけど
何を言ってるのかな?
>>851 例えばさ、自然界には雲が浮かんでいるよね?
君が何かをしないと雲は動かないのかな?^^;
>>853 彼の脳内だと、「キー入力押しっぱなし」が前提だからw
そんな事を言っても無駄wwww
>>852 マジかw
なんだその化け物w
>>853 何が言いたいのかわからないけど、
多分お前が言おうとしてることって純粋なデモしかないから
関係ないと思うんだけどね
おいおい同じ流れにもってくなよwwwww
>>700 の作るゲームは何かキーが押されないと何も動かない止まった世界
ある意味斬新と言える
キューイングうんぬん以前に
>>700 の脳内前提に無理があるから('A`)
もう相手にすんなよ
そもそもリフレッシュレート以上加速させることになんらかの意味を求めてる?
ディスプレイが書き換わらないのに何を求めているんだ
ID無しだというのに
>>700 と同一人物の書き込みが一目で分かるのが笑える
まいったな 普通の質問がしづらいふんいきだ
まとめ
キューイングに関しては、
・1枚溜める分には意味がある(そのフレームの処理を短縮できる)
・2枚以上はあくまでおまけ
・どの道3フレームも溜まるようなPCだと、固定フレームじゃ遅くて話にならない。
>>700 の脳内に関しては
・理解不能
>>862 次の方どうぞ
やっとわかった。 固定フレームレートで遅いPCだと問題が出るって言ってる人は 入力のキューイングのことを言ってるんだな。 ビデオカードのドライバで設定できるのは、出力のキューイング。 こっちは速いPCほど溜まる。 あるいはGPUがボトルネックのゲームだな。
>>866 速いPCでも溜まるし、GPU処理量が多すぎる場合でも溜まるって事だね。
遅いPCと言う言い方は適切じゃなかったな。
>>863 のまとめの3番目はこの場合の後者の意味ね。
>>865 どれだけ使えるかはともかく、面白そうな機能だね。
Direct Musicって覚えることに意味ありますか?
>>868 誰も君に強要はしない。自分で考え、自分で決めろ。自分が今、なにをすべきなのか。ま、後悔のないようにな!
敵キャラクターに動いてもらいたいんですけど、キー入力押しっぱなしじゃないと 駄目らしいのですが、どうすればいいでしょうか?
>>871 キー入力を押しっぱなしにすればいいです。
異国の言葉ですので、詳しい内容は
>>700 に聞いてください。
もう終わってるのに
だな。つつくとまた沸いてくるんだからそっとしておいてやれよ
ゲームじゃなくて単純なグラフ表示とかのアプリを作ってるんでしょ。多分。 それならキーを押さないと画面が動かないのも画面更新1秒も納得できる。
もうやめてー!彼のライフは0よー!
終了
Direct Musicには一度手をつけてみたけど 何度か同時再生とかしようとすると音が止まったりノイズが出たりして上手く行かなかったな BGM再生はお手軽に出来るかもしれないけど、SE再生には向いてないと思う。 WAV再生にはDirect Sound使ってれば問題ないからMidi扱わなきゃいらないかなと。
東方みたいなウンコSTG作ってればいいよw
アバンギャルドだかなんだか言うアニメだったか
アバンストラッシュじゃなかった?
アバンテジュニアだよ
俺は最近の趣味のプログラムでは可変フレームレートをやってるけど 仕事では固定しかやったことがない。会社のライブラリなんか完全にその前提に依存しているし、 それが主流でその流儀が通用しないことに発狂する人がいるのは分からないではないなあ。
発狂というか、あれは最初から頭おかしい感じだしなぁ。 日本では未だに固定フレームも根強いとは言え、 ネトゲやこういったハードの普及にともない、可変フレームの流れに 移ろうとしているのもまた事実ではある。 一方しか認められないとプログラマーとしてはそこで終わってしまう。
可変にするとプレイに支障を来すタイプのゲームもあるだろ。 どっちか一方のみが使われるべき、ってもんじゃない。 適材適所だ。
>>887 可変フレームレートの話じゃなくてキューイングの話だったような・・・
固定フレームレート 可変フレームレート 可変時のコマの処理の仕方の話題になると 荒れるのはいつものこと
>>889 固定フレームにおいてのみキューイング処理で発生する修正不能な遅延に発狂した奴が
可変フレームにまでやつあたりしてたって話
どっかのスレじゃ禁句の一つになってたな どこだったか忘れたが
固定/可変だのキューイングだのの話ではなくて、 確か「キー入力押しっぱなしじゃないと画面が更新されない」とかいう、 常人にはさっぱり理解できない話だったと思うよ
さぁ、200レス引っ張り続けるという記録の誕生も迫って参りました!!
終わった話をひっぱってきた
>>886 は氏ねよって事で
氏ねとかいうなよ
いいから消えろよ
200レス目ゲット
>>891 結局、よくわかんなかったんだけど
固定であろうが、可変であろうがキューイングをする意味ってなに?
過去レスぐらい嫁。そしてとっとと消えろ。
>>900 描画時間分を他の処理にまわす事ができる
>>865 も読んでおけ
それでわからないなら君には使いこなせないから、諦めなさい
キューイングがなくても死にはしないから
>>902 2枚とか3枚とかキューすると何がいいの?
>>900 結局、よくわかんなかったんだけど
「キー入力押しっぱなし」じゃないと画面更新がされないんなら、
敵キャラやNPC,その他オブジェクトはいつ動くの?
そもそも「キー入力押しっぱなし」っていうのは日本語としてどうなの?
あと、今の時代に画面更新が秒間1フレームのゲームの意味ってなに?
200突破したな
>>903 いつの間に枚数を限定した話になったのかな?
とりあえず、1枚ならキューイングに意味があるのは理解できたって事だね
上の方にもあるが、2枚3枚はあくまでおまけ
可変フレームで組む場合、コマを飛ばすよりは比較的動きが滑らかに見える
可変フレームで組まないのなら意味はない
ゲーム限定の話に限らないなら、
>>865 の使い方も期待できるだろう
つまり固定フレーム派にとっては意味はないが、可変フレーム派には意味がある
それだけの話だ
君が使いたくないなら使わなければいいが、他人に不毛な意見の押し付けはやめような
200突破もした事だし、そろそろ終了ってことで キチガイの相手もほどほどに
DX9のソフトをDX10に移植中なんですが、かなり困りっています。 ビデオ素材の部分の処理にVMR9を使っていたのですが、DX10だと使えないみたい。 EVRっていうのが新しいみたいなんですが、どうもDX9を前提としているよう。 DX10でビデオ素材を使う方法ってないのでしょうか?
俺だったら余裕で自前で作れるな
なんと意味の無いレス。これもそうだがw
>>906 1枚でもキューイングっていうの?
なんかフリップするときに待ち時間を別のことに使ってるってぐらいの感じしかないけど
コマを飛ばすっていうか、そもそもワンフレの処理が間に合ってる状態で使っていい結果になるのか
処理が間に合っていない状態で使っていい結果になるのかそこの前提がわからない
>>911 君の脳内の前提条件がどうだろうと知ったことではないよ
枚数が何枚だろうと、「キューイングに意味があるか」って話だったはずだが?
最初から処理が間に合ってる状態を前提にするんだったら、固定だろうが可変だろうが
キューイングしようがすまいが大した違いはない
「キー入力押しっぱなし」とかいう意味不明発言もそうだが、
自分の主張を押し通すために、後から勝手に脳内前提条件を加えるのはやめような
>フリップするときに待ち時間を別のことに使ってる どう見てもキューイングです。 本当にありがとうございました。
>>910 自前で作るというのが質物の答えなんだろう
>>911 コマンドをキューに受け渡し、その処理の完了を待つ事なく
次の処理を行う事をキューイングというんだよ。
2枚たまるとキューイング、3枚たまるとキューイングと
いうものじゃないから。
そんなに必死になってないで、いい加減落ち着いたら?
そろそろ議論モードを解除してやれよ
>>911 ,903,900は純粋に質問してるんだろうから
初心者が入り込めないスレになってしまったな。
>>909 WMVやMPEG2デコーダーを使用しないといけないので、とても自前では無理です。
真面目に議論してるところに初心者が朽ちだすのが悪い。 初心者は初心者スレ池。
ついにスレタイも読めなくなったのか?
いや前から
>>918 コーデック使ってデコードしたデータを貼り付けるだけだろ。
VMRがやっている事をそのまま書くだけだ。
この程度もできないってどんだけレベル低いんだよwww
そうか ここはバカ隔離スレなんだな
初心者ってそんなもんだよ
>>918 自前で作る気もないんなら諦めるか前のバージョンに戻しなさい。
926 :
デフォルトの名無しさん :2008/02/08(金) 17:02:15
初心者は(・∀・)カエレ!!
>>916 議論という程の高尚なものではないけどな
過去レスも読めない馬鹿の相手をしていただけだろう
>>914 レスありがとうございます。
ところで質物ってなんですか?
初心者とキチガイはまた別物
元々無意味なレスに関連性を求めてどうしたいのですか?
申し訳ありませんが直レスじゃないのでスルーします。
誰に言っているのですか。
はいスルー。
みんなも俺のスルーカを見習えよ。
スレを流したいのはわかるが、あまりにも必死すぎるぞ
>>700 よ。
はいまたまたスルー。
以降スルーでお願いします。
940 :
デフォルトの名無しさん :2008/02/08(金) 17:51:16
┏━━┳┓┏┳┳━┳┳━━┓┏━━┳━━┳━━┳━━┓ ┃┏━┫┗┛┃┃┃┃┃┏┓┃┃┏━┫┏┓┃ ━┫ ━┫ ┃┗━┫┏┓┃┃┃ ┃┏┓┃┃┏━┫┏┓┫ ━┫ ━┫ ┗━━┻┛┗┻┻┻━┻┛┗┛┗┛ ┗┛┗┻━━┻━━┛ . _∧∧_, // 中\ \ ./ ( `ハ´)、 `、 / /\ \つ つ、ヽ | | ,\ \ ノ | | ヽヽ し \ \) / / \ `\_____\' // ヽ、 ____,, /
このバインダーどうすればいんだー
イラネ
スルーで
そもそもお前よく考えろよ そんなんで時間って短縮できるの?マジで? だってさぁ、プレイヤーの入力を受け付けるから次の画面が決定する場合のが多いじゃん? ↑↓→←な で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし 入力を受け付けるまで次の画面って描画する意味ないじゃん ていうか内部の処理が決定しなくね? キューイングなんてどれだけ意味があるのかさっぱりわからないんだけど? 画面更新が仮に1sごとにくるなら1s以内で処理を終えても 次のフレームの処理なんてやってもたかが知れてると思うんだけど? ていうか安定しなくね?そんな設計にしちゃそもそも駄目じゃね? 1フレ内での時間短縮は意味があるかもしれないけど フレーム間同士の時間短縮ってなんかやる意味あんの?
日本語でおk
>>945 >入力を受け付けるまで次の画面って描画する意味ないじゃん
アニメーションって言葉知ってる?
エロゲプログラマには縁が無い言葉なんだろう
酷い自演だな
どう見ても
>>700 本人が流そうとしてるのが見え見え
楽しいかい?
DX9とDX10の違いっておかしいだろ、DX10のテクスチャ用意しちゃった
MSってManaged DirectXのやる気なくしたんですか?
>>951 XNAに変わったんだっけ?たしか。
少なくともManagedDirectXの事は完全に忘れていい。
>>952 なんか混沌としてますよね・・・
XNAをXBoxに絞って、Windowsは従来どおりアンマネージでガリガリ書くほうが
結局は正解だったんですよね
PC上でXNAで作ったらXBoxで碌なパフォーマンスでませんでした というのは良く聞くハナシ
今以下のような方法で文字を表示してるんですが、ループ内で毎フレーム表示していると 次第に250あったFPSが2とかになって文字が表示されないわ、PC重くなるわって状況になります。 どっかで何かがリークしてるのかと思って、タスクマネージャで見てると最初ガンガン増えて 文字が表示されなくなると、数字は下がるんですが、PCからガリガリ音とか聞こえてきたりしちゃいます。 textはID3DFont*。colorはD3DCOLOR。どちらも正常な内容(と思う…) void Graphics::drawString(const WCHAR* str,int x,int y,DWORD flag){ nt len=wcslen(str); RECT rc = {x,y,x+font.width*len*2,y+font.height}; text->DrawText(NULL,str,-1,&rc,flag | DT_SINGLELINE ,color); } 何かやらかしてますか・・・?
956 :
955 :2008/02/08(金) 22:13:26
追記:ちなみにfontは自前の構造体のデータでwidthが文字の幅、heightが文字の高さです。
その関数だけコメントアウトして比較しろ。話しはそれからだ
>>957 それはもうやってます。言うの忘れてました・・・。
DrawPrimitiveUPで矩形を描画するだけのループにしたところ、タスクマネージャは
緩やかに増加した後、81,000Kほどで止まりました。
呼び出し元はどうなってんの
昔からフレームレートまわりはMSのタイマー関数がおかしいのもあって喧嘩になるな
変なことしてる奴も自分のやってることが無意味であることを証明されたくなくて
話題がでるたびに隠そうとして必死だな
結局、プレイする側に変なこと気にさせるの嫌だろ?
普通に動けば普通に動くのが一番なんだから変なことはしないに限る
>>700 もしつこいが、それ以上に他の奴が敏感に反応しすぎ
>>959 Graphics *g;
・・・
g->drawString(L"もじもじ",120,120,DT_TOP | DT_LEFT);
こんな感じです。
>>960 「おかしい」「喧嘩する」「変なこと」「普通に」
先生、これらがなんのことを指してるのか全然わかりません。
・・・のところでnewしてる? そんでもってどこでもdeleteしてない?
>>962 なんでスルーできないんですか?
なんでスルーできないんですか?
>>963 Graphicsオブジェクトはnewで作っていません。というかループ内にnewはありませんでした。
関係ないと思うけど、引数で渡したL"もじもじ"はちゃんとどこかで消えるんですか?
引っ張るねえ
>>967 なんでスルーできないんですか?
なんでスルーできないんですか?
>>965 よく分からんがnewしてなきゃぬるぽ?
>>965 Graphics *g;
まずこれを
Graphics *g = NULL;
このようにしろ
で、
g->drawString(L"もじもじ",120,120,DT_TOP | DT_LEFT);
ここのgに入っている値をチェック
>>967 まるでというより、どう見ても本人です。
本当にありがとうございました。
>>972 なんでスルーできないんですか?
なんでスルーできないんですか?
お前らも俺のようにスルーカを磨けよ。
お前らのやることなんか全部スルーっとお見通しだ!!
m9(^Д^)スルーカー!!
次スレ誰か立てろよ
>>969 ,971
ここでは説明を省きますが、とにかくGraphics*はNULLでもないし間違った値でもありません。
直前にg->setFont(font);などとしていますが、これらは正しく動いています。
で、まさかと思ってDrawTextだけをコメントアウトしたら、症状は治まりました!(もちろん文字は出ません)
DrawTextってBeginSceneやEndScene以外に何か前処理・後処理が必要なんでしょうか?
それとも引数おかしいでしょうか?
まじめに質問してる人がいるのにこの流れはかわいそうw
>>980 説明省くなよ・・・
あと、スプライトの設定は?g_pSprite->Begin()見たいな奴
説明が足りなさすぎなんだよな SDKのバージョンとか D3DXのフォントつかってるのかどうかとか LPD3DXFONTでやってるなら DrawTextの第一引数に描画するためのスプライトを設定しないとダメははずだが
>>982-983 スプライトは設定してませんでした・・・。描画されてたけどダメなんですかね?あとSDKのLibが
色々ごっちゃになっててバージョンはNovember 2007を使ってますが、
CBuilder_DX92_libsというのも混ざってます。コンパイラはBCC
とりあえず、バックバッファ取得→GetDC()→GDIのDrawTextで描画でメモリも増えず、
描画されたので、文字に関してはこれが安全そうなのでこれにします。お騒がせしましたm(_ _)m
フォントを生成しておいて開放してなかったんじゃね?
ID3DXFontとか使わんで自分で文字描画したほうがいいぞ。 ID3DXFontは重い。昔よかマシだけど。
なにも考えないでアドベンチャーゲームとか作ると 3行15列のテキストを表示するだけで鬼のような重さになってたな 一度テクスチャに書き込んでRGBAのデータを作って そのテクスチャを使って描画とかアフォなことしなきゃいけなかったな いまもそうなのか?
Win95が出た頃、俺はGameSDKの存在も知らず、SetPixelでキャラ描いてた。
>>987 それを一文字単位でやってる
用途に関係なく速いし意外と難しくない
エラー E2238 C:\Documents and Settings\My Documents\Myfolder\bccdev1221\3Dtest\Image.cpp 2: 'D3DXVECTOR4' の宣言が複数見つかった エラー E2344 c:\Program Files\Microsoft DirectX SDK (November 2007)\include\d3dx9math.h 274: 一つ前の 'D3DXVECTOR4' の定義位置 エラー E2451 C:\Documents and Settings\My Documents\Myfolder\bccdev1221\3Dtest\Image.cpp 3: 未定義のシンボル D3DXVECTOR4 エラー E2451 C:\Documents and Settings\My Documents\Myfolder\bccdev1221\3Dtest\Image.cpp 16: 未定義のシンボル fillSurface(関数 Image::Image(unsigned int,unsigned int,int) ) エラー E2451 C:\Documents and Settings\My Documents\Myfolder\bccdev1221\3Dtest\Image.cpp 98: 未定義のシンボル D3DXVECTOR4 これってどういうことなのでしょう?明らかに定義されてるのに未定義と出てしまいます
馬鹿ばっか
あなたはレベルアップした フォント描画を覚えた 禿ワロ(w
>>990 一行目のエラーが原因だろ。常考。
>>991 October 2004のSDKだと引数の多い方しか定義されていないな。
MSの日本語ドキュメントは更新が2002年で、
DirectX8.1英語ドキュメントのD3DXにHFONTを使った関数が説明されている所を見ると、
DirectX9の更新途中で、引数の多い方に切り替わったと解釈するのが妥当か。
>>993 でもそういう日々の一歩一歩積み上げが大事なんだよね
なんかいきなりパワーアップを狙ってそいつに絶対できなさそうな質問ばっかりしてくる
新人みて改めてそれが大事だと思った
>>994 常考って・・・わざわざ最初にそれ書いてんのは未定義のシンボルが
明らかに単純なインクルードミスじゃないってことを示すためにやってるんだけど・・・
当然自前で書いたD3DXVECTOR4の宣言を消せば上2つのエラーは消えるけど、下のは残り続けるんです。
なぜそれを最初の質問で書かないのか
>>996 まだ出すべき情報が出ていないので何とも言えんがifdefはどうよ。
>>998 ifdefでどうするんでしょう?ていうかスレ立てないとやばそうね
1000 :
デフォルトの名無しさん :2008/02/10(日) 17:54:52
そもそもお前よく考えろよ そんなんで時間って短縮できるの?マジで? だってさぁ、プレイヤーの入力を受け付けるから次の画面が決定する場合のが多いじゃん? ↑↓→←な で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし 入力を受け付けるまで次の画面って描画する意味ないじゃん ていうか内部の処理が決定しなくね? キューイングなんてどれだけ意味があるのかさっぱりわからないんだけど? 画面更新が仮に1sごとにくるなら1s以内で処理を終えても 次のフレームの処理なんてやってもたかが知れてると思うんだけど? ていうか安定しなくね?そんな設計にしちゃそもそも駄目じゃね? 1フレ内での時間短縮は意味があるかもしれないけど フレーム間同士の時間短縮ってなんかやる意味あんの?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。