トップページ⇒tech
988コメント365KB

【C++】 DirectX初心者質問スレ Part36 【C】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/10/19(水) 22:47:45.95
回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

現在の最新バージョンはDirectX 11です。

前スレ
【C++】 DirectX初心者質問スレ Part35 【C】
http://hibari.2ch.net/test/read.cgi/tech/1305885376/
0153デフォルトの名無しさん2011/11/20(日) 02:24:20.44
>>152
その方法だと回転しながら描画した場合にやっぱり干渉してしまいますね...。
0154デフォルトの名無しさん2011/11/20(日) 02:27:18.18
画像を表示で前後関係がうまくいかないってことならわかるけど
メッシュだったらなぜそうなるのか分からない
0155デフォルトの名無しさん2011/11/20(日) 02:35:05.96
あんまりいい方法じゃないかもしれんけど、クロスしてるメッシュ2枚をY軸でナイフ入れて4枚に分割するとかはどうだろう。
0156デフォルトの名無しさん2011/11/20(日) 02:38:32.56
加算で描けば?
Zの書き込みはDisableで。
0157デフォルトの名無しさん2011/11/20(日) 03:17:46.77
分割面が常に固定ならクリッピング使って交差面の前と後2パスとかで描けるだろうけど
例示されたエフェクトみたいなのならそんなにコストかけるようなもんでもないし素直に加算使っとけだな。
α付き交差ポリゴンを1パスでお手軽に綺麗に描く方法はいまんとこない。

まさか単純にZWriteとかZCompの使い方がわからんっていう話じゃないよな?
0158デフォルトの名無しさん2011/11/20(日) 16:25:05.98
>>151はエロサイトへの誘導、通報済です。
0159デフォルトの名無しさん2011/11/20(日) 23:06:29.93
http://iup.2ch-library.com/i/i0483091-1321797945.jpg

