- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:55:56 ]
- ※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 4.余計な雑談は不要ですよ 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「SDK見れ」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する方 】 ・ どんな事で躓いているのか明確にしよう。 ・ 長くならないなら躓いている部分のコードを晒してみれ。 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。 ・ 回答して貰ったら、出来るだけお礼もしよう。 【C++】 DirectX初心者質問スレ Part16 【C】 pc11.2ch.net/test/read.cgi/tech/1202634347/
- 337 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:22:28 ]
- >>335
レスありがとうございます c:\program files\microsoft directx sdk (august 2007)\lib これは一番上にあります その下にPlatform SDKがあります インクルードのdirectxも一番上にあります その下にPlatform SDKがあります
- 338 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:36:54 ]
- >>332
理解した、サンクス >>327 ベクトル演算と3次元回転と内積でいけるような気がする 思いつきだけど ベクトルA(どちらか)を、加算でも減算でもいいからXY成分を0にするベクトルAAを求め AをZ成分のみにする( A(0,0,*)みたく ) そのベクトルAAをベクトルBにも適応( つまりベクトルAをZ軸とする座標へ変換 ) ( 以降、その座標系の話で ) ベクトルBとXZ平面がなす角度を求め( ベクトルBからY成分をカットして作ったベクトルBBと内積で求める ) その角度でベクトルBをZ軸回転させ、ベクトルAとBをXZ平面にもっていく ここで、XZ平面上でのベクトルAとBのなす角を求め、その角度を使って任意の比率角度を決めて その角度で、ベクトルBを今度はY軸回転させたベクトルCを作る 最後にベクトルCを、ベクトルBBを作った逆の回転、座標変換した逆の計算をしてもどに戻せば… スマートじゃないけど、こんな感じは?
- 339 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:44:40 ]
- ムービーをWindowsXP/Vistaを対象に再生したいのですが
安定して使える関数が分からずに困っています。 現在ではどういった関数が使われているのでしょうか?
- 340 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:45:55 ]
- >>338
スマートじゃなさすぎないか?w それなら327の方法のままでいい気がするが 俺もやったことはないからツッコミだけですまんが、3Dシューティングのミサイルとかって毎フレーム相手の座標に向けて1度ずつ向きを変えるとか普通にやってそうだよな・・・ 意外と方法確立されてないのか?
- 341 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:50:53 ]
- >>340
自分でもスマートじゃないと思うが… しかし、実際に327を行なう手順を記述しただけだと思うんだが (オイラー法のみでクォータニオンを使わないで)
- 342 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:09:32 ]
- >>336
それっておそらく ttp://www.microsoft.com/japan/msdn/directx/welcome/dsmsdn/directx04162001.aspx ですよね。確かに最初見たときかなり衝撃的でした。 でもこれは3つのXファイルのメッシュデータを、自前でモーフしてるっぽいです。 あと、DirectX9のサンプルの中にイルカのXファイルはあるのに、使用しているサンプルが見つからないのはなぜでしょうね・・・
- 343 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:41:43 ]
- >>337
最後の「\x86」が足りなかったか。 c:\program files\microsoft directx sdk (august 2007)\lib\x86 このフォルダと、フォルダの中にd3d9.lib等一式が存在することを確認。
- 344 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:57:07 ]
- >>343
レスありがとうございます c:\program files\microsoft directx sdk (august 2007)\lib\x86 この設定にしたら>>334のエラー文はなくなりましたがまた>>322のエラー文が出てきました 解決策を教えてくださいお願いします
- 345 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:09:29 ]
- >>344
#include <windows.h>呼んでないとか・・・w
- 346 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:16:56 ]
- >>345
レスありがとうございます もう少し詳しくお願いします それだけだとちょっと分かりません すみません
- 347 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:04:11 ]
- >>346
その部分はもはやDirectXとは関係無いエラーだ おそらく環境のインストールに失敗している あとは汎用の初心者質問スレへ行った方がいい これ以上だとスレ違いということで叩かれるよ
- 348 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:15:53 ]
- すみません、DirectX上で動くゲームを作成してるんですが、
あるモーションのキーフレーム数を調べたいんです。 (無駄にキーフレームの多すぎるモーションはリダクションをしたいんです) LPD3DXANIMATIONSETのGetNumAnimationsがそれ用の関数だと思ったんですが どうもボーン配列の数を返しているみたいで・・・。 どうすればキーフレーム数を調べる事が出来るんでしょうか?
- 349 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:40:12 ]
- すみません、Visual C++ 6.0でDirectXのXファイル読み込みをプログラムしたのですが
上手くいきません。ビルドには成功したのですが、実行してもすぐに終了してしまいます。 SDKはDirectX 9.0 Update summer 2003を使っています。 デバッグ内容も下記に記載します。分かる人、教えて下さい、宜しくお願いします。
- 350 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:42:52 ]
- 'ntdll.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\kernel32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\user32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\gdi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3d9.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3d8thk.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\msvcrt.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\advapi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした
- 351 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:44:37 ]
- 'C:\WINDOWS\system32\rpcrt4.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\secur32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\version.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\winmm.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\dinput8.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\imm32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\lpk.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\usp10.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\uxtheme.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\MSCTF.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\Downloaded Program Files\CnsMin.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\shlwapi.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\imagehlp.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
- 352 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:45:10 ]
- 単純にループ書いてなくて一回素通りして終了するプログラムになってるとかじゃないよね?
- 353 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:45:13 ]
- 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\MSCTFIME.IME' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ole32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17W.IME' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\shell32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17DE.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ATOK17AE.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\comctl32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\Program Files\Trend Micro\Virus Buster 2007\TMAS_OE\TMAS_OEHook.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\hid.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\setupapi.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\wintrust.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:45:54 ]
- 'C:\WINDOWS\system32\crypt32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\msasn1.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\ntmarta.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\wldap32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\samlib.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 'C:\WINDOWS\system32\d3dxof.dll' をロードしました、合致するシンボル情報は見つかりませんでした。 スレッド 0xF2C 終了、終了コード 0 (0x0)。 プログラム 'H:\CLUB SEE\3Dチェス\my3dlib\Debug\my3dlib.exe' はコード 0 (0x0) で終了しました。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:46:03 ]
- ググレカス
- 356 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:49:20 ]
- もはや荒らし
VisualStudio使ってるなら、ブレークポイントで止めて一行ずつ実行してけカス
- 357 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:13:01 ]
- mviewでXファイルを開いた時、アニメーションのリストがメニューの
Animation > Animations の下に最大50個現れると思うのですが、 Xファイルを開いただけだと何故か現れません。 Add Animationで追加オープンすると、最初に開いたXファイルのアニメーションと、追加で開いたXファイルのアニメーションが両方現れるのですが… AddAnimationせずに、最初に開いたXファイルのアニメーションを表示する方法はありませんか?
- 358 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:25:14 ]
- >>347
レスありがとうございます インストール時にエラー文はでなかったんですけどねぇ・・・
- 359 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:28:45 ]
- パスも通せない馬鹿は死んでいいよ
- 360 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:37:22 ]
- >352
ループには問題なさそうですね。 >356の言う通りにしたら解決したわ、もっともブレークポイントなど使わずに 一行ずつ実行していったがな。ヒントありがとよカス。
- 361 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 02:13:27 ]
- >>359
お前が死ねキモデブ
- 362 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 03:13:11 ]
- みなさーん
池沼には優しくしてあげましょう 社会のゴミですが同じ人間です
- 363 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 04:22:37 ]
- ttp://www.imgup.org/iup605620.jpg.html
コンパイル中↑こういうのが出た後に下みたいに「シンボルが読み込まれていません。」が大量に出るんですけどどうしたら出なくなりますか? 'MuscatBoy.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\user32.dll' を読み込みました。シンボルが読み込まれていません。 'MuscatBoy.exe': 'C:\WINDOWS\system32\gdi32.dll' を読み込みました。シンボルが読み込まれていません。
- 364 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 05:07:45 ]
- 363は自己解決しました
- 365 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 06:06:15 ]
- >>364
どうやったら解決したの? 原因は? もう一回>>1を読んでね。
- 366 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 14:52:25 ]
- >>365
自己解決の場合は誰に礼を言うの?w
- 367 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 14:54:12 ]
- >>360
ヒントもらえたんだから感謝せぇよアホ 合致するシンボル情報は見つかりませんでしたってのは、 「デバッグ用にDLLを読み込んだが、特に必要な情報は無かった」 とかの意味だ。(厳密には違うかもしれんが) それはデバッグ実行すると当たり前に出る内容であって、 そんな大量の、何の問題もない(かつDirectX無関係)の内容を貼り付けたら 荒らしとか言われても仕方無い。
- 368 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 15:49:17 ]
- 質問です
Xファイルを使ったモデルにマルチテクスチャを行ないたいのです 例えば地面に見た目用のテクスチャーと、バンプ用のテクスチャーを適用したいと思っています。 ただ、Xファイル系のサンプルを見る限りテクスチャーを2つ使うことは想定外のように見えました。 カスタムテンプレートという仕組み上、自前でそういうXファイルは作れそうですが、3DモデラーがそういうXファイルを吐いてくればれば(あまり)意味がありません。 マルチテクスチャなXファイルというのは一般的ではないのでしょうか? LWを使ってXファイルを吐いているのですが、もし良い方法があれば教えていただけると幸いです
- 369 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 16:24:58 ]
- ピクセルシェーダーで合成すればいいんじゃじゃね?
- 370 名前:デフォルトの名無しさん [2008/05/07(水) 19:17:02 ]
- 今頃DirectX10のサンプルみたら、三角形ポリ描画するだけでシェーダー必要とかXファイルがサポートされてないとかアホか。
DirectX使うのは思いついたゲームをちゃちゃっと作りたいからなのに、生産性下げてどうする・・・
- 371 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:28:33 ]
- 質問です
頂点ブレンディングはDirectXの機能で実装するのと 頂点シェーダで実装するのとでは、どちらが一般的ですか?
- 372 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:52:57 ]
- >>371
調査統計をとるようなマーケティング能力や、 規格を立ち上げる権限をもった人間がいるわけでもないのに、 そんな不確定な情報を誰とも知らない人間に聞くその意図を明確にせよ。 ロボットのように命令が無ければパンツもはけないというのなら、 一般的かどうかを聞くより、最初からあらゆる事を指示してと言えばいい。
- 373 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:50:41 ]
- >>372 答えてやれよ。あんたは業界人なのけ?
- 374 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:05:41 ]
- まずは一般的という基準を明確にすることから始めないといかんだろ。
- 375 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:08:23 ]
- 聞き方が不味かったのかな?
ここの人たちはどっちでやってますか?と言う聞き方ならまだ良かったとか?
- 376 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:10:29 ]
- 人それぞれ
- 377 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:11:53 ]
- ターゲットマシンによるべ
あくまで古いマシンでも動かしたいなら頂点シェーダ使うのはきびしいんじゃね?
- 378 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:12:24 ]
- おまえら意地悪ですね
俺はこうしてるってだけでもいいんじゃないの
- 379 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:18:02 ]
- そもそもシェーダを利用するのはDirectXの機能とは言えないのか?
シェーダを利用するしないに限らず、ハードが対応していなければ、 DirectX側がエミュレーションするし、していなければハードが処理するだけで、 データを渡すのはDirectXが処理していると言える。
- 380 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:20:17 ]
- 行間から固定機能パイプラインorシェーダと読めたんだが違うのかな?
- 381 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:20:18 ]
- つまりDirectXではなくOpenGLからシェーダを利用するかどうかという話なのだろう。
- 382 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:34:58 ]
- どちらが一般的かと言われれば固定機能パイプラインだろう
なぜならそれしかなかったから だが、いずれ消え行く技術をいまさらやってもだし シェーダーでやっといたほうが後々まで使えるんでね?
- 383 名前:291 mailto:sage [2008/05/08(木) 00:04:46 ]
- 仕方が無いのでDXUTの解析から始めようと思います。
(解析して光明が見えてくればいいのですが・・・)
- 384 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:51:33 ]
- 馬鹿はシェーダーを使えない。それだけ。
- 385 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 01:43:58 ]
- 頂点ブレンドってスキンメッシュとかのことよね?
だとしたら、一般的とかいうより色んな制約で変わってくるんじゃね? ・自前形式ではなくXファイルを使うなら、D3DXのスキンメッシュサンプルと 同じ方法が使える ・でもそのやり方だと行列パレット使うので関節のSLERPが出来ない(LERPになる) そこらへんにこだわると、必然的に自前コードで広げることになる ・でも固定機能パイプラインの行列パレットは、最近のビデオカードではほとんど ハードウェアサポートされてない(ソフトウェア頂点処理に頼ることになる?) ・頂点シェーダで計算する場合、シェーダ3.0までは定数レジスタが256しかないので 1ボーンあたり3レジスタ(SLERPなら2で足りるが)だとすると80ボーンしか使えない 俺がやった限りこういう事情が絡んで来たから、色々調べつつ 自分のやりたいことと照らし合わせてたら必然的にやり方は決まるよ。
- 386 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 09:04:59 ]
- DirectX9使ってるんですけど
ID3DXEffect::SetTexture とか ID3DXEffect::SetFloat って コスト高いんですかね? ループの内側で使っちゃダメかな?
- 387 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 10:13:12 ]
- >>371
頂点シェーダでやるのが良いと思うよ まず、ソフトウェアエミュで頂点シェーダを行なってもそれほど重くないのが1つ。 ブレンド可能数が頂点シェーダのほうが融通利くのが1つ。 他の頂点シェーダエフェクトと一緒に利用できるのが1つ。 固定パイプラインでハードウェア処理の頂点ブレンドやるとバグるグラボが少なからずある (ドライバアップデートすればなおるんだけど、ユーザーは必ずしも…ね) だから私は頂点シェーダ+ソフトウェアエミュ派
- 388 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 10:22:30 ]
- >>385
横槍で質問 ・頂点シェーダで計算する場合、シェーダ3.0までは定数レジスタが256しかないので 1ボーンあたり3レジスタ(SLERPなら2で足りるが)だとすると80ボーンしか使えない これって、1頂点へ影響するボーンが最大80って意味? それともモデル全体を通して80ボーンが限界って意味?
- 389 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 12:41:17 ]
- 必要に応じて分離すりゃいいだけ
- 390 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:11:36 ]
- DrawPrimitive1回に対して80ボーンが限界って事。
D3DXMesh関係だと其処を考慮してDrawPrimitiveを何回かに分けて256本までのボーンに対応できるようになってるだろ。
- 391 名前:385 mailto:sage [2008/05/08(木) 17:00:17 ]
- うん、説明不足だったけど1回の描画では、ってこと。
>>390みたいにすれば確かに制限は無くなる。 自分はやってないからわからんけど、 事前に頂点のリンクと面の接続を考慮してメッシュを分割しておけばいいかと。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:18:49 ]
- ミス、>>389みたいにすれば。
D3DXMeshが自動で何かやってくれるのは知らない
- 393 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:25:41 ]
- うわ、最近D3D始めたばっかりなんだけど、スキンメッシュってそんなに定数レジスタ使ってるなんて気づいてなかったw
D3Dのサンプル様様だなぁ… ちゃんと26ボーン毎に分割して、正常に表示できるように調整されてるっぽ (サンプルのSkinnedMesh)
- 394 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:56:39 ]
- アプリが終了すると
Direct3D9: (ERROR) : [0] : Address 04F1E4CB Direct3D9: (ERROR) : [1] : Address 04F1E59B Direct3D9: (ERROR) : [2] : Address 04F1E440 Direct3D9: (ERROR) : [3] : Address 0501CCA5 Direct3D9: (ERROR) : [4] : Address 05023345 Direct3D9: (ERROR) : [5] : Address 05002898 Direct3D9: (ERROR) : [6] : Address 05016E13 Direct3D9: (ERROR) : [7] : Address 00486437 Direct3D9: (ERROR) : [8] : Address 00474CBE Direct3D9: (ERROR) : [9] : Address 004770CA Direct3D9: (ERROR) : [10] : Address 7C23ABCC Direct3D9: (ERROR) : [11] : Address 7C23B209 Direct3D9: (ERROR) : [12] : Address 7C235CC1 Direct3D9: (ERROR) : [13] : Address 7C22FF89 Direct3D9: (ERROR) : [14] : Address 7C22F067 Direct3D9: (ERROR) : [15] : Address 7C22EFDE が複数行 みたいなデバッグログ(OutputDebugStringで書けるやつ)でるんだけど 何が悪いんですか? あと、m_pd3dDevice->GetRenderTargetで取得したやつは、 Releaseすべきですか?
- 395 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:00:30 ]
- ワンスキンしか作れないとかいうウンコモデリングソフトに当たったら最後w
なんでもかんでもすべての頂点に影響与えるとかギャグですか?w>某会社の自作モデリングツール 捨 て ち ま え よ ! (中小害虫社員(28歳♂))
- 396 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:01:03 ]
- 同い年ですね。
わかります。
- 397 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:14:45 ]
- >>395マ板でぶちまけろ
- 398 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:16:24 ]
- 371です
ありがとうございます とりあえず頂点シェーダでやってみます
- 399 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:18:32 ]
- >>395
DrawPrimitiveが減らせるので逆に高速化することが可能な場合も多々。 たとえばロボットみたいなものをパーツ毎にDPするよりは、ウェイト仕込んで ボーンでドーンと1回のDPで描く方が実は速い。
- 400 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 00:29:29 ]
- >>395
せめてそのウンコモデリングソフトが何か書いてくれないと
- 401 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 04:47:40 ]
- >>399
言い訳にしか聞こえないw
- 402 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:45:56 ]
- どう考えてもボーンとかよくわかってない人がとりあえず
頑張ってみました的臭いするやんか?
- 403 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 10:28:23 ]
- >>401
昨今のグラフィックカードでは常識
- 404 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 14:53:11 ]
- スキニングの計算をCPUでやることになるから
グラフィックカードあんまり関係なくね?
- 405 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 15:13:41 ]
- ボーンを使おうが使うまいが階層のマトリックス演算は結局行なう。
そのマトリックスをWorldとして頂点シェーダーで計算するか、 スキン用のマトリックスとして頂点シェーダーで計算するかの違いだろ。 ボーンの場合Offset用の演算が加わるが、 DrawPrimtiveのコールはマトリックスの乗算とは比較にならないくらい重い。 スキンの処理までCPUでやるっつーなら話は別だけどDirectX7でやってるわけじゃないっしょ。
- 406 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 15:29:43 ]
- スキンの処理までCPUでやるようにしないと、この輪郭線抽出はできませんよね?
ttp://www.twin-tail.jp/contents/vsdx8/d3d/011/index.htm
- 407 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:08:51 ]
- >>406
DirectX7世代でやるならそうなる。 それ以上ならもっとよい方法が存在する。
- 408 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 20:43:33 ]
- >>407
よかったら輪郭線抽出について情報いただけませんか Zバッファの差を見る方法や、マテリアル境界を見る方法、モデルをちょっと太らせて裏返して黒描画する方法など色々調べましたが 406のURL先ほどまで「正確」で「自在な太さ」にできる術が見つかりませんでした
- 409 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:35:32 ]
- トゥーンレンダリング
- 410 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 02:49:05 ]
- >>406のは
希望をこめて絵を修正してるって書いてあるやん
- 411 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 03:21:23 ]
- >>408
そこまで知りたいなら金だせよ
- 412 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 10:46:29 ]
- >>408
自分で答え書いてるじゃん。 深度バッファやマテリアルの境界を輪郭検出のアルゴリズムで線を引けばいい。 その場合1ドットのラインしか引けないわけだが、 1ドットのラインを別のバッファに書いてそのバッファを上下左右にずらして もう1度書くと太くなるというのはわかるかい?
- 413 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 21:09:08 ]
- >>412
もちろんその手の「太くする」方法はわかりますが、 深度バッファ法はちょっとひいったアゴのような、深度差が浅い部分に輪郭線が出ません マテリアル法でも同様です。 モデルをちょっと太らせて裏返す法や、406のURL先のものほど「正確な」ものはなかなかありません。
- 414 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 21:42:40 ]
- 内積が正か負で判断して線引く>>406のをシェーダでかけば同等の正確さじゃないの?
- 415 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 21:57:07 ]
- ○輪郭線アルゴリズム
確かに>>406のものが 最も正確でキレイに作れそうなので、 >>406を主にすべきだな。 ○ジオメトリ操作は、なるべくGPUでやりたい。 1パス目:D3DFILL_SOLIDで描画 2パス目:D3DFILL_WIREFRAMEで描画 この2パス目を、先のアルゴリズムで 輪郭線のみ描かれるようにすればいいんじゃないの。 ○線の太さは任意に変更したい。 これは、2パス目を>>412の方法で太くすればいいんじゃないの。
- 416 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:00:03 ]
- >2パス目:D3DFILL_WIREFRAMEで描画
> >この2パス目を、先のアルゴリズムで >輪郭線のみ描かれるようにすればいいんじゃないの。 書いてから気付いたけど、これはちょっと難しいかなぁ
- 417 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:03:56 ]
- >>414
頂点シェーダで線を引くことはできないと思いますけど… >>415 その方法ですと、やはりアゴなどに輪郭線を出すことができませんよね。
- 418 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:05:38 ]
- >>406のものと同等の正確さというのはかなり難しいなぁ…
GPUを使ったものは、やはり速さ優先で作られてるし
- 419 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:07:33 ]
- うるせえ!!!
- 420 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:26:00 ]
- 「自在な太さ」というのが>>406だと結構難しいはずなので(あと処理がキツイだろこれ)
結局のところ割り増しモデルを裏返し手法に落ちついちゃうんだよなぁ。 精度は落ちるけど、押し出す頂点位置を距離によらず一定になるように頂点シェーダで 調整すればそれなりの見栄えにはなる。
- 421 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:31:03 ]
- >>420
I3DXLine使えば太さは楽勝じゃね? 頂点データをもとに自前で線引いてるんだから
- 422 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:46:00 ]
- >>421
使ったことないので知らんが、あれでは太くなったら普通に線の一部が元モデルにめり込むか、 Z値を考慮せずに描画されるならなおさらこの手法には使えないのでは? 一ドットの線ならZバイアス使わんでも自前で射影行列なり弄れば>>406の「理想」の線は描画できるが、 それ以上の太さになるとポリラインで表現することになり、そうなればどこまで線のZ値を前に押し出せば 元のモデルと重ならずに描画できるかは簡単には見積もれないはずだ。
- 423 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:25:17 ]
- >>422
ああ、ごめん。モデル側にめり込むのはご法度って考えだったのね。 俺は太さ3までだったら、モデルに1ドットめり込むだけだから別にいいやって思ってたもんで >一ドットの線ならZバイアス使わんでも自前で射影行列なり弄れば>>406の「理想」の線は描画できるが、 よかったらこのあたり、詳しく解説してくれないか
- 424 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 17:38:11 ]
- 法線方向にプッシュして裏返すのって、特許取ってなかったっけ?
- 425 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:26:54 ]
- ちょっとD3DFILL_WIREFRAMEが話題にあがったから試してみたんだが
D3DFILL_WIREFRAMEにしてもD3DFILL_SOLIDと描画時間が一緒だったんだが… 何かの間違いだろうか? PixelShaderの呼び出し回数が段違いだと思うのに…
- 426 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:46:10 ]
- なら頂点シェーダーかCPUがボトルネックなんだろ。
たいした量描画してるわけじゃないなら大抵CPUがネック。
- 427 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:51:10 ]
- 質問です
今、PixelShaderを使う描画を学んでおり、自分のメインPCでは正しく動作しました。 試しにと、PixelShaderに対応していない(1.0にすら対応していない)古いサブマシンに持っていって動かしたところ、正しく動いてしまいました。 ここで疑問なのですが、何故正しく動いてしまったのでしょうか? どうやら PixelShader = compile ps_1_1 PS(); と書いた部分が、メインPCだと正しく適用されるが、サブPCだと無視され固定パイプライン(という呼び方でOK?)のPixelShaderにより描画されているっぽいです。 これはHLSLの仕様なのでしょうか? てっきりHLSLのコンパイルエラーとなり、fxファイルのロードに失敗するかとふんでいたのですが…
- 428 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:53:26 ]
- 補足です。
>ここで疑問なのですが、何故正しく動いてしまったのでしょうか? の時点では、書いていたPixelShaderが固定パイプラインのそれと同等だったため「正しく動いているように見えた」のです。 ためしにPS()内で必ず「黒」を返すようにしたところ ・メインPCでは正しく黒を ・サブPCでは通常通りの描画を したため「サブPCではPS()が無視され、固定バイプラインのPixelShaderが呼ばれている」と判断したのです。
- 429 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:55:50 ]
- >>426
どうやらボーンによる頂点変換(ソフトウェア処理)がボトルネックだったっぽ すまん
- 430 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:36:13 ]
- 確かに俺の環境も
PS2.0世代のGPUのくせに PS3.0コンパイルのShaderが HWで動いているな。 多分これは、PS2.0に対応とか3.0に対応ではなく 2.0、3.0で追加された機能に対応しているという話だろう。 ただアンタの言うPSの代わりに固定機能が動くというのはないな。 勘違いだろ。
- 431 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 23:16:43 ]
- 対応してなくても動作はするけど
対応してないPCじゃコンパイルはできないよね あとピクセルシェーダーの動作って コンパイルしたマシン(のGPU?)に依存してる? 家のPCでテストした実行ファイルを仕事場のPCで動かすと 家のPCと同じ動作するけど コンパイルしなおすと動作が変わったりする
- 432 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 23:29:40 ]
- >>430
お返事ありがとうございます。 >ただアンタの言うPSの代わりに固定機能が動くというのはないな。 うーん、どういじっても PixelShader = compile ps_1_1 PS(); の PS()の中身は無視されてしまいます。 float4 f = {1.0f, 1.0f, 1.0f, 1.0f} return f; という単純なPS()の中身ですら、メインPCだと正しく真っ白になり、 サブPCだとPixelShader = compile ps_1_1 PS();の宣言がないがごとく振舞います。 エフェクトは D3DXCreateEffectFromFile でロードしています。
- 433 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 23:34:51 ]
- D3DXが気を利かせてくれてるのかねぇ・・?
PS非対応環境なんてもはや持ってないから、アドバイスできん。すまん
- 434 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 03:39:42 ]
- なんもエラー出てないの?
- 435 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:10:21 ]
- 何もエラーでないですね…。
ただ、ReleaseビルドのEXEファイル生実行ですので、次はサブPCのVC6.0上でDebug実行し、D3DXのログ出力を見てみます。 家に帰るのは夜です 正直質問した時は、あっさり 「PSが無い環境では、compile ps_1_1 PS(); って記述は無視されて、固定パイプラインとして実行されるよ」 とかくるかと思っていたのですが…
- 436 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:44:35 ]
- 435です。
やはり特にエラーメッセージもなく、単にスルーされているだけっぽい動作です。 どなたか心当たりあるかたいらっしゃいませんかー? 仮説 PixelShader = compile ps_1_1 PS(); などは、動作環境のサポートバージョンが、コンパイル指定したバージョン未満の場合は (エラーを出さず)変わりに固定パイプラインを呼び出す
- 437 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:55:38 ]
- >>436
はじめにサポートバージョンってわからないっけ?CAPSで つか、何がしたいんだっけ?
|

|