07/11/27 16:56:40
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part14 【C】
スレリンク(tech板)
2:1
07/11/27 16:57:10
【関連サイト】
MSDN DirectX
URLリンク(www.microsoft.com)
DirectX Home Page
URLリンク(www.microsoft.com)
BBX (掲示板)
URLリンク(isweb8.infoseek.co.jp)
DXライブラリ置き場
URLリンク(homepage2.nifty.com)
Lamp:ゲーム開発とその学習をサポートするミドルウェア
URLリンク(lamp.sourceforge.jp)
TWINTAIL LOVERS.
URLリンク(www.twin-tail.jp)
Pastel's Laboratory
URLリンク(www.roy.hi-ho.ne.jp)
GamDevPukiWiki - DirectX総合スレ (過去ログ等)
URLリンク(gamdev.org)
GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
URLリンク(gamdev.org)
ゲームを作るための素材を集めよう まとめサイト
URLリンク(paw.my-sv.net)
3:1
07/11/27 18:28:32
次スレがなかったようなので、適当に建てました。
14のヤツをそのまま(前スレだけ変えた)持ってきたので、必要なヤツは↓で追加してくれ。
4:デフォルトの名無しさん
07/11/28 10:45:46
おつ
5:デフォルトの名無しさん
07/11/28 18:19:22
DirectXのアプリケーションウィザードってVisualStudio2005じゃ使えないのでしょうか?
6:デフォルトの名無しさん
07/11/29 18:25:57
使えないし、使う必要性もない。
7:デフォルトの名無しさん
07/11/29 18:31:05
SDKのサンプルに入ってる
DXUT使えば同じくらい低コストで導入できるんじゃね?
8:5
07/11/29 18:45:59
>>6
それを使わないとほとんどの内容がムダになってしまう本を読んでいるんですよ・・・。
>>7
・・・さっきネットオークションで旧バージョンのVSを3万近くで入札しちゃってそのまま
落札しそうなんですが、すっごいムダなことしてしまったでしょうか(多汗)
9:デフォルトの名無しさん
07/11/29 19:43:52
ソフトじゃなくて本を変えればいいのに
10:デフォルトの名無しさん
07/11/29 20:02:10
質問です
現在STGを作っていてBGMとSE再生にDirectMusicを使っています
BGMに10秒程度のwaveデータをループ再生で使用しているのですが
FPSが60を下回る程度に重くなると頻繁に音飛びしてしまいます
どうすれば音飛びをなくせますか?
11:5
07/11/29 20:07:17
>>9
滅多にない名書なんです。
12:デフォルトの名無しさん
07/11/29 20:28:22
その書籍の名前は?
13:デフォルトの名無しさん
07/11/29 20:29:57
>>10
その程度の量ならDirectSoundでバッファに全部詰めてループ再生すべき
14:デフォルトの名無しさん
07/11/29 21:27:27
>>13
waveの再生にはDirectSoundの方が適していると言う事でしょうか。やってみます
15:5
07/11/29 21:36:42
>>12
今給黎さんの書かれたDirectX9シェーダプログラミングブックという本です。
16:デフォルトの名無しさん
07/11/29 23:36:30
>>15
つーかお前50ページくらいしか読んでないだろ
その本もってるけど
ぜんぜんアプリケーションウィザードが必須って内容じゃないぞ
たぶんお前のこの本は早すぎる
もうちょっとWindowsプログラミングの知識をつけてからにしたほうがいいぞ
そもそも
アプリケーションウィザードが吐き出した
サンプルコードがついてるんだから
新規作成できなくてもサンプルコードをベースに
自分で書き直せばいいんだが
17:デフォルトの名無しさん
07/11/30 00:08:09
ウィザード?何それ?
そんなもの使ったことないけど、今じゃDirectX10で開発している俺様が通りますよっと。
18:5
07/11/30 00:19:06
>>16
72Pまで読みました。
まずはシェーダ記述の部分を学びたいので、それ以外の枠組み的なところはできるだけ
著者の説明に沿うカタチで進めたいんです。
そうしながらシェーダ記述が構造全体の中のどの位置でどのように働くかの理解も深まると
期待しています。
サンプルコードはうまく書き直せず、コンパイルが通りません。
というか.net 2002を落札しそうです・・・。
19:デフォルトの名無しさん
07/11/30 01:11:18
こんな単純な構造も扱えないなんて・・・
20:デフォルトの名無しさん
07/11/30 02:18:27
割り込みで質問すいません。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;
}
}
21:デフォルトの名無しさん
07/11/30 03:06:56
>>18
>著者の説明に沿うカタチで進めたいんです。
進めたいっていうか知識がないから
そうするしか手段がないだけだろ
素直に入門書から入れって
その後にもう一度その本を読んだほうが絶対に身になるから
>>20
GeForce6世代以降だと
そもそもREFがサポートされてないボードもある
CapsViewerでReferenceがサポートされてるかチェック
8600なら頂点シェーダが使えるから
HALでD3DCREATE_HARDWARE_VERTEXPROCESSINGで作ればいいんじゃね?
もうちょっと汎用でつくるなら
頂点シェーダのバージョンを調べて
2.0以上ならD3DCREATE_HARDWARE_VERTEXPROCESSING
未満ならD3DCREATE_SOFTWARE_VERTEXPROCESSING
で切り替えるとか
22:デフォルトの名無しさん
07/11/30 17:44:21
初めて質問させていただきます。
Visual C++ 2005 Express Editionを使って「Microsoft DirectX SDK (Nov 2007)」をインストールしてパスも通しました。
解説HP等を巡ってサンプルをいじったりしていたのですが、
URLリンク(www.plustarnet.com)
↑こちらの「スケルトンプログラム」を実行しようとすると
fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
という風なエラーが出てしまいます。
DirectXのIncludeフォルダの中にも'dmusici.h'というファイルは見つかりません。
インストールを失敗したかと思い、インストールしなおしましたが同じ結果になってしまいます。
Directxのバージョンとかは関係ないですよね?
よろしくお願いします。
23:デフォルトの名無しさん
07/11/30 17:53:53
URLリンク(www.microsoft.com)
この DirectX SDK には次のコンポーネントは含まれていません
Direct3D8 およびそれ以前の全てのバージョン
Direct3D RM
DirectAnimation
DirectMusic
DirectInput7 およびそれ以前の全てのバージョン
DirectPlay
DirectPlayVoice
DirectX8 時代の HRESULT 変換ルーチン
Managed DirectX サンプルとドキュメント
これらのコンポーネントを使いたい開発者は、MSDN から August 2007 DirectX SDK をダウンロードする必要があります。
24:22
07/11/30 19:02:54
>>23
素早い回答ありがとうございます。
結果は見事エラーが消えてくれました!
ですが、コンパイラのほうでエラーが出たので修正にいそしみます・・・
25:デフォルトの名無しさん
07/11/30 20:26:35
22じゃないんだけどAugust 2007 DirectX SDKはMicrosoft DirectX SDK (Nov 2007)に上書きしていいの?
26:デフォルトの名無しさん
07/11/30 21:55:54
この本に付いてたソースを弄って現在DirectXについて勉強中です。
URLリンク(www.sbcr.jp)
ソースうp(一部いらん事を追加してますが、WindowProcのif文だけコメントアウトしてもらえればOKです)
URLリンク(www.uploda.org)
容量減らすためコンパイル済みファイルは削除しています。
う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:デフォルトの名無しさん
07/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;
}
みたいな方法でグローバル変数操作しようとしたんですがだめっぽくて・・・どうすればいいんでしょうか。。
28:デフォルトの名無しさん
07/11/30 22:48:11
>>26
せめてエラーのないソースを上げようよ
29:デフォルトの名無しさん
07/11/30 22:51:58
>>27
ここはWindowsプログラム初心者スレじゃない。
基礎からやり直せ。
30:デフォルトの名無しさん
07/11/30 23:01:59
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;
}
とすれば君のやりたいことはできるよ
そんな設計でいいのかどうかは別として
31:デフォルトの名無しさん
07/12/01 00:41:54
ATI Radeon9700 + DirectX9.0cですが
Direct3D、リファレンスデバイスのcaps.MaxActiveLightsがUINT_MAXを返します。
しかし、SetLightはそこまで大きいインデックスには対応していないらしく
ある程度の値でエラーを返します。
これはバグってるんですかね?それともSetLightのインデックスの最大値は別の方法で
取得する必要があるんですか?
また、Direct3D9の固定機能パイプラインで、テクスチャ座標値をそのままピクセル色として
出力することは可能ですか?ピクセルシェーダを使わないと無理でしょうか?
32:デフォルトの名無しさん
07/12/01 11:55:35
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)を使用しています。
簡単ですがレポートと再現コードをまとめておきました。
参考にご覧ください。
URLリンク(kissho.xii.jp)
33:デフォルトの名無しさん
07/12/01 19:13:53
DirectSoundの質問です。
waveファイルを扱うとき、mmioOpenで開き、ファイル形式、チャンクのチェック等という処理をしていくと思います。
このファイルを開く処理の時、ハードディスク上のファイルではなく、メモリに読み込んだデータを
使いたいのですが、可能でしょうか?また、どのようにすればいいのでしょうか?
宜しくお願いします。
34:33
07/12/02 02:31:42
自己解決しますた
35:デフォルトの名無しさん
07/12/02 19:37:59
>>10で質問した者ですが、DirectSoundを使うことで音飛びしなくなりました。
しかし同時に複数の音が再生できないようなので、BGMはSound、SEはMusicで再生しています。
DirectSoundとDirectMusicを同時に使っても不具合が起こったりしないでしょうか?
36:デフォルトの名無しさん
07/12/03 01:22:03
質問です。
画像をキーボードを使って移動できるようにしたのですが、
Alt + Tabでデバイスをロストすると、画像はちゃんと表示されるのに、キーボードを使っての画像の移動ができなくなってしまいます。
何が原因でしょうか。
移動にはDirectInputを使って直接キーボードからの入力を取得しています。
37:デフォルトの名無しさん
07/12/03 07:58:20
>>36
画面が復帰したときに
Acquireしなおせばいいんじゃね?
38:デフォルトの名無しさん
07/12/03 18:38:44
DirectXの導入について質問です。
URLリンク(www.plustarnet.com)
を見ながらDirectXをBCC Developerで使おうとしているのですが、DirectX Novenber 2007をインストールしてもコントロールパネルにDirectXの項目が出てきません。
この状態で上記サイトのサンプルプログラム(2D編の始めのところにあるsampleSTG)が出来るかどうか試してみたのですが、エラーが大量に出て上手くいきません。
これはそもそもDirectXのインストールをやり直すべきなのでしょうか、それともサイトが古いから仕様が変わったのでしょうか。
39:デフォルトの名無しさん
07/12/03 20:43:08
>>38
いつからだったかコンパネにはでなくなったような
プログラムメニューの
DirectX Utilitiesの
DirectX Control Panelで同じのがみれるよ
ただNovenber2007は見てないのでなかったらすまん
おそらくエラーと上記は無関係
とりあえずincludeのパスは通したのかい?
通してエラーがでてるのなら
エラーコードをいくつか書いてみそ
話はそれからだ
40:デフォルトの名無しさん
07/12/04 08:05:33
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倍以上のパフォーマンスが出ています。
41:デフォルトの名無しさん
07/12/04 10:02:12
>>40
すまん、お前の日本語はどうも理解しがたい
具体的に書いてくれ
42:40
07/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 です。
43:デフォルトの名無しさん
07/12/04 11:05:25
28は遅すぎる
REFで動いてないか?
44:デフォルトの名無しさん
07/12/04 11:13:05
あとSDKのライブラリのリンクは
きちんとx64のほうを指定しているのかい?
45:40
07/12/04 11:56:04
REFだと1fps程度ですね。
x64でリンクってのは、この場合はサンプルexeなので
SDK付属のexeを実行してるだけです。
参考までに、Vista環境の方で、どの程度のfpsが出るのでしょうか?
46:デフォルトの名無しさん
07/12/04 12:35:03
ノートですまんが
32bitVista Cor2DuoT7500 GeForce8600GTM
スキニングのタイプで多少は前後する
SOFTWARE 300fps
HARDWARE 350fps
くらい
47:40
07/12/04 14:25:29
どうやら私の環境だけのようですね。
自分がコーディングしたプログラムだけなら何かミスがあるのかなと考えたのですが、
SDK付属のサンプルexeでも同じような状態だったので・・・。
どなたかご指摘の点とかないでしょうか?
一応、Debug/Retail Runtimeは確認しています。
48:デフォルトの名無しさん
07/12/04 18:59:52
初心者なので変なことを言ってたらすみません。
ゲームを作っているのですが、
キャラクターが壁などのオブジェクトにぶつかった時に進む方向を
自動で変えるにはどうしたらよいですか?
壁にぶつかる角度などで、向き変えたい方向が違うのでif文での場合わけがわかりません。
よろしくお願いします。
49:デフォルトの名無しさん
07/12/04 19:03:08
if (vector==0) {
//右へ移動する
//壁にぶつかると変数vectorの値を変える
} else {
//上へ移動する
}
50:デフォルトの名無しさん
07/12/04 19:19:16
>>48
お前はDirectXとかうレベルではなく、それ以前の問題。
そんな初歩的なアルゴリズム、管質いってやってくれ。
51:デフォルトの名無しさん
07/12/04 19:40:16
3Dでやっていて、どのような角度で壁にぶつかっているのかがわかりません。
進む方向は回転行列を使って変えていて。。
バイオハザードの、壁にぶつかってもキャラクターは走っているのに、
ぶつかった時の入射角によって左右のどちらかに、
キャラクタの座標がずれていくようにしたいのですが。。
52:デフォルトの名無しさん
07/12/04 19:44:40
回転行列に使ってる角度はどこに消えたんだよw
53:デフォルトの名無しさん
07/12/04 20:34:18
「壁ずり」でググるんだ。
ここはDirectXの質問スレであって、ゲーム開発の質問スレじゃないんだ。
だからもう迷い込むなよ。
54:デフォルトの名無しさん
07/12/04 20:38:24
壁ずりを理解したら次は床ずりも理解してくれ
55:デフォルトの名無しさん
07/12/05 22:56:55
ライトを設定しないでも、読み込んだモデルは色付きで表示されて見える状態ですけど、
ライトの光が当たる部分だけ照らされて、当たらない部分は真っ暗にするにはどうすれば良いでしょうか?
56:デフォルトの名無しさん
07/12/05 23:18:28
>>55
すげぇ抽象的な質問だな
とりあえず
固定機能パイプラインでやるのか
ピクセルシェーダーでやるのかくらい書こうぜ
57:55
07/12/05 23:24:22
>>56
固定機能パイプラインでやります。
58:デフォルトの名無しさん
07/12/05 23:31:00
>>57
ほい
URLリンク(msdn.microsoft.com)
59:デフォルトの名無しさん
07/12/06 09:58:02
【質問テンプレ】
[1] 授業単元: DirectX
[2] 問題文(含コード&リンク):サンプルソースを元に入力クラスを作成して、表示させた画像を動かす。
(車を動かすので、可能ならアクセルとブレーキを再現)
サンプルソースを下記にうpします。(mainとヘッダーがあるためzipファイルです。)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: どちらでも可
[4] 期限: 2007年12月6日 17時
[5] その他の制限: 制限はなし
すっかり課題を忘れてて手をつけていない
よろしくお願いします
60:デフォルトの名無しさん
07/12/06 10:28:08
ここは宿題を片付けますスレではないんだが・・・
そもそもサンプルに不備がある
技術的な問題でなくたんなる初期化の問題
こんなの誰もやりたがらん
いくらか出してくれるなら話は別だが
61:デフォルトの名無しさん
07/12/06 12:24:12
そもそも設計がおかしくね?
DirectInputインターフェイスを親クラスで
static宣言して
複数生成されるかもしれないデバイスを
その子クラスで作るって
気持ちは分かるがいまいち再利用性に乏しいような
いったいどこで初期化させるつもりなんだろう?
単に静的メンバの使い方の学習の一環でこんなことしてるのだろうか?
62:59
07/12/06 13:52:40
>>60、61
そうなんですね。
授業全く聞いてなかったから、何がなんだかわからなくて
うpしたファイル見て頂いただけでもありがたいです。
63:デフォルトの名無しさん
07/12/06 14:07:09
>>62
ゲーセン乙。
64:デフォルトの名無しさん
07/12/06 19:29:58
こんな授業に金出してるのか・・・。
しかも、聞いてなくて課題ができないとかって。
君、学校(?)に行く目的は課題の達成なの?
それとも、学校に行くのが目的になってるの?
どっちにしても、すでに健全な状態ではないよね。
65:デフォルトの名無しさん
07/12/06 19:52:13
プログラム実行時に
Direct3D9: (ERROR) :Device cannot perform hardware processing. ValidateCreateDevice failed.
って出るんですが原因と解決法とかわかりませんか?
とりあえず見た目は正常に動いてるようには見えるんですが気になります。
66:デフォルトの名無しさん
07/12/06 23:22:34
何も無いところにエラーは出るはずないので
必ずそのエラーを吐いている関数があるはず
とりあえずデバックで順次実行してみて
そのエラーを吐いてる箇所を絞り込んでみたら?
67:デフォルトの名無しさん
07/12/06 23:41:17
俺にはハードウェアを(その環境が)サポートしてないっていうエラーに見えるんだけど。
エラーの発生源ってデバイスの初期化部分じゃないか?
グラボを積んだ環境で試してみろよ。それかソフトウェアエミュレートに切り替えればいいはず。
68:デフォルトの名無しさん
07/12/08 16:12:52
自宅のノートパソコンでプログラムを起動すると起こるバグなのですが。
『アニメーションメッシュを表示した途端に、その他のただのメッシュやテクスチャが全て表示されなくなる』というバグです。
細かい状況は
・学校のデスクトップパソコンだと起こらない
・極端に軽いアニメーションメッシュの場合、起こらない
・アニメーションメッシュを読み込んだだけで、表示しないのなら起こらない
・アニメーションメッシュ自体は、一番最初に表示した1種類のみ何体でも表示できる
・一度表示すると途中からflgをFALSEにしてアニメーションメッシュを表示させなくしても、テクスチャなどは消えたまま
・一度表示するとアニメーションメッシュを解放して2週目に入ってアニメーションメッシュの読み込みすらしなくてもテクスチャなどは消えたまま
・zバッファをOFFにしたテクスチャだけは表示できる
なので状況としては「一度でもアニメーションメッシュを表示させると何があってもテクスチャなどは消えたまま」
という状況です。
ほぼ間違いなく、アニメーションメッシュの表示部分が悪いというところまでは分かるのですが…。
要領を得ず、長文で申し訳ありませんが回答をいただけたら幸いです。
69:デフォルトの名無しさん
07/12/08 16:28:41
>>68
その自宅のノートのGPUはどこの会社のどのバージョンよ。
話からするとハードウェアに問題があるのは間違いなさそうだけど、公表されんといいようがない。
70:デフォルトの名無しさん
07/12/08 19:35:00
>>69さん
書き込みが遅くなって申し訳ありません。
パソコンの種類が
URLリンク(dynabook.com)
スペックが
URLリンク(dynabook.com)
です。
71:55
07/12/08 19:40:45
>>58
ありがとうございました。
72:デフォルトの名無しさん
07/12/08 19:42:57
>>70
単なるスペック不足
3Dの開発ができるVGAではないな
73:デフォルトの名無しさん
07/12/08 20:00:31
>>72さん
やっぱりそうなんですか…。
ありがとうございました^-^
ただ、何とか「勝手に消す」→「カクカクでもいいから動く」ようにしたいのですが
そこの辺りはDirectX側で変更できないのでしょうか?
74:デフォルトの名無しさん
07/12/08 20:13:33
>>73
なんとも判断に困る。
ドライバとDXのバージョンは最新?最新でもノートのドライバは3Dを前提に考えて作ってないことが多いから、
バグが残ってるのかも。
俺の結論としては、オンボードであることと、一つ目のメッシュだけは表示できるというところからも、メモリ不足が一番怪しいと思う。
アニメーションメッシュって比較的メモリを食うはず。
対策としては、PCを変えるのが一番手っ取り早いけど、
それでもノートでしたいならBIOSの設定でSDRAMのグラフィックメモリ割り当てサイズを増やしてみたら?
一回最大割り当てでやってみて、それでも無理ならほかの要因かもしれん。
75:デフォルトの名無しさん
07/12/08 21:25:39
>>74さん
とにかく、何か特殊な事をしなければ動かないということですよね。
ここはやっぱり「万能に」は諦めて説明書に「他の3Dゲームが出来る事を確認した上で起動をお願いします」
と注意書きを入れるべきですね…。
卒業生の代表作品として、体験入学参加者などに配られる予定なので
何とかして、せめてカクカクでもいいからどこでも動くようにしたかったんです。
76:74
07/12/08 21:35:16
>>75
ものすごい面倒だが、もしかすると旧DirectXのバージョンでコンパイルすると行けるかもしれん。
俺はやったことないから保証は出来んが、DirectX8とかなら古いPCでも通るかも。
まあノートでゲームの性能を期待するなっていうのも本当だが。
77:68
07/12/08 23:03:39
>>74さん
返信が遅くなって申し訳ありません。
SDKの方は旧バージョンがあったのでやってみたのですがやはり動きませんでした。
僕のプログラムだとDirectX8ではちょっと動かない関数を使っているので無理です;
友人宅のデスクトップでは動いたので、恐らく動かないほうがおかしいのだとは思います。
前にこのノートパソコンにかなり軽めのMMOを入れてみたときに、本当にカクカクではあったのですが動きました。
なので、何か方法はあると思うのですが…。
新聞奨学生なので今日はもう眠らなくてはいけませんが、治らなかった場合、また後日より詳しい状態を調べた上で書かせていただきます。
それでは長らくお付き合いいただき、誠にありがとうございました。
78:デフォルトの名無しさん
07/12/09 00:09:19
> 本当にカクカクではあったのですが
REF なんじゃろうなぁ...
79:デフォルトの名無しさん
07/12/10 20:15:23
HLSLでfor文回してるんですけど、
かなりの数ループできないんですが・・
命令数って限られてるんでしょうか?
そうだとしたらその理由は?
80:デフォルトの名無しさん
07/12/10 20:53:50
お前はもう終わってる。
マルチポストは死亡フラグなんだよ。
81:デフォルトの名無しさん
07/12/10 21:36:31
普通のプログラムでも1Gもサイズがあったら動かなくなるんじゃない?
82:デフォルトの名無しさん
07/12/10 21:43:51
マルチポストとはどういう意味?
83:デフォルトの名無しさん
07/12/10 22:59:11
浮気者
84:デフォルトの名無しさん
07/12/12 00:50:11
誠氏ね
85:デフォルトの名無しさん
07/12/13 01:34:46
スレリンク(gamedev板:468-470番)
がいし感←なぜか変換dけいなf
86:デフォルトの名無しさん
07/12/13 16:40:23
ちょっと聞きたいのだけど、Directxと32Apiを組み合わせてプログラム
を組めますか?
Win32Apiのラジオボタン等の機能と組み合わせて作れれば良いなあ
と思ったもので・・・
87:デフォルトの名無しさん
07/12/13 17:16:49
Win32APIっていうか
GUIにアクセスして
Windowsコントロールを描画することはできるけど
GUIの速度がDirectXと比べ物にならないくらい低速だから
DirectXを使うメリットを殺すことになる
88:デフォルトの名無しさん
07/12/14 04:12:49
>>87
有難うございます。
何と言うか漠然としすぎて何とも言え無いです。
出直してきます
89:デフォルトの名無しさん
07/12/15 21:06:58
自分のPCにはSDK9.0が入ってます。
あるサンプルをダウンロード、中を確認したらd3d8.hとd3dx8.hがインクルードされてたので
これをd3d9.h、d3dx9.hに直し、追加の依存ファイルも8から9に直してコンパイル
したら何百ものエラーが出てきました。
色々試したけど原因が全く分からないのでよろしければ誰か教えてください><
90:デフォルトの名無しさん
07/12/15 21:14:32
バリバリ原因が丸わかりだろ。
91:デフォルトの名無しさん
07/12/15 21:16:10
>>89
完全下位互換と言うわけではないからファイルが違うと全くの別物と考えたほうがいい。
同じファイル名でも中身は何度も添削しているから当時のバージョンじゃないと使えない場合もあるし。
92:デフォルトの名無しさん
07/12/15 21:27:34
>>91
そうだったんですか・・・
9.0以前のものは全て使えると思ってました^^:
ご返答ありがとうございました。
93:デフォルトの名無しさん
07/12/15 22:23:52
Xファイルに関して質問です。
ひとつのモデルに対し、複数のアニメーションをさせることはできるのでしょうか?
たとえば、あるキャラクターで、Aを押したらパンチ、Bを押したらキック、という風にしたいのです。
やはり、パンチ用とキック用でXファイルをわけるしかないのでしょうか。
94:デフォルトの名無しさん
07/12/15 22:29:24
>>93
二つのアニメーションを連結して、それぞれのアニメーションでフレームを補正して使う。
例えば、AとBのアニメーションを連結したら、
Aの初めは、0
Bの真ん中は、0.75
っといった感じ。
95:デフォルトの名無しさん
07/12/15 22:41:53
>>93
できる
SDKサンプルのtinyも実は
複数アニメーションを持ったXファイルだ
ただし切り替えに関して詳しく説明されてるところはあまりない
ID3DXAnimationControllerでぐぐればヒントくらいはみつかるかも
96:デフォルトの名無しさん
07/12/16 17:29:57
HLSLを使ったサンプルでLPD3DXEFFECTのPassを使おうとしてエラーが出ます。
LPD3DXEFFECTにPassが無いのですが別のものに替わったのでしょうか。
97:デフォルトの名無しさん
07/12/16 17:44:24
BeginPass
EndPass
98:デフォルトの名無しさん
07/12/16 18:50:11
メジャーバージョン変えずにAPI蛙のやめれって感じですよねほんと
99:デフォルトの名無しさん
07/12/16 23:31:10
どうしても1パス終了ごとに
PassEndを入れさせたい「事情」があって
開始時の互換性をなくすことで
両方セットで変更させようとした。ってオチじゃねぇの?
100:デフォルトの名無しさん
07/12/17 06:19:42
地獄への道は善意で敷き詰められている。
職場では変更を極力抑えるのが美徳だけれど、その繰り返しが死の行軍を生み出すのが常である。
101:デフォルトの名無しさん
07/12/18 22:22:44
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
これらの引数を使いこなしたいんだけど分かりやすく解説している
ページないべ?
102:デフォルトの名無しさん
07/12/18 23:45:27
これはひどい
103:化石発掘
07/12/19 02:37:51
>>101
[shred of game]
URLリンク(platz.jp)
104:デフォルトの名無しさん
07/12/21 11:00:39
URLリンク(wisdom.sakura.ne.jp)
ここのページ下部にある背景が緑の部分のソースをまるごとコピーして、VisualStudio2005の無料版でコンパイルしました。ところが
「fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?」
というエラーが出てコンパイルできません。エラーで検索してみたところ、ソースの最上段に #include "stdafx.h"
を加えればコンパイルが通るらしいので試してみた所
「fatal error C1083: include ファイルを開けません。'd3d8.h': No such file or directory」
と表示されてコンパイルが通りません。
DirectXSDKはさっき落とした最新版(サンプルみたらDirectX10も使えそう)で、パスはたぶん通ってます。
どうしたらコンパイルができるようになりますか?
105:デフォルトの名無しさん
07/12/21 12:58:24
まず、stdafx.h関連はスレ違い。DirectX以前の話なんで、よそで勉強して頂戴。
で、最新のDirectX SDKって何?November2007ならリリースノートに
この DirectX SDK には次のコンポーネントは含まれていません
* Direct3D8 およびそれ以前の全てのバージョン
ってあるから、Direct3D8はサポート外なんじゃないの?
もしインストールしたSDKのIncludeディレクトリにd3d8.hがあるんなら、Includeパスの設定を再確認しれ。
あと、少なくともJune2006にはd3d8.hは入ってるのを確認した。
106:デフォルトの名無しさん
07/12/21 20:10:39
November2007です、d3d8.hがなくて、代わりにd3d10.hが入ってました。
アンインストールしてJune2006入れてきます。ありがとうございました。
107:デフォルトの名無しさん
07/12/21 21:01:44
June2006にもd3dx10.hはあるけどね。
あと、そのページはDirectX8について記されてるんだけど
DX10がやりたいならよそを見たほうが良いよ。
初期化まわりは8→9→10で全然変わったからやり直しになるし。
あと、DX10は動かすにはVistaがいるから。念のために。
108:デフォルトの名無しさん
07/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を入れると正常に動作します
なぜでしょうか、ご教授ありましたらお願いします
109:デフォルトの名無しさん
07/12/22 22:07:23
Direct3DでWM_PAINTで描くのはありですか?
110:デフォルトの名無しさん
07/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
07/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だと正常です・・・
112:デフォルトの名無しさん
07/12/23 07:34:04
プロファイリングしたら?
D3DXSpriteなんてただでさえDirectXのバージョンに依存するからみんな回避してるのに、
この情報だけで分かるエスパーは居ないと思う。
つPIX for Windows
つDevPartner Profiler
まずは、どこで処理時間が落ちてるか見たほうが早いよ。
113:108
07/12/23 09:34:36
>>112
ありがとうございます
その後の調べでどうも大きな絵を大量に呼び出すと落ちる様子
たとえ呼び出し側での大きさの縦横は1*1でも、元の絵が大きいと
どのPCどんな処理でも避けられないらしいので
妥協して少し絵の大きさを改善してみますm(_ _)m
お答えありがとうございました
114:デフォルトの名無しさん
07/12/23 11:35:36
てか、元のテクスチャのサイズがでかかったら
パフォーマンスが落ちるのは当たり前じゃ
115:デフォルトの名無しさん
07/12/23 11:37:43
あなるほど
116:108
07/12/23 11:43:53
>>114
いや、initでの呼び出しで重くなるのはわかるんですが
メインループの中では1*1でも重いんですよ・・・
117:デフォルトの名無しさん
07/12/23 12:00:51
表示で小さくしてるってことは
内部的に縮小してるってことだ
LPD3DXSPRITEがどういうアルゴリズムで
拡縮してるかはしらんがバイリニアってことはないだろうし
ぼけたりすることを考えるとなんらかのフィルターをかけているのは想像つく
それを巨大なテクスチャに適用してるんだから重いのは当たり前
118:108
07/12/23 12:11:19
私の書き方がわかりにくくてすいません
要は2000*2000の画像をinitで読み込んで
1*1の部分しか表示していないのにそれを10個ほど並べたら重いんです
3個くらいなら正常なんですが・・・・
フィルタ関連で重くなるようなら少し見直して見ますm(_ _)m
ありがとうございました
119:デフォルトの名無しさん
07/12/23 12:19:52
だから・・・
>2000*2000の画像をinitで読み込んで
この時点で重い処理がすべて終わってるわけではない
簡単に言うとここではVRAM上に
2000x2000の領域を確保して画像の色情報を格納してるだけ
基本的には毎回描画のたびにこの
2000x2000の領域にアクセスして
そこの情報をバックバッファに転送することになる
元のサイズが大きければ大きいほど
転送のための時間がかかるし
何らかの処理をかければ当然重くなる
基本的には表示するサイズでテクスチャを作るのが普通
120:デフォルトの名無しさん
07/12/23 12:23:03
ビデオカードによっては
2048×2048にしたら多少は改善されるかもね
121:108
07/12/23 13:17:50
>>119
>>120
そうですか・・・initで読み込んだら以降はもう関係ないものだと勘違いしておりました
スキル不足を痛感いたします
ご教授本当にありがとうございました
122:デフォルトの名無しさん
07/12/23 13:22:14
リファレンスでやってるだけでね?
123:デフォルトの名無しさん
07/12/23 13:50:19
たかだか2048のテクスチャで最近のビデオカードが遅くなるかね~?
なんか、致命的な間違いをしていると思われ。
124:108
07/12/23 14:28:32
>>123
それを15~23個くらい呼んでます
125:デフォルトの名無しさん
07/12/23 17:00:04
そもそもVRAMが足りなくなってて
システムメモリ上に作られてるとか
あるいは
システムメモリとVRAMが共用になってて
バス速度がボトルネックになってるとか
126:デフォルトの名無しさん
07/12/23 17:42:47
実はDX8で開発していますとか言い出すんじゃないだろうな。
127:デフォルトの名無しさん
07/12/23 17:59:09
DirectXを使ってWindowsのゲームを作りたいのですが、
お勧めの入門書を教えてもらえませんか?
作りたいのはビートマニアのように音とシンクした、
シューティングゲームです。
3Dグラフィックは使いません。
128:デフォルトの名無しさん
07/12/23 18:00:57
今のDirectXで3D使わずに絵描くのって無理じゃ
129:デフォルトの名無しさん
07/12/23 18:08:07
ぶっちゃけ
DirectX関連で「これ1冊あれば」って本はないんだよなぁ
3~4冊やってようやく
あ、なんとなく分かってきたかも。となる
どの本もだいたい「サンプルを動かすための」ソースになってるから
なんでそうなってるのかが説明されてないし
応用しようとするととたんに動かなくなったり・・・
数をこなすと何をやってるのかがだんだんわかってくるので
自分でいろいろ応用することができるようになる
130:127
07/12/23 19:02:13
何も知らない状態で、何から始めるのがいいか、
アドバイスをもらいたいです。
>>128
3D描画しかできないんでしょうか?
3Dを使って2Dの描画ができるならいいんですが、
あまり効率がよくないならDirectXを使うこと自体考え直します。
メインでやりたいのは音の制御なので、描画はそんなに凝りません。
シューティングゲームなので、図形の衝突判定ができると便利かもしれませんが。
>>129
それじゃあ、とっかかりとして何を参考にするのがいいんでしょうか?
サンプルを見て数をこなして、少しずつ把握していくしかないんでしょうか?
131:デフォルトの名無しさん
07/12/23 19:06:45
>>130
ゲーム製作初心者なのか
DirectX初心者なのかにもよる
132:デフォルトの名無しさん
07/12/23 19:14:48
>>130
3Dを使って2Dの描画ができるならいいんですが
OK
133:デフォルトの名無しさん
07/12/23 19:19:08
>>130
DirectX9でスプライトが一番お手軽だと思われ。
134:デフォルトの名無しさん
07/12/23 19:37:25
>>130
シューティングゲーム製作本出てるぞ
それを参考にすれば?
135:デフォルトの名無しさん
07/12/23 19:59:17
>>124
なるほど。VRAM足りてないね。
1024*1024のA8R8G8B8テクスチャが大体4MByteね。
2048テクスチャだと4倍の16M。それが15個で240M。23個なら368M。
ちょっと無茶な設計になってると思われ。
不要なテクスチャは必要な時だけ確保するようにした方が良いし、
テクスチャは効率的に隙間無く活用した方が良いよ。
136:127
07/12/23 21:10:44
>>131
>>131
ゲーム制作初心者です。プログラミング歴も1年程度です。
ただ、Javaで簡単なシューティングゲームを作ったことはあるので、
シューティングゲームのアルゴリズムに関してはだいたいどうやるか決めています。
分からないのは音の精密な制御で、ゲームの進行と正確にシンクさせる部分です。
その部分をどうやっていいのか、イマイチ当たりがつかない状況です。
137:デフォルトの名無しさん
07/12/23 21:19:44
>>136
入門書の枠からは外れてるかな。
再生時間'(再生位置)を取得させれば良いだけの話だけど、
この手のゲーム以外で使うことはほとんど無いため扱わない。
ストリーミングバッファの解説が載っていればそれを応用すれば出来ることに気付くかも知れんが。
138:デフォルトの名無しさん
07/12/23 23:48:37
広大なマップを作りたいんですが、バカ正直にモデルを作って読み込んだら物凄く重たくなってしまいました。
程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??
139:デフォルトの名無しさん
07/12/24 00:16:12
>>138
東京から大阪へ行くのに新幹線で行くのでしょうか? という質問をされてどう答えろと。
140:デフォルトの名無しさん
07/12/24 00:31:31
東京の六本木を歩いてるだけのシーンでも、ニューヨークとかパリとか地球全部描いてるわけか?
そんな恐るべき無駄は止めた方がいい
141:138
07/12/24 01:09:58
>>139
??
夜行バスでも行ける、ってことですか??
でも、新幹線で行けるならそれに越したことはないですし、>>138の方法でイイってことかな・・・。
>>140
そ、そんなことはしません(汗)
今までゲームをしてきて、当たり前のように見てきた広大なフィールドを実現するのがこんなにも
たいへんなことだなんて・・・
ゲーム開発者の人を改めて尊敬します。
URLリンク(www.acecombat.jp)
これとか、すごすぎです(;´д`)
142:デフォルトの名無しさん
07/12/24 01:20:10
地面はまっ平ら
木はビルボードにしか見えないんだが
143:デフォルトの名無しさん
07/12/24 01:32:33
ワラタ
144:デフォルトの名無しさん
07/12/24 08:39:45
>>141
アプリケーションに正解なんて無いぜ?
>程よいメッシュ数で一定区画毎のモデルを用意して、必要分だけ読み込んで表示するのでしょうか??
つまり>>139の例で言うと新幹線で行くのも正解だし、バスで行くのも正解、歩いていくのも正解だろ。
自分の案があるならそれを試した上で軽くなる方法が無いか聞かないと。
145:デフォルトの名無しさん
07/12/24 10:02:56
DX9 2007Nov .Net
HLSLについての質問です。
以前PassがBeginPassとEndPassに変わったと言うやりとりがありましたが
上がっているHLSLのサンプルがことごとくエラーを出して正常に実行できません。
サンプルにSDKのバージョンを合わせれば動くでしょうが、そこから最新のバージョンに動かすように修正が出来ませんでした。
現在のバージョンで動くHLSLのシンプルなソースや解説をしているサイトは無いでしょうか。
せめてHLSL部分だけでもあればいいのですが、fxファイルが正常に読み込めエラーが出たりとか・・orz
146:デフォルトの名無しさん
07/12/24 10:12:49
きちんとヘルプが付いてきているだろ。
それで何が問題なんだ?
147:デフォルトの名無しさん
07/12/24 10:53:43
>>145
別にHLSLの部分は何もかわってないぞ
fxファイルが読み込めないのは
どっかに構文エラーがあるからじゃね?
148:デフォルトの名無しさん
07/12/24 11:13:46
>>145
>上がっているHLSLのサンプル
どこのサンプルだよ?
149:デフォルトの名無しさん
07/12/24 11:44:39
>>148
Pass()のままのところもあります(修正してもメモリ周りでエラーが出たり)
t-pot『HLSL』 (画像の下辺りにサンプル)
URLリンク(tpot.jpn.ph)
DirectX9での上位レベルシェーダー言語(HLSL) (最下にサンプル)
URLリンク(www001.upp.so-net.ne.jp)
Shader.jp - Articles-第4回「HLSL スタート」 (上から1/5程の位置にある赤字文の下にサンプル)
URLリンク(www.shader.jp)
その7 HLSLによる極短レンダリング:サンプルプログラム (画像の下辺りにサンプル)
URLリンク(marupeke296.com)
150:138
07/12/24 12:31:45
>>144
分かりました。
ありがとうございました。
151:デフォルトの名無しさん
07/12/24 21:55:38
>>149
俺もうごかねぇや。
てか自前のでさえ動かなくなってた。
詳しく調べてないから分からんが仕様が数箇所で変更されてエラーが複雑化しているように思える。
ぶっちゃけ去年辺りのSDK使えばいいんじゃね?
152:デフォルトの名無しさん
07/12/24 22:36:33
VC++2005、windowsSDK、DirectX9 SDK(October 2006)の環境で
2Dの簡単なゲームを作ろうとしている所です
フルスクリーンモードでSetDialogBoxModeを使用している
全ソース付きのサンプルプログラムはどこかにありませんでしょうか?
できればフルスクリーンモードでのメニューバー表示のサンプルがあると助かります。
一応自分でもこれを実現するために
こちらの方のページを参考にしてほぼ丸写し状態でやってはみたのですが、
どうもメニューが表示されません。
URLリンク(www.geocities.jp)
ただ、SetDialogBoxModeを呼び出しても呼び出さなくても、
メニュー自体は存在しているようで、マウスで画面の上のあたりを
クリックなどしますと、瞬間的にメニューが現れ、メニューコマンドが実行されますが^^;
こちらに書いていない部分(DX初期化関連、ウィンドーモード、メッセージ処理etc…)
などで何か気をつける点でもあるのでしょうか???
153:デフォルトの名無しさん
07/12/24 22:48:55
あ、VC++2005はExpressEditionです。よろしくお願いします
154:デフォルトの名無しさん
07/12/24 23:54:06
板ポリゴンとかにテクスチャを貼ると、テクスチャが何故か右下にずれるのですが、何故なのでしょうか?
どうすれば直りますか?
155:デフォルトの名無しさん
07/12/25 00:28:43
>>154
何かを間違っているから。
156:デフォルトの名無しさん
07/12/25 05:24:58
どうすれば直りますか?
157:デフォルトの名無しさん
07/12/25 05:29:57
間違いを修正する
158:デフォルトの名無しさん
07/12/25 05:49:02
どうすれば間違いを
159:デフォルトの名無しさん
07/12/25 06:32:38
どうやって貼りましたか?
160:デフォルトの名無しさん
07/12/25 08:12:48
誘導
つスレリンク(tech板)
161:デフォルトの名無しさん
07/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 );
にすることで上記と同じ効果になるのかと思ったのですが、今度は三角形自体消えてしまいます。
どうしたら四角形が表示されますか?
162:デフォルトの名無しさん
07/12/25 09:26:56
カリングされてるんじゃないかね?
SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE)
163:161
07/12/25 10:00:08
できました!
あと頂点の順番?がおかしかったみたいで |X| ←こんな形になったけど、頂点入れ替えたら四角形になりました!
ありがとうございます!  ̄
164:デフォルトの名無しさん
07/12/25 10:35:15
は?
頂点の順序が間違ってたのが原因、って事?
165:161
07/12/25 10:52:03
>>164
三角形が一つしか表示されないという問題は
->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
で解決したんですが、今度は頂点の順番がおかしいせいか欠けた四角形になったんです。
/| と |\ の三角形の組み合わせで |X| こんな形に
 ̄  ̄  ̄
166:デフォルトの名無しさん
07/12/25 14:42:39
>>161
どうでもいいけどoct2004は9.0cだったと思うが
167:デフォルトの名無しさん
07/12/25 15:46:06
疑問に思ったんだけど、四角形を描画する場合、頂点バッファを作ってDrawPrimitive()で描画するのと、
作らないでDrawPrimitiveUP()で描画するのとどっちが速いですか?
頂点バッファは頂点数が多いほど効果を発揮すると聞いたような気がするのですがどうなのでしょうか?
168:デフォルトの名無しさん
07/12/25 15:57:45
疑問に思ったんだけど、なんで自分で試さないんですか?
169:デフォルトの名無しさん
07/12/25 20:21:12
>>167
DrawPrimitiveUPのほうが早いですよ。
多くの方が様々なOSやビデオカードで検証済みです。
とか言ったらこいつは何も考えずにDrawPrimitiveUP使うんだろな。
170:デフォルトの名無しさん
07/12/25 22:21:13
>>169
ありがとうございます。
やはり、頂点バッファは頂点数が多いほど効果を発揮すると言う事でしょうか?
171:デフォルトの名無しさん
07/12/25 22:23:17
>>170
そうです。Microsoftが検証済みです。
172:デフォルトの名無しさん
07/12/26 01:31:37
>>152
私も同じ事やろうとしたけど、どうも上手くいかないですね
でもこの人の作ったゲームだと実装されているっぽいし…
本当にSetDialogBoxModeを使ってるのかなぁ
この関数使ってまともにメニューが表示できた人っていますか?
というかフルスクリーンのメニュー表示はみなさんどうやってます?
173:デフォルトの名無しさん
07/12/26 01:40:45
ステートブロックがいまいち良く理解できません。
1.普通のステート変更を最小限に抑えて変更する
2.(CreateStateBlock()で)キャプチャしたステートブロックを毎回適用する
3.カスタムステートシーケンス(BeginStateBlock()~End...()まで)を適切に使用する
と三つのやり方があると思うんですが、
何も考えずに2.のやり方でも効率的にできるんでしょうか。
それとも多少のやりくりは必要なんでしょうか。
ピュアデバイスだとステート変更は変更するたびに行われるんでしたっけ?
ステートブロックの仕組みとかがわからないのでちょっと迷ってます。
174:デフォルトの名無しさん
07/12/26 02:30:21
効率いいかなんてやってみればわかるだろ。アホか
175:デフォルトの名無しさん
07/12/26 02:47:54
このスレっていったいどんな質問なら答えてくれるの?w
176:デフォルトの名無しさん
07/12/26 03:02:27
パラドックス
177:デフォルトの名無しさん
07/12/26 04:01:19
初心者ホイホイなのかな
178:デフォルトの名無しさん
07/12/26 07:20:42
初心者であろうがなかろうが、自分で試せるものを試さないってのは単なる怠慢だと思うが。
やり方が分からないんであれば、どっちが効率的?などと聞くんじゃなく素直にやり方そのものを質問すべき。
179:デフォルトの名無しさん
07/12/26 13:52:41
このスレいらねーなwwwww
180:デフォルトの名無しさん
07/12/26 14:13:55
レンダリングステートを変更する事は、結構重いコストとして扱われるので、
Dx6まではコロコロ変化させずに、同じレンダリングステートのメッシュやターゲットを纏めて
レンダリングしたり、ステートの変化が最小になる順番でステート郡をレンダリングしてたりしたんだけど、
ステートブロックを使えば、複数のレンダリングステートの変化を一度にデバイスに適用出きるので、
上記の事をあまり意識しなくて良いレンダリングループが作れるようになったわけ。
でも、別にレンダリングするターゲットやステートの種類によってはステートブロックを使わなくても
そんなに処理が重くならないのも事実で、自分が作成しているプログラムでステートの変更が
重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの?
GPUとGPUへのバスの帯域、レンダリングするプリミティブの数、ステートの変更量といった要因が
あって、トータルで考える必要があるから、なんでもかんでも管理するのは効率的ともいえないし、
大規模エンジンを作るのに、ステートの管理コストを嫌って管理しないのも効率が逆に悪くなるし。
ケースバイで。効率的ってのは目的が無いと決定しない項目だから。
181:デフォルトの名無しさん
07/12/26 14:22:58
>重い処理だな、と思ったらステートブロックを試してみれば良いんじゃないの?
そうなんだが、それを自分で試そうとしない輩が多すぎるな
182:デフォルトの名無しさん
07/12/26 19:19:34
VisualC++2005、DirectX9.0c SDK、Windows SDKの環境です。
キャラクターのアニメーション等をさせる場合、
画面を毎秒60とか30フレームとかで更新、のような処理をしなければならないと思うのですが
その毎回の画面の更新タイミングはどのような手順で取るのでしょうか
183:デフォルトの名無しさん
07/12/26 19:38:29
>>182
自分で試せ
184:デフォルトの名無しさん
07/12/26 19:49:08
何を試せばいいのでしょうか
185:デフォルトの名無しさん
07/12/26 19:57:16
「ゲームループ」でぐぐれ
186:デフォルトの名無しさん
07/12/26 19:58:02
>>184
それを自分で試せ
187:デフォルトの名無しさん
07/12/26 20:00:24
少し荒れてる状況で質問したのはタイミングが悪かったな
188:デフォルトの名無しさん
07/12/26 20:06:30
>>187
自分で試せよ
189:デフォルトの名無しさん
07/12/26 20:19:19
>>188
>>187に言うなよ!w
190:デフォルトの名無しさん
07/12/26 20:21:58
マルチコア設計の描画エンジンだとステートブロック使うのは問題外の糞www
というnVidiaあたりのプレゼン資料なかったっけ
191:180
07/12/26 20:58:26
>>190
まあ、実はステートブロックは、固定パイプライン時代の産物だから、基本的に
レンダリングステートなんてほとんど変えずに、シェーダでやれってのがDirectX9以降の
正しいGPUの使い方なんだと思う。
こんなの、実は悩むところじゃないと思うな。
固定パイプライン使ってても、レンダリングステートの変更なんて大した
負荷になってないっぽいもんね。所詮DirectX7時代の話だし。
一々ステートブロック作らなくても十分高速に動いてるし。
ステートブロックの解説も怪しいところあるから、普通利用を避けるんじゃないかな。
>>173は何故こんな事に疑問を持ったのか、謎だ。
(どこかの処理で実際に遅くなった、とかならわかるけど。)
192:173
07/12/26 23:38:39
え、いや、普通な感じで
実装前にセオリーとか聞きたいなって…荒れさせたようでごめん
忘れて
>>180さん、なんかすいません…とても参考になりました…どうもでした
>>180さん、ごめん、俺のせいで
193:173
07/12/26 23:39:49
>> >>180さん、ごめん、俺のせいで
>>182さん、ごめん、俺のせいで の間違いです ホント申し訳ないw
194:182
07/12/27 00:22:56
>>185
ありがとうございます。_tWinMainの中でtimeGetTimeを使って
60分の1秒を数える方法を使ってみました
Windowsゲーは同期とかはキニシナイでいいんでしょうかね
>>193
いえいえキニシナイでください
195:デフォルトの名無しさん
07/12/27 02:19:50
>>194
いや、同期取らないと駄目だろ。
196:182
07/12/27 02:55:23
え?そうなんですか?>>195さんはどういった手順でやってるんでしょうか
197:デフォルトの名無しさん
07/12/27 03:00:18
俺は可変フレームレートのが好きだな
要は1フレームでどんだけ時間が進んだかで
アニメーションの進行速度を変えればいいわけだから
そんでフレームの終わりにフリップすれば
198:デフォルトの名無しさん
07/12/27 03:15:47
>>197
あれってどうやって実装してるの?
フレーム間の時間をグローバル変数にでも格納して参照するんだろうか。
199:デフォルトの名無しさん
07/12/27 04:22:17
DirectX9SDKを入れて、バージョンは8で開発したいんだけど、d3dx8.hとかないのね
d3d8.hとかはあるのに。
どうすればいいんだろ。どっかでDirectX8SDKを見つけてこないと駄目かな?
200:デフォルトの名無しさん
07/12/27 04:41:19
9のOct2004だけど、d3dx8.hあるよ。
201:デフォルトの名無しさん
07/12/27 07:28:08
仕事でどうしても必要じゃなきゃ9使った方がいいと思うけど。
まあ9x系対応とかだとDx9のOct2006までじゃないとダメらしいが
202:デフォルトの名無しさん
07/12/27 10:23:51
>>199
リリースノートくらい読めよ・・せっかく日本語に訳してくれてるんだから。
------
この DirectX SDK には次のコンポーネントは含まれていません
Direct3D8 およびそれ以前の全てのバージョン
Direct3D RM
・・・・・・
これらのコンポーネントを使いたい開発者は、
MSDN から August 2007 DirectX SDK をダウンロードする必要があります。
~~~~~~~~~~~~~~~~~~~~~~~~~
203:デフォルトの名無しさん
07/12/27 10:26:15
まあオーガスト2007だと8で作る意味が全くなくなるけどな
204:デフォルトの名無しさん
07/12/27 11:12:48
DirectX9でゲームを作ってたんだけど、DirectX9の独自の機能使ってないし、誰でもすぐに遊べる様にしたいからDirectX8にしたかったのさ。
>>200
>>202
サンクス。
とりあえず古いバージョン拾ってみよう。古いバージョンで上書き出来ればいいけど
>>203
そうなの?
結局XPの初期状態とかで動かないのかな?
205:デフォルトの名無しさん
07/12/27 11:56:09
>>204
だからリリースノートを読めと。
----
すべてのプラットフォームでのインストール上の注意
・現在の DirectX SDK をインストールする前に、DirectX SDK の前バージョンを削除することを推奨します。
----
どのバージョンがどのOSに対応しているかも全てリリースノートに書かれている。
206:デフォルトの名無しさん
07/12/27 12:19:57
もう、ほっといた方がいいかと。
一度受けた注意を怠るわ、質問している立場なのに偉そうだわ。
d3dx8.hの話にしても、>>104-105 で出てた話題なのに、
同じスレ内ですら検索かけてないし。
207:デフォルトの名無しさん
07/12/27 14:19:57
2Dの描画で描画数がかなり多くなるため(1フレームに3000程度の数字テクスチャを描画)頂点バッファを利用して
1フレームに頂点バッファ一括ロック→memcpy→アンロック→DrawIndexedPrimitive
としているのですが、3000個描画するとシーン時間が6~7ms程掛かってしまいます(それなりに良いスペックのPCで)
6000ポリゴン程度の描画でこんなに時間が掛かるはずがないと思うのですがやり方が間違っているのでしょうか?
208:デフォルトの名無しさん
07/12/27 14:40:20
なんかmemcpyがボトルネックになってそうだけど
どの処理に一番時間がかかってるのか
もうちょっと絞り込んだ方がいいんじゃない?
209:デフォルトの名無しさん
07/12/27 14:43:44
まず対照実験として、画面をクリアするだけで何も描画しない場合の速度を計るべきだと思う。
210:デフォルトの名無しさん
07/12/27 16:53:43
ロック/アンロックが臭いと思うな。変なロックは速度に影響でかいから。
ロックを止めて、ダミーバッファにmemcpyする処理に置き換えてフレームレートを計測したら?
あと、頂点バッファは、まとめてる?ロックがボトルネックなら、頂点をまとめて1フレームにロックする回数を
1回にしてしまった方が良いよ。
それと、毎回コピーする頂点の計算処理は重くない?
211:デフォルトの名無しさん
07/12/27 20:04:19
ところで、そろそろ>>152の質問に回答してくれる方はおりませんでしょうか?
ネットを漁り、アキバでDirectX関連の参考書を読みふけりましたが
どこもこの問題についてはあえて避けてるようにしか思えません
SetDialogBoxModeをマスターされました神様、いらっしゃいましたらお願いします
とりあえず、フルスクリーンでメニューとダイアログが表示できるようになればいいので
いい解決方を知っている方でも大歓迎です
212:デフォルトの名無しさん
07/12/27 20:05:35
斜め投影した場合、投影されたCGがあえて歪んで見えるようにしたいです。
どこをいじればいいか教えてください。
213:デフォルトの名無しさん
07/12/27 20:16:28
>>211
全ソース付のサンプル、か。
google code search で SetDialogBoxMode で検索したら結構引っかかったんだけど、やってみた?
検索結果の始めのほうはラッパのヘッダとか意味ないのばっかだけど
結果の後の方まで見てみると結構有用っぽいのがちらほら。Lunaとかも引っかかってたり。
ただライブラリ系ばっかでサンプルになるかどうかは分からん。
214:207
07/12/27 20:43:50
レスありがとうございます
やはり描画部分が結構重いみたいです…
1フレーム当たりの時間が
ロック/memcpy/Drawを一切しない → 80μs
ロック→16000頂点分memcpy→アンロックでDrawしない → 450μs
一つ上の条件でスプライトを2000個描画 → 3210μs
いずれも他の描画以外の処理を含む時間で、memcpyは実際には描く分だけのサイズで行うので最悪条件でテストしています
215:デフォルトの名無しさん
07/12/27 21:46:38
ロックしない/memcpyしない/アンロックしない/Drawする
っていうのも測った方がいいと思う。
頂点データがないのはアレなんで、計測外で初期化時にでも放り込んでおいて。
216:デフォルトの名無しさん
07/12/27 21:56:46
PIXで、実際どのAPIが時間食ってるか調べてみたら?
GPUが忙しいのか、CPUが忙しいのか、プログラムが悪くってどっちも
遊んでる状態になってるのか、それを切り分けないと始まんないと思う。
あと、スペックに対しての期待値がどれくらいで、3210はどの位そこから遅いのか?
SDK付属ドキュメントの「Direct3D API 呼び出しの正確なプロファイル」あたりは一回読んでる?
217:デフォルトの名無しさん
07/12/27 22:23:55
>>211
今てきとーに使ってみたら一応表示はできるみたいだがのー。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER忘れてるとかそんなオチじゃないよね?
しかし案の定XPとVistaじゃ挙動違うっぽいし、あんまし深入りしたくねぇなこれ。
218:デフォルトの名無しさん
07/12/27 22:35:28
Dialogは普通に表示出来たけどメニューは
あんまりメリット感じないから使った事無いや。
219:デフォルトの名無しさん
07/12/27 23:35:17
PIXの使い方がわからねぇ
220:デフォルトの名無しさん
07/12/28 02:02:20
おれもおれも
まぁちょっとだけならわかるけど
つっこんでは分からねぇ
221:デフォルトの名無しさん
07/12/28 03:43:50
助けて
頂点テクスチャフェッチのために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
07/12/28 04:29:27
ちなみにサンプラーは
MinFilter = Point;
MagFilter = Point;
MipFilter = None;
AddressU = Clamp;
AddressV = Clamp;
です
223:デフォルトの名無しさん
07/12/28 12:36:06
等高線の形どおりに厚紙を切って重ねると、立体地図が作れますよね
この立体地図をプログラムで描画したいのですが、躓いてしまいました
今手元には等高線が書かれた白地図があるので
「等高線ごとに領域を分割し、各々に高さを与える」
といった処理にしようと思ったのですが、等高線ごとに領域を分割というのがどうしたらよいのか見当がつきません
このような処理の実現のしかたを教えてください
よろしくお願いします
224:デフォルトの名無しさん
07/12/28 13:06:56
ダイレクトX関係ないじゃんといいたいが
・等高線が作る一つの輪を1リングとし、リング毎の高さと領域情報を保持
・高さの同じリングをまとめたものを1グループとして管理する
・グループ毎にY座標を変えて表示する
でいいだろ
もちろん、外壁も表示するのには各リングの輪郭線から頂点を自動算出して
外壁ポリゴンも作らんといかんけど
225:デフォルトの名無しさん
07/12/28 14:00:34
すみません
3次元空間内の物体をピック処理をして、マウスの移動量で移動させたいのですが
ピックするところまでいったのですが
その後マウスの移動分動かすのはどうしたらいいのかわかりません。
初期値→移動後のマウス座標を得て、それをどのように3次元空間の座標に戻すのか
視点が回転したときに、xyzの移動量と向きはどうしたらいいのか
この二つがわからなくて壁に当たってしまいました。
ご指南お願いします
226:デフォルトの名無しさん
07/12/28 15:16:38
>>225
視点から注視点の面上にあるポイントを結んだ物がマウスポインタのベクトル。
そのベクトルを対象オブジェクトまで伸ばし、ベクトルが変化した分だけ移動させればいい。
227:デフォルトの名無しさん
07/12/28 16:45:15
すいません>>212もお願いします。
228:デフォルトの名無しさん
07/12/28 16:48:14
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| お断りします |
|________|
ハ,,ハ ||
( ゚ω゚)||
/ づΦ
229:デフォルトの名無しさん
07/12/28 17:02:14
>>227
質問が抽象的すぎ
>斜め投影した場合
>投影されたCG
>歪んで
それぞれ具体的に
230:デフォルトの名無しさん
07/12/28 17:16:14
>>212
誘導
つスレリンク(tech板)
自分の質問を読んで、他人が内容を把握出来なければ、
ただでさえ少ない回答が0になるだけだよ。
>>223
>>224
もし、等高線毎に外周形状のみ与え、後は自動って言うのなら、
等高線が穴を含む形状の場合にめんどくさくなると思う。
形状に含まれる穴の数(トポロジー)に応じて、輪郭に対する
三角分割のアルゴリズムが変わるんじゃないかな?
穴が無ければD3DPT_TRIANGLEFANで外周頂点を与えれば良いので楽だが・・。
231:224
07/12/28 17:42:08
>>230
山の事しか考えてなかったな
穴がある形状を考えるのを忘れてた
まあ、そもそも論として線だけ書かれたデータをそのまま読み込んで
処理しようとすんなら無理があるわな
232:デフォルトの名無しさん
07/12/28 18:33:17
頂点テクスチャフェッチ使えばできる
等高線の領域ごとにハイトデータで塗って
細分化した平面ポリゴンに適用すればできる
線のみからでもハイトデータを領域の関数で割り当てればできなくもない
自分ができないだけなのに威張ってるプログラマってカコワルイよね
233:デフォルトの名無しさん
07/12/28 19:39:05
すみません、始めたばかりのところで理解できないのがあるのですが
デプスバッファの深度を書き込む/書き込まない
というのがあったのですが、そうすることでどうなるのでしょうか
デプスバッファ、というバッファ(1枚?)にZ値を書き込むというのはわかったのですが
書き込まないと、そこはどうなるのでしょうか?
いまいち何をしてるのか、したいのかが把握できなくて
234:デフォルトの名無しさん
07/12/28 19:39:36
抽象的すぎてすいませんでした。
Xファイルを読み込んでCGを画面の中央に描画しているのですが、
そのCGを映しているカメラの位置をキー操作で変更できるようにしています。
で、カメラの位置を変更した場合に、
URLリンク(www.beamax.co.jp) の「斜め投影」の項にあるように歪んでみえるようにしたいのです。
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」という本を参考にしています。
よろしくお願いします。
235:デフォルトの名無しさん
07/12/28 19:57:46
>>232
そりゃ失礼。
236:デフォルトの名無しさん
07/12/28 19:58:40
まぁ、>>232も最後の1文は余計な一言だな
237:デフォルトの名無しさん
07/12/28 20:10:41
>>233
最終的にスクリーンに描画するときに
各ピクセルに色を塗ると同時にそこにある物体が
カメラからどれくらいの距離にあるかをZバッファに記録しておく
そうすると
別の物体を同じピクセルに描画しようとしたときに
Zバッファの値を参照して
以前の値よりカメラに近ければ
新たな色を塗りZバッファの値も書き直す
以前より奥にあるものなら色をぬらない、という処理が可能になる
これをしないと後から描画したものでどんどん色を上書してしまうので
奥にあるはずのものが手前にあるものの上に描画されてしまう
したがって描画するときに奥にあるものから描画するというようなソート処理が必要になる
238:デフォルトの名無しさん
07/12/28 20:38:08
>>234
それはビューの設定とは無関係
カメラの位置を変えたって、そんな変化は起こさないだろ
オブジェクト側を調整しろ
239:デフォルトの名無しさん
07/12/28 20:45:34
>>237さん 回答ありがとうございます
つまり
______
|近 遠 近 …
|
Z値が書き込まれていって、それを参照するわけですね。
これは2次元平面に射影された状態ですよね
ある物体○△□が 奥行き方向に1列に並んでたとき
物体ごとにデプスバッファに
○ 書き込む 遠い
△ 書き込まない ↓
□ 書き込まない 近い
としたら、最終的に一番近いのは□ですが、○が描画される、ということになるのですよね?
240:デフォルトの名無しさん
07/12/28 22:27:37
>>232
?
線のみから求めてるわけじゃないじゃん
結局手動で山と穴の区別をつけたデータが必要だろ?
241:223
07/12/28 22:31:06
>>223です
皆さんありがとうございます
231さんが仰るように「線だけ書かれたデータをそのまま読み込んで処理」というものを想定していました
穴を含む形状については今は考えず、概形が出来上がった後に改めて考えることにします
頂点テクスチャフェッチなど初めてきく言葉が沢山あるので、まずは片端から調べてみます
ありがとうございました
242:デフォルトの名無しさん
07/12/28 22:41:03
>>239
違う
基本的に描画関数を呼んだ順に描画されるので
○△□の順番で描画した場合は問題ないが
□△○や△□○の順で描画した場合
一番遠いところにあるはずの○が一番上に描画されてしまう
それを防ぐために先に近いものが描画されていたら
それより遠いものを描画しないためのもの
243:デフォルトの名無しさん
07/12/28 22:56:49
>>242さん
何度もありがとうございます。その点は理解できました。
描画の時にデプスバッファに書き込む物体と
書き込まない物体が混在したときにどうなるのでしょうか。
そこがわからなくて。
最終的にデプスバッファに書き込んでいる物体がちゃんとならんで
デプスバッファに書き込まない物体は描画順ということになるのですよね
244:デフォルトの名無しさん
07/12/28 22:58:38
>>213
>>217
ありがとうございます
そのオプションをつけてウィンドウスタイルなどをいじってみたら、
開発環境のXPマシンだと、一応は表示されるようにはなりました
ですが、フルスクリーン→ウィンドウへと切り替えた場合に
ウィンドウ化しなかったり、古い98マシンで試してみた所
メニューを表示した瞬間に画面が激しくちらつくようになってしまったり
ダイアログは表示されなかったりと、挙動が酷くおかしいようです
とりあえずもう少しだけ教えていただいたサンプル等と見比べて
頑張ってみようと思います
最近のエロゲーとか、ホントこれどうやってるんでしょう?
やっぱり、DirectXで描画したなんちゃってメニュー&ダイアログなんですかねぇ
245:デフォルトの名無しさん
07/12/28 23:07:58
そもそも標準のメニューを使っているようなエロゲーはDirect3Dなど使っていない。
246:デフォルトの名無しさん
07/12/28 23:23:28
いや最近のエロゲは結構DirectX使ってるよ
とりあえず今入ってるはぴねすってエロゲーはDirectXで動作してるし
フルスクリーンメニューもちゃんと出てる
247:デフォルトの名無しさん
07/12/28 23:28:55
もはや3Dも2DもDirectGraphicsで統合されてるし
248:デフォルトの名無しさん
07/12/28 23:32:23
メニューやダイアログを表示中に
ゲーム画面が変化しているやつは見た事無いから、
そこに解決の糸口があるんじゃないかな。
249:デフォルトの名無しさん
07/12/28 23:47:57
メニューループにはいったら普通に他は止まるだろ
250:デフォルトの名無しさん
07/12/28 23:50:33
まさかとは思うが、メニューがある場所に、自分で別の物を描画しておきながら、
ちらつくとか表示されないとか馬鹿なことをぬかしているわけじゃないよな?
251:デフォルトの名無しさん
07/12/29 00:13:29
>>250
ちらつく、というのはWin98環境の方だけで、XPでは画面上に
しっかりと表示されているので、それはないかと思います
>>248
いくつかフルスクリーンメニューのあるゲームを起動してみたところ
どうもメニューが出た時に画面が下にずれているものが多いようです
なんとなく思うのは、これはDirectXでのフルスクリーンモードではなくて
実際にはウィンドウモードなのではないかと。
画面いっぱいのクライアント領域をもつメニュー付きの通常ウィンドウを作って、
必要に応じてウィンドウを縦方向にずらしてメニュー表示しているのでは?
それが可能だとすると、環境によって挙動があやしげなSetDialogModeに
たよるよりも安定しそうな気もします
SetDialogModeはおいといて、まずこの方法でできるかどうか試してみようかと思います
252:デフォルトの名無しさん
07/12/29 00:53:25
システムに依存することは止めたらどうかね?
253:デフォルトの名無しさん
07/12/29 01:02:19
となるとダイレクトXなんて使えたもんじゃありませんな
254:デフォルトの名無しさん
07/12/29 01:04:43
システムに依存しないWindowsプログラムってどんなんだよ
255:デフォルトの名無しさん
07/12/29 13:56:38
問: 次の条件を満たすプログラムを作成せよ。(30点)
1) システムに依存しない
2) Windows上で動作する
256:デフォルトの名無しさん
07/12/29 14:06:22
Javaを使うお
257:デフォルトの名無しさん
07/12/29 14:53:21
Javaか
258:デフォルトの名無しさん
07/12/29 16:42:42
DirectXのサイトって数が多い分今の自分に合ってるの探すのがきつい・・・
せめてSDKの日付とかあって欲しい。
あの,Direct3Dのプログラミング始めたいんですが何をそろえればいいですか?
バージョンは9.0でやろうとしているんですが、パッケージによって違いとかあるんですか?
もう1週間くらいネットを這いずってるんですが良く分かりません・・・お願いします。
259:デフォルトの名無しさん
07/12/29 16:47:00
Javaだな
260:デフォルトの名無しさん
07/12/29 16:51:05
>>258
ネットが活用できないのなら本屋に行け。
261:デフォルトの名無しさん
07/12/29 17:04:48
さすがJavaだな
262:デフォルトの名無しさん
07/12/29 17:06:21
実際Javaって使い物になるの?
携帯ゲームなら有りかもしれないけどさ
263:デフォルトの名無しさん
07/12/29 17:11:38
何を作るかによる。
目的を定めずに手段だけを論じるのは愚か者の極み。
264:デフォルトの名無しさん
07/12/29 18:16:38
>>263
そういうのはいいから。
265:デフォルトの名無しさん
07/12/29 18:24:36
スレ違いの質問に対して答えをいただけただけでもありがたいと思え
266:デフォルトの名無しさん
07/12/29 18:37:54
>>258
もう書かれているがマジレスすると、AmazonでDirectXで検索して、
初心者向けで売れてる本を一冊でも買ったほうがいいと思う。
別に本が優れてるとかじゃなく、ネットの活用が上手くなくて、SDKについても何も分からないんであれば
本に頼るしかないだろう。
267:デフォルトの名無しさん
07/12/29 19:00:02
>>266
ご指南ありがとうございます。
どうか最後にこれだけ教えてもらえないでしょうか?
Microsoft DirectX SDK (November 2007)だけあればできますか?
268:デフォルトの名無しさん
07/12/29 19:12:20
Visual Studioが必要です。
269:デフォルトの名無しさん
07/12/29 19:13:35
パソコンも必要です
270:デフォルトの名無しさん
07/12/29 19:27:50
気力も
271:デフォルトの名無しさん
07/12/29 19:28:26
あとはJavaだな
272:デフォルトの名無しさん
07/12/29 19:35:57
>>267
Windows上でここに書き込んでいるんだとすれば、ソフトウェアとして最低限必要なのは開発環境とSDKだけ
273:デフォルトの名無しさん
07/12/29 20:08:24
Macなのですが、無理ですか?
274:デフォルトの名無しさん
07/12/29 20:12:36
Intel Mac なら Windows をインスコすればいい。
275:デフォルトの名無しさん
07/12/29 20:13:12
>>273
Javaならok
276:デフォルトの名無しさん
07/12/29 20:15:34
何この流れ
釣りは無視しろよ
277:デフォルトの名無しさん
07/12/29 20:16:09
Javaの人気に嫉妬
278:デフォルトの名無しさん
07/12/29 20:17:10
>>256がJavaを使うなんて言ったばっかりに・・・
279:デフォルトの名無しさん
07/12/29 21:17:34
>>272
まじであざーした!
がんばってみます。
280:デフォルトの名無しさん
07/12/30 00:05:22
xファイルから得たポリゴンの任意の点の座標を変更する、ってのはどうやったらできる?
281:デフォルトの名無しさん
07/12/30 00:09:44
データが入っている場所の頂点データをいじれよ。
282:デフォルトの名無しさん
07/12/30 00:33:38
>>280
メッシュというと複雑そうにみえるが、中身は頂点バッファやインデックスバッファその他もろもろが集まってるだけ
なんでまずはロックなど頂点バッファの基本的な操作さえ覚えてしまえば後は流れ的にJavaが全て解決してくれる
283:デフォルトの名無しさん
07/12/30 01:14:12
JABAすげー
284:デフォルトの名無しさん
07/12/30 01:17:13
Japan Amateur Baseball Associationか
285:152
07/12/30 01:39:13
こんばんは、>>152です。
画面いっぱいのウィンドウの方はできないこともなさそうな感じではありましたが
大きい→小さい画面への変更で、デスクトップアイコンや他アプリの位置等がずれるため
やめることにしました
その後もう一度SetDialogBoxModeのやり方でウィンドウのフラグをあれこれいじってみたら
フルスクリーン→ウィンドウでも上手くいくようになりました
うちにある家族用の別メーカーのXPマシンでも正常動作したようなので、
まあ、今時Win98で動かなくてもしょうがないかなぁと自分を納得させる事にしました
ささっていたビデオカードも、 GeForce4 MX440 SE というかなり昔のボードで
ドライバの配布すら終了している代物でしたので
このボードのドライバがDirectX9.0cに完全対応していなかったのかも知れません
質問に答えてくれた方々、どうもありがとうございました。
286:デフォルトの名無しさん
07/12/30 01:45:57
XP以上のみサポートでぶっちゃけ問題ないよ。
287:デフォルトの名無しさん
07/12/30 02:10:30
シェーダで3次元テクスチャを二つ載せようとしたのですが
なぜか片方しか表示されません。
3次元テクスチャ1つと1次元テクスチャ1つは問題なかったのですが
なぜ…
やり方教えてください
288:デフォルトの名無しさん
07/12/30 14:51:57
DXライブラリみたいにビデオメモリに
直接アクセスするのってどうやるんでしょうか?
289:デフォルトの名無しさん
07/12/30 15:01:00
URLリンク(msdn.microsoft.com)
すいません、これを試してみたいのですが
どこからDLしていいのかわかりません。
といいますか、どのSDKなのかわかりません
これの実行ファイルかソースうpってもらえませんか?
290:デフォルトの名無しさん
07/12/30 15:46:13
>>289
DirectXのSDKをインストールすると入ってるよ
291:デフォルトの名無しさん
07/12/30 16:24:52
>>290
前にインスコしたSDKには入ってなかったのです。
Microsoft Platform SDK for Windows Server 2003 R2
また400MBも落とすのに○時間も掛かるのはシンドイっす
292:デフォルトの名無しさん
07/12/30 16:50:44
_, ._
(;゚ Д゚)
293:デフォルトの名無しさん
07/12/30 17:08:18
PlatformSDKは、まぁ、ボケなんだろうけど
サンプルはSDKのバージョンによって中身がかわってるからな
少なくともAugust2007には入ってなかった
でも手元にあった9.0bSDKのCDには入ってたので
デベロッパセンターに行って
Updata~とついてないSDKを落とせばたぶんついてくるんじゃね?
294:デフォルトの名無しさん
07/12/30 17:43:16
>>291
軽量版があるからこっち使え
URLリンク(java.sun.com)
295:デフォルトの名無しさん
07/12/30 19:25:24
JAVAネタ、いい加減にしつこい
296:デフォルトの名無しさん
07/12/30 21:00:51
>>292-293
ボケたつもりはなくて、、、これがSDKだと思ってました。。。
>>294
ありがとうございます。見てみます
297:デフォルトの名無しさん
07/12/30 21:01:26
…JAVAですか。
確認する前に書き込んでしまいました
298:デフォルトの名無しさん
07/12/31 08:36:54
自機・フィールド共にXファイルから読み込んで、3Dゲームを作っています。
自機と地面や壁との衝突判定をさせたいんですが、Xファイルから自動的に描画されているので、自分でも壁の座標が分からないです。
壁や地面の座標はどうやって求めればいいんでしょうか?
299:デフォルトの名無しさん
07/12/31 09:00:36
そもそも自動で描画されるなどあり得ない。
300:298
07/12/31 09:56:49
すみません。自動的というのは、頂点の座標を自分で把握していなくても描画ができるという意味です。
SDK Tutorial6のソースをほとんどそのまま利用しています。
計算式はぐぐれば出てくるんですが、計算するための座標がどこなのかが分かりません。
301:デフォルトの名無しさん
07/12/31 10:01:01
まさかチュートリアルの1から5を飛ばして6やってるって
オチじゃあるまいな?
302:298
07/12/31 10:10:29
!
4,5飛ばしてました。
今から見てきます。
303:デフォルトの名無しさん
07/12/31 14:35:16
たまにエスパーが現れるから困る
304:デフォルトの名無しさん
07/12/31 15:32:44
OpenGLのglFrustum()という関数をDirectXで実装しようとしています。
glFrustum()については以下のURLに解説がありました。
URLリンク(kaoken.no-ip.com)
このURLで出ているGL_PROJECTION というのは、おそらくDirectXでいうD3DTS_PROJECTION だと思っているのですが、
このD3DTS_PROJECTION の使い方がよくわかりません。
305:デフォルトの名無しさん
07/12/31 15:58:19
CheckDeviceMultiSampleType() でビデオカードがマルチサンプルに対応しているか調べたのですが、
自分のものだと対応していないことが分かりました。
ビデオカードのメーカーのページにはこれに対応しているかどうかの記述がないようですが、対応している
ビデオカードはどのようにして見つければよいでしょうか?
306:デフォルトの名無しさん
07/12/31 17:24:28
引数間違っている可能性が高いような。
非対応見つけるほうが大変でね?
307:305
07/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
としても同じでした。
308:デフォルトの名無しさん
07/12/31 18:07:52
てか8600GTは
D3DFMT_R8G8B8フォーマットをサポートしてるのかい?
最近のだと
D3DFMT_X8R8G8B8とか
D3DFMT_A8R8G8B8とか
309:デフォルトの名無しさん
07/12/31 18:50:25
>>307
D3DFMT_R8G8B8 なんて、バックバッファはおろか、テクスチャのフォーマットとしても
対応してるアダプタなんて現時点では存在しないぞ
素直に D3DFMT_X8R8G8B8 でやれ
310:305
07/12/31 20:57:54
>>308>>309
ありがとうございます。
D3DFMT_A8R8G8B8で対応してました。
実際の効果を見てみたのですが、通常のレンダーターゲットに描くときはしっかりと効いていました。
しかし、どうもアプリ内で用意したテクスチャをレンダーターゲットにすると、そこでは効かないようです。
なぜなら、レンダリングしたテクスチャを板ポリに貼り付けて通常のレンダーターゲットの全面に表示
すると、ジャギーが強く残っているからです。
(テクスチャ解像度はレンダリング対象の1/4と低いものの、AAがかかった痕跡が見られません)
テクスチャをレンダーターゲットにしたときもAAが効くようにするにはどうすれば良いでしょうか??
311:デフォルトの名無しさん
07/12/31 23:58:20
今DirectDrawとDirect3Dの機能をそれぞれクラス化してるんですけど、
このクラスのインスタンスを作るとき何をstaticにして何をインスタンス作ったら
いいですか?Direct3D複数作ったらなんかやばいんでしょうか?
312:デフォルトの名無しさん
08/01/01 00:09:40
>>311
質問の仕方が悪すぎる。あんたのクラスの設計も具体的にやりたいことも
わからないのに答えられる問いではないよ。
とりあえず「Direct3D複数」がIDirect3D*とIDirect3DDevice*のこと言ってんなら
複数作成するのは稀だから、まだ余計なこと考えなくていいよ。
313:デフォルトの名無しさん
08/01/01 00:09:48
貴様のオナニーの仕方なんぞどうでもいい
314:デフォルトの名無しさん
08/01/01 02:28:26
URLリンク(www.cmagazine.jp)
この本を買ったのですが、Part2の波のデモが動きません。
プロジェクトをコンパイルしようと思ったら、.net 2002なのでできませんでした。
グラボはGeForce 8600GTです。
上のサイトから、そのサンプルをダウンロードできるので、みなさんは動くか試してもらえますか?
315:デフォルトの名無しさん
08/01/01 02:40:29
何も表示されないのかウィンドウすら表示されないのかエラーで起動しないのか。
「どう」動かないのかを書きましょう。
316:314
08/01/01 03:20:09
>>315
すみません。
デモのプログラムは起動するのですが、波のサンプルの場面で、波が発生せず、真平らな板ポリ
状態になっています。
波は随時勝手に発生するプログラムのはずなのですが・・・
317:311
08/01/01 09:53:29
>>312
すいません。そしてありがとうございます
寝ぼけてて文章まとまってなかったんですが、
ふつうDirectDrawをウィンドウモードで使う場合はLPDIRECTDRAW+LPDIRECTDEVICEを1つ作って
サーフェイスを必要なだけ作ってプライマリに転送で十分ですよね?
ただウィンドウを複数作るならウィンドウ1つにつきLPDIRECTDRAW+LPDIRECTDEVICE1つ用意
ということでよろしいでしょうか?
318:デフォルトの名無しさん
08/01/01 10:26:32
あけましておめでとうございます。
こちらはManaged DirectXについての質問もOKでしょうか?
Managed DirectXスレが11月で止まってしまっているので…。
319:デフォルトの名無しさん
08/01/01 10:27:03
>>316
確かにそのままだと動かないね
7900GTでは普通に動いてて
そっちで自分用に書き直したプログラムは
8600GTでも普通に動いているのだが・・・
どこ直したのか覚えてないや
320:314
08/01/01 14:14:29
>>319
けっこう環境に左右されるみたいですね。
自前で組んでみようとしましたが挫折しました。
ありがとうございました。
321:デフォルトの名無しさん
08/01/01 16:33:49
>>304お願いします
322:デフォルトの名無しさん
08/01/01 17:13:13
>>321
OpenGL
// 行列モードに射影行列を選択
glMatrixMode(GL_PROJECTION);
// 射影行列を生成
glFrustum(,,,,
DirectX(固定機能パイプライン使用)
//射影行列を生成
D3DXMATRIX matProj ;
D3DXMatrixPerspectiveFovLH(&matproj,,,,,
//デバイスに射影行列を渡す
device->SetTransform(D3DTS_PROJECTION, &matProj);
頂点シェーダを使って行列変換をするなら
D3DTS_PROJECTIONは使わない
直接生成した行列をエフェクトに渡すなりすればいい
323:デフォルトの名無しさん
08/01/01 17:18:30
あ、すまない
glFrustumなら
D3DXMatrixPerspectiveOffCenterLH
のほうが近いか
324:デフォルトの名無しさん
08/01/01 17:20:25
そして、さらに連投すまそ
OpneGLは右手座標系だったね
D3DXMatrixPerspectiveOffCenterRH
ってことで
325:デフォルトの名無しさん
08/01/01 17:45:33
丁寧にありがとうございます。
つまづいたらまた質問させてください。
326:デフォルトの名無しさん
08/01/01 23:29:11
c#でMDIなフォームに対して、親フォーム、子フォーム、各コントロールを
DirectXで描画しようとしてよく分からなくなっています。
SwapChainとかいうのを描画対象の分だけ作るというところまでは
調べたのですが、具体的にどういう風に書けば良いのかが分からず、解説サイトを
探しているのですが、ヒットしない状況です。
c#で、そこら辺を解説してあるサイトがありましたら、教えていただけますでしょうか。
よろしくお願いします。
327:デフォルトの名無しさん
08/01/02 09:04:55
すいません。
今、DirectX 9.0SDKを使っているのですが、
DirectX関連の書籍を購入したら、付属のCDに、DirectX SDK (Fedruary2007)が入ってました。
このバージョンをインストールした場合、9.0SDKを使ってた時に作った物が
動かなくなる可能性はあるでしょうか?
Fedruary2007の方は、DirectX9に対応しているSDKのようなのですが、
何か心配なので教えてください。
両方共、殆ど同じ仕様なら良いのですが・・・
328:デフォルトの名無しさん
08/01/02 09:22:47
>>327
ほとんど同じではあるが
まったく一緒ではないんで動かなくなる可能性はある
メッシュやエフェクト関連で
互換性の無い変更があったので・・・・
まぁ、でもいつまでも旧バージョンに
しがみついていられるわけでもないので
いい機会だからさくっと修正してみるのも良いかもしれない
たいした変更ではないしね
329:デフォルトの名無しさん
08/01/02 09:33:37
>>328
そうですか。
ありがとうございます。
メッシュ機能も使ってるので、ちょっと恐いですが、
ほとんど同じなら、動かなくならない事を祈って新しい方に変更してみます。
330:デフォルトの名無しさん
08/01/02 16:14:48
DirectX9.0cで、モニタの解像度を切り替えられるようにしたいのですが、
プログラムが実行されるPCでの利用可能な解像度を取得するには
どのようにすればいいのでしょうか
331:デフォルトの名無しさん
08/01/02 16:57:25
>>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
08/01/02 16:59:51
DXUTGetD3DObject()は忘れてくれ
そこは自分の作ったIDirect3D9インターフェースで
333:デフォルトの名無しさん
08/01/02 18:35:06
線分を描画する際、線分の太さを変更したいのですが可能でしょうか?
334:333
08/01/02 19:05:16
自己破産しマスタ
335:デフォルトの名無しさん
08/01/02 22:27:13
>>331
ありがとうございます。うまくいきました
336:デフォルトの名無しさん
08/01/02 23:31:34
3Dを回転させるのにクォータニオンを使おうと考え色々と調べたのですが思うように回転してくれません。
D3DXQuaternionRotationAxisを使う時に回転の軸を設定する必要があるようなのですが、この軸の設定がいまいち分からず・・・。
どうかこの回転の軸の設定をどうすればいいのか教えてください、お願いします。