文字化けするんですが、直せますか?
0160デフォルトの名無しさん2011/11/21(月) 00:59:04.71
>>159
CharSetが0ってAnsiじゃね? そこをSHIFTJIS_CHARSETにして
FaceNameはフォントの名前の設定だと思うから"MS Pゴシック"とかそのへんだろ
0161デフォルトの名無しさん2011/11/21(月) 01:06:12.51
>>160
マジ神
ホントに出来た
0162デフォルトの名無しさん2011/11/21(月) 08:20:20.64
リファレンスよめよ、、、
0163デフォルトの名無しさん2011/11/21(月) 11:41:48.09
マジ神とか回答者をバカにしてるとしか思えんわ。
礼の言葉くらいきちんと言え。
0164デフォルトの名無しさん2011/11/21(月) 12:53:47.66
そんなんでいちいち目くじら立てるなら初心者スレなんて見なけりゃいいだろ…
0165デフォルトの名無しさん2011/11/21(月) 13:32:03.51
ここは紙スレですか?
0166デフォルトの名無しさん2011/11/21(月) 16:18:12.98
IDirect3DDevice9からD3DPRESENT_PARAMETERSを取得する方法はないので自分で保存するしか無いってことでいいんですか?
0167デフォルトの名無しさん2011/11/21(月) 17:11:19.06
スワップチェイン経由で取るがよい
0168デフォルトの名無しさん2011/11/21(月) 22:09:05.19
あのDirectX9で2D描画したいと思っています
DrawPrimitive系の関数って実用的にはどう使われて居るのですか
DrawPrimitiveは遅いので呼び出しは一フレーム一度だけにしろと云われたのですが
そうなると複数テクスチャとか複数ポリゴンを扱うときに一体どうしろと云うのですか
あと3Dゲームでの実用についても知りたいです
0169デフォルトの名無しさん2011/11/21(月) 22:12:49.13
>>167
ども
0170デフォルトの名無しさん2011/11/21(月) 23:14:14.45
>>168
Direct3D9って前提で話をするけど、余程カリカリにチューニングするってんでもなければ
大体「ポリゴン単位で呼び出すな」程度の認識で大丈夫。
1フレーム1回ってのは流石に現代では無理がある。
余程古いハードウェアを前提にするんでもなければ別に数十回DrawPrimitive呼び出ししても60fpsは出るよ。
もちろんまとめられるようなパスは可能な限りまとめるべきだけど。
0171デフォルトの名無しさん2011/11/21(月) 23:18:20.29
一般的に見て一番早い描画法はなんなの?
インデックスバッハとかいうやつですか?
0172デフォルトの名無しさん2011/11/21(月) 23:42:21.22
>>170
ありがとうござます
ポリゴン単位とはつまり長方形の板ポリ一つずつということで合ってますか
それと、まとめるというのは頂点バッファをと云うことですよね
もしそうならテクスチャも纏めなければなりませんか
ユーザ側で元画像を用意してもらい、また任意で板ポリの数を増やして貰おうと思っているのですが、
画像を纏めるのをユーザが負担すると云うのは考えたくないものです
0173デフォルトの名無しさん2011/11/21(月) 23:45:07.19
>>171
一応インデックスバッファありの方が行列演算の絶対数は減るので
GPU的には早いとは言える。
正直それ以外のところで発生するボトルネック要因がいっぱいあるので
速度を理由にインデックスバッファを採用する理由はあんまないが。
0174デフォルトの名無しさん2011/11/22(火) 00:09:12.79
>>172
板ポリ一つずつで合ってるよ。
100スプライトなら4頂点+6インデックス+DrawPrimitive*100ではなくて
400頂点+600インデックス+DrawPrimitive*1する方が良いっちゃ良い。
その場合はもちろんテクスチャも一つにまとめるにこしたことはないけど
パターン数が少ないようならパターン毎にインデックスバッファを用意しておいて
パターン毎にパスを切り替えるやり方でもいいかもね。
0175デフォルトの名無しさん2011/11/22(火) 00:13:33.76
同じテクスチャ同士で頂点つなげてDrawPrimitiveならテクスチャの枚数分のオーバーヘッドで済むからもう十分じゃね?
0176デフォルトの名無しさん2011/11/22(火) 07:43:17.82
>>174-175
本当にありがとうございました
0177デフォルトの名無しさん2011/11/22(火) 12:16:53.30
すみません。.x形式でモデル&モーションを書き出しているのですが、
ツールが右手座標系で、プログラムが左手座標系なので反転させようとしています。
モデルはちゃんと反転できたのですが(x軸を-1倍)
ボーンの座標(中心位置)の反転(x軸を-1倍)が上手く行きません。

SkinWeights 項目のマトリクスの4_1(13番目)
FrameTransformMatrix relative 項目のマトリクスの4_1(13番目)
を-1倍してみたのですが、単純な回転モーションで確認しても変化が有りません。
ボーンの座標ではなくAnimationKeyに座標など全てが収まっているのでしょうか?
0178デフォルトの名無しさん2011/11/22(火) 13:09:25.40
.x形式まともに使ったことないからはっきりは言えないけど
アニメーションキーが存在していてそれを使って再生しているのであれば
普通は非アニメーション状態の変換行列は無視される。
(じゃないと取り回しが色々と不便になるから)
なのでアニメーションキーを変換する必要はあるだろうね。
その場合、おそらくメッシュの法線も反転するけど。
01791772011/11/22(火) 14:57:57.57
>>178
>普通は非アニメーション状態の変換行列は無視される。
>(じゃないと取り回しが色々と不便になるから)
そうなんですね。その方が計算減りますよね。
ありがとうございました。 もう少し粘ってだめなら逆向きに作るとします。
0180デフォルトの名無しさん2011/11/22(火) 21:51:29.16
すみません、質問です。
新しく接続されたコントローラー(デバイス)を認識して
DIRECTINPUTDEVICE8で取得したいのですが、DIRECTINPUT8::FindDevice()
が"クラスが登録さてません"というエラーを返してうまくいきません。
引数にはDBT_DEVICEARRIVAL→DBT_DEVTYP_DEVICEINTERFACEイベントの
DEV_BROADCAST_DEVICEINTERFACE::dbcc_nameとdbcc_classguidを渡しています。
もしかして使い方が間違ってるでしょうか?分かる方がいらしたら教えてください。
デバイス認識の試験にはコントローラを使用してます。
0181デフォルトの名無しさん2011/11/22(火) 23:45:40.99
void CMain::TP2(int left_in_x,int up_in_y,int right_in_x,int down_in_y,float *left_x,float *up_y,float *right_x,float *down_y){

*left_x=(1/16*(left_in_x-1));
*up_y=(1/16*(up_in_y-1));
*right_x=(1/16*right_in_x);
*down_y=(1/16*down_in_y);
}


