トップページgamedev
1001コメント376KB

DirectX総合スレ (Part6)

■ このスレッドは過去ログ倉庫に格納されています
0001DirectX62006/11/17(金) 00:38:52ID:lRjOsWKq
言語はC++
他の言語使ってる奴はいますぐ消えろ

■過去スレ

DirectX総合スレ
Part 1: http://pc5.2ch.net/test/read.cgi/gamedev/1083728025/
Part 2: http://pc5.2ch.net/test/read.cgi/gamedev/1095863432/
Part 3: http://pc5.2ch.net/test/read.cgi/gamedev/1105333209/
Part 4: http://pc8.2ch.net/test/read.cgi/gamedev/1132937938/
Part 5: http://pc8.2ch.net/test/read.cgi/gamedev/1157727402/
0042名前は開発中のものです。2006/11/22(水) 10:15:13ID:9wdx7tnk
>>41
ビューボートを小さくすればいいわ。
ただし通常時と同じパースにしようと思ったら
射影行列の調整もいるわね。
0043422006/11/22(水) 10:16:33ID:9wdx7tnk
ビュー"ポ"ートねw
0044名前は開発中のものです。2006/11/22(水) 12:45:11ID:9wdx7tnk
>>41 こんなんでいいかしら。
http://gamdev.org/up/img/8161.zip
0045412006/11/22(水) 17:36:00ID:rOjjh+1c
>>42-44
すごくよさげです、ありがとうございます!
0046名前は開発中のものです。2006/11/25(土) 11:58:49ID:28pYdgx7
CloneAnimationControllerを使おうとするとコンパイル時に
そんな宣言は無いと言われて困っています(´・ω・`)

d3d9anim.h内を覗くとあるし、他の関数は問題なく使えます。
何が原因なのでしょうか?
0047名前は開発中のものです。2006/11/25(土) 16:56:13ID:UiiIQlRV
>>46
呼ぼうとしてるのは、ほんとにID3DXAnimationControllerのインスタンス?
0048名前は開発中のものです。2006/11/25(土) 18:36:35ID:yXVUaN7E
>>47
ありがとうございます。
別のクラスから呼んでました。アホだorz
0049名前は開発中のものです。2006/12/01(金) 16:09:46ID:EFQj1BYa
カラーキー抜きでスプライト表示するとフチがジャギってしまうんですけど
これアンチエイリアスするには自前でフチのα値設定するしかないんでしょうか?
0050名前は開発中のものです。2006/12/01(金) 16:42:11ID:DvsEpNU7
フチだけジャギーだと違うかも知れんけど、サンプラ変えれば直るんじゃね?

g_pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
0051名前は開発中のものです。2006/12/03(日) 00:37:44ID:0psPS4tl
環境:VS.Net2002 & C++ & DirectX9

自作フレームワークが形になってきたんで、それで試しに一本ゲームを作ったら
プレイ中に幾らか進んだところで D3DXCreateTextureFromFileEx 関数が
D3DERR_OUTOFVIDEOMEMORY エラーを吐きやがる。
ずっと悩んでたが、試しにアロー演算子書いてメソッド名の補完リストを出してみたら
Releaseメソッドが出てきたので、これ試したらエラー出なくなった。

もしかして LPナントカ っていうポインタ型に実体を持たせた後は
とりあえずReleaseするのが常識だったんですか・・・
ゲーム終了時とか「とりあえずこれで終わる時」に消えるオブジェクトはちゃんと消してても
「ゲーム中に何度も書き換える」ものは上書きで元有った奴を書き換えて使えると思ってた(´・ω::;::;;;,
0052名前は開発中のものです。2006/12/03(日) 09:43:42ID:B3PEhHsc
mallocしたものをfreeしないとどうなるよ。
そういうことだ。
0053名前は開発中のものです。2006/12/03(日) 12:29:49ID:zNtBISG4
>>51
> 「ゲーム中に何度も書き換える」

その書き換え方が問題だ。
D3DXCreateTexture* はその名のとおり新規に作成するのであって、書き換え関数ではない。
Release せずに資源を再利用したければ D3DXLoadSurface* 関数とかを使う。
Release してから D3DXCreateTexture* のほうが絶対に楽だけど。
0054名前は開発中のものです。2006/12/03(日) 18:29:51ID:B3PEhHsc
まぁ置き換えるととかそういうことは割りとどうでもいいんだわ。

確保したメモリはちゃんと解放する習慣をつけようぜってな感じ。
0055名前は開発中のものです。2006/12/03(日) 18:32:59ID:a9B+1mao
CComPtrでも使え
0056名前は開発中のものです。2006/12/03(日) 18:42:53ID:0psPS4tl
レスどうもありがとう。
malloc <-> free も  new<->delete もちゃんとするようにしてるんだが
DirectXの方は、windowsプログラミングの経験も含めてまだ浅いので
API関数がメモリをどう確保するのかまだなじめない・・・
頑張ります
0057名前は開発中のものです。2006/12/07(木) 01:00:20ID:v+lHDW5u
【単純にワールド行列をD3DXMatrixRotationXなどで回転させる派】
 利点 → 簡単。
 欠点 → 1フレーム内で何度も回転操作を行う場合は処理が重い。

【XYZそれぞれの回転角を3つのfloat型変数に保管し、回転操作の際はその軸のfloat型変数を
増減させる。値の変化があったら描画直前でワールド行列を作り直す派】
 利点 → 処理が軽い。
 欠点 → 親子関係が入ってくると作りにくい。


私が前者で友人が後者なのですが、皆さんは回転操作ってどうしてます?
普通は前者ですよね?回転操作ってそんなシビアになるほど遅くないですよね?
0058名前は開発中のものです。2006/12/07(木) 01:16:16ID:ZPF/XNPe
意味がわからねんだけど・・・

どうやっても最後は行列使うんだから同じコトいってるとしか思えん。
そもそも1フレーム内で何度も回転って1つのモデルを何度も表示って意味ならどっちも同じ事だし。
0059名前は開発中のものです。2006/12/07(木) 01:46:22ID:Ej/wW5Bp
>>57
自分の好みでおk。
それでも気になるなら自分で測ってみればいい、3分もかからんだろ。
0060名前は開発中のものです。2006/12/07(木) 01:47:38ID:1pSKfsu6
処理を軽くするために、
・姿勢を示す単位ベクトルを保持し、描画時にマトリックスにぶちこんでる。
・多間接の場合は親から子の順番で描画し、子は親のマトリックスを掛け合わせる。
いずれの場合も三角関数は使わないし、単位ベクトルも近似的に計算している。

三角関数使う場合はどうするのと聴かれそうだが、
可能な限り多数の描画対象を扱うために、
基本的に三角関数は使わないゲームデザインなので、答えようがない;
0061名前は開発中のものです。2006/12/07(木) 05:30:23ID:prA2cvfC
もしかして
D3DXMatrixRotationX
D3DXMatrixRotationY
D3DXMatrixRotationZ
でそれぞれ作って掛け算してるってのが重いって事を言いたいのだろうか?

具体的に重さが変わる処理は、どこのことを言ってるの?
0062名前は開発中のものです。2006/12/07(木) 06:53:43ID:VqbMwM2W
>>58
説明が下手でごめんなさい。
例えば1フレーム内で10回の回転操作を行うとすると
前者のパターンでは回転角を現すfloat型変数に対して回転角を10回加減算した後に行列を作成し
後者のパターンでは回転行列の関数を10回呼ぶ事になります。

結果は似たようなもだけどどちらのアプローチが良いか
どんな利点や欠点があるのか、という話です。
>>59さんがいうようにどっちでもいいのかもしれませんが、他の方の意見も聞きたいです。

>>60
>姿勢を示す単位ベクトルを保持し、描画時にマトリックスにぶちこんでる
う、よくわからないです。ごめんなさい。
姿勢を示す単位ベクトルというのは3軸方向へ伸びる3つの単位ベクトルでしょうか?
でもそれだと普通に行列を回転させるのと変わらないでしょうし・・・。

>>61
そうです。私のやり方だと回転操作を行うたびに行列回転をするので重く、
友人のやり方では回転操作はxyz軸を示す3つのfloat型変数に対してのみ操作を行うため、
行列への回転操作は描画直前の一度だけなので比較的軽い。という事です。

長くてごめんね
0063名前は開発中のものです。2006/12/07(木) 07:40:24ID:prA2cvfC
>>61
その前に、その友人の方法にちょっと突っ込みたいのだが…

XYZ軸それぞれに回転量を持っているとしてだ、
現在の姿勢に対して回転させるときにその友人は
RotationY += hoge;
こんな風にしてるんだよね?

そうだとして、最終的に描画のためにマトリックスに変換するときに
RotationX、RotationY、RotationZを使って行列に変換してるんじゃねーかと憶測しているのだけど、
Coordinate = XRotMat * YRotMat * ZRotMat;
みたいになってる? ソレだとまず理論的に破綻してるような気が…
0064名前は開発中のものです。2006/12/07(木) 10:11:48ID:Ej/wW5Bp
もしかして、>57は回転量を持たずに、毎回行列操作をしてるんじゃね?

struct Obj {
void rotateX(float f) { RotateX(m_local, m_local, f); }
Matrix m_localx;
};

つー感じで。
0065名前は開発中のものです。2006/12/07(木) 21:24:51ID:1pSKfsu6
はいはい解読解読。

>>57の前者は今まで行われたX軸Y軸Z軸それぞれの回転の履歴を保存しておき、その順番に応じて適用。
>>57の後者は今まで行われたX軸Y軸Z軸それぞれの回転の角度をそれぞれに積算して適用。
>>60は(単位ベクトル云々で事実上)行列を保持して回転の結果を保存して適用。

>>57の前者と後者は全く違う方法。
>>57の前者と>>60は全く同じ方法。ただし>>57毎フレーム全部再計算している。
0066名前は開発中のものです。2006/12/09(土) 01:12:52ID:QNYlKrF0
で、結局どうなったんだろう。
0067名前は開発中のものです。2006/12/09(土) 18:33:24ID:uwxtEYiA
ところでVC++2005Expressと新しいSDK(June2006とか)でシェーダデバッグってできる?
ググって出てくるサイトで説明されているDirectX Extensions For VS.NETとか見当たらなかったんだが・・・。
0068名前は開発中のものです。2006/12/09(土) 19:55:11ID:mmrHLc8Y
無理。2005EEしかないなら、PIXでなんとか汁。
0069名前は開発中のものです。2006/12/09(土) 21:42:04ID:uwxtEYiA
>>68
d
Standardとかだとできるのかな?
0070名前は開発中のものです。2006/12/10(日) 07:41:22ID:+ec2/YXw
>>57
いってることちがうっしょ?
要は姿勢行列の保持を@Matrixでしてるか、Axyzの回転角でもってるかの違いでしょ?
ワンフレームの処理の重さ云々は全く関係無いっしょ?

俺は用途によってモードを変えてる。
Matrix制御モードのときと回転角制御モードのときとあるw
もちろんこれを切り替えるときは画面をフェードイン・アウトで切り替える。
どうしても切り替えたときにキャラの動きが「ブキッ!」と変わっちゃうからねw

1.@は座標系を頻繁に切り替えるときに有効(動いてる足場に飛びのる等)
2.Aは向いてる方向を厳密に判定する必要のあるときに有効(RPGなんかにいいかも)

Aで1のことをやろうとすると座標系を切り替えたとき(ローカルAからローカルBにチェンジ)に
その座標系での回転角を座標変換後の行列から割り出しにくい(できるんだろうけど疲れるぜw)
@で2のことは俺の知識ではできんw

なわけでこんな制御してる。
たしかに他の人がどうやってるのかってのは聞きたいな。
0071名前は開発中のものです。2006/12/10(日) 07:54:03ID:RXGdZhfU
マトリックスから回転角を取得するのはたしかに至難だが、
移動・拡大縮小・回転(クォータニオン)の成分を抽出するのは簡単だし、
回転をクォータニオンで補間するなら特に問題ないじゃろ。

DirectX8の悪しきXファイルフォーマットの行列キーの時にも
移動・拡大縮小・回転に分解してフレーム間のモーション補間してる。
0072名前は開発中のものです。2006/12/10(日) 08:02:46ID:+ec2/YXw
>>71
>移動・拡大縮小・回転(クォータニオン)の成分を抽出するのは簡単だし、
>回転をクォータニオンで補間するなら特に問題ないじゃろ。
え?それって回転角をもたずにどうやって「今どっちの方向を向いているか?」って判定すんの?

例えばいま東向いてるか、南向いてるか、北向いてるかとかって判断するの面倒じゃね?
つーか、やっぱり回転角をちゃんと視覚化できる形にしたいってのもあるしね。

回転角←→姿勢行列

が双方向に変換できない限りモードを2つもったほうがいいと思うんだけど。
これが完璧にできるって前提があればどっちの変換でもいけるけど、
大抵のモデリングソフトはできていない。(できてるように見えてもどこかでできない瞬間がある)
0073名前は開発中のものです。2006/12/10(日) 08:07:53ID:+ec2/YXw
まあ、例えモードをわけたとしても双方向ができないと

ワールド-ローカルA(90,0,20)-ローカルB(180,0,30)-ローカルC(45,0,50)-ローカルD(270,80,90)-・・・
ワールド-ローカルE(90,0,20)-ローカルF(180,0,30)-ローカルG(45,0,50)-ローカルH(270,80,90)-・・・

ってなったときにローカルCとローカルFの関係を比べる必要がでたときにできねぇんだけどなw
0074名前は開発中のものです。2006/12/10(日) 08:18:29ID:RXGdZhfU
クォータニオンから回転行列作って(0,0,1)のべクトルを変換すればどっちを向いているかは出るじゃろ
0075名前は開発中のものです。2006/12/10(日) 08:20:57ID:+ec2/YXw
>>74
駄目っすw
勉強不足でわからないっすw
0076名前は開発中のものです。2006/12/10(日) 08:31:41ID:iAIA/3xo
>>72
行列のほうが、向いてる方向の確認は判別しやすいよ
各ベクトル成分が軸になっているからね

xyzの回転角を使うということは
別の言い方をすると回転方向がxyzに制限されるということであり
その結果向いている方向が判別しやすいと言っても
それは制限したことによる結果であって
データ保持形態の利点というわけではないんです
0077名前は開発中のものです。2006/12/10(日) 08:32:41ID:RXGdZhfU
完全な真上を向いていないなら(0,01)に回転を適用してatan2f(x,z)で角度が出る。
まぁ角度が必要な状況ってのもそうそうないんだけど。

逆にy=1なら真上、y=-1なら、真下を見てるちゅーことになる。
0078名前は開発中のものです。2006/12/10(日) 08:36:37ID:RXGdZhfU
XZ平面に対しての角度ね
0079名前は開発中のものです。2006/12/10(日) 08:37:12ID:+ec2/YXw
>>76
正直なにいってるのかさっぱりわかんね。

上方向をY軸としたときに0〜360で自分の方向を決定できるならその方が楽じゃん。
「行列のほうが方向の確認がしやすい」ってところからそれを誰の視点で言ってるのかわかんね。

スクリプトなんかでも結果は回転角で現在の状態を取得できたほうが便利だし、
少なくとも俺の知識じゃベクトル成分を回転角に完全に変換するのはかなり困難だ。

この辺の前提から俺とあんたでかなり違うと思う。
別にベクトル同士の計算を強引にして「方向がわかります」って話しだけじゃないんよ。
回転角が取得できなきゃそもそも駄目な用途があるんよ。(スクリプトあるときとか)

そこまでわかってていってるのか、ただ、「計算ができます」っていってるだけなのか
まずそこからいってちょっとわからん。
0080名前は開発中のものです。2006/12/10(日) 09:11:29ID:iAIA/3xo
>>79
それは「上方向がY軸」という制限を加えることで
自分の向いている方向が決定できているんじゃないでしょうか


>スクリプトなんかでも結果は回転角で現在の状態を取得できたほうが便利だし、
これは、自分が現在どの方角を向いているというのを、回転角で取得したい、ということですか?

ワールド座標系でのxy平面での進行方向を確認したいのであれば
正面を表す行成分をxy平面に射影してatan2を使えばいいだけの話です

行列で姿勢を持っている場合、自分の向いている方向はローカル座標系では常に正面です
回転角が必要な場合になるのは、比較する対象がどの方角にあるか、というときくらいじゃないでしょうか
0081名前は開発中のものです。2006/12/10(日) 09:12:17ID:iAIA/3xo
xy平面じゃなくてxz平面ですね
すいませんでした
0082名前は開発中のものです。2006/12/10(日) 10:53:17ID:+ec2/YXw
>>80
それはちょっと安直じゃね?
3回転中の2回転目の判定がほしいとかいうチェックをしたことがないの?
0083名前は開発中のものです。2006/12/10(日) 15:43:15ID:iAIA/3xo
>>82
3回転中の2回転目の判定、って具体的にどんなことか分からないんですけど
そもそも3回転って何を3回転するんですか? xyz軸のこと? そして何を判定するの?
0084名前は開発中のものです。2006/12/10(日) 16:30:07ID:+ec2/YXw
>>83
ええー?
この表現で通じないのー。
お前、話し難いー。
ホントに3Dでプログラム組んだことあるのかよー。
0085名前は開発中のものです。2006/12/10(日) 17:06:22ID:iAIA/3xo
そりゃ、ありますけど

その発言からなんとか理解しようとするなら
3回転はYawPitchRollのことで2回転目はPitchのことで
判定とは相手の位置の方角がどの方向なのか

こういうことですか?
これで間違っていたとしても
単にあなたの説明不足なだけですよ
0086名前は開発中のものです。2006/12/10(日) 17:08:30ID:XKfp5jTS
>>69
持ってないから断言できないけどStandardも無理と思われ。

一応ソース↓
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=909404&SiteID=1
0087名前は開発中のものです。2006/12/10(日) 17:19:53ID:gmCAHMuv
ローカル→ワールド変換行列の、逆行列じゃだめなのか?
0088名前は開発中のものです。2006/12/10(日) 20:45:34ID:+ec2/YXw
>>85
はぁ・・・馬鹿とは話できないねw
じゃあな。
0089名前は開発中のものです。2006/12/10(日) 20:59:25ID:RXGdZhfU
3回転中から2回転目がほしくなったことはないだが・・・
行列からクォータニオンは取り出せるし、直行行列での姿勢もわかるから
計算負荷に目をつぶれば3軸の回転角度も出るしなぁ・・・
0090名前は開発中のものです。2006/12/11(月) 01:35:22ID:vTBYyTmm
>>88
俺も3回転中の2回転という表記を見たときは一瞬3つの軸回転の事が脳裏をよぎったぞ
もちろん君が言いたいのはそういう意味ではない事はわかったが
3回という表記が誤解を招きやすかったり、説明が足りないという印象は否めない

文章じゃ伝えたいことが思ったほどうまく伝わらないのは当たり前だが
それを馬鹿とか切り捨てるのはどうかと思うぞ
0091名前は開発中のものです。2006/12/11(月) 05:45:27ID:33d6g8SG
>>90
ありえねぇんだよ。死ねよ。
0092名前は開発中のものです。2006/12/11(月) 10:39:57ID:gFWpLplq
ああ、回転角の定義、というか、どこからの回転角なのかが食い違っているのね。
0093名前は開発中のものです。2006/12/11(月) 20:28:02ID:33d6g8SG
>>92
はぁ?食い違ってる?
俺にはちょっと考えれば矛盾が見えるような馬鹿な醜態(>>80)晒したことを必死で誤魔化してるようにしか見えないよ。
こういう誤魔化し方を一度でもした奴とは俺は技術的な会話を継続しない。
はっきりいって技術者として不適切。

人に対して偏屈なのは別にかまわないけど、
匿名掲示板のこんなところでまでくだらん曲解使って自分の考慮の無さを隠してるようじゃ伸びない。
技術に対してはいつも素直でいなきゃ駄目。
技術者にはそれが伝わるし、隠せ無い。
1から出なおせといいたい。
0094名前は開発中のものです。2006/12/11(月) 21:35:07ID:RPVZVReg
どうしちゃったのこの人?
0095名前は開発中のものです。2006/12/11(月) 21:47:31ID:2BhDwr1p
「失敗の原因を素直に認識し、『これは非常にいい体験だった。尊い教訓になった』
というところまで心を開く人は、後日進歩し成長する人だと思います」

松下電器産業創業者 松下幸之助



とりあえずあれだな。仲良くしろやカスども。
0096名前は開発中のものです。2006/12/11(月) 22:51:37ID:C6DDmuyj
九、謙虚に反省せよ 向上へのクッションである

旺文社創始者 赤尾好夫
0097名前は開発中のものです。2006/12/11(月) 22:59:47ID:rflZNTCU
「これでいいのだ!」

無職 バカボンのパパ 
0098名前は開発中のものです。2006/12/12(火) 01:55:44ID:xUTy3Kf3
Microsoft XNA Game Studio Express 1.0
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=a73a7e71-ff41-432d-a0eb-043e904a1905&DisplayLang=en

Microsoft XNA Framework Redistributable 1.0
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=2e136a1f-f187-478c-9da5-aaeb0904782b&DisplayLang=en
0099名前は開発中のものです。2006/12/12(火) 06:32:21ID:8epOU40A
それで結局3回転中の2回転目ってどういう意味なの?
理解している人が居るなら後学のために教えてもらいたい。
33d6g8SGは答えなくて良いから。
0100名前は開発中のものです。2006/12/12(火) 07:05:12ID:NFGEvJ+0
>>99
マジでわからんの?
例えば、キャラが3回転するとき回転角は0〜1080になる。
この2回転目を判断するには360〜720を判断する必要がある。
これを行列に変換してしまうと、どうやって逆変換かけてもこの0〜360と360〜720というのは判断しようがない。

つまり、>>80
>回転角が必要な場合になるのは、比較する対象がどの方角にあるか、というときくらいじゃないでしょうか
なんていってるけど、2回転するだけで回転角(またはそれにあたるパラメータ)が必要になるっちゅー話。
0101名前は開発中のものです。2006/12/12(火) 18:47:06ID:6BpJk5LX
お前ら下らない争いになるととたんに元気になるよなw
0102名前は開発中のものです。2006/12/12(火) 21:42:02ID:muYOaPvx
そんな熱くなることじゃねぇよ。万能の回転技法はない、場面に応じて使い分けるもの。
0103名前は開発中のものです。2006/12/12(火) 23:49:03ID:vbp0HzNj
SDK付属のメッシュを見るためのMeshViewについてお聞きしたい。
このソフトでスキンメッシュを読み込んだ時、右下に表示される
Vertの値が、Xファイルに書かれている頂点数と微妙に違うのですが、
これはいったいどういうで何を表しているのでしょうか?
具体的な例を出すと、tiny.xのファイルには、
Mesh {
  4432;
のように、頂点は4432個と記述されているのに、
MeshViewで読み込むと4884vertと右下に表示されます。

よろしくおねがいします。
0104名前は開発中のものです。2006/12/13(水) 00:14:25ID:5VkPThlK
>>103
位置座標は同じなんですけどUVと法線は別なんですとかそういうのじゃね?
結局、DrawPrimitiveに突っ込む形にしてみないとわからないんじゃねの?
0105名前は開発中のものです。2006/12/13(水) 00:20:43ID:lFno5IQa
>>103
自分でXファイルを展開して表示するところまでコードを書いてみれば分かる。
0106名前は開発中のものです。2006/12/14(木) 05:49:35ID:UgT6nhgH
3Dスプライトクラスのレンダ処理は、テクスチャ毎で管理して描画したほうがいい?
0107名前は開発中のものです。2006/12/14(木) 07:41:46ID:GvQx2Dou
>>106
3Dスプライト?ビルボードだったらモデルといっしょじゃね?
0108名前は開発中のものです。2006/12/14(木) 20:03:10ID:UgT6nhgH
>107
板ポリにテクスチャはっ付けている奴です。疑似2D用の。
そっかビルボードを参考にすればいいのか。ありがとうございます。
0109名前は開発中のものです。2006/12/14(木) 20:33:23ID:8Qdr6/24
あれ?同じテクスチャーが続くように気を配るのって紳士のたしなみじゃねーの?
0110名前は開発中のものです。2006/12/14(木) 21:46:34ID:UgT6nhgH
じゃあ同じテクスチャを使ってる板ポリ達を、バッファに詰め込めばマダムにモテモテ?
0111名前は開発中のものです。2006/12/14(木) 21:51:12ID:8Qdr6/24
紳士の背景に薔薇が咲き乱れます。
0112名前は開発中のものです。2006/12/21(木) 15:49:27ID:pvteBlEy
過疎って増すが質問。
D3Dで、BeginScene を実行したかどうかを取得するにはどしたらいい?
0113名前は開発中のものです。2006/12/21(木) 16:06:02ID:3yBHm1wl
static bool fBeginScene = false;

inline HRESULT MyBeginScene(なんちゃら) {
 fBeginScene = true;
 return d3ddevice->BeginScene(なんちゃら);
}

inline HRESULT MyEndScene(なんちゃら) {
 fBeginScene = false;
 return d3ddevice->EndScene(なんちゃら);
}

inline bool D3Dで、BeginSceneを実行したかどうかを取得する(void) {
 return fBeginScene;
}
0114名前は開発中のものです。2006/12/21(木) 16:11:46ID:r6vu12AT
inline bool D3Dで、BeginSceneを実行したかどうかを取得する(void) {
    return d3ddevice->BeginScene() == D3DERR_INVALIDCALL
}
しかしなんでもないときはBeginSceneされてしまうという罠
0115名前は開発中のものです。2006/12/21(木) 19:03:00ID:pvteBlEy
>>114
そんなの既に考えたわ。
そうゆう外人系の発送じゃなくて、
ちゃんとD3Dの初期化処理の内部にフラグとかがあって
BeginScene をフラグを取得ってか、
そういや、BeginSceneを2重に実行するとどうなったっけ?
0116名前は開発中のものです。2006/12/21(木) 19:12:29ID:iCkkZVoa
考えたんならドキュメントくらい読めよw
0117名前は開発中のものです。2006/12/21(木) 20:31:54ID:l07XXTQQ
そもそも、そんな判定が必要になること自体が間違い。
0118名前は開発中のものです。2006/12/22(金) 01:51:57ID:1OvCp0Hc
すいません、↓のように1MBの一枚のテクスチャを二つのテクスチャステージに設定した場合ってビデオメモリには1MBぶんのテクスチャが確保されるのでしょうか?それとも二倍の2MBぶんのテクスチャが確保されるのでしょうか?

LPDIRECT3DTEXTURE9 g_pMeshTexture;

〜中略(1MBのテクスチャをg_pMeshTextureに読み込む)〜

g_pD3DDevice->SetTexture(0, g_pMeshTexture);//ステージ0では色のみ使用
g_pD3DDevice->SetTexture(1, g_pMeshTexture);//ステージ1ではαのみ使用
0119名前は開発中のものです。2006/12/22(金) 18:26:10ID:Q/NfrM/M
久しぶりにDXSDK取りにいったら、
色々変わってるのぅ。
やはりDecember 2006 SDKは様子見だよな?
October 2006 SDKこっち使ったほうが無難だよな?
魅惑のビスタなんて糞食らえだぜ。
0120名前は開発中のものです。2006/12/22(金) 18:44:41ID:hprlzGc1
>>117は非同期処理もしらない無垢なクソガキ
0121名前は開発中のものです。2006/12/22(金) 20:28:59ID:r5hyVZgI
SM1.1切り捨てってなんやねん!!
DirectX8世代(4Tiとか)はゲームするなっちゅーことか!!
0122名前は開発中のものです。2006/12/22(金) 21:31:35ID:G4QmQh5L
>>120
最近グラマになったクソガキなのかもしれないが、
昔から状態確認するためにGet・・・とかIs・・・には頼るなとMSが言っている。
もっともカンファとか行かないだろうから知らんだろうけど。

MSの名言を2つ。
最も高速にレンダリングする方法は、レンダリングしないことだ。
最も高速に状態確認する方法は、自分で何したのか覚えておくことだ。
0123名前は開発中のものです。2006/12/22(金) 22:52:04ID:igGRT8du
>>121
>SM1.1切り捨て

まじかそれ。えらい困るんだが。
0124名前は開発中のものです。2006/12/23(土) 02:42:48ID:tJHKf9MA
つーか、1.xピクセルシェーダだけ切り捨てなのね・・・
正直、3.0未満はアウトとかじゃなくてヨカタ
未だにゲフォFX5200なので・・・
0125名前は開発中のものです。2006/12/23(土) 02:53:46ID:EewZUbpJ
SM1.1は制限が多すぎて使い物にならん。
結局2.0の有無で分岐が現実的な線引きになっちまう。

初代箱のSM1.1も専用拡張がされてるしな。

>>120
非同期うんぬんの前に別々のスレッドから同じデバイスに
同時に書き込みを行おうとする事自体がおかしい。
0126名前は開発中のものです。2006/12/23(土) 08:01:26ID:nacJYpBA
自分のアプリが糞なのも認識できずにマルチスレッドの問題にしようとするぐらい馬鹿なら
スレッドなんか作るなといいたい。
0127名前は開発中のものです。2006/12/23(土) 10:10:50ID:ZHr9j/ja
つまり 糞スレ立てんな っつーことだな。
0128名前は開発中のものです。2007/01/02(火) 22:39:04ID:lFOAwFAt
すみません。「D3DXLoadMeshHierarchyFromX」周りで行き詰ってるので質問したいのですが、
症状は、

ビルドは成功します。それでMSVCからF5で起動しても上手くいきます。
ですが、生成された実行ファイルを直に起動すると落ちてしまいます。
デバッガでアタッチしたところ、「D3DXLoadMeshHierarchyFromX」直後で
落ちていました。

「ID3DXAllocateHierarchy」の派生クラスは、サンプルのSkinnedMesh
を引用しています。変更した所は、
CreateMeshContainerとGenerateSkinnedMeshだけですが、
D3DXLoadMeshHierarchyFromX後にどちらも呼び出されることなく落ちるので
そこが原因ではないと思います。

D3DXLoadMeshHierarchyFromX後、4回目のCreateFrame内で
pFrame = new D3DXFRAME_DERIVED;
を処理しようとしたところnew内のmallocでエラーが発生し、
ヒープが壊れているとアナウンスされました。
ファイル自体は読みに行っているので、パスが間違ってるということはないと思います。

読み込ませているXファイルはSkinnedMeshで正常に読み込め、表示されます。(デバイスはHAL(SW vp)です)
似たような症状があったので参考にしたのですが、
http://www.shader.jp/xoops/html/masafumi/cbbs/cbbs.cgi?mode=al2&mo=207&namber=206&space=15&rev=1&page=0&no=0

D3DDEVTYPE_REFでもダメで、D3DCREATE_SOFTWARE_VERTEXPROCESSINGでもダメでした。

行き詰ってしまったので質問させていただきました。
思い当たる点がありましたらご指摘ください。

0129名前は開発中のものです。2007/01/03(水) 00:11:31ID:WUf1mB34
>>128
きっちり読まずに勘で答えるけど、
D3DDEVTYPE_REFじゃなくて
D3DDEVTYPE_HALはどう?
0130名前は開発中のものです。2007/01/03(水) 01:14:02ID:YqMAaEXo
>>129
やってみましたが、それでもだめでした。
ハイエンドなグラボの友達のPCでもダメだったので
やはりヒエラルキの実装に問題があるのでしょうか。
もう一回ソース洗いなおしてみます。。。
何か気づきましたらまたお願いします。
0131名前は開発中のものです。2007/01/03(水) 03:54:25ID:z0c+FGaT
変更が多くないなら再現するコードを上げたら?
0132名前は開発中のものです。2007/01/03(水) 08:54:41ID:NNKpeQ1h
つーかそれはそのままヒープぶっ壊してるだけなんじゃ?
0133名前は開発中のものです。2007/01/03(水) 12:21:21ID:VJaAEY5u
DirectXのバグじゃないのか?
0134名前は開発中のものです。2007/01/03(水) 18:42:13ID:NNKpeQ1h
D3DXLoadMeshHierarchyFromXで落ちるってのが納得逝かない。

今まで使ってきてD3DXLoadMeshHierarchyFromXで落ちるなんてなかったし、
SDKのサンプルプログラムで同じファイル読み込んでみりゃ判るんじゃないかね。

どっちみちヒープエラーってVCに言われてるならどっかでメモリのアクセスが間違ってんだろう。
0135名前は開発中のものです。2007/01/03(水) 19:56:50ID:ibn1TUIB
そもそもD3DXのXファイル関係の機能を使うなんて気が狂っているとしか思えない。
0136名前は開発中のものです。2007/01/03(水) 21:27:54ID:Yqqhb3rL
つーか俺がこの世に生きている時点で世の中が間違ってるに違いない。
0137名前は開発中のものです。2007/01/03(水) 22:04:01ID:z0c+FGaT
外人さんで似たようなのがいたので貼り。
まぁ、お前がヒープぶっ壊してるんじゃねぇの?という同じような流れのようだが。

http://www.gamedev.net/community/forums/topic.asp?topic_id=376836

4回目で落ちるよウワーン、という辺りが似てて不覚にもワロタw
0138名前は開発中のものです。2007/01/04(木) 01:30:44ID:a0F351u3
そういやD3DXはSquadもバグってたな
01391282007/01/04(木) 22:21:17ID:ObCbN5Q8
みなさんありがとうございます。
やはりメモリ操作でトンチンカンなことをしていました。

エラーが発生したところより前ばかりをトレースしていたのですが、
発生点よりも後ろのコードでのメモリ操作が原因でした。
ヒープを壊すのは初めてなので、まだ実行していない所が原因
になることもあるのだと、とても勉強になりました。

高級言語での統合開発環境の温床でヌクヌクと育った者としては、
抽象化されて隠蔽されているスタック操作やヒープの動作が
今ひとつよく分からないものですが、
これからはまじめに勉強せねばと思いました。
みなさんありがとうございました。
0140名前は開発中のものです。2007/01/10(水) 18:13:17ID:o7h3y59i
まだ実行していないところが、影響あるもんなんですか?ww
0141名前は開発中のものです。2007/01/10(水) 18:38:01ID:4WpzaT6j
今頃突っ込むのもちょっとな・・・
■ このスレッドは過去ログ倉庫に格納されています