- 1 名前:名前は開発中のものです。 [04/05/05 12:33 ID:dP7V/vQq]
- DirectXについては基本このスレで話していこうとものです。
基礎的な質問+高度な質問も簡潔かつ簡単に答えることをモットーにして頂き このスレの回転を早めて常にアクティブなスレにしたいと思っております。 このスレに質問等を書かれる方はまず最初に自分でしっかりと調べたのちに聞かれることをお願いします。 質問に対する答えも簡潔に出来る限りわかりやすくお願い致します。
- 226 名前:225 [04/07/15 01:08 ID:74XWLGbU]
- ユーザーが設定するのは、上の例の場合、M1,M2のWORLDマトリックスと、すべての頂点のw。
ウェイトが1であれば、100% M1となり、0であれば100% M2となり、0.5であれば、(M1*0.5 + M2*0.5)となる。
- 227 名前:225 [04/07/15 01:10 ID:74XWLGbU]
- >>223
こういうアホがいるからみんな消えていくわけだな。
- 228 名前:名前は開発中のものです。 mailto:sage [04/07/15 01:37 ID:J2QoNYbd]
- >>225
だから違うよ。 変換後の座標をウェイト値で合成するんだろ。 行列を線形補間してそのまま使ったりしたらまずい。
- 229 名前:名前は開発中のものです。 [04/07/15 01:44 ID:a0RqXKRX]
- >>225
久しぶりに正真正銘のバカを見たわ。 >>216,>>217>>223 をどう読んだのか? あと「行列を補間する」の意味を教えれ。
- 230 名前:名前は開発中のものです。 [04/07/15 01:50 ID:a0RqXKRX]
- >>225の発言を抜粋。
「素人さんは書き込み遠慮願えますか? 」 「おまえまったく判ってない。 」 「こういうアホがいるからみんな消えていくわけだな。 」 ・・・鬱だ氏んでくれ>>225。
- 231 名前:名前は開発中のものです。 [04/07/15 02:33 ID:5qtxwqQC]
- 炎の文字はどうやって表現すれば・・・
- 232 名前:名前は開発中のものです。 mailto:sage [04/07/15 03:28 ID:ArWlyibQ]
- >>225
スキニングによるボーン処理のweightと ボーン変換における各key_frame間の補間が 混同されすぎてます。 key_frameが十分細かく設定されているなら貴方の言う補間処理は不要でしょう。 しかし、頂点が複数のボーン影響を受ける事とは別の話です。 スキニング、ボーンのウェイト、姿勢の補間を理解する事をお勧めします。
- 233 名前:名前は開発中のものです。 mailto:sage [04/07/15 03:55 ID:WZCfEE8K]
- >>231
可愛そうだからマジレスしてやると、 その技術はDirectXとは全く関係が無い。 結論を言うと、スレ違いだね。 適切なスレで質問すると良いだろう。
- 234 名前:名前は開発中のものです。 mailto:sage [04/07/15 04:30 ID:37qRmEuN]
- DirectDrawでウィンドウモードで完全にVSYNCさせるのって無理?
- 235 名前:名前は開発中のものです。 mailto:sage [04/07/15 07:22 ID:74XWLGbU]
- >>228
「 変換後の座標をウェイト値で合成するんだろ。 行列を線形補間してそのまま使ったりしたらまずい。 」 たしかに、D3Dではベクトルを合成しているのは認める。しかし、 V'= V{wM1+(1-w)M2}, V'= wVM1+(1-w)VM2 この2式の結果は同じ。嘘だと思うなら試してみ。
- 236 名前:名前は開発中のものです。 mailto:sage [04/07/15 07:24 ID:74XWLGbU]
- >>229
> あと「行列を補間する」の意味を教えれ。 M' = wM1+(1-w)M2 って定義してんだろ。 > ・・・鬱だ氏んでくれ>>225。 おまえがしねよ。数学もできないでプログラマなんかやってんじゃね。
- 237 名前:名前は開発中のものです。 mailto:sage [04/07/15 09:23 ID:yYZscXA7]
- 行列の線形補間は可能に一票。
ただし、行列の段階だろうが座標だろうが、 元が行列のデータを補間すると回転要素の劣化が激しいので、 補間が前提であれば、成分を混ぜた物を使う時点で愚策。 行列でしかデータを吐けないエクスポーター等は使うべきではない。 行列の場合は、補完しなくてもいいように、 細かくデータを吐きだして無駄にデータ量をとるのを覚悟するしかない。
- 238 名前:名前は開発中のものです。 [04/07/15 13:37 ID:Z96KWdeU]
- >>225, >>235, >>236
おまえがしねよ。同次座標も同次変換も知らないでプログラマなんかやってんじゃね。 > たしかに、D3Dではベクトルを合成しているのは認める。しかし、 > V'= V{wM1+(1-w)M2}, V'= wVM1+(1-w)VM2 > この2式の結果は同じ。 (゚Д゚)ハァ?
- 239 名前:228 mailto:sage [04/07/15 14:14 ID:znH2PgHO]
- >>235
だから変換後に合成するのと合成した行列で変換するのは違うって。 たとえば単位行列とY軸で180度回転してる行列を補間してみればわかる。 これは極端な例だけど回転要素が近い行列同士でも この問題が起きてるので線形補間してそのまま使うのはまずいって。
- 240 名前:名前は開発中のものです。 mailto:sage [04/07/15 14:43 ID:5CaSOcVA]
- それ例は、行列の補間でも、変形後の座標の補間でも、同じだと思われ。
このスレにはバカしかいないのか?
- 241 名前:名前は開発中のものです。 mailto:sage [04/07/15 14:59 ID:TlmwfOpa]
- 189が惑わされているといけないから言っとく。
サンプル通りに変形済みの頂点合成しとけば問題ない。 頂点シェーダに手を出したら、とりあえずトゥーンシェーディングをやって見る。 案外面白いから。 テクスチャの使い方を学ぶ良いサンプルだと思うし。 スキニングで行列を補間するメリットってあるの?
- 242 名前:名前は開発中のものです。 mailto:sage [04/07/15 15:00 ID:Lf5cLVAP]
- 引き篭もりは多いが、バカは >>240 ぐらいだろ。
- 243 名前:名前は開発中のものです。 mailto:sage [04/07/15 15:26 ID:qBCUW8sZ]
- >>240
面倒なんで一行目だけ ・単位行列 1 0 0 0 ・Y軸で180度回転 -1 0 0 0 これをウエイト0.5で補間したら 0 0 0 0 になってまずいだろ。 これは極端だとしても違う回転要素の行列を線形補間しただけだと スケーリングが掛かったような変な行列になる。 回転要素が違う行列を線形補間したものと クォータニオンやオイラー角を補間してそれで作った 行列の中身は違うだろ。
- 244 名前:名前は開発中のものです。 mailto:sage [04/07/15 15:30 ID:qBCUW8sZ]
- >>242
>>235 もバカでしょ。 同一人物だとしたらもう手に負えないんで もう行列の補間が正解でいいです。
- 245 名前:名前は開発中のものです。 mailto:sage [04/07/15 15:31 ID:yYZscXA7]
- 補間が前提ならクオータニオンを使うべき。
行列はどのような方法を使おうと、回転要素に問題が発生する。 ちなみにクオータニオンを使っても、180度をブレンドなら、かなりのゆがみが発生する。 行列ならゆがみを通り越して、ひしゃげる。
- 246 名前:名前は開発中のものです。 mailto:sage [04/07/15 15:36 ID:yYZscXA7]
- 勘違いをしていたが、スキニングのウエイトか。
アニメーションとかモーションブレンドの話をしてた。 ちょっと逝ってくる。
- 247 名前:240 mailto:sage [04/07/15 15:54 ID:37qRmEuN]
- >>243
さっきも書いたが、 変換後の補間するやり方で、その例をやってみろよ。 同じ結果になるだろ。 なぜなら、行列の補間も、変換後の座標の補間も、どっちも所詮線形変換だから。 自分が本当のバカであることを証明したいだけなのか?
- 248 名前:240 mailto:sage [04/07/15 15:58 ID:37qRmEuN]
- >>244
行列の補間は間違い。 行列の補間は同次座標を含めた4次元座標での線形補間、 変形後の座標の補間はもちろん3次元座標での線形補間。 どちらも単なる線形補間なのでそもそも「正しい」など言えないのだが、 ウェイトを使ったブレンディングの概念により近いのは明らかに後者。
- 249 名前:240 mailto:sage [04/07/15 16:04 ID:37qRmEuN]
- 書き忘れたが、
>>243の例で、二つの方法の結果が等しくなるのは、 用いられている二つの行列が、同次座標を変化させない変換を表しているから。 まさかここまで言わないと理解できないほどのバカはいないと思うが、念のため。
- 250 名前:名前は開発中のものです。 mailto:sage [04/07/15 16:20 ID:YX0jyFzX]
- >なぜなら、行列の補間も、変換後の座標の補間も、どっちも所詮線形変換だから。
>行列の補間は同次座標を含めた4次元座標での線形補間、 もうアンタの勝ちです。間違いない。
- 251 名前:名前は開発中のものです。 [04/07/15 21:59 ID:nzaxTIty]
- 水、雷を表現したいのですがどういった方法がありますでしょうか。
- 252 名前:名前は開発中のものです。 mailto:sage [04/07/15 22:14 ID:6ceo0B9C]
- >>251
パーティクル、ストリップ、etc。
- 253 名前:名前は開発中のものです。 [04/07/15 22:28 ID:6ceo0B9C]
- と思ったらまたマルチポストか・・・。
マジレスすると、SIGGRAPHの論文でも読め。 で実装できたらこういうところで発表するとヒーローになれるぞ。 lucille.sourceforge.net/cgi-bin/sbr2004/wiki.cgi?page=FrontPage 「レンダリング、アニメーション関連などの見た目でデモが分りやすいのがよいかと」 とあるのでテーマとしてはいい感じのはず。 がんばれ厨房!
- 254 名前:名前は開発中のものです。 mailto:sage [04/07/16 00:23 ID:3qkX9w8Z]
- >>221,231,251
1.炎、水、雷などを写真に撮ります。 2.ビルボードで表示したいように並べます。 3.ヽ(゚∀゚)ノヤッター!!
- 255 名前:名前は開発中のものです。 mailto:sage [04/07/16 00:25 ID:3qkX9w8Z]
- >>234
>>199
- 256 名前:189 mailto:sage [04/07/16 00:35 ID:rarOkq+Y]
- 結局意味分からんかった。
もっと勉強して出直してきます。 ご迷惑かけました。マジで。
- 257 名前:名前は開発中のものです。 mailto:sage [04/07/16 04:30 ID:OS1hTRz1]
- >>255
>DirectDrawでウィンドウモードで完全にVSYNCさせるのって無理? いや、DX8以降のD3Dと統合されたのではなく、 DDrawでの話しなんすが。
- 258 名前:名前は開発中のものです。 mailto:sage [04/07/16 07:54 ID:PHtkNvW+]
- >>257
今ヘルプ見られないから適当だが、同期とる関数がある。
- 259 名前:名前は開発中のものです。 mailto:sage [04/07/16 08:04 ID:8sJyX39C]
- D3DPRESENT_PARAMETERSのPresentationInterval = D3DPRESENT_INTERVAL_ONE ;
じゃねーの。
- 260 名前:257 mailto:sage [04/07/16 10:31 ID:x3ikW9YG]
- >>258
言われてみてもう一度よくさがしてみたら、 >IDirectDraw7::WaitForVerticalBlan >メソッドは、アプリケーションが垂直帰線消去間隔と共に同期する方法を提供する。 あったあった、これっぽいね。thx しかし、D3DとDDrawの区別が付かないやつって多いのか? まぁDX8以降マニュアルからも消えちゃったし、しょうがないのか…
- 261 名前:名前は開発中のものです。 mailto:sage [04/07/16 11:41 ID:iwAzj5Mk]
- >>259
>D3DPRESENT_INTERVAL_ONE DX9以降、それは使わない。ヘルプ参照。
- 262 名前:名前は開発中のものです。 mailto:sage [04/07/16 15:24 ID:tp+KxRbP]
- >>260
微妙に困るよね>DDrawのマニュアル まぁDX7SDKのマニュアルありゃ済む話ではあるが
- 263 名前:名前は開発中のものです。 mailto:sage [04/07/16 19:45 ID:4tunO0kM]
- >>262
それがDX8以降のサンプルを見ると、微妙に変更点があるっぽいんですよね。 (ラッパー関数が増えた?) ぱっと見て違うのが、DDオブジェクトをnewで確保してたりとか。 C#のガベージコレクタを効かせるためなのかな? そういう変更点の説明がまったく無いのがなんとも気持ち悪い。
- 264 名前:名前は開発中のものです。 [04/07/17 15:48 ID:YfC7nJ2s]
- >>256
いや、お前は別に何も悪くない。 悪いのは、>>213, >>219, >>225, >>228, >>236, >>243のような、 忠告を繰り返し無視した上で大嘘を連発する、数学もできないバカプログラマー達だ。 まあこのスレの住人はほとんどそういう奴らばっかなのは事実だが。
- 265 名前:名前は開発中のものです。 mailto:sage [04/07/17 17:20 ID:B5TJNueI]
- 荒れるから終わってる話を蒸し返すなよ…
- 266 名前:名前は開発中のものです。 mailto:sage [04/07/17 18:00 ID:+9dzbshW]
- じゃあ話題を変えてみよう。
DWORD dwExecuteBufferSize; D3DEXECUTEBUFFERDESC D3DExecuteBufferDesc; ZeroMemory(&D3DExecuteBufferDesc, sizeof(D3DExecuteBufferDesc)); D3DExecuteBufferDesc.dwSize = sizeof(D3DExecuteBufferDesc); D3DExecuteBufferDesc.dwFlags = D3DDEB_BUFSIZE; D3DExecuteBufferDesc.dwBufferSize = dwExecuteBufferSize; hRes = m_lpD3DDevice->CreateExecuteBuffer(&D3DExecuteBufferDesc, &m_lpD3DExecuteBuffer, NULL);
- 267 名前:名前は開発中のものです。 mailto:sage [04/07/18 15:15 ID:KMrdhIqJ]
- >>264
V'= V{wM1+(1-w)M2} = wVM1+(1-w)VM2 まだこれがわかんねーやつがいるよw 『数学もできないバカプログラマー達だ。 まあこのスレの住人はほとんどそういう奴らばっかなのは事実だが。』 おまえのことだよプッ>>264
- 268 名前:名前は開発中のものです。 mailto:sage [04/07/18 15:39 ID:wMON88Q+]
- >>266
そんな話題に変えてもなつかしすぎて誰もついてきてこれないぞ
- 269 名前:名前は開発中のものです。 mailto:sage [04/07/18 20:13 ID:XV/x4++F]
- むしろ、どう反応すればいいのか迷うが。
実行バッファを作って終わりなんだもの。
- 270 名前:名前は開発中のものです。 [04/07/19 08:58 ID:48ZX7Scm]
- 荒んでるとこすまんがDirectInput7で教えてくれ('A`)
今作ってるゲームを二人プレイ用に改造してるとこなんだが、2つ目以降の Joystickデバイス取得の具合がどうもよろしくないのよ・・・ LPDIRECTINPUT7 pDI = NULL; LPDIRECTINPUTDEVICE7 pDIdev1 = NULL; LPDIRECTINPUTDEVICE7 pDIdev2 = NULL; BOOL CALLBACK GetJoystickCallback(LPDIDEVICEINSTANCE lpddi,LPVOID *pvRef) { HRESULT hResult; hResult = pDI->CreateDeviceEx(lpddi->guidInstance, IID_IDirectInputDevice7,(void**)pvRef, NULL); if(hResult == DI_OK)returnDIENUM_CONTINUE; returnDIENUM_STOP; } こういう列挙コールバックを書いて・・・ (省略) hResult1 = pDI->EnumDevices(DIDEVTYPE_JOYSTICK,(LPDIENUMDEVICESCALLBACK)GetJoystickCallback,&pDIdev1,DIEDFL_ATTACHEDONLY); hResult2 = pDI->EnumDevices(DIDEVTYPE_JOYSTICK,(LPDIENUMDEVICESCALLBACK)GetJoystickCallback,&pDIdev2,DIEDFL_ATTACHEDONLY); こんな感じでデバイスを取得しようとすると、PCにジョイスティックが1つしか繋がってない時でも 2回目のEnumDevicesがDI_OKを返しちゃうのよね(ちゃんと失敗を返してくれない) ちなみにPCからジョイスティックを抜いて実行するとちゃんと1つ目から取得に失敗する。 何故か1つでも繋がってると2回目のEnumDevicesまで成功してしまうという・・・ いろんなサンプル見たけど1つ目を認識させるとこ止まりで参考にならんかった 漏れのコードが間違ってるのは明白なんだが解決方法がワカラン ジョイスティックが1つの時に2回目以降がDI_OKを返さなくする正しいやり方を教えて下され
- 271 名前:名前は開発中のものです。 mailto:sage [04/07/19 10:21 ID:54Q4/4D7]
- >>270
EnumDevicesは1回だけ呼ぶんだよ。 それでGetJoystickCallbackをループさせて、複数のデバイスを取得する。
- 272 名前:名前は開発中のものです。 mailto:sage [04/07/19 10:22 ID:p5K2URLW]
- そら、最初から列挙し直したら同じものを列挙するだろ。
誰かがデバイスのインターフェイスを取得しようが、 別に列挙の条件から外れるわけではないからな。 一回の列挙で一度にやるか、二回回すなら、取得済みのデバイスを無視するとかしないと。 ちなみに俺は、IDirectInputDevice8::GetPropertyでDIPROP_JOYSTICKIDを使って、 使用するデバイスを選べるようにしている。
- 273 名前:名前は開発中のものです。 mailto:sage [04/07/19 12:38 ID:48ZX7Scm]
- うーむ、コールバック関数をよく理解できんな…
コールバック関数内でCreateDeviceExを2回呼んで終わりにすればいいのかな? ちょっとやってみる
- 274 名前:名前は開発中のものです。 mailto:sage [04/07/19 12:56 ID:48ZX7Scm]
- コールバック内で2回CreateDeviceExやったけど同じだった・・・orz
- 275 名前:名前は開発中のものです。 mailto:sage [04/07/19 13:06 ID:48ZX7Scm]
- 思いっきり勘違いしてた
修正したらうまく行ったみたい 因みにこんな感じにしてみますた BOOL CALLBACK GetJoystickCallback(LPDIDEVICEINSTANCE lpddi,LPVOID *pvRef) { HRESULT hResult; if(pDIdev1 == NULL){ hResult = pDI->CreateDeviceEx(lpddi->guidInstance, IID_IDirectInputDevice7,(void**)&pDIdev1, NULL); if(hResult == DI_OK)returnDIENUM_CONTINUE; elsereturnDIENUM_STOP; } if(pDIdev2 == NULL){ hResult = pDI->CreateDeviceEx(lpddi->guidInstance, IID_IDirectInputDevice7,(void**)&pDIdev2, NULL); if(hResult != DI_OK)pDIdev2=NULL; } returnDIENUM_STOP; } なんか恥ずかしいコードだな・・・ >>271-272 サンクスコ
- 276 名前:名前は開発中のものです。 mailto:sage [04/07/19 13:27 ID:54Q4/4D7]
- >>275
強引だな・・・・・。
- 277 名前:名前は開発中のものです。 mailto:sage [04/07/19 21:53 ID:FkElpxEK]
- 確かにしようもないことで荒れるけど、業務系板と比べると『しようもない』のレベルの次元が違う。
- 278 名前:名前は開発中のものです。 mailto:sage [04/07/19 21:53 ID:FkElpxEK]
- 確かにしようもないことで荒れるけど、業務系板と比べると『しようもない』のレベルの次元が違う。
- 279 名前:名前は開発中のものです。 mailto:sage [04/07/20 02:12 ID:TWCqFqg5]
- レベルの次元
- 280 名前:exciteは神 mailto:sage [04/07/21 00:33 ID:NW4Ruyd1]
- それは破滅しますが、ので、そこに、さらにある、
オペレーティング・システム・ボードと比較して、 それを確かにする方法、レベルの次元、の 「そこに、さらにある、実行する方法」異なります。
- 281 名前:名前は開発中のものです。 mailto:sage [04/07/22 22:56 ID:5rJvB900]
- Forceware60シリーズリリース。
GeForce6800にDirectX9.0c(WindowsXPSP2RC2)と Shader3.0環境は整った。
- 282 名前:名前は開発中のものです。 mailto:sage [04/07/24 19:31 ID:P1GEgvZG]
- ぬるぽ
- 283 名前:名前は開発中のものです。 mailto:sage [04/07/24 19:55 ID:PR5W0fUe]
- ポルンガ
- 284 名前:名前は開発中のものです。 mailto:sage [04/07/24 19:56 ID:NIvgFQBW]
- アハーン
- 285 名前:名前は開発中のものです。 [04/07/24 23:31 ID:fQM+YmNW]
- 恐らく、それらはTAKOのビットを装備しており、それを焼き、沸騰させて、それが大阪と呼ばれる時、ゆで団子になるでしょう!
- 286 名前:名前は開発中のものです。 mailto:sage [04/07/25 09:28 ID:aCl1Aoq6]
- 今制限の多いエフェクトやHLSLでしこしこライブラリ作ってるけど
近い将来その制限も緩和されてゴミとかすんだろうな なんだかむなし
- 287 名前:名前は開発中のものです。 [04/07/25 09:44 ID:mxjAoDQK]
- ここはひどい日本語でつね
- 288 名前:ヘルジャック [04/07/25 10:21 ID:ovE6k6xQ]
- combatant.hp.infoseek.co.jp/cgi-bin/up/src/up0262.zip
漏れが作ったんだけど ちょっとこれを改良して
- 289 名前:名前は開発中のものです。 [04/07/25 10:35 ID:rIHwuKxk]
- >>288
ヘルジャックさ、 現在のフレームのキャラクタの位置を決定してから マップの表示範囲を決めるようにしないか? つまりマップの描画にはキャラクタの座標が必要になるわけだが。
- 290 名前:名前は開発中のものです。 [04/07/25 10:36 ID:XPpA5MG/]
- 誘導されてきたのですが 質問いいですか?
ビルドしてVCから実行するとHALで起動して普通に実行できるのですが、EXEファイルを 直接実行するとREFになっていますみたいなメッセージがでてその後 Geniric application error.Enable debug output for detailed information. とメッセージがでて強制終了します。強制終了する前にプロパティをみると REFになっています。 直接起動するとなぜREFで起動するのかとメッセージの意味がよくわからないのですが教えてもらえませんか。 使用ソフトはVisual Studio AcademicでビデオカードはGeforceFX5200です。
- 291 名前:ヘルジャック mailto:sage [04/07/25 10:38 ID:ovE6k6xQ]
- 主人公が画面の真ん中にくるような処理ね
あと obj.cppがスプライトやってるんだけど y座標でソートしてからキャラを描写したいんだけど リスト構造のソートのやり方がよくわからないから 教えて
- 292 名前:名前は開発中のものです。 mailto:sage [04/07/25 10:40 ID:ovE6k6xQ]
- >>288
操作は Alt+Enterがフルスクリーン 1キーがキャラを生成 Deleteで削除
- 293 名前:名前は開発中のものです。 [04/07/25 10:46 ID:rIHwuKxk]
- >>290
それだけじゃわかんねぇよw >>291 そのまえに2DなのにY座標でソートして描画すんの?
- 294 名前:ヘルジャック mailto:sage [04/07/25 10:50 ID:ovE6k6xQ]
- キャラが重なったとき
下にいるキャラの頭でそのキャラの上のキャラの足が隠れるようにしたいんだ なんか今のはオブジェの生成した順番になってるから描写すると変な重なりに見える
- 295 名前:名前は開発中のものです。 [04/07/25 11:10 ID:rIHwuKxk]
- >>294
ああ、そうか、とりあえずゲームの世界は構築してあるな。 Y座標が画面からみて奥行きになるわけね。 リストのソートがわからないのも問題だけど この場合はこのリストはソートしない方がいいな。 だってこれ、スプライトのリストじゃん。Y座標のソートと関係ないよ。 必要なのは描画するときだけで、フレームごとに変わるんだから、 こういうときは、一時的に関数内でポインタの配列を作って、リストの要素のポインタ一つ一つを 用意した配列にとっちゃってそれをソートするんだ。 これで配列のソートと同じだ。 言ってること理解できるかな? ポインタをとってポインタをソートするんだ。
- 296 名前:295 [04/07/25 11:18 ID:rIHwuKxk]
- おっと間違え。
スプライトのリストじゃなくてオブジェクトのリストか。 まあ、それでもソートはしちゃ駄目だね。 て、いうかリストの順番に意味をもたせるのはあんまりよくないんだな。
- 297 名前:名前は開発中のものです。 mailto:sage [04/07/25 11:19 ID:ovE6k6xQ]
- >>295
dクス ポインタの配列を作ってそれを描写か combatant.hp.infoseek.co.jp/cgi-bin/up/src/up0263.zip とりあえずBGMを付けてみた なんだか難しそうだがやってみまつ
- 298 名前:名前は開発中のものです。 [04/07/25 11:29 ID:rIHwuKxk]
- >>297
>なんだか難しそうだがやってみまつ 楽勝でしょ? でも、自分で考えようとするとハマルかもw そういうときは手順をしっかり書いて見る 1.十分な数のポインタ配列を用意。(もしくは可変配列) 2.オブジェクトリストのポインタを全部ポインタ配列にとる。 3.Y座標でソートする。 (一番楽なソートをアルゴリズムの本をみるなり、どっかのサイトからパクッてこい。) (この手のものいちいち自分で作ってると日が暮れるぞw) 4.できた配列を元にして描画する。 で、終わりだ。
- 299 名前:名前は開発中のものです。 mailto:sage [04/07/25 11:33 ID:aCl1Aoq6]
- >>290
そういうのは、やはり実はエラってるってケースが多い。 DXをデバッグバージョンにしてログをみるといい。
- 300 名前:名前は開発中のものです。 [04/07/25 11:45 ID:rIHwuKxk]
- >>290,297
#include <crtdbg.h> _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); じゃあ、おまいら、とりあえずメモリリーク支援なw 上のヘッダをインクルードして、関数をWinMain関数がはじまってすぐのところにそのままおけ。 デバッグモードで実行してみればアウトプットウィンドウになんか出るからみてみろ。 特にヘルジャック、メモリリーク出してるぞ。 ダブルクリックで飛べないから、結構みつかりにくいな。 ひとつひとつ要素を削ってってメモリリークの有無を確認して場所を特定していくしかないな。 頑張れ。
- 301 名前:名前は開発中のものです。 mailto:sage [04/07/25 13:04 ID:ovE6k6xQ]
- >>300
すぐにどこがメモリリークしているかわかったぜ Mapで確保したメモリをfreeしていないのと Script クラスも解放していなかったからだ でもねタスク処理でアプリの終了時に全タスクkillはメンド
- 302 名前:名前は開発中のものです。 mailto:sage [04/07/25 13:08 ID:z6Ypme9P]
- >288
DirectXとは関係ないけど、個人的志向として言いたい。 タスクの関数ポインタをvoid *で持つ意味ないだろ。 > void (*proc)(struct task_tag *); 何でもありのCスタイルとはいえ、無意味な型安全性の損失は如何なものか。 と書いたところで、君が m.minami とやらではなさそうだな。 >300 「プログラムの終了時にはどうせOSが解放するからfreeしない」 というタイプの人なんじゃないの?
- 303 名前:ヘルジャック mailto:sage [04/07/25 13:12 ID:ovE6k6xQ]
- WM_DESTROYでTaskAllKillがコールされるようにしたら
リークはでなくなったようだけど アプリを閉じるとブレークポイントがどうのって画面がでて一時停止するようになっちゃった それと ポインタの配列にコピーしてそれを描写にはしたけど バブルソートがいまいちうまくいかない
- 304 名前:名前は開発中のものです。 mailto:sage [04/07/25 13:43 ID:vVa7R8jb]
- お前たち、ここは DirectXスレですよ!
最近の流れの話題は、べつの適切なスレでやって欲しい
- 305 名前:名前は開発中のものです。 mailto:sage [04/07/25 13:46 ID:cf02RjbN]
- まぁいいじゃね、話題も無かったし
たまにはこういうレベルの話も、ほのぼのして良い
- 306 名前:名前は開発中のものです。 mailto:sage [04/07/25 14:02 ID:AJso40ZZ]
- 夏休みの間くらいガンマンしてやれ。バキューン
- 307 名前:名前は開発中のものです。 [04/07/25 15:59 ID:rIHwuKxk]
- >>303
>バブルソートがいまいちうまくいかない だからその辺のソースパクッてこいっていっただろう。 こんなの自分で組んじゃうような効率の悪さじゃ仕事進まんよ。 たかがバブルソートでも、1から組んでたら、 動作確認してバグや抜け探すだけで、俺だって30分近くかかっちゃうよ。 バブルソートは完璧に動くのが前提ってところから開発していかなきゃ。 いつまでたってもゲームなんか完成しないよ。 www.google.co.jp/search?q=%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88%E3%80%80%E3%82%BD%E3%83%BC%E3%82%B9&ie=UTF-8&hl=ja&lr=
- 308 名前:ヘルジャック mailto:sage [04/07/25 16:19 ID:ovE6k6xQ]
- こんな感じに実装したんだけど
なんか実行してみると重なりはおかしいまま OBJ **obj_sort(int prio) { OBJ *ObjList[OBJ_MAX];// オブジェワーク OBJ *o = ObjTop; OBJ **OA = ObjList; //オブジェのリストを取る while (o != NULL) { *OA=o; OA++; // リストを進めます o = o->next; } //ソート部分 return BubbleSort(ObjList); }
- 309 名前:ヘルジャック mailto:sage [04/07/25 16:19 ID:ovE6k6xQ]
-
OBJ **BubbleSort(OBJ **o) { OBJ *temp; // ソーティング(Y座標にてソート) for (int i = 0; i < ObjCnt - 1; i++) { int sort = 0; for (int j = 0; j < ObjCnt - i - 1; j++) { if (o[j]->obj_y > o[j + 1]->obj_y) { temp = o[j]; o[j] = o[j + 1]; o[j + 1] = temp; sort++; } } if (sort == 0) break; } return o; }
- 310 名前:ヘルジャック mailto:sage [04/07/25 16:20 ID:ovE6k6xQ]
- void obj_draw(TASK *t)
int x0 = map_x >> 8; // マップのどの位置を表示するか決める int y0 = map_y >> 8; int x1 =((map_x & 0xff) >> 3) & 31; // スクロールのあまり int y1 =((map_y & 0xff) >> 3) & 31; int x,y; int s=0; // オブジェ描写 OBJ *o = ObjTop; OBJ **a; a=obj_sort(0); while (o != NULL) { o=a[s]; s++; if (o->stat==NOW_USE) { x=*o->obj_x+o->dx-(32*x0)-x1;y=*o->obj_y+o->dy-(32*y0)-y1; if(x<640&&y<480&&y+o->h>0&&x+o->w>0)//見えない部分まで描写しない DD_DrawBitmap(x,y, Bitmap[o->tex_no],o->xx,o->yy,(o->xx+o->w),(o->yy+o->h),o->Trans); } // リストを進めます //o = o->next; if(s>=ObjCnt)o=NULL; } }
- 311 名前:名前は開発中のものです。 mailto:sage [04/07/25 16:36 ID:cH8/Nm1o]
- >OBJ *ObjList[OBJ_MAX];// オブジェワーク
obj_sort関数は最終的にこの配列へのポインタを返してるようだが、 この配列はスタック上に取られてるからobj_sort関数から帰ったときにはもう無いぞ。 とりあえず↓にしてみなさい static OBJ *ObjList[OBJ_MAX];
- 312 名前:ヘルジャック mailto:sage [04/07/25 16:44 ID:ovE6k6xQ]
- かーっ
なんでうごかないのか! とりあえずソートの昇順 降順 を入れ替えて見たら OBJ **BubbleSort(OBJ **o)の if (o[j]->obj_y > o[j + 1]->obj_y) { を if (o[j]->obj_y < o[j + 1]->obj_y) { 主人公が手前に表示されるようになっているからポインタの内容は失われていないみたい OBJ **BubbleSort(OBJ **o) がおかしいのか
- 313 名前:ヘルジャック mailto:sage [04/07/25 16:47 ID:ovE6k6xQ]
- combatant.hp.infoseek.co.jp/cgi-bin/up/src/up0262.zip
のobj.cppにバブルソートを実装してくださるとうれしい
- 314 名前:ヘルジャック mailto:sage [04/07/25 17:14 ID:ovE6k6xQ]
- if (o[j]->obj_y > o[j + 1]->obj_y) {
原因が分かりました えーと if (*o[j]->obj_y > *o[j + 1]->obj_y) { にすると改善 つまり今までは *がなかったために obj_yのポインタのアドレスでソートしていたのでした.
- 315 名前:名前は開発中のものです。 mailto:sage [04/07/25 18:18 ID:ovE6k6xQ]
- combatant.hp.infoseek.co.jp/cgi-bin/up/src/up0264.png
- 316 名前:名前は開発中のものです。 [04/07/25 22:01 ID:rIHwuKxk]
- >>315
おおー。できてんじゃん。 一日で大した進歩だと思うよ。いやマジで。
- 317 名前:ヘルジャック mailto:sage [04/07/25 23:07 ID:ovE6k6xQ]
- >>316
てへ (*^_^*) どうも リスト構造の並び替えはしない とかとても勉強になりました.
- 318 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:06 ID:V6gmIHxA]
- ボスケテー
ウィンドウモードで D3DPRESENT_PARAMETERSの PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT としたら、 ディスプレイは60Hzで動いてるのにFPS45しかでないよーヽ(;´Д`)ノ カクカク ナンデダロ D3DPRESENT_INTERVAL_IMMEDIATE にするとFPS300くらいでヌルヌルポ動くのに
- 319 名前:名前は開発中のものです。 [04/07/26 23:24 ID:6Ccm5Gt6]
- >>318
他のアプリ、例えばDirectXのサンプルでも同じ動作をするのか? また、手持ちの他のグラボは試してみたか? また、ドライバは更新してみたか? と、色々いじってみなきゃわからねーよ。マジで。
- 320 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:44 ID:CLA4c8LP]
- 描画が間に合わないフレームあんじゃなの?
- 321 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:44 ID:V6gmIHxA]
- >>319
他のアプリやらサンプルでもそうなんです。 グラボ1コしかナッシングなんです。ていうかノーパソ。 ドライバ一番新しいんです・・・・ どこから切り込めばよいのやら_| ̄|○ 鬱だ
- 322 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:46 ID:V6gmIHxA]
- >>320
いえ、同期なしだと300とか出るんですよ ていうか何も描画しないでPresentだけしてもFPS45とか_| ̄|○ イッタイナンナンダ
- 323 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:48 ID:CLA4c8LP]
- なんだ、液晶モニターってフレーム間引いて表示してるのあるべ?
- 324 名前:名前は開発中のものです。 mailto:sage [04/07/26 23:56 ID:V6gmIHxA]
- 表示の問題なのけ?
1秒間にループ回った回数を表示させても45なのでしが いや流石の俺でも目視でFPS45とか測れないべ
- 325 名前:名前は開発中のものです。 [04/07/26 23:57 ID:6Ccm5Gt6]
- >>321
それじゃ、心配ナッシングw もう、どうすることもできないんだからw 同期無しにして、タイマーでテキトーに画面更新しとけば?w ノーパソ買った自分を恨めw ところで、ノーパンとノーパソって似てねぇ?
- 326 名前:名前は開発中のものです。 mailto:sage [04/07/27 00:10 ID:o1CoEu/t]
- >>302
void * 意外にどうやって関数ポインタを持つ
|

|