float
Tx_Left_X,
Tx_Right_X,
Tx_Up_Y,
Tx_Down_Y;

TP2(1,1,1,1,&Tx_Left_X,&Tx_Up_Y,&Tx_Right_X,&Tx_Down_Y);

うまく数字が変わらないんです
ホントはTP2関数を使ったら
Tx_Left_Xとかの値が変わってるはずなんですが…
0182デフォルトの名無しさん2011/11/23(水) 01:16:16.28
とりあえず
1.0f/16.0f
こんな感じにしてみるとか・・・w
0183デフォルトの名無しさん2011/11/23(水) 02:28:40.61
だね。/も*も左から結合されていくから1/16が整数演算でゼロになっているという話。
0184デフォルトの名無しさん2011/11/23(水) 06:25:21.80
>>180
実行中に接続されたコントローラーを認識したいというのでもなければ
FindDeviceじゃなくてEnumDevices使えば?
0185デフォルトの名無しさん2011/11/23(水) 08:06:35.61
>>182-183
ありがとうございました
レスした後にこれは文法の問題だと気づきました
DirectX関係無いですよね、スレチですすみません
0186デフォルトの名無しさん2011/11/23(水) 16:02:18.48
HRESULT Render() {
if(SUCCEEDED(d3ddev->BeginScene())) {
RenderImpl();
if(SUCCEEDED(d3ddev->EndScene())) { return d3ddev->present(0, 0, 0, 0); }
else { ??? }
}}

EndSceneが失敗したらなにをするべきなんでしょうか
これって失敗したまま放置したら永遠にロックされたままになりますよね?
0187デフォルトの名無しさん2011/11/23(水) 17:52:41.59
>>186
EndScene呼び出し自体は単にデバイスに状態を通知するだけなので
BeginSceneが適切に呼び出されている限り失敗することはまずないよ。
失敗するのはBeginSceneとEndSceneがきちんと組になってない時くらい。

なので、もしも失敗したのなら、やるべき事はコードパスを見直すことだね。
その時は多分ロックとか以前の問題なので。
0188デフォルトの名無しさん2011/11/23(水) 19:16:19.85
>>184
ありがとうございます。
EnumDevicesは初期化時に呼びます。コントロ−ラーがなかった場合や
足りなかった場合に接続されたコントローラーを取得したいので
FindDeviceを使用しようとしてます。

FindDeviceで失敗したコントローラーでもEnumDevicesでなら列挙されることは
確認済みですがEnumDevicesは遅いので出来ればFindDeviceを使用したいと思っています。
原因分かる方いらしたらお願いします。
0189デフォルトの名無しさん2011/11/23(水) 19:41:49.82
>>187
あざっす
安心しました
0190デフォルトの名無しさん2011/11/24(木) 17:00:12.86
D3DXVECTOR3    vFace;
DWORD      dwFaceIndex;
VERTEX      *vertex;// 自分で定義した構造体

D3DXIntersect( BenkiMesh, &vRay, &vRayDir, &bHit, &dwFaceIndex, NULL, NULL, &Dist, NULL, NULL
UnkoMesh->LockVertexBuffer(ほにゃららREADONLY, (void**)&vertex );
vFace = vertex[dwFaceIndex].position;
UnkoMesh->UnlockVertexBuffer();


…みたいにして、D3DXIntersectで当たり判定みたいな事して、
LockVertexBufferしてポリゴンのデータを1つだけ取得して、
値を画面に表示させてみたらところどころに「-1.#R」ってのがあるんよ。

これ、一体どうしたら正しい値が入ってくるますか?
0191デフォルトの名無しさん2011/11/24(木) 18:00:12.28
交差判定はBenkiMesh上でやってるのにLockVertexBufferで参照しようとしているのが
UnkoMeshなんだが、こりゃ同じメッシュを指してるっつーことでいいのかね。
あとそのコードには書いてないがbHitフラグはちゃんと確認してるか?
0192デフォルトの名無しさん2011/11/24(木) 18:29:57.23
あとdwFaceIndexに戻って来るのは頂点インデクスじゃなくて面インデクスなのに
それでVertexBufferを参照しているのもおかしい。
0193デフォルトの名無しさん2011/11/24(木) 18:32:07.44
交差判定もLockVertexBufferもBenkiMeshに対してでした。
LockVertexBufferは、bHitがTRUEを返した場合に行っています。

書き間違えてたよ。ご指摘、ありがとうね。


>>190投下の後でコードを見直してみたら、
BenkiMesh->OptimizeInplace( D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE, &lpdwAdjacency[0], 0, 0, 0 );
という行があったんだけど、(必要があって書いたコードだったはず。結構前だったから忘れちゃった。)
これが悪さしてるのかな?

0194デフォルトの名無しさん2011/11/24(木) 18:36:58.87
>>192
言われてみれば…確かにそうですね。
直してきます。
ありがとうございました。
0195デフォルトの名無しさん2011/11/25(金) 18:24:43.70
プリミティブ描画の時に
0196デフォルトの名無しさん2011/11/25(金) 18:26:03.87
途中送信したすまん
プリミティブ描画の時にTRIANGLESTRIPにしたらカリングモードに関係なく全部描画されるよね?
0197デフォルトの名無しさん2011/11/25(金) 18:58:57.07
全部描画されるの意味が「常にCullMode=None指定するのと同じって事だよね」という意味ならNO。
偶数番目の面のカリング順判定が入れ替わる(CW⇔CCW)だけでカリング自体の適用はLISTの場合と一緒。
0198デフォルトの名無しさん2011/11/25(金) 19:23:10.26
なるほどありがとう
0199デフォルトの名無しさん2011/11/26(土) 01:54:49.23
>>190です。
こんな感じに変更したら、
何か、うまくいっちゃったので晒していきます。。



D3DXIntersect( BenkiMesh, &vRay, &vRayDir, &bHit, &dwFaceIndex, NULL, NULL, &Dist, NULL, NULL );
if( bHit )
{
  BenkiMesh->GetIndexBuffer( &lpIB );
  BenkiMesh->GetVertexBuffer( &lpVB );
  lpIB->Lock( 0, 0, ( void** )&pIndices, D3DLOCK_READONLY );
  lpVB->Lock( 0, 0, ( void** )&pVertices, D3DLOCK_READONLY );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3]];
  vUnkoPosition[0] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3 + 1]];
  vUnkoPosition[1] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3 + 2]];
  vUnkoPosition[2] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  lpVB->Unlock();
  lpIB->Unlock();
  lpIB->Release();
  lpVB->Release();
}
0200デフォルトの名無しさん2011/11/27(日) 21:43:09.71
テクスチャ座標の誤差ってどうにかなりませんか?
0201デフォルトの名無しさん2011/11/27(日) 21:52:07.65
ちゃんと質問しろ
0202デフォルトの名無しさん2011/11/27(日) 22:14:05.37
ごめん

Direct3D9で頂点バッファを使ってテトラゴンを描画するとき、
2048*2048pxのテクスチャのx, y, w, h = 1344, 96, 48, 48の範囲を貼りつけたいのですが

頂点を
{0.0f, 0.0f, 0.0f},
{0.0f, 48.0f, 0.0f},
{48.0f, 0.0f, 0.0f},
{48.0f, 48.0f, 0.0f}
のように定義して、
テクスチャ座標を
{1344.5f / 2048.0f, 144.5f / 2048},
{1344.5f / 2048.0f, 96.5f / 2048},
{1392.5f / 2048.0f, 144.5f / 2048},
{1392.5f / 2048.0f, 96.5f / 2048}
こうすると元の画像と比べて横方向に広がるのです

http://www.dotup.org/uploda/www.dotup.org2316033.png
上半分がDirectXの描画で、下半分が画像をビューワで開いたものです
0203デフォルトの名無しさん2011/11/27(日) 22:25:08.54
テクスチャでマップチップを表現するのが難しいってやつだな
フィルタとかかかったりするとサンプリングするとこがまたおかしくなってとなりの奴まで
描画に使っちゃったりして超うまくいかない

っていうかその画像なら1フレームでチップ全部必要になるわけじゃねぇんだから
あきらめて別のテクスチャにしろよ的な

マップチップで描画したいマップに関しては綺麗に表示させたいなら
テクスチャ1枚でなにやらやろうとするのは鬼門かもしれんな
環境や条件を絞った上でやればなんとかなるかもしれんが・・・
PCの設定によってうまくいったりいかなかったり

ま、ハードウェアの苦手なことはするもんじゃないよ(笑)
0204デフォルトの名無しさん2011/11/27(日) 22:31:47.62
データの方に誤差も考えてマージン持たせるんだよ
0205デフォルトの名無しさん2011/11/27(日) 22:32:53.29
>>202
そのコード片だけじゃ頂点とテクスチャのy座標の対応が逆なってるようにしか見えんけど

それと+0.5テクセルずらすんじゃなくて位置座標から-0.5ピクセルずらした方がいい
理由は忘れた
02062022011/11/27(日) 22:54:35.44
>>203
とりあえずフィルタはNONEにしてるのですが
つまり48*48の範囲の正確な描画はDirect3Dでは出来ないのですね

>>204
データというのはテクスチャの事ですか
そうなると厳しいですね……

>>205
特にy座標が逆になってるようにはみえませんが
0207デフォルトの名無しさん2011/11/27(日) 22:57:10.93
浮動小数の形式上の誤差はなかなか逃れられんだろう。
02082022011/11/27(日) 23:05:06.31
なかなかと云うからには逃れる方法はあるのですか
0209デフォルトの名無しさん2011/11/27(日) 23:05:48.95
>>206
>特にy座標が逆になってるようにはみえませんが

ん? Direct3Dのテクスチャ座標って上から下に向かうよ?
まあ読み込み時に逆なってるなら帳尻は合うのかもしらんけど
0210デフォルトの名無しさん2011/11/27(日) 23:15:48.04
>>208
実用に足るかは知らないが、誤差のでない数字っていうのが有るのよ。
具体的には、少数点以下のビットの保持方法を把握しないと難しい。
少数点以下の数字をビットシフトすると、1/(2n)になるのは知ってるよね。
情報の教科書とかにかいてあったと思うけど。
そういう数字はごさがほぼでない。でも実用に足るかはしらない。
0211デフォルトの名無しさん2011/11/27(日) 23:22:38.14
1/(2^n)だな。
0212デフォルトの名無しさん2011/11/27(日) 23:50:24.83
横に広がるならProjectMatrixに入れてるアスペクトの問題じゃね?
ためしにテクスチャ張ってない正方形でも描いてキャプチャしてみて横に広がってたらそれ
0213デフォルトの名無しさん2011/11/28(月) 00:03:06.27
画面作成時にタイトルバーの大きさが考慮されてなくてクライアント領域みてみたら
実は想定していたサイズじゃなかったってオチな
でもそれを解決してもなおこの問題は解決には至っていないと思う
なんか方法変えたほうがいいと思うんだよね
0214デフォルトの名無しさん2011/11/28(月) 00:27:55.52
だよね
0215デフォルトの名無しさん2011/11/28(月) 04:03:59.50
テクセル1.0は実質(テクスチャの軸あたりの総ピクセル数+1ピクセル)目なので
きっちりパーピクセル対応させようと思うと計算が面倒くさいよね。
0216デフォルトの名無しさん2011/11/28(月) 07:44:42.33
>>210
なるほど、少し調べてみますん

>>212
テクスチャを貼らなければきちんとした48*48の正方形が描画されます……と思ってよく見たら横に伸びてますね
クライアント領域が640*480のウィンドウに正射影で
D3DXMatrixOrthoLH(&projection, 640.0f, 480.0f, 0.0f, 100.0f);
とやってますが
これでは問題があるのでしょうか

>>213
そこに関しての調整は既に一度躓いていて修正済みです
0217デフォルトの名無しさん2011/11/28(月) 09:48:26.83
ちゃんとAdjustWindowRect使って領域計算してウィンドウ作ってるかとか
バックバッファとかビューポートのw,hがちゃんとクライアントレクトのw,h(640*480)になってるかどうかとか
0218デフォルトの名無しさん2011/11/28(月) 14:03:11.81
>>216
横はいいけど縦は?
Ortho使ってアスペクト比が狂うってのはバックバッファ→ウィンドウ転送でサイズが合致してないか
どっかで余計な値掛けてるかくらいしかないと思うんだがなあ。
全体的に一様に拡大されてるってんならわかるけども。

Pixで実行時のバックバッファ内容をキャプチャして比較してみた場合だとどうかね。
02192022011/11/28(月) 16:36:04.73
>>217
GetSystemMetrics()を使ってDLGFRAMEとCAPTIONを適切な分だけ足してウィンドウを作っているのですが
AdjustWindowRect()の方が正確なんですかね

>>218
縦は正しく描画されます
とりあえずPixというものを初めて使ってみます
02202022011/11/28(月) 21:35:19.29
ああ……
02212022011/11/28(月) 21:38:59.30
ごめんなさい、こちらの凡ミスでした
どうやら頂点座標の打ち間違えだったようです。質問を認めるときに何故気が付かなかったのか解りませんが……
本当にありがとうございました。お騒がせしました
0222デフォルトの名無しさん2011/11/28(月) 23:07:37.31
(#^ω^)ビキビキ
02232022011/11/28(月) 23:59:45.24
>>222
バーカ
0224デフォルトの名無しさん2011/11/29(火) 09:32:44.18
>>221
自分の凡ミスだと正直に報告した点については評価しよう。
今度逆ギレする時は名前欄ちゃんと消したかどうかを確認しとけよ。

では次の方どうぞ。
0225デフォルトの名無しさん2011/11/29(火) 21:57:21.45
俺はそうは思ってなくて
実はやり方自体のまずさに気がついてこの方法での実現を断念したんだと思う
0226デフォルトの名無しさん2011/11/30(水) 00:12:13.98
別にどうでもいい
0227デフォルトの名無しさん2011/11/30(水) 06:08:38.25
何気に昔ながらの2Dゲー作るって結構知識いるんだよね
矩形ごとにDrawPrimitiveすると遅くて描画間に合わないし
テクスチャまとめると今度は横のチップの絵が出てきたりするし
フィルタかけるとすごくきったないしフィルタのONOFFはユーザ側の設定依存になるし

まあ、こんな程度だと思うけど
0228デフォルトの名無しさん2011/11/30(水) 08:25:06.74
タイリングパターンとチップからでかいテクスチャを生成するんじゃダメなの?
0229デフォルトの名無しさん2011/11/30(水) 09:15:44.71
メモリが無限にあるならそれでいんじゃね
0230デフォルトの名無しさん2011/11/30(水) 10:50:52.32
ここで思考停止するのが凡人
ここからメガテクスチャを生み出したのが天才
0231デフォルトの名無しさん2011/11/30(水) 12:22:38.90
昔ながらの2Dゲームが作りたいならDirectDrawでも使った方がよっぽどいいと思うが。
0232デフォルトの名無しさん2011/11/30(水) 14:55:32.86
DirectDrawってまだあるの?
0233デフォルトの名無しさん2011/11/30(水) 15:02:23.34
無いけど使える
0234デフォルトの名無しさん2011/11/30(水) 21:08:57.55
>>233
詳しく教えてほしいな!
昔のソース引っ張りだしてきたらビルドエラー起こすもんで
DirectDraw7からDirect3D9へ引っ越し作業してたんだ
過去のコード使えるならその方がありがたい
0235デフォルトの名無しさん2011/11/30(水) 22:36:05.65
GDI+でいいじゃん
0236デフォルトの名無しさん2011/11/30(水) 22:54:59.88
BeginSceneって必ずEndSceneとペアなんですか?
0237デフォルトの名無しさん2011/11/30(水) 23:15:04.43
ペアだと何か困るのですか?
0238デフォルトの名無しさん2011/11/30(水) 23:28:32.09
>>236
どっちか一人にすると悪さをするので必ずペアで呼んであげましょう

>>234
233じゃないが、DXSDK(June 2010)からddraw.libが含まれてないそうなので
それ以前のSDKをどっかから探してインスコしてパス張ってやればいいんじゃないか
以前と挙動が同じかどうかはわからんが
0239デフォルトの名無しさん2011/11/30(水) 23:51:05.40
>>238
ああそういう意味で「ないけど使える」って事か
0240デフォルトの名無しさん2011/12/04(日) 12:22:54.10
ワールド座標をスクリーン座標とZバッファの値に変換する方法を教えてください。
0241デフォルトの名無しさん2011/12/04(日) 12:49:54.34
出来ればこんな感じが良いです。省略した部分をどう書けば良いのかが分からなくって・・・

void Convert(D3DVECTOR3 &vectScreen,D3DXMATRIXA16 mWorld,D3DXMATRIXA16 mView,D3DXMATRIXA16 mProj,D3DVECTOR3 vWorld)
{
/* 省略 */
}
0242デフォルトの名無しさん2011/12/04(日) 12:55:01.75
3Dでボンバーマンのようなものを作ってるんだけど3Dだと透視画法のように奥に行くほど小さく見えるじゃないですか
あれ微妙にプレイしづらいんで正規品の2Dボンバーマンの見た目にマッチするように奥行きと大きさを無関係に表示させたいんですけど
そういう場合はどう設定すればいいんですか?
0243デフォルトの名無しさん2011/12/04(日) 12:58:17.35
>>242
3Dにしない
0244デフォルトの名無しさん2011/12/04(日) 13:06:02.08
正射影
0245デフォルトの名無しさん2011/12/04(日) 14:21:18.44
理屈の上ではカメラから遠く離れた場所にオブジェクトを置き、
それに合わせて前方・後方クリップ面を遠く、視野角を狭くすればそういう効果は得られると思う。
ただZバッファがどうなるかは知らん。
奥行きの影響を限りなくゼロじゃなくてゼロにする必要があるならそういう関数があるのかな?
なければ射影行列を自前で設定することになるかも。
0246240=2412011/12/04(日) 17:47:17.39
色々調べた結果、D3DXVec3Projectという関数がありました。
ちなみに242は私と違います。
0247デフォルトの名無しさん2011/12/04(日) 21:06:28.37
とりあえず音鳴らすときはXAudio2でいいの?
頑張ってDirectMusicで作ったらヘッダがなくなってたし・・・
0248デフォルトの名無しさん2011/12/04(日) 21:09:39.33
もうXPは切り捨てていいの?
0249デフォルトの名無しさん2011/12/04(日) 21:11:52.47
>>248
そ、そんな言い方ってあんまりだよ…
0250デフォルトの名無しさん2011/12/04(日) 22:49:45.48
XPからWindows8にアップデート出来るとかうんたらかんたら
0251デフォルトの名無しさん2011/12/04(日) 23:47:37.72
>>247
おk。ただirrKlang楽だよirrKlang
0252デフォルトの名無しさん2011/12/05(月) 00:09:19.61
ハード的にもXP積んでるやつは結構厳しくなってきたと思うしなぁ・・・
どうしてもやって欲しい人がXP持ちだとか言わないなら、もう切っても良い頃合いだと思う。俺はね
■ このスレッドは過去ログ倉庫に格納されています