【C++】 DirectX初心者質問スレ Part30 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part29 【C】
http://pc12.2ch.net/test/read.cgi/tech/1274353792/
前スレで気になることが書いてあったので、質問させてください。
▼▼▼
984 :デフォルトの名無しさん:2010/07/04(日) 13:07:47
初心者スレなんだからD3DXは使わないほうが良いって風潮どうにかした方が良いな
言ってる本人たちはそれがカコイイ(笑)と思ってるのかも知れないが
985 :デフォルトの名無しさん:2010/07/04(日) 13:12:21
>>984 だな。完成品の配布の際に多少注意点がある程度で、
(ビルドに使用したSDKのバージョンに合わせた再頒布パッケージの同封が必要)
それ以外には制限らしい制限はない。
D3DXのパフォーマンスに不満が出るというレベルになるまでは積極的に使えばいいと思うよ。
▲▲▲
D3DX(ID3DXSprite)を使った完成品を配布するには
『ビルドに使用したSDKのバージョンに合わせた再頒布パッケージの同封が必要』
というところが気になりました。
現在、WinXP SP2 以降のOS環境にて、完成品のexeだけで動作することを目的に作成しています。
その為、古いSDK「DirectX 9.0c SDK」(DirectX 9.0cは、WinXP SP2ではOSに標準搭載されている)を
使って開発していますので、WinXP SP2をインストールした直後の状態にグラフィック、サウンドドライバを
入れただけのマシンで動作検証を行っていますが、再頒布パッケージを入れなくても動作します。
また、同様にWindows7をインストールした直後の状態にグラフィック、サウンドドライバを入れただけの
マシンでも、再頒布パッケージを入れなくても動作します。
WinXP SP2 以降のOS環境向けに、DirectX 9.0c SDK(ID3DXSprite)を使用して作った完成品の
配布には、「再頒布パッケージの同封」は必要なのでしょうか。
それとも、「再頒布パッケージの同封」はしなくても動作するけど、”規則上”同封が必要なのでしょうか。
上記環境で、再頒布パッケージを同封する必要性がわかりません。
変な質問をしてすみませんが、お教えいただけないでしょうか。
>>2 ご指名があったのでお答えしよう。
D3DXはユーザー空間ライブラリの範疇にあるものでDirect3Dのコアに含まれているわけではないけれど
Direct3Dの一部として扱われているヘルパーライブラリだ。
2005 Feb以前はstatic libraryとして提供されていたが、それ以降はDLLとして提供されているので
ユーザー側のPCに同じDLLが存在しないといけない。
(ゲーム側にd3dx9_xx.dllを単体で添付することは禁じられている)
従ってゲーム本体にDirectX再頒布パッケージを添付して配布することになる。
それにXP sp1以前のPC環境のお客さんは厳然と存在するから、
そのラインで区切ることにどれほどの意味があるかだね。
4 :
2 :2010/07/04(日) 20:33:04
>>3 レスありがとうございます。
2005 Feb以前の「DirectX 9.0 SDK Update - (Summer 2004)」で開発しているから、
WinXP SP2以降に完成品exeを配布する場合は、DirectX再頒布パッケージは
添付しなくていいのですね。了解しました。
>それにXP sp1以前のPC環境のお客さんは厳然と存在するから、
>そのラインで区切ることにどれほどの意味があるかだね。
XP SP2は、もうすぐ(2010年7月13日に)マイクロソフト社のサポートが終了するから、
アプリを提供する側は、OSサポート終了を理由に堂々と「OSのサポートが終了して
いるから、うちのアプリは、そのOSを正式にはサポートしません。」っていえるかも。
>>4 まあ間違っちゃいないが、そういうやり方は賛成しかねるな。
DirectXを使用する製品は開発に使用したDirectXの再頒布パッケージを添付して配布することになってるんだし、
一般的に言ってより新しいバージョンのライブラリがあるならそれを使うべきだ。
そうやってこの国の製品が守旧に陥っているのはちとなー。
未だにDirectDrawやGDIしか使ってないゲームエンジンがゴロゴロいて、
しかも幅を利かせているのは納得行かないものがある。
何故新しいのを使わないといけないのか、理解出来ないな〜。 作り手が望まないなら、新しい技術なんて必要ないじゃん。 ドット絵をポチポチ打って作るゲームの何が悪い!?
きっとわかるように白々しくやってるんだろうな。。。
ホント何がしたいんだろな
2ちゃんにはレス乞食という言葉があるぐらいだからな。レスがつくと喜ぶんでね?
自分で話題振って自分でレスつけてたら世話ないっつーの
MinGWがDirectX9をサポートしているようなので使おうとしたのですが、初期化からうまくいきません。 Direct3DCreateは通るのですが、CreateDeviceやReleaseを行うとコンパイル時に「そんな関数はない」というエラーが返ってきます。 前にBCCでDirectXを使おうとした時も同じ内容のエラーを渡された記憶があるので、何か初歩的なミスがあるように思うのですが、見当がつきません。 考えられる原因として、どのようなものがあるでしょうか。やはりmakefile内のインクルードやライブラリでしょうか? ごく初歩的な質問で申し訳ないのですが、どなたか知恵を貸していただけませんか。
>>11 とりあえずエラーの内容くらいちゃんと書こう
VC++2008 + DirectX 9.0c SDKで開発をしているのですが、実装したい機能があります。 「フルスクリーンモード時に画面上をマウスで右クリックしたときにポップアップメニューを表示する」 (Windows Media Playerのようにフルスクリーンモード時にポップアップメニューを表示したい。) 【ソースの一部】 case WM_RBUTTONUP: HMENU hMenu, hmenuR; hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU1)); hmenuR = GetSubMenu(hMenu , 0); TrackPopupMenu( hmenuR, TPM_LEFTALIGN | TPM_LEFTBUTTON, LOWORD(lParam), // カーソルx座標 HIWORD(lParam), // カーソルy座標 0, g_hwnd, NULL); DestroyMenu(hMenu); break; 上記ソースコードを追記してフルスクリーンで実行して画面上をマウスで右クリックをすると @ポップアップメニューが、きちんと表示される場合。⇒ 成功 Aポップアップメニューが、一瞬表示されたかと思うとすぐに消えてしまう場合。⇒ 失敗 Bポップアップメニューが、全く表示されない場合。⇒ 失敗 の3通りの動きをします。 ※ウインドウモードだとポップアップメニューは確実に表示されます。 DirectXフルスクリーンモード時の表示とWin32APIの表示が競合して失敗していると思うのですが、 解決する方法をご存知の人がいれば、教えてくださらないでしょうか。 できるだけ標準的なWindowsの操作を実現したいので、メニューを自作でデザインするのは 最終手段だと考えています。 よろしくお願いします。
すまんが飯のタネなのでな
>>12 例.1
gcc -o dtest main.c -g -Ic:/MinGW/include -DUNICODE -D_UNICODE -Lc:/MinGW/lib -lmingw32 -ldxguid -ld3d9 -mwindows
cc7mPuVJ.o: In function `InitD3D':
main.c:112: undefined reference to `CreateDevice'
cc7mPuVJ.o: In function `ReleaseD3D':
main.c:123: undefined reference to `RELEASE'
main.c:124: undefined reference to `RELEASE'
collect2: ld returned 1 exit status
make: *** [dtest] Error 1
例.2
gcc -o dtest main.c -g -Ic:/MinGW/include -DUNICODE -D_UNICODE -Lc:/MinGW/lib -lmingw32 -ldxguid -ld3d9 -mwindows
main.c: In function `InitD3D':
main.c:112: error: structure has no member named `CreateDevice'
make: *** [dtest] Error 1
失礼しました。横着しました。エラーメッセージは概ね上記のとおりです。
ほかに何か重要なことはあるでしょうか? どこに問題があるのか絞りきれず困っています。
……というより、もしかしてC言語でDirectXは今や使えないのでしょうか?
>>17 ありがとうございました。無事に動かすことができました。
19 :
13 :2010/07/06(火) 03:20:05
>>15 ありがとうございます。
SetDialogBoxMode を使ってポップアップメニューは表示できました。
しかし、SetDialogBoxModeの使用必須条件である
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER を設定すると
グラフィックの描画パフォーマンスが著しく低下してしまい
目標の描画速度を達成できませんでした。
グラフィックの描画方法(ID3DXSprite)は変更したくありません。
パフォーマンスを落とさずに実装する方法はないでしょうか。
>>19 DirectXのメリットを捨ててGDI互換でやろうってんだからそれは無茶な話
DirectX10以降を使うか最終手段しかないんじゃない?
>>19 直接バックバッファに書き込まずに
いったん別のレンダリングターゲットに描画してから
バックバッファに転送すれば多少はマシかもしれない
22 :
13 :2010/07/06(火) 08:08:04
>>20-21 ご提案ありがとうございます。
結局、DirectXのフルスクリーンモードを使うのはやめて、ウインドウモードで動いている状態を
Win32 APIの ChangeDisplaySettings を使用し画面の解像度を変えて表示する(見た目は
フルスクリーンに見える)という方法で実装しました。
DirectXのフルスクリーンモードの長所である「DirectXのアクセラレーションがフルに効く」は
諦めました。(性能の悪いグラフィックチップでは、ウインドウモードは処理落ちして、
DirectXのフルスクリーンでは処理落ちしなかったのですが、ChangeDisplaySettingsによる
フルスクリーンの実装は、ウインドウモード同様に処理落ちしてしまうようになりました。)
D3DPRESENTFLAG_LOCKABLE_BACKBUFFERを指定していたときは、RADEON HD4650でも
処理落ちしていましたが、ChangeDisplaySettingsを使う方法では、ウインドウモードと同様に
動作して、ポップアップメニューも正常にされるようになりました。
>>22 ほほ〜、おれはSetDialogBoxModeを使う方法で実装しているが、
D3DPRESENTFLAG_LOCKABLE_BACKBUFFERをセットすると処理能力が落ちるのか。気付かなかったな。
とはいえi82845gでもそれなりの速度が出てるからとりあえずのところ不満はないんだが。
1フレーム当たりどれくらいの描画量なのか教えてくれるとうれしい。
(当方は800x600基準、最大6画面分くらいの2D描画を1フレームで処理する)
24 :
13 :2010/07/06(火) 11:30:16
>>23 下記3台のPCでテストをしました。
@ThinkPad X40 Intel(R) 82852/55 64.0MB
A自作PC Intel(R) 82845G/GL 48.0MB
B自作PC ATI Radeon HD4650(AGP8x) 1024.0MB
D3DPRESENTFLAG_LOCKABLE_BACKBUFFERをセットしても
@Aのマシンでは処理が遅くなっていることに気付きませんでした。
しかし、Bで実行したときに60コマでなかったので焦りました。
>1フレーム当たりどれくらいの描画量なのか教えてくれるとうれしい。
800x600基準 D3DFMT_X8R8G8B8 最大2枚 すべてID3DXSprite使用です。
SetDialogBoxModeを使っているということは標準のマウスカーソルを
使っているかも知れませんね。実は@のマシンのみでマウスカーソルが
点滅する不具合がでるのですが、解決方法をご存知でしたら
教えていただけないでしょうか。
カーソルがハードウエア側でレイヤ処理されている保証はないので、 マウスカーソルを自分で描画する以外の解決方法はない。
初歩的な質問で申し訳ないのですが、MinGWにてDirectXを使用する場合、 GCCとG++のどちらでコンパイルすればよいのでしょうか。
Cで書くかC++で書くかで
G++です
>>24 フリーソフトならともかく、製品を出すつもりならその3つの環境じゃ不足してるよ。
Intel、Radeon、GeForce、それぞれに癖があって特徴的な挙動があるので
3系列全てでテストする必要がある。
で、HD4650でその程度の描画量で60FPS出ないのはちょっと考えにくい。
ひょっとしてVistaでテストしていて最大化表示とかやってない?
Vistaのスタートボタンは微妙にデスクトップにかぶっていて、
FPSの維持が必要な描画を阻害してくれる。
(だからプライマリ以外のディスプレイだと問題ない)
それから、Vista以降もサポートするならDirect3D9Exオススメ。
格段に描画が速く、かつ安定する。
>>格段に描画が速く そうなん?
うん
LOCKABLE_BACKBUFFERにしただけで遅くなったの? SetDialogBoxModeにして遅くなったのなら分かるが。
>>33 SetDialogBoxModeは完全に描画止まってしまうので、遅くなるもないよ。
33: goto 33
自演も止まらないよ。
笑いも止まらないよ。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFERで極端に重くなったことはないなぁ WM_PAINTで何かしてるとかじゃないの?
39 :
13 :2010/07/07(水) 04:24:06
>>25 お教えいただきありがとうございます。
>>29 ご指摘ありがとうございます。GeForceでもテストするようにします。
>HD4650でその程度の描画量で60FPS出ないのはちょっと考えにくい。
>ひょっとしてVistaでテストしていて最大化表示とかやってない?
WinXP SP3でDirectXのフルスクリーンモードで実行した結果です。
自分の作成したプログラム(3D機能で2Dを描画する)は、なぜか描画が
モチッとして遅いです。描画の遅い原因はwin32アプリケーションウィザードに
よって自動的に作成されたウィンドウを表示するだけのプログラムに
DirectXを組み込んだからかも知れません。(DirectDrawの時は
描画がきびきびしていたのに・・・)
7年前に3D機能を使った2D描画の動作検証(ID3DXSpriteと板ポリゴンの
速度比較)をしたのですが、そんなに速度は変わりませんでした。
↓7年前に作ったプログラム(ウィザード未使用、板ポリゴン使用)
http://jishinkuma.aa0.netvolante.jp/dev/sii/ Vista以降もサポートしますが、「DirectX 9.0 SDK Update - (Summer 2004)」で
開発する方針は変えるつもりはありません。Direct3D9Exは、上記SDKよりも後に
発表されたSDKで使える機能ですね。
40 :
13 :2010/07/07(水) 05:03:41
>>32 D3DPRESENTFLAG_LOCKABLE_BACKBUFFERにしただけで遅くなりました。
>>38 >WM_PAINTで何かしてるとかじゃないの?
思いっきりしています。win32アプリケーションウィザードによって自動的に
作成されたウィンドウを表示するだけのプログラムにDirectXを組み込みました。
その為、Render()は、WM_PAINTとアイドル処理の2箇所で呼んでいます。
▼▼▼
case WM_PAINT:
// 画面の更新
hr = Render();
if (hr == D3DERR_DEVICELOST)
{
g_bDeviceLost = true; // デバイスの消失
}
else if (FAILED(hr))
{
DestroyWindow(g_hwnd);
}
ValidateRect( hWnd, NULL );
break;
▲▲▲
ValidateRectを外しても、D3DPRESENTFLAG_LOCKABLE_BACKBUFFERを
セットした状態のフルスクリーンモードでは極端に描画速度が遅くなります。
Win32 APIのChangeDisplaySettingsを使って作ったフルスクリーンもどきを、
実際に本番のプログラムに組み込むのは、まだ躊躇しています。
DirectXのフルスクリーンモードのみで使えるBackBufferを使った方が、
レンダリングが滑らかなのでDirectXのフルスクリーンモードは捨てがたいです。
やはり、ポップアップメニューを使わずにメニューを自作でデザインするべき
なのだろうか。
41 :
13 :2010/07/07(水) 05:34:41
>>32 >>38 すみません訂正です。検証不足でした。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFERでは
見た目では描画速度の低下は見られませんでした。
SetDialogBoxModeを使用した場合に明らかに描画速度の
低下が見られました。
>>39-41 突っ込みどころが多すぎるが、フリーソフト作ってるだけならまあ好きにやれよ。
>自分の作成したプログラム(3D機能で2Dを描画する)は、なぜか描画がモチッとして遅いです。
描画がなぜ遅いかはPIX for Windowsで調べるといい。
それから複数の絵を1枚のテクスチャにまとめた上で1つのポリゴンとして連結した上で一度に描画すると早くなるぞ。
そういうことをやろうとしたらID3DXSpriteでは機能が足りなくなるかも(あるいはひょっとしたら内部でやってくれてるかも)
それからDirectDraw/Direct3Dで60FPSバリバリ書くプログラムはWM_PAINTは単に無視するように書くんだぞ。
君は数年間何を学んできたんだ。
まあ飯のタネなのでな
くぴっ
45 :
デフォルトの名無しさん :2010/07/08(木) 02:52:15
D3DXCreateMesh等が、 ID3DXMeshインターフェイスへのポインタが引数にならずに、 ID3DXMeshインターフェイスへのポインタのアドレスが引数なのは、 呼び出す時に D3DXCreateMesh(略,&pMesh); こうやって&をつけさせて出力であることをはっきりさせるためですか? それともそれ以外の理由もあるのでしょうか?
>>45 COMのインターフェースは元々ポインタで扱うものなので、インターフェースを受け取る場合は
ポインタのポインタになる。
理由もなにも、そうでなきゃいけない。
このスレはDirectX初心者のスレであって、C言語初心者のスレじゃない。
(キリッ
>>45 内部でインターフェイス分のメモリを確保するんだから
単にポインタ渡したってそこから連続でメモリがあいてる保障なんてないだろ?
だから確保できたポインタのアドレスが返るようになってんだよ
そもそもポインタを渡すという表現が間違っている。 &をつけなかった場合、渡すのはポインタ変数の中身だ。 そして初期化も何もしていなければ、渡されるのは不定値。 そんな物を受け取ってどうしろと言うのか。
(キリッ
ワロタw
DrawPrimitiveUPでデバッグ用のラインを引きたいのですが 頂点にはキャラの座標やカメラ位置の座標が入っているのですが ワールド座標のSetTranformやEffect->SetMatrixには何を入れれば良いのでしょうか?
値を入れればいいと思うよ
>>53 情報が少なすぎ、そしてその少ない情報に意味が無さすぎ
DrawPrimitiveUPで線を引きたいのは分かった
じゃあ、固定機能だけで描きたいの?シェーダー使って描くの?
線は3D空間に引きたいの?スクリーン座標で指定して引きたいの?
質問するときは
勝手に問題点を自分で限定しないで
やりたいことと何が分からないのかを明確にすること
クマー
>>55 はい
ごめんなさい
固定機能の時とシェーダの時で何を入れれば良いのか教えてください
線は3D空間に引きたいです
>>58 3Dならそんなに難しくない
シェーダーに関しては中身みないとなんともいえないので半分エスパーになるけど
すでにキャラクターは表示できてるんだよね?
だとしたらキャラクターの描画に使ったワールド行列を単位行列に置き換えて
それ以外はキャラの描画とまったく同じ手順で指定すればいけるんじゃない?
具体的な方法が知りたければ描画部分のソースを書いてくれ
自演?
まず線のモデルを用意します
>>46 ,49,50さん
ありがとうございます
>&をつけなかった場合、渡すのはポインタ変数の中身だ。
すさまじい勘違いでしたっorz
ちょっとC++に慣れて来てたと思ったらこんな初歩ががが
別な話になってしまいますが、
COMについて知っておくと結構いいことがありますか?
それともそんなことやるなら別なことをやった方がいいですか?
>>62 そこまで突っ込んだことは要らないと思うけど
COMついでにちょっとスマートポインタだけググっとくと後々便利かもしれない
すみません。モーション再生についてなのですが、 現在SDK SampleのTiny4のコードをほぼ原型通りの使い、1ファイルにモデルとモーションを詰めて利用していました。 そこからモデルとモーション1個1個を全て別々のファイルにし、モデルにモーションを適用させたく思ったのですが 適応してくれません・・orz 読み込み時点でモデルを保管するLPD3DXFRAMEと、モーションを保管するLPD3DXANIMATIONCONTROLLERを別々にはしてはいるのですが、 どこでこの2つが関わっているのかすら理解できず、別々に読み込んでもモーションを適用する事ができずに居ます。 私はどこらへんが理解できていないのでしょうか。 何かご助言を頂けますと幸いです。。orz
>>65 D3DXFrameRegisterNamedMatrices
の存在を知れば解決するか?
67 :
65 :2010/07/09(金) 15:31:11
>>66 目的を達成する事が出来ました、有難うございますっ orz
いえいえ
誰だよお前?
どういたしまして
初歩的な質問すみません。演出用のエフェクトを作っているのですが、 ポイントスプライトを使い動きは計算して行うのと、 モーション付きモデルとして再生するだけにしてしまう2択の場合。 現状、開発が楽な後者でやるつもりなのですが、大量描画する場合は前者の方が軽かったりするのでしょうか?
ポイントスプライトとモーション使えばいいじゃん
>>71 大量に描画するなら
1つにつき座標変換が一回で済むポイントスプライトのが軽いでしょ
動きを頂点シェーダで計算すれば更に速い
でも
>>72 のアイデアも面白いと思った
ポイントスプライトとかモデルとか以前に 直線運動とか放物線とかSin波とか 終始ある程度幾何学的な動きならぶっちゃけ計算の方がむしろ楽だと思う キーフレームごとに動きが有機的に変わるとかなら 計算でやると例えその方が軽くても非常にメンドイのでモーションでやった方が良いと思う
モーションでやった方が良いよな
76 :
71 :2010/07/10(土) 15:35:08
>>72-75 色々な情報ありがとうございます。ポイントスプライトと計算の方が良さそうなのですね。
ただし複雑な動きはモーションの方が手っ取り早い と。
とても勉強になりました。シェーダに関しても地道に勉強を進めようと思います。ありがとうございました。
77 :
名無しさん@そうだ選挙に行こう :2010/07/11(日) 06:02:50
質問です。 DrawIndexedPrimitiveで例外が発生します。 返り値も-2005530516という値です。 この関数が失敗する原因に心当たりがある方がいればご教授ください。
HRESULT: 0x8876086c (2289436780) Name: D3DERR_INVALIDCALL Description: Invalid call Severity code: Failed Facility Code: FACILITY_D3D (2166) Error Code: 0x086c (2156) 呼び出しが無効です そもそもデバイスの生成に失敗しててNULLポインタ指してるとか 引数が間違ってるとかくだらない理由 たぶんそこで例外がでるからDrawIndexedPrimitiveに失敗してるって勝手に思い込んでるだけで もっと前の段階で何か失敗してる、ちゃんとデバックしろ デバイスや頂点バッファ、インデックスバッファは本当にちゃんと生成できてるのか?
生成できてますが。
> 引数が間違ってるとかくだらない理由 とかじゃないの? コードがないから誰も的確な答えとか出せないと思うけどね。
DrawIndexedPrimitiveが失敗するとか普通に考えてあり得ない 引数の半分くらいは重要ではないしちょっとくらい大目に頂点数やプリミティブ数を指定しても動いちゃう 失敗するとすれば インデックス配列が設定されていない場合、IDirect3DDevice9::DrawIndexedPrimitive は失敗する。 D3DPRIMITIVETYPE 列挙型の D3DPT_POINTLIST メンバはサポートされておらず、このメソッドの有効な型ではない。 くらいだろ IDirect3DDevice9::SetIndicesしてないとか初歩的なミスだと思われる
あまり知識がないのでよくわからん(*´ ェ`) 詳しい説明よろ〜
本人じゃなさそうだね、スルーで
84 :
名無しさん@そうだ選挙に行こう :2010/07/11(日) 19:31:59
なんか、私じゃない人が答えてます? すみません。 今教えて頂いたところを中心に調べています。
本人じゃなさそうだね、スルーで
だろ。はホントにしねばいいのに
本人じゃなさそうだね、スルーで
大人じゃなさそうだね、に見えたw だろ。の人はまだ荒らしてるのか
DirectXにてウインドウモード/フルスクリーンモードの両方で標準のマウスカーソルを表示した かったのですが、ハードウェアカーソルではないVGAでは標準マウスカーソルの表示のちらつきが 発生していました。そこで、DirectXでスプライトにてマウスカーソルを描画することにしました。 下記スプライトマウスカーソルの実装時のイベントのキモの部分のソースコードだと思うのですが、 既にスプライトマウスカーソルを自前で実装されている人にレビューをしていただけたら幸いです。 ▼▼▼ case WM_SETCURSOR: if(LOWORD(lParam) == HTCLIENT) { SetCursor(NULL); // 標準マウスカーソル非表示 g_mousecursor.SetDispFlag(1); // スプライトマウスカーソル表示 return TRUE; } else { // 標準マウスカーソル表示 g_mousecursor.SetDispFlag(0); // スプライトマウスカーソル非表示 if( Render() < 0 ) // DirectXの描画 { DestroyWindow(g_hwnd); } } return DefWindowProc(hWnd, message, wParam, lParam); break; ▲▲▲ 以上、よろしくお願いします。
if( Render() < 0 ) // DirectXの描画 こんなところで何を描画してるの?
91 :
89 :2010/07/12(月) 18:40:56
>>90 Renderは、DirectXのすべての描画を行っています。
通常はアイドルでRenderを呼び出します。
しかし、以下図説の操作をするとアイドルに入らなくなり描画が止まります。
http://jishinkuma.aa0.netvolante.jp/etc/seigyo.png アイドルのRenderではスプライトカーソルを描画していますが、上記操作をすると、
アイドルに入らなくなり描画が止まりスプライトマウスカーソルが固定位置で
表示されっぱなしのまま標準マウスカーソルも表示されてしまいます。
(マウスカーソルが2個表示される不具合。)
elseの中には、アイドルに入らなくなり描画が止まりスプライトマウスカーソルが
固定位置で表示されっぱなしの状態で入ってきます。elseの中のRenderでは、
事前にSetDispFlag(0)を設定することにより、スプライトマウスカーソル以外の
描画をします。(このRenderでスプライトマウスカーソルを画面から消去します。)
ほんとにちょっとだけだな
C#だったらその目次の内容は2章くらいで済むしな
テクスチャ表示までだったらチュートリアルみれば十分だろう。 金の無駄としか思えない。
DX11のテッセレーションってどう組めばいいの?
>>99 Samples\C++\Direct3D11\DetailTessellation11 (August 2009)
Samples\C++\Direct3D11\DecalTessellation11 (June 2010)
(February 2010)はどうしたのかな?
FebのときはDecalないな
>>98 最初のポリゴン1個を表示するのがどれほど大変か
ここにいる人なら実感してると思う。
なので最小のDirectXプログラムとか、三角ポリゴンを表示するだけのプログラムとか
できてるのがあればありがたい。
えっ…
それは君だけだと思う
サンプルのチュートリアルの存在を知らないとか?
はぁ…
うっ…
110 :
デフォルトの名無しさん :2010/07/14(水) 14:11:16
だろ
111 :
77 :2010/07/14(水) 19:48:24
>>78 >>80 >>81 解決しました。
問題はDirect3DDeviceの作成で、
D3DCREATE_MIXED_VERTEXPROCESSINGを使っていたのが原因でした。
D3DCREATE_HARDWARE_VERTEXPROCESSINGに変更したところすんなり描画できました。
D3DCREATE_MIXED_VERTEXPROCESSINGを使っていた場合、
ソフトウェアかハードウェア描画の切り替えを明示的に変更したらよいそうですがまだ試していません。
112 :
デフォルトの名無しさん :2010/07/14(水) 19:53:23
サンプルソース(というかMSのソース全般)は非常に読みづらいですから、 肝心な箇所をピックアップしてくれた書籍を購入した方が早いと思います。 でもまあ、ソースを読む力がある人は必要ないんじゃないんですかね。
質問です。 OS:Windows7 開発環境:Visual C++ 2010 Express 開発アプリ:ゲーム mp3を演奏する為にDirectShowを使用しているのですが、 IGraphBuilder::RenderFile()を使用すると、 IGraphBuilderとそこから取得した全インターフェースをRelease()しても アプリケーション終了後に必ずそのアプリケーション名プロセスが残ってしまいます。 終了時にイベントキューを空にしたり、 WaitForCompletion(INFINITE, code)を使ってみても駄目でした。 実は昨月にVistaからWindows7に変更したのですが、同コードでも Vistaではプロセスが残らなかったのに、Windows7では発生するようになりました。 どうかプロセスが残らずにFilterGraph関連物を終了できる方法を教えてくださいませ。
>>113 Release()した前後でプロセスに何が起きてるのかデバッガで調べてみれ。
117 :
デフォルトの名無しさん :2010/07/14(水) 23:41:48
Win7 C++だったな。 こっちの環境(Win7 VS2008)だとMFCのバージョンはプロセスは残ってない C#のバージョンは、vshostが常駐しているみたい どちらもDirectShowを使ったmp3プレーヤー
生きているスレッドが残っている
119 :
デフォルトの名無しさん :2010/07/15(木) 12:21:45
>>113 試しにIGraphBuilderを使ってみたけどプロセスは残らなかけどなぁ。
DirectShowを使わなかったらプロセスは残るの?
残りません
質問。 LPDIRECTSOUND3DBUFFERをSetPositionとかで移動させてる最中、 これをストリームバッファで録音とかできないの?
はい
123 :
デフォルトの名無しさん :2010/07/17(土) 13:36:56
directx10もしくは11でfbx形式のメッシュやアニメーションを読み込むことは可能ですか?
サポートしてるか?と言う意味なら否 自前で読み込んで表示することは当然可能だが
xnaでサポートしているので11でも当然、とおもったんだがの
dx10以降は贅肉を切り捨ててるからその点では初心者お断り感が強い
Directx9での話しです DrawPrimitiveUpなどUp系は内部でCreateVertexBufferなどしてて 低速だと聞きました 実際自作ゲームを作る際、Upは可能な限り避けるべきですか? 1、気にせずガンガン使う 2、デバックの時楽するためだけに使う 3、絶対に使わない などの考え方があると思いますが、どのあたりが自然でしょうか?
4 自分でベンチをとって測定してから考える これが一番自然だろ。 なんで選択肢に入っていないんだ?
DrawPrimitiveUPと同じ機能のものを自作してみる。そして速度を比較してみる。 本家に勝てるものが作れるなら自作版を使えばいいが、初心者には到底ムリだろうな。
DrawPrimitiveUPのような便利機能は DX10, DX11で切り捨てられた贅肉の部分に含まれるわけで、 将来DX11やる人はそれくらい出来て当然。
そうなると質問の意図が不明だ。 つまり 「命令を入力してください、指示がないと動けません」 ということなのか?
>>128 気にせず使っていいよ。
適切に使用したVertexBufferと比べれば低速だが、問題になるほど
遅くなるわけじゃない。
135 :
128 :2010/07/18(日) 15:58:01
安心しました! ありがとうございましたっ
お、初レスに「だろ」の人がついてるな 相変わらず説教かw
>up系〜 まずはゲーム作ってできてから考えろよw
UIやパーティクルや2Dゲームの弾など、毎フレーム頂点を書き換えるような用途は どんなゲームでもあるでしょう。 だからUP系やそれと同等の技術の需要はあるよ。
あんま無いんじゃないかなぁ そういうことをしないための頂点バッファな訳で
頂点バッファを使えば 最適化も出来て、ハードウェア支援も受けられるのに UP系使うなんて手抜き以外のなんでもないだろ。 どう?どう?似てる?w
質問です D3DFVF_LASTBETA_UBYTE4で頂点バッファが作れません CreateVertexBuffer関数でハングアップする形で止まってしまってエラーも見れません どうしたらいいでしょうか? ソースはこんな感じです hr = pDevice->CreateVertexBuffer(mAll,D3DUSAGE_DYNAMIC,mFvf,D3DPOOL_DEFAULT,&mVertexBuffer,NULL); 注:mFvfはD3DFVF_LASTBETA_UBYTE4単独で作ろうとしています。
何をしようとしてるの解からんが D3DFVF_LASTBETA_UBYTE4はそういう使い方するものじゃないぞ? D3DFVF_LASTBETA_UBYTE4は型を示してるのではなく その直前のフォーマットの最後のベータ フィールドをUBYTE4型と解釈することを示すフラグ 単独で指定できるはずは無いと思うが
>>142 マジですか?
ブレンドインデックス値を渡したかったんですけど整数型ってないみたいですね
D3DFVF_XYZWで渡したらうまくいきました
ありがとうございました
>>143 解決したみたいだけど一応
そういう時は自分で頂点宣言して非FVFで頂点バッファ作ればいい
IDirect3DVertexDeclaration9とかD3DVERTEXELEMENT9でググれば情報でるはず
C#だったらその目次の内容は2章くらいで済むしな
>>144 >非FVF
これ、どうやっても作れないな
どこまで自由が利くのかさっぱりわからない
>>147 それですそれです
もうだめだ
非FVFでやろうとするとなにがどう悪いのかすらさっぱりわからない
誰か整数型の頂点宣言、頂点バッファの作成からコードを書いて見せてくれってほどうまく動かない・・・orz
2Dアニメーションを静止画の連番データから管理するのが面倒なので AVIで動画テクスチャにしようと考えてます。 そこで質問なのですが 透過AVIも使用したいので、透過AVIを扱えるコーデックにする必要があるのですが その使用するコーデックをOSにインストールされている物じゃなくて 別途プログラム実行ファイルと同梱にし、それを使用する事って可能ですか? ユーザーに○○コーデックインストールしてね。ってアナウンスするのが 面倒なので、可能ならコーデック作者に許可貰って同梱したいなと 考えています。 まぁ、別にコーデックのインストールをアナウンスしてもいいんですけどね・・・。 readmeを読まないユーザーから 「うごかない」 と言われるのが 目に見えてるので出きるなら対応したいです。 「静止画の連番データを独自形式でかためればいいじゃん」 というのは、ごもっともなのですが、AVIでやってみたいので ご存知の方いらっしゃいましたら、教えてください。
やめとけ
もしそういうコーデックが存在するなら、その作者にきいてみたら。 たぶんこの世にそいつしか居ないだろうし
一体なんのためのDirectShowなのかと どちらにせよ、いちいち動画をエンコードしながらアニメーション表示してたら アホみたいなCPU負荷になること間違いなしだが
以前、吉里吉里の開発者のblogだかでARGB持てるコーデックについて考察してたような。 エロゲーのタイトル画面や動く立ち絵などなら利用価値はありそうだけど・・・ 実用になるものができたのかどうか覚えてない
なんでエンコードして表示する必要があるのかさっぱり意味不明。 エンコードの意味は分かっているのか?
156 :
150 :2010/07/21(水) 08:10:38
DirectShowで使用するコーデックをシステムからじゃなく こちらが指定したフォルダの中にある物を使うという事だったんですが そういう事は出来ないという認識でよいですか? 後、ムービーテクスチャは連番静止画データに比べて 負荷が高いのですか?サンプル見た感じだと良く分かりませんでした。
157 :
150 :2010/07/21(水) 08:15:56
>>155 自分にたいしてのレスでしょうか。
エンコードというよりはデコードじゃないんですか?
コーデックを同梱したいのは
readmeに「○○コーデックをインストールする必要があります」と書いても
それを読まずに「うごかない」と言われるのが面倒だからです。
ムービーテクスチャってよくある DirectShowとDirect3Dを組み合わせたアレのことだよね? 別スレッドで動画をデコードしながら再生レートにしたがって テクスチャを書き換えなきゃいけないんだから当然負荷は高いし そんなに再生開始のレスポンスはあまり良くないぞ 画面上に動画を配置したいとかなら別にいいけど アニメーションAからBにワンボタンで切り替えるような使い方は出来ないと思った方が良い
連番静止画データっつーか普通に1枚の画像にまとめてやれよ
実際やってみれば分かるが負荷なんて全然大したことはない。 やりもしない人間が想像で語るのはやめろ。
だろ。の人は黙ってて下さい
Aero上で動画再生するのも負荷が高くて出来ない人達なんだろう。 あまりにアホだ。
だろ。の人は黙ってて下さい
画面内にいくつアニメーションを表示するのか分からないけど なんか右下のタスクトレイにいっぱいアイコンが出るアプリになりそうだね
AGP以降VRAMへの帯域は十二分に確保されているから、 細切れで送るような馬鹿なまねをしない限り、負荷云々はあり得ない。 旧時代の知識を引きずって今を見ない奴が、嘘を流布するのはやめろ。
CODECをシステムに組み込まなければ再生できないという前提が、そもそもの誤り。 DirectShowは手続きは面倒くさいが、そんなに不便じゃないぞ。
だろ。の人は黙ってて下さい
夏休み中ずっとこんな調子になるのか? 勘弁してくれよ
えっ?いつも通りじゃん
>>156 >後、ムービーテクスチャは連番静止画データに比べて
>負荷が高いのですか?サンプル見た感じだと良く分かりませんでした。
ムービー:毎フレームをCPUでデコードしてバスを通してGPUに送り描画
連番:フレーム毎に(もともとGPUにある)テクスチャのサブ領域を切り替えて描画
どっちが負荷が高いと思う?
>>170 だがしかし、SVGA位の解像度の動画なら普通にできちゃうんだな。
絶対的に重いかどうかより、実用になるかどうかが重要なんだよ。
もちろん、HDサイズになるとただ動画を流すだけでも大変だが。
そもそもの質問者の動機が負荷云々じゃなくて「連番めんどくせえ」だからな。
DirectShowを通すにしてもテクスチャに描画となると
サンプルグラバなりカスタムVMRを実装する面倒臭さを
(SDKサンプルコピペだけでまともに動くと思うなよ?)
連番自前の実装と比較する必要があるし、
それ以前に透過情報をもつムービーを再生できるコーデックを
(インストール不要という要件を満たすために)
DirectShowフィルタのバイナリ以外の形式で入手する必要があるわけだ。
そんな感じで
>>150 にめんどくさくないソリューションを誰か紹介してあげてください。
だろ。の人は黙ってて下さい
>>170 前者のGPU上に配置する作業が考慮されていないのは魔法でも使うつもりなのか?
動画をCPUでデコードする後者だって、あらかじめ全フレームをVRAMに上げておく方法は採れるぞ。
データが静止画と動画、方式がストリーミングか否か、それぞれを混同して話すな。
ぶっちゃけAVIで管理する方がデータ作成も含めてめんどくさそう 「連番データから管理するのが面倒」って何が面倒なんだろう? それ以前に「連番データから管理」って何? 普通に適当なアニメーション作成ツールでフォーム組んでデータ通りに再生すれば良いだけ違うん?
AVIよりも、MNGの方がいいんジャマイカ?
178 :
150 :2010/07/21(水) 13:51:51
>>159 そこらへんの知識も薄いのですが
1枚の画像の場合4096x4096までとかグラボで制限ありますよね。
パターン数増えた場合はどうするのかが不明です。
地味に気になります。
>>164 そうなんですか、うちでは別途ウィンドウはでないですね。
>>170 どちらも一旦なんらかのデコード作業をしてからGPUに送るので
作業内容としては同じかとおもってました。
>>171 ゲーム中のアニメーション文字「STAGE 1」とか「GAME OVER」とかで
使おうとおもってるので、HDサイズ!ってわけじゃないですね
>>175 DirectShowの手続き云々は未知だったのもありますが
連番静止画、たとえば100枚で1つのアイテムとして
フォルダにいれて管理するのと
100フレームの映像ファイルとして管理する、といった視点で見た場合に
連番静止画は、ファイル数、下手したらフォルダ数も増えてしまうので
面倒だなと感じていました。
後、連番静止画を独自形式に固める作業も
間に何かするといった意味で面倒とおもったわけです。
言ってしまえばAVIという独自形式の単位で管理できたら良いなと。
アニメーションってどんなのを想定してるんだ? そんなに動画にしなければいけないほど広範囲が細かく変化するようなものなの? 100フレームのアニメーションがあったとして それを再生するのに100枚の画像が必要ってわけじゃないぞ?
>ゲーム中のアニメーション文字「STAGE 1」とか「GAME OVER」とかで ・・・ みんな、もうやめにしようぜ
256色パレットアニメーションで済む話?
全然関係ない、黙ってろ。
特定の色を透過色扱いにして、無圧縮なり可逆圧縮を掛ける。 VRAMに置く前にα値を設定する、ある程度大きいならPSで処理するも良し。 非可逆ならテキトーな閾値で切る。
具体的にどう文字を動かしたいのか確認しないと、 また頂点の変形程度で済むという話になって下らない結果になるぞ。 相手は想像しているよりも遙かに斜め上だ。
>静止画の連番データ 静止画の連番ってことは、 Atack01.bmp Atack02.bmp とかで管理してるの? それならAtack.bmpにひとつにまとめて、プログラムで順番になるように表示すれば いいんじゃないの? >1枚の画像の場合4096x4096までとかグラボで制限ありますよね。 パターン数増えた場合はどうするのかが不明です。 俺なら画像を分けるけど?
>静止画の連番データ 静止画の連番ってことは、 Atack01.bmp Atack02.bmp とかで管理してるの? それならAtack.bmpにひとつにまとめて、プログラムで順番になるように表示すれば いいんじゃないの? >1枚の画像の場合4096x4096までとかグラボで制限ありますよね。 パターン数増えた場合はどうするのかが不明です。 俺なら画像を分けるけど?
なんか質問者と回答の半分くらいのホストが一緒なんだけど自作自演ってことでよろしいか?
188 :
150 :2010/07/21(水) 15:42:31
5、6年前の話だけどサウンドのストリーミング同時再生は4つぐらいがせいぜいだった それ以上やろうとすると遅延がないぐらいたっぷり読んでおくとかそういう準備が必要になるけど 動画だとどうだろうね? もし、10も20もやろうと考えてるならこの時点で実用に耐えないと思うけど 参考になるだろか?
>>189 それはちょっと考えにくいな。DirectSoundが広く使われる前から
ビットレートは低いけど8音同時再生できるユーザードライバはあったし、
俺自身不定音数リアルタイム合成エンジンを10年ほど前にWindows向けに書いてる。(not DirectSound)
実装方法が悪いんじゃね?
異なる動画を10個以上同時再生か。
たとえは古いけど、NHKの映像の世紀のオープニングみたいなものかな。
あれはリアルタイムには難しいだろうね。
1動画256x256くらいのサイズに押さえてないと厳しいかも。
>>190 サウンドボードの性能じゃなくて
HDDから同時にデータをロードできないんさって話だよ
>>191 そんなの、圧縮されたままの音声データを事前に読んでおけばいいじゃないか。
展開、合成はリアルタイムで十分間に合う。
>>192 メモリに全部おいておくなら動画の必要なくね?
アニメーションテクスチャ全部読むのとどう違うんだと
ストリーミングをしたい意味での動画再生じゃないってこと?
>>187 よろしいよ。
つうかこのスレは質問をするか回答をするかのどっちかなのに
一人で両方するとか意味のわからん人だな
libffmpeg使いなされ 少なくともコデクの悩みからは開放される
>>196 ライセンスはLGPLか……。
最悪それしか無いなら使うけど、可能な限り避けたいところだな。
質問なんですが ウィンドウ->フルスクリーンの切り替えで(ウィンドウサイズは800*600です) フルスクリーン状態->ウィンドウモードに切り替えは問題なく動くのですが フルスクリーン状態->デバイスロスト->フルスクリーン復帰->ウィンドウモードに切り替え とおこなった時、最後のウィンドウ切り替えのIDirect3DDevice9のReset()の後で BackBufferWidthとBackBufferHeightの値が794*568と妙な数値で帰ってきます Reset後の値が変わるような要因がありましたら 教えていただけると助かります。
>>198 復帰後にWindowの外枠の大きさが800x600になってるから、枠の分クライアント領域が狭くなる。
これはWindowsの仕様。
Window表示時のWindow全体の大きさを記憶しておくか、
フルスクリーン表示用のWindowを別に用意するかして対応する。
200 :
198 :2010/07/21(水) 22:57:18
なるほど、修正は単純なことのような感じですね。 どこが原因なんだーってデバイスロスト時の処理とかを 見直しまくって無駄に時間をすごしてしました・・・ 明日すぐに修正してみます。 ありがとうございましたー
テクスチャに動画再生って、 Windows7なら既に内部的にはそういう実装になってるんじゃないの? レガシな方法で再生するより、軽くなることはあっても重くなることはないんじゃないか
質問です。 HLSLコードで使われるセマンティクスのPSIZEというのは ラスタライザかどっかが自動的にPSIZEに代入した半径の円として頂点をレンダリングしてくれるとかいうわけではなく 単にデータの目印として準備されているだけ(値の利用の仕方は手動で記述)という認識で正しいでしょうか?
質問です。AABBツリーってどうやって作るんでしょうか? 2等分してその中に含まれる最大、最小の頂点からAABB作って、 って繰り返せばいいですか?
>>203 頂点シェーダから
セマンティックPSIZEで出力すれば
そのサイズの円としてレンダリングされるよ
サイズの解釈は
D3DRS_POINTSCALEENABLEの設定によって違う
>>206 ゲームプログラムなら俺に聞けできいてみます。。。
すみません、Matrixの値から回転角度を取得したいのですが、 どのようにしたらいいのでしょうか? 検索してみたんですが、オイラー角とかそういうのばかり引っかかって。 単純にMatrixから回転角度を取得できる公式って無いんでしょうか?
オイラー角が分かれば角度も分かるだろ。 いったい何を言ってるんだ?
>>208 結構、困難だよ
D3DXMatrixにそういうお手軽関数はなさげ
自力でやるとしたら
1軸固定(例えばY軸)にすればatan,atan2ぐらい使って楽にできた記憶がある
俺が昔やった感じだと1軸固定無しでは無理だった
ぐぐって調べたコードは一見できてそうに見えるんだけど
たまにブキッとあらぬ方向を向いてしまって制御不能だった
アドバイスありがとうございます。
親ボーンから見て、子ボーンがどの程度傾いているかを二つのマトリクスから
取得したかったんです。
>>210 その方法が一番自分に適しているような気もします・・・
親ボーンの逆行列を子ボーンのマトリクスにかければ、子マトリクスのローカル座標が取得できるので。
ソースコードとか残ってないですかね。
>>208 3軸はできなくはないけど
同じ回転行列でも回転の順番によって複数の答えができちゃうし
ジンバルロックおこしちゃうしコストが高すぎる
ところで本当に行列から回転角度を求めることが必要なの?
本当の目的は別のとことろにあって
回転角度が求められたらでききそうって自分で決め付けてない?
最終的に何をしたいのか言ってくれれば全然違うアプローチがあるかもよ
スプライト描画とポリゴンを使ったテクスチャマッピングでの描画って 組み合わせないほうがいいですかね? どちらかに統一すべきですか?
そもそもの問題としてスプライト描画など存在しない。
id3dxspriteを使った描画とD3Dデバイスを使った描画は組み合わせないほうが いいでしょうか? どちらかに統一すべきですかね?
分ける意味が不明。 デバイスを作らないでどうやって描画するつもりなんだ?
>>205 おお、実際に円として描画してくれる機能だったんですね。
そんな便利な機能だったとは…
遅れながらありがとうございます。
>>217 ごめん、嘘だった
円としては描画してくれない、サイズはあくまでポリゴンのサイズ
でも円とかのパーティクルのテクスチャを貼り付ければ一緒だよね?
>>218 なるほど。考えてみればGPUが円を描こうと思ったら一番手っ取り早いのはポリゴンスプライトしかないですね
ポリゴンスプライトのほうはちまちまと作っていたのでそれを流用してやってみようとおもいます。
ありがとうございました。
セガサターンですね分かります
え?
>>211 ボーン間の角度が知りたいだけなら軸のベクトルをマトリクスから求めて内積って話ではない?
あるベクトルA(0,0,1)とB(4,8,9)があったとして、(ベクトルBの値は適当)
AのベクトルをX軸とY軸に何度ずつ動かしたらBの向きになるかってのを知りたいんです。(Z軸は動かさない)
どうしても、これが算出できなくて・・・
LightWave的に言うなら、ある角度のボーンをヘディングとピッチだけ動かして指定の向きのボーンと角度を一致させたいんです。
上で
>>210 氏が1軸固定なら簡単に算出できると書いてあるんですが、頭が悪くてどうしても回転角度の演算方法が分からないです。
>>224 AとBの角度をABに直行する軸として回転するんじゃだめなの?
つかA(0,0,1)をX軸にx度回転するとどんなベクトルになるかがわからないとか?行列変換の基礎からどぞ
なんで回転の話がよくてAABBのはスレ違いなんだよ。。。
D3DX算術ヘルパー関数を使うと楽に計算できる話ならまぁギリセーフ 全然関係無い衝突判定や設計の話になるとギリアウトかな 早い話が回答者の気分次第です
なんでお前が仕切ってんだよ
229 :
224 :2010/07/22(木) 19:54:58
>>225 上手く伝わらなかったかも。
A(0,0,1)とB(x,y,z)を同じ角度にするためにAをX軸にu度、Y軸にv度傾ける必要があって、uとvを算出したいんです。
それが出来れば問題は解決するんですが・・・。
225だが確かにいくらなんでもスレ違いだからやめとく。回転行列の基礎とか見直してみれば
231 :
224 :2010/07/22(木) 20:23:21
分かりました、確かにDirectXとはちょっとズレるお話でしたね・・・行列勉強してきます。 ただ、回転系の演算関数は意外とDirectXは便利な物を多くサポートしてるので、 そこまでスレ違いかと言われるとそうでもないとは思いますとだけ。
別スレで完全スルーされて涙目の人がいるみたいですね
頂点シェーダにストリーム単発で整数を渡そうとしていたものですが 色々やってみた結果、どうやってもうまく渡らないという結果になりました 整数を100分の1にして少数でもってて100倍して、その後整数に変換とかやっても駄目でした PIXで確認
>>233 それはなんか整数がどうとか以前に何か別の問題がありそう
コードは出せないのかい?
そもそもなんで整数にこだわってるんだ?
>>234 いや、でかいというか広いというですね・・・とりあえず貼ってみます
>>235 単純にインデックスを渡したいだけなんですよ
頂点のなんとか
D3DVERTEXELEMENT9 normal[] = {
0, 0,D3DDECLTYPE_FLOAT3 ,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION ,0,
1, 0,D3DDECLTYPE_FLOAT4 ,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_BLENDWEIGHT ,0,
2, 0,D3DDECLTYPE_UBYTE4 ,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_BLENDINDICES ,0,
3, 0,D3DDECLTYPE_FLOAT3 ,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_NORMAL ,0,
D3DDECL_END()
};
頂点バッファの用意
char* ver = NULL;
hr = aDevice->CreateVertexBuffer(mAll,D3DUSAGE_DYNAMIC,mFvf,D3DPOOL_DEFAULT,&mVertexBuffer,NULL);
if(FAILED(hr))return false;
ここでfvfは0にしています
型はfloat b[4];とかして頂点分確保しています。unsigned intではシェーダ側に値が渡らず・・・
これで動作させてPIXで値をみると値は届いてるんです。
しかし、いざ値をo.position辺りに出力させてみると全然違う値が入っているわけです。
//頂点シェーダ VS_OUTPUT vaOnColNorNorBne( const float4 position :POSITION, const float4 wait :BLENDWEIGHT, const float4 blend :BLENDINDICES, const float3 normal :NORMAL ) { VS_OUTPUT o = (VS_OUTPUT)0; //座標変換 float4x4 wld; wld = boneOffset[blend[0]] * wait.x; wld = wld + boneOffset[blend[1]] * wait.y; wld = wld + boneOffset[blend[2]] * wait.z; wld = wld + boneOffset[blend[3]] * wait.w; o.position = mul(position,wld); o.position = mul(o.position,viewProj); シェーダ側の処理の頂点部分です。
>>236 よくある手法だが頂点シェーダで
int index[ 4 ] = (int[ 4 ]) D3DCOLORtoUBYTE4( blends );
でどうよ?
失敬 誤:blends 正:blend
>>238 うーん、駄目でした
上記のコード入れる前にどう駄目かというと
本来、5,6,0,0とか値が入ってるところが0,0,160,64
とか値になってしまうんですね
んでこれが必ず同じ数値なら同じ値に変換されるわけではないみたいなんです
ただ、インデックスの4つの値が同じ並びの同じ数字だと同じ値になるみたいですけどね
んで上記のコードを入れると
40880,0,0,320とかさらに意味不明な値になりました
>>240 float4 blend
なのにblend[0]とかってのが意味分からないし
D3DDECLTYPE_UBYTE4で宣言してるのに
型はfloat b[4];とかして頂点分確保ってもおかしくないか?
1頂点は4byteだぞ
あれ? これはこれはもしかして・・・できた? あれ?でもなんか・・・ なんかできたっぽいような感じですけど もうちょっとチェックしてみます
中二病な日記を書くのはやめてください
回答しなくせに妙に偉そうな人がいるのは夏だからですか?
いえ、夏に限らず常駐して無意味に荒らしてるお馬鹿さんです
だろ。厨がきてんだろ。
>>236 >D3DVERTEXELEMENT9 normal[]
これだと、4つストリームを使うみたいだが、
ちゃんと4つVBセットストリームしてるのか?
>>248 してます
それがやりたくて普通の方法と違う感じで作って悩んでいたわけですが
DWORDで渡すようにしたらどうやらここの部分はできたっぽい?
感じになってきたんですがアニメーション箇所がバグっているのかなんなのか
まだまだきっちりできたといえない状況で現在修正中という感じな状況です
>>236 です。
やっとアニメーションまわりのバグもとれてついにスキニングのアニメーションができました!
>>241 さんの指摘どおり、頂点バッファの確保をunsigned char b[4];にしたら動きました!
ありがとうございました
長かった・・・
これからスキンメッシュのアニメーションをする人は上記頂点バッファまわりの注意と
まず、スキニングではないアニメーションを完璧に作り上げてから
次に、シェーダ無しで一度普通に組んでみてできたらシェーダに直す手順を推奨
こうしないと不確定な要素のチェックばかりで時間が無駄に過ぎていく・・・orz
さすがにこれはひどい
無茶苦茶な事しても案外動くもんなんだなあ… DirectXの懐の深さを褒めるべきなのか、それともきっちり引導渡してやった方が良いのか
基礎を理解してないうちに色々やろうとして失敗してるだけで やろうとしてること自体はそんなに間違いじゃないぞ むしろ今風になってる
>>253 なんだよ今風ってw
アホか
>>254 頂点バッファのフォーマットをUBYTE4にしてるのに、
他の型で格納してましたってこと?
これは想定外だなw
>>255 ああ、なんだそっちか
んなこといってもPIXで確認するとunsigned charで送ると値が全部0になってるのに
floatで送るとちゃんと値が表示されんだもんよw
これはPIXの製作者を叩いてほしいところだよ
手法じゃなくてミスの揚げ足とってるだけかw レベルが知れるな
いつも通りの駄レスで安心クオリティの「だろ。厨」ってところだな
259 :
デフォルトの名無しさん :2010/07/27(火) 21:42:30
DirectWriteのことはここで聞いてもいいのでしょうか?
いいと思うよ
ランバート照明のシェーディングの式の、 反射率か減衰率の意味の、 記号Kとは何の略ですか?
>>261 人にやらせる前に
まず自分からボケるのが礼儀じゃね?
263 :
デフォルトの名無しさん :2010/07/28(水) 23:21:43
Windows 7 Direct2D、DirectWrite Windows API Codepack Visual Basic 2010 を使って、画像の合成を行うと思っていますが DirectX の恩恵ってありますでしょうか。
ねえよ。
だろ。の人 マジで消えてくれないかなぁ
HLSLでバンプマップ+スキンメッシュをやってるサンプルってないでしょうか? 具体的にはスキンメッシュで求めた行列をtransposeしてもうまくいかないっていうか マジでこれ逆行列の変わりになってんのかよ?的なとこです。
( ・∀・)つDXSDK ( ・∀・)つNVSDK 日本語で書かれた丸パクリできるサイト晒せという意味でしたら、期待に添えなくて申し訳ありません。
エフェクトを色々追加してるんですが、 どういう画像を作れば、イメージどおりのエフェクトができるかわからないんです。 なんかそんな解説が載ってるサイトはないでしょうか?
どう絵の具を混ぜたら、イメージ通りの色が出来るか分からないんです。 ↓ イメージ通りできるまで、繰り返し繰り返し色を混ぜましょう。
じゃあ質問を変えます。 エフェクトを描くのに最適なグラフィックフリーソフトでお勧めは何がありますか?
フリーソフトでお勧めはありません。
>>267 スキンメッシュのサンプルとかみた感じ
なんか放置されてね?
頂点動かせば法線とかも動くじゃん?
したら合わせてライトのベクトルをボーンのローカルにもってこないと駄目なような気がするんだけど
サンプルはその辺おざなりになってるような気がするんだけっちょ・・・
とりあえずこんなんでそれっぽくなった気がする float3x3 wldinv = transpose((float3x3)wld); ちなみにこれ↓はまるで駄目な感じだった float4x4 wldinv = transpose(wld);
常識的に考えて 法線はベクトルなのに移動成分を掛けちゃったら長さまで変わっちゃうでしょう 回転成分だけ掛けないと
>>275 おお、それで気がつきましたがハーフベクトルもカメラ座標をローカルにもっていくんじゃなくて
視線ベクトルにして転置行列にかけないとおかしいですね
ありがとうございます
xAudio2で質問があります サンプルのXAudio2BasicSoundをベースに効果音の再生を作ってるのですが 連続で音を鳴らすとノイズが入ってしまいます、どうやって対策すればよいでしょうか?
>>277 原因はいろいろ考えられるが、
とりあえず音のデータ自体がちゃんとノーマライズされているかどうかをチェックしたほうがいいんじゃね?
音データ自体には問題無いと思います
http://www1.axfc.net/uploader/He/so/287946.zip これが改変済、元ソースと実行ファイル、効果音のファイルです
元ソースに単純な改変を行い、連続で音がなるようにしてみました
音が連続で再生されていますが、ESCを押すと音が鳴り止む前に打ち切られ
次の再生に入るようになっています。
ESCを連打するとプチプチとしたノイズが入るかと思います。
音を再生中にDestroyVoiceを行うのがまずいのでしょうか?
連続で音をならすとノイズが入るってか >ESCを連打するとプチプチとしたノイズが入る こういうことしたらxAudio2に限らず普通にノイズが入ると思われる 再生停止前にボリュームを0にするとかでもダメか?
DestroyVoice前にStopやボリューム0を入れてみましたが改善しませんでした DirectMusicだと特に何もしなくとも連続再生に問題なかったのですが xAudio詳しい人いたらお願いします
連続再生って XAUDIO2_BUFFER submit = {0}; submit.AudioBytes = FileSize;//バッファのバイト数 submit.pAudioData = &Buffer[0];//バッファの先頭アドレス submit.LoopCount = XAUDIO2_LOOP_INFINITE; ← submit.Flags = XAUDIO2_END_OF_STREAM; これでだめなん? 間髪をおかず書き込み→再生→破棄 を繰り返したらノイズは仕方ないのかなぁ・・・
>>282 それはループ再生なんでは?
連続再生ってのは例えばシューティングゲームで自キャラが弾を撃つときのように
前の音が鳴り止む前に停止して次の音がなるようなケースで使うかと
再生が(ハード的な)ワンブロック目を終えないうちに次の再生を始めるとノイズになってるのかな? バッファを2〜3系統用意して巡回させるのが良さそうかな、破棄とかせずに。
ああそうかループでなくてそういうことか waveデータの読み書きも停止と再生の間にはさんでるからとかかなぁ
てか、同じ音鳴らすのにいちいち再構築とかしないでしょ よく使うSEサウンドはオンメモリにしといて 再生時に先頭から再生にするのが普通
停止→再構築→再生でノイズが入るわけじゃなくて 再生中のを停止する時点でノイズ入ってるな これは多分何やっても駄目だと思う 停止ではなく段階的にボリューム落として無音にしていきつつ 別バッファで新しく再生とやれば大丈夫だと思うが、多分これでは求めてる物にはならないだろう AudioサンプルのXACTGameで効果音の連続再生やってるけど、こっちはxAudio使ってなかった このサンプルをxAudioで作る事は出来ないんじゃないだろうか
常識的に考えて 法線はベクトルなのに移動成分を掛けちゃったら長さまで変わっちゃうでしょう 回転成分だけ掛けないと
だろ。の人は本当に自分が一番じゃないと気がすまないんだなぁ
大変ですね
久しぶりにこのスレ来たんだけどだろ。厨って何? このスレ見た感じだと上から目線で断定回答してる人? 雰囲気としては287の人がその人なの?
過剰反応厨の妄想だと思うぞ俺は
>>292 前スレを「だろ。」で検索すると解決策にもなっていないような
駄レスを連発(おそらくすべて同一人物)してこんなネーミングがついちゃったw
どっちも邪魔だから失せろ駄レス製造マシンが
287はだろ。の人じゃないと思う だろ。の人の論法は 「質問自体が低級又は無意味であるから答えるに値しない」 と言うものだからすぐ分かる そして自分以外の回答者にも食ってかかる 後もう1つ簡単に特定できる特徴があるんだがこれは本人も分かってわざとやってるんだよね?
3行で書く
つーかお前らの妄想とかどうでもいいよ これだけレスあってもこれだって回答が無いってことはみんなxAudio使ってないのかね? 俺も使ってないけど
前スレだろ。で検索したが4つくらいしか出てこなかったぞ 思い込みだろうぜえんだよ荒らし
反論すると全てだろの人がどうこうという話になるだけだよ 被害妄想とはそういうもの 以後スルー推奨
把握
普段は人いないのにレスがいっぱい 一体実際にいるのは何人なんだろうね
だろ。厨の人気に嫉妬
俺は答えるレベルには達してないけどずっと見てるぞ
俺なんて3Dの知識すらないけど毎日このスレは見てます。 あとたまあに分からないことあったら質問させてもらってます。
連続再生のテストちとやってみたが、 確かに超高速でDestroyとsubmitするとノイズが入るな wavデータをロードや破棄は関係なさそうだ (StopとFlushSourceBuffersをつかってもノイズが出たから) 探ってみたがイマイチわからん とりあえず再生開始からある程度(数フレームから数十フレーム?未検証) 時間が経てばノイズは出ないようだが・・・
ちょっとどこで見たか思い出せなくて悪いんだけど 最低何十ミリ秒だかのデータ長の制限があったような気がする もしかするとその線かも
DirectXを直接使ってゲーム開発ってどうなの? やっぱ、DirectX用にクラスを設計したほうがいいのか?
>>11 DirectX初心者というより、C++初心者ですね。クラスの使いどころに自信を持てず、用語に振り回されています。
それを脱するには経験しかありません。
たとえば、Direct3Dの低レベルラッパークラスと上位クラスの二層構造にするとか、全然別のとか、なんでもいいので、
作りながらよりよい方法を模索してスキルを磨いてゆくしかありません。
ちがた>311だった
LPD3DXSPRITEでスプライトを作って Begin、Draw、EndでDrawにテクスチャを指定して描画するんですよね? このときテクスチャを複数表示するなら一度にDrawしてしまった方が良いの? それともその都度Begin、Draw、Endをやっていいの?
D3DXSPRITEの話題が来ました。スレが荒れる注意報ですよ皆さん。
え?なんかしたらマズイ話題・・・? だっていっつも荒れるのはスプライトなんてない厨のせいなんだからスルーでいいじゃないですか
>>314 ID3DXSprite::Drawは実際に描画するわけではなくバッチリストに登録するだけ
実際の描画はID3DXSprite::FlushかID3DXSprite::Endの呼び出し時に行われる
イメージとしてはDrawで溜め込んでEndでまとめて描画する感じなので
その都度Begin、Draw、EndするのはNG
コレをやると大幅なパフォーマンスダウンが生じる
おおやっぱりそうなのか ありがとうございます
SetStreamSourceに三角ポリゴンが入っててDrawPrimitiveで描画してるのですがテクスチャが上手く貼れません テクスチャは四角です。間延びした感じになります 原因は三角ポリゴンのせいかわからないのですがどうすれば良いのでしょうか?
>>319 その説明じゃエスパーじゃないと答えられない
頂点バッファに書き込んでるデータと
描画部のコードを書いて
PIX使えば
if( FAILED( うんたら return E_FAIL; と hr = うんたら if( FAILED( hr ) ) return hr; の違いを教えて下さい 上にしたらそのままスルーされて(多分)思ったように動かなかったのですがエラーが出なかったのですごく怖く思いました
returnする値が違うだけです。 そこにオカルトはありません。
そうですかありがとうございました cache->vertexBuffer->Lock( 0, size, (void**)&pVx, 0 ); が2回目に呼ばれた時にハンドルされていない例外が発生するのですがなぜかわかりますか? pVxは struct CUSTOMVERTEX { D3DXVECTOR3 Pos; D3DXVECTOR3 Norm; float uv[ 2 ]; }; です
SetStreamSource()の引数のvertexBufferの中身って見れないのですか?
見られるがいったい何がしたいのか意味不明
それぞれの頂点にちゃんとUV座標が入ってるか見たいのです
入れる前に確認すれば?
何が分からないのかも自分で分かってない気配だな あまり触りたくない臭いがする
見れるんだよね? 開いていっても座標の配列とか無いんだが
バッファ作成時のフラグは?
>>331 それはもう解決した
>>332 D3DFVF_VERTEXNORMAL, D3DPOOL_MANAGED
もう後ストリームに入るUV確認できたらできるっぽ
デバッガの使い方を聞いてるのか?
できたらデバッガで見たいけど普通に開いて行っても見れない
見れるわけが無い Lockして中身のぞけよ
見れねーのかよ Lockの仕方教えて
そもそもその頂点バッファはどうやって作ったんだよ? 自分でLockしてデータを書き込んだんじゃないのか?
そういうつもりなんだけどロック→UV設定→アンロックはやったんだけど テクスチャが間延びして上手く貼れないしUV座標いじっても変わってないような気がするから ストリームにちゃんと入ってるか見たいし入ってないだろうからその値がどこから来たかわかればできる(`・ω・´) つかなんでストリームって座標のD3DXVECTOR3型と法線のD3DXVECTOR3をわけれてるかわからんどういう仕組みなの?
なんか実際の頂点情報と デバイスに指定してる頂点宣言(もしくはFVF)が一致してない予感 いいからソース出せって
うぜー 見れるとか言ってて結局見れねーし なんなんだよ
日本語でOKですよ
見るためにLockする時のフラグが間違ってるとか?
見れるの? LocKして何したら見れるんだよ
今外にいるからあんまり具体的なことは言えんが、 Lockしたら、頂点バッファのアドレスが取れたと思う。 多分それはvoid*とかの汎用のポインタだとおもうので、そちらで想定してる型のポインタへキャストする。 そして、想定したデータと一致するかをチェックし、Unlockする。
今、自分のソース見れないし、テストコードもかけないので、間違ったこと書いてるかもだが。
ポインタとか全然理解してないっぽいからそれじゃ通じないと思われ
元画像のサイズと実際のテクスチャサイズと画像を読み込んだときのフラグを明確にしろ。 それで全て解決する。
釣りでしょ? まともに説明する気があるとは思えん それともこれがゆとりなのか?
詰んだポインタそれで見てみる元画像256×256bmp画像を読み込んだときのフラグどれのことかわからん CreateVertexBuffer struct CUSTOMVERTEX { D3DXVECTOR3 Pos; D3DXVECTOR3 Norm; float uv[ 2 ]; }; CUSTOMVERTEX * pVx = NULL;CUSTOMVERTEX * tpVx; cache->vertexBuffer->Lock( 0, 2*size, (void**)&pVx, 0 );新しくuvを加えたいのでサイズを大きくした tpVx = pVx;最初のポインタ保持 for(int i=0;i<頂点数;i++) {座標と法線のメンバ各コピー;++ pVx; } pVx = tpVx;//ポインタ最初に戻す for( DWORD i = 0; i < 頂点数; ++ i ) {switch(i%3)でpVx->uv[0と1]に0~1適当に入れる;}←なんとここを消してもテクスチャは元のまま ++ pVx; } cache->vertexBuffer->Unlock(); Caches.push_back( cache ); 描画 Effect->SetMatrix("g_mWorld", world); Effect->SetTexture("g_txScene", Txture );//多分消してないだけ Device->SetStreamSource( 0, Caches[i]->vertexBuffer, 0, sizeof(元のサイズ)+8 );元のサイズ+uvの8バイト Device->SetFVF( D3DFVF_VERTEXNORMAL );Device->SetTexture(0,Txture); UINT Passes; Effect->Begin( &Passes, D3DXFX_DONOTSAVESHADERSTATE ); for( UINT p = 0; p < Passes; ++p ) { Device->DrawPrimitive( D3DPT_TRIANGLELIST, 0, Caches[i]->メッシュ数 ); }Effect->End();
テクスチャとD3DXの読み込み時のフィルタとuvの対応関係が分かっていないだけだろう。 それ以前にポインタの基礎も。
分かってないから教えてください
D3DFVF_VERTEXNORMAL 限りなく怪しい
コレは酷い どこから指摘していいのか分からないくらい
ひとつつづお願いします
シェーダも不明ならsizeがどこから来たのかも分からない。 D3DFVF_VERTEXNORMALがどうなっているのかも不明。 きりがない。 いいから元のソースを出せ。
D3DFVF_VERTEXNORMALは何が怪しいのよ? uvの部分消しても元のまま描画されるのだけどそもそも影響してないってことじゃん
PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!! PIXで観れます!!!!!!!!!!
シェーダの頂点データの対応関係は確認したのか?
シェーダの部分は消してやってる //Effect->BeginPass( p );とエンドパスにしてるけどテクスチャ貼られてるし
>>357 もともと座標と法線しかなったところにテクスチャ座標を追加したんだろ
D3DFVF_VERTEXNORMAL = D3DFVF_XYZ|D3DFVF_NORMAL ;
だったのを
D3DFVF_VERTEXNORMAL = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEXCOORDSIZE0 ;
にしたのか?
デバイスに間違った頂点フォーマット送ってるんだから消しても変わるわけが無い
怪しいってのはそういうこと
いい加減後出しウザイ 固定を使っているならD3DFVF_VERTEXNORMALが実際どうなっているのか不明じゃどうにもならないだろ。
364 :
デフォルトの名無しさん :2010/08/03(火) 17:25:05
D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1にしたら出来た
しねばいいのに
なるほどそういうことか
うぜー 初心者にどうやってそこだけに気づけって言うんだよ 玄人なら最初からそこ指摘しろや
興奮してageちゃったw
質問者がどこまでわかっててどこからが怪しいのかを探るのに 何レスかかってるんだw情報小出しの典型
初心者はまずチュートリアルをやれ、怠けるな、としか言いようがない。
やったところで気付くのかっていう テクスチャ間延びしてるなー→デバイスのフラグ間違ってる(キリッ) ってチュートリアルやってもわかんねえだろもっと単純なミスの可能性も高いし初心者だから
PIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIX PIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIX PIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIX PIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIX PIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIXPIX
チュートリアルにまんま書いてあるんだから嫌でも気がつくだろう。
DrawSubsetやBeginPassの意味がよくわからないので教えてください、どちらも何個か中に入ってるということだと思うのですが エフェクトの中に何個もエフェクトが入るのでしょうか?そうだとしたらどういう意味なのでしょうか? 木が一つあるのですか10個ぐらい位置を変えて作りたいので、一つの木を使いまわして、ワールド座標だけ10個作る方法だと思うのですが この場合DrawSubsetやBeginPassの中に10個保持して引数で10回回すのでしょうか?どういうコードを書けば良いですか?
さすがにそのレベルの質問は無いわ… チュートリアルからやり直して下さい
207 名前:デフォルトの名無しさん[sage] 投稿日:2010/08/04(水) 09:06:31 さすがにそのレベルの質問は無いわ… チュートリアルからやり直して下さい
そんなに悔しかったの?
チュートリアルやサイトをググったのですがわかりませんでした 木を10個表示させたいのです。おそらくDrawSubsetやBeginPassこの辺りを使うのが最適な方法だと思ったのですが方法がわかりません 教えてください
>DrawSubsetやBeginPassの意味がよくわからないので教えてください、どちらも何個か中に入ってるということだと思うのですが が間違い どっちも複数描画するためのものじゃないから
>>378 とりあえず木を1本表示するところまでやってきなさい
話はそれからだ
では複数の時は for(i = 0;i<10;i++) { effect->(テクスチャ,Tex[i]) effect->begin mesh->DrawSubset(0); effect->end } のような方法が最適なのでしょうか?
最適ではないけど初心者ならそれでいいよ
そうですかありがとうございました ついでに最適な方法も一応教えてください
ちょっと頭使えば10回必要なものと1回で良いものくらい分かるだろ?
わかりません どうすれば最適なのでしょうか?
板一枚に木の絵を書いて、ビルボードで描画するのが最適です(^^
ちゃんと教えてください
なに他力本願丸出しの初心者のくせに口答えしてるのですか。 生意気ですね。
| ̄``''- 、 | `゙''ー- 、 ________ | ,. -‐ ''´ ̄ ̄`ヽ、_ / |, - '´ ̄ `ヽ、 / / `ヽ、ヽ / _/ ヽヽ/ / / / / / / ヽハ く / /! | 〃 _/__ l| | | | | | | ||ヽ \l// / | /|'´ ∧ || | |ー、|| | | l | ヽ /ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ / | ||ヽ { ,r===、 \| _!V |// // .! | | || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘ | ハ|| || | """ ┌---┐ ` / // | V !ヽ ト! ヽ、 | ! / //| / ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | / ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/ |(/(/(/(/(/(/(/(/(/(/│|| |\ 〃 r'´ ̄ヽ. | | ト / \ /  ̄`ア | | | ⌒/ 入 〉  ̄二) 知ってるが | | | / // ヽ 〈! ,. -' | | ヽ∠-----', '´ ', | \| | .お前の態度が | |<二Z二 ̄ / ', | | | _r'---| [ ``ヽ、 ', | | | 気に入らない >-、__ [ ヽ ! \.| l. ヽ、 [ ヽ | ヽ| \ r' ヽ、 |
お願いします 教えてください
用語が出てきたらググってみるとか
用語なんて有りましたっけ? ビルボードの方法で木を表示したいのではないのですが
>>391 effect->もろもろセット
effect->begin()
effect->beginPass()
for(i = 0;i<10;i++)
{
mesh->違う位置で絵を描きたい位置の行列のセット
mesh->CommitChanges();
mesh->DrawSubset(0);
}
effect->endPass();
effect->end()
こういうことを言いたいのじゃないか?
切り替えの回数を減らすという意味で
ってか答える奴何様だよこんなところでしか偉そうにできないからか?
まあこの書き込みが間違ってたらまた偉そうに指摘してくれるから
それで
>>391 と俺は勉強になるからいいと思うが
ID3DXMesh::DrawSubsetは 基本的にポリゴン群を描くたびに呼び出す。 木を10本描くなら10回呼ぶ。 ID3DXEffect::BeginPassはエフェクトのアクティブパスを 設定するたびに呼び出す。 アンタのエフェクトファイルにはパスはいくつあるの? ひとつなら当然一回でいい。 木の位置を変えるなど、パスに渡している変数の値を変えたい場合は、 変えてからID3DXEffect::CommitChangesを呼ぶ。 ID3DXEffect::Beginは、、ステートの保存等を行うらしいが 現在は殆ど形骸化してるな。とりあえず最初と最後に BeginとEndを呼んどきゃいい。
え?そんな初歩的なこと聞いてたの?
>>394 エフェクトまわりについては、ちゃんと答えようと思うと
内部的にどう動いているか理解してないと駄目。
下手に答えると、つっこまれるリスクを負うからな。
>>394 ありがとうございます
いちいちエフェクト開始終了するより
mesh->CommitChanges();をする方がパフォーマンスが良いのですね
エフェクトなんかあるからわかり辛くなるんだよ
あらら、余計なこと書くと
後出し情報でそれをやると上手くいきませんとか言い出しそうだからほっといたのに・・・
そして
>>398 みたいな勘違いするし
はじめからどこが悪いかわかってたら質問なんかしねえっつのw
言葉で説明できない日本語の不自由な方はソースを出せ なんで質問者のレベルをはかるために駆け引きしないといけないんだよw
ソース乞食は大阪にでも行ってろよw
まともに質問できない初心者ほどソース出すの嫌がるよね 別に全部出せってことでなくて 最小コードでも見ればほとんど一発で答えられる質問ばっかなのに・・・ 何なの?自分のソースを見られるのが恥ずかしいの? 他所からコピペ改変してるだけなのがバレるのが嫌なの? まさか、そんなまともに動かない糞ソースをパクられる心配してるわけじゃないよね?
お好み焼き臭くなってきたな
いったい誰と戦ってるのかは知らんが もう解決したんだろ?
でもいつも同じようなパターンだからなw
うちの会社にもいるけど技術者系って妙にプライド高い人多いよな 自分の持ってる情報を開示してサポートなり専門家に問い合わせればすぐ解決するのに 妙に嫌がって情報探してネットをさまよって何日も無駄にしたりとか 自分の無知を他人知られるのが恥ずかしいとかそういう心理が働くのだろか?
知ってるか知ってないかが評価のすべてだからな スポーツ選手じゃないんだから
>>409 どこの素人?
納期を守れるか守れないかが全てだ
必要な情報にすぐに到達できるだけの手段とスキルを持つことが大事 ネットが普及する前からそうだ
>>408 俺が見てきた限りでは、そういう人にちゃんとした実力のある人は居ないな。
手が動くのは早いし実装出来てはいるんだけど
他の人の設計を破壊したり汎用性を損なうようなコードしか書けない。
ていうかコピペが異様に多い。
そもそもプログラマに向いてないタイプじゃないかね。
プログラマ「でしかやっていけない」タイプだろ。 他の業種だったら早々に衝突起こして退職かクビになってる。
>>412 どうだろ?
ライブラリ製作者でもなければ(それこそDirectXを作るとか・・・)ほとんどコピペのが効率いいんじゃね?
ゲームPGなんて90%が末端PGだろ?
そこで汎用性だの設計だの話が出ちゃう現場のが俺は信用できない
「ほれ、ここ切り分けてやっからこの中ならなんでもしていいぞ」
って感じでやんじゃねーの?普通・・・
ってか俺5つぐらい現場移ってるけどこれ以外の開発みたことないや
ゲームPGはコピペ多いね
マスターすれば後はシラネって業界だからしょうがないんだろうけど
>>408 プライドが高いんじゃなくて、守秘義務であんまり情報出せないとかそういうのはないの?
どこまで情報出していいかって結構悩む
検索ワードにも気を使うし
>どこまで情報出していいかって結構悩む バグが再現する最小限のソースだろ常考
>>415 >マスターすれば後はシラネって業界だからしょうがないんだろうけど
そういう問題じゃないんだな
ウィンドウズだってwin32apiやmfcを作る人間でもなきゃ汎用性なんて意識してPG書く必要ないよ
ライブラリを書いてみんなで使うってことはそれだけ資料を作ってみんなに周知させなきゃいけないってことだから
その手間考えたら「他で使うかも・・・」なんて希望的観測の汎用性なんてコストだけ無駄に高くて意味ないと思うな
みんなに使わせるってそれだけ大変だと思うんだよね
>>416 守秘義務に引っかからない程度まで切り分けできるなら質問するまでもなくバグが取れそうなもんだけど
>>417 うっかりするとバグをばらまくことになるからあんまりコピペはしない方がいいよ
最初から汎用性を考慮する必要はないと思うけど
>>418 >うっかりするとバグをばらまくことになるから
別に困らない
それがたとえ100箇所だったとしても
所詮同じバグんなもん30分〜1時間もあれば文字列置換やら検索やら駆使してなんとかなる
構造が複雑なほうが問題
こっちは下手したら丸一日〜一週間かかっても解決する兆しすら見えないこともある
こういう天秤のかけ方が下手糞なまんまだといつまでたっても苦労ばかりするぞ
大手メーカーの下請けしてたときメーカー側から提示されたプログラムは a_1 = 1; a_2 = 2; a_3 = 3; ... みたいなのが延々と続く退屈なものだった っつーかループ知らんのかとか もしかして最適化なのかとか メンテする度に数字書き直しとかで大変だろうなとか いろんなことを思った
>>420 その例はただの極論にしか見えないけど
ぶっちゃけそれでも問題おきないでしょ?
まず、メンテするかも・・・なんてのが希望的観測であって
メンテなんてない場合がほとんどでしょ?(よしんばあっても単調作業で終了)
これはゲームだからってよりも業務系でもいっしょだけどね
知らん人のソースみて一番嫌なのって構造が複雑なことじゃない?ちがう?
>>419 それがコピペかどうかちゃんと把握できてるなら困らないけど
普通そんなの覚えてないよね
無理して汎用化しようとして構造が複雑になるのも問題だけど
簡単な構造でもコピペで済ませるやつが多いのがちょっとね
>>422 似たような箇所がないかどうかまず検索かけてそれから修正入るから
覚えてる覚えてないは関係ないね
それと別に俺も
>>420 ででたみたいな極端なことはしてないし
それさえなきゃぶっちゃけ否定するところないでしょ?
効率効率あんまり叫ぶ人いるけどそれってライブラリ(3Dエンジン)開発者ぐらいなもんで
ゲーム作る人にはあんまり関係ないよ
やりたきゃライブラリでも売る仕事に就くんだね
まったく同じなら検索しやすいんだけど、
コピペした後に変数名を変えたりとか少し改造してあるから厄介なんだよな
個人的には絶対ダメとは言わないけどなるべく減らして欲しい
つかバグを修正する時期にコピペ探しで30分〜1時間もロスするのは精神的にツライ
さすがに
>>420 みたいなのは見ないな
ライブラリ作ってる人って「ゲームプログラマー」なの? それを使ってるだけの側がゲームプログラマーじゃないの?
>>425 江戸城建設したのは徳川家康か?太田道灌か?
>>424 >構造が複雑なほうが問題
>こっちは下手したら丸一日〜一週間かかっても解決する兆しすら見えないこともある
こっちは見えないんだなw
>>427 「下手したら」だろ
下手しなければ良いじゃん
>>424 のは下手しなくても修正の度に30分〜1時間ロスするんだぜ
いみふ
あの、
>>398 は勘違いなのですか?
詳しく教えてください
>>430 勘違いではないと俺は思ってる。
ってか
>>400 は、
間違ってると思うなら理由を含め書き込めよ
じゃないと次にこの書き込み読む奴のためにならんだろうが
頭使えks
とここまで煽れば400は答えてくれるんじゃないか?
>>427 >>422 >無理して汎用化しようとして構造が複雑になるのも問題だけど
>簡単な構造でもコピペで済ませるやつが多いのがちょっとね
すでに書いたから触れなくていいかと思って
そこで問題だ! アホの
>>400 は、このえぐられた頭でどうやってあの攻撃をかわすか?
3択−一つだけ選びなさい
答え@ハンサムの
>>400 は突如正しい答えがひらめく
答えA仲間がきて助けてくれる
答えB泣きながら逃走。 現実は非情である。
煽るならここまでしないと
ふぁ…
435 :
デフォルトの名無しさん :2010/08/05(木) 16:35:44
いろいろ弄ってたらウインドウに変な無茶苦茶な角度のカメラの回転とともに動くテクスチャが出て しかもVisualStudioの画面がテクスチャに貼られていたのですがどうなっているのでしょうか? エフェクトファイルを追加していじっていたのですが
>>435 大体そういうのは未初期化のテクスチャ張ったとか、
変数を初期化し忘れてるとか、
初期化し間違えてるとか
が多いな
すさまじいエラーのように見えても実はそんなものの場合が多いと思われる
何をしようとしていたのか詳細があればもっと答えてくれる人がいるだろう
αブレンドをしたんですが オブジェクト1、オブジェクト2、オブジェクト3の順に表示させたら 3が透けて1や2は見えるんですが 1は透けず2、3が見えないんですが これはカメラ位置とオブジェクトの距離を計測して最適な順に並べなくてはいけないんでしょうか? それともそれ以外の方法があるのでしょうか? (Zバッファをオフにするってのも考えたけど余計変なことになりそうな・・・)
>>437 α物はソートしなくてはいけないんですよマジで
マジですか 簡単なソートプログラムを作っておくか・・・
かってに作ればあ
430はなんでパフォーマンスを気にする前に 仕組みを理解しようと考えないんだろう 別に理解できないことではないだろうに。
430はなんでパフォーマンスを気にする前に 仕組みを理解しようと考えないんだろう 別に理解できないことではないだろうに。(キリッ
今回の場合は仕組みを理解して自分で試せば 最適な方法を教えてください とかわざわざ質問しなくて済むんだぜ? んでもって知りたかったのは最適な方法じゃなくて 一般的な方法でしょ
444 :
デフォルトの名無しさん :2010/08/06(金) 00:20:07
>>443 最初はみんな右も左もわからんだろう
そもそも回答したくなければ何も答えなければいいだろ
無駄レスばっかつけてんじゃねぇよ
うう…誰も答えてくれないお…
>>444 ,446
ちょっと「おかしいプログラム」
の幅が広すぎると思われる。
もうちょっと問題を分割して、おかしい部分を提示すれば、
良いアドバイスが得られるはずだ
>>446 ・241行: g_pEffect9[1]->SetTechnique("tec0");
・g_pTxture[1]はキューブテクスチャにする
・332行: for(int i=1;i>=0;--i)
これでそれっぽい絵が表示されたが。これでOKか?
あと1万回ぐらいここで書いてるけど、
DXのコンパネからD3D9のデバッグランタイムを有効にして
アウトプットをみろ。他にもバグっぽい表示は出ているぞ。
>>448 うおおおおおできました
ありがとうございました!
コントロールパネルも見つけました。vistaはスタート→コントロールパネルに出ないらしいのでなかなか見つけられませんでした。使ってみます
なぜfor(int i=1;i>=0;--i)にすると両方表示されるのでしょうか?
変数もそれぞれ独立しているのでお互いに影響しないと思っていたのですが
>>449 それはskybox01.fxがZEnableをfalseにしているからだ。
有効にすれば降順にしなくても表示される。
スカイボックスの用途からすると、Z参照は無効にして、
まずスカイボックスから表示が正しいだろう。
1万回も書いてたら完全に荒らしレベル
>>446 早く回答が欲しかったのなら、回答側が簡単にファイル落とせるように配慮ぐらいしろよ。
ん?普通に落とせたが?
>>454 そう?俺リトライばっかで途中でやめたけど。
昼間は混んでないから、普通に落とせるけど、
>>444 の時間帯じゃリトライ多くてね…
>>455 お前何様なんだよw
自分を勘違いしすぎじゃねーの
今やってみたけど80回リトライ押してギブアップ。 途中からちょっとムキになったが無理だった..
たとえるなら、 初心者にウサギ跳びをさせ、膝を壊した奴はそもそも天才選手じゃないと捨て、千尋の谷から這い上がった天才を育てるようなもの。 天才でない者の末路は、エロゲ会社で腕を鈍らせるか、同人しながら派遣PG&自殺しかない。
もう少しマシなアップローダを使った方がいいのは確かだ。
「千尋の谷」ってこういう漢字書くんだ知らなかった 千仞だと思ってた
おれは万丈って楽器のバンジョーのことだと思ってたぜ
俺は楽器のプロだぜ
いい加減回答側の上から目線にはうんざりだな 傲慢もいいとこだ まあプログラマの3大美徳には入っているが、 ここの傲慢とは意味が違うがな
質問する側がちゃんと質問できてればそうはならんと思う ちょっと煽るくらいで情報引き出さないと想定できる問題点が多すぎて回答できないとかどうなのよ? 質問者は 素人判断で問題点を想像してそれを根拠に質問するな 大本の判断材料からすでに間違ってることが多すぎる 素直に最終的にやりたい事と現状どうなってるかを明確書け
それが書ける奴なら質問しねーよバーカ
>>465 質問者は、とりあえず
挙げた内容でわかる範囲の答えが欲しいだけ。
それで望む答えが得られなけば、掘り下げて
質問を続ける。または打ち切る。
いたって普通の2chの使い方じゃねーの。
池沼なんだろ。 無視しとけ
誰と戦ってるんだ?
AxfcでDLしてる連中と
なんか変なのがわいてるな DirectXにスプライトはない厨のカスが帰ってきたかな?
DirectX11に移行すれば諸々の問題は解決するよ。 あらゆるものが自分で用意しない限りないんだから。
どっちにしろマイクロソフトの手の内で踊らされてるだけだし GPUの進歩の方が早いし必死にDirectXの機能理解しても無駄
477 :
デフォルトの名無しさん :2010/08/08(日) 17:41:53
DirectX9時代にD3DXにべったり頼り切っていた人間は、永遠に11に行くのは無理な状況。 MSが初心者お断りをしているとしか思えない。
んなことない
いや、D3DXが初心者レベルに使えるならDirectX11なんて1年も勉強すれば余裕でできる。1年もかからん 全然初心者向けレベルだよ。つか、マイクロソフトにはそうである必要がある ま、猿の脳みそで苦労するのはDirectXだけじゃないからね
DirectX11は色々改善されているおかげでDirectX9世代のハードでも、 DirectX9から使うより遙かに高速動作するのが利点。 全然違うんで驚いた。
俺は478が何を言ってるのか分からない。 D3D11でD3DXが使えないとでも思っているのかね?
とりあえず 使える、使えないものを挙げてみたら?
>>482 少なくともヘルプぐらいは確認しようぜ。
確かにD3DXは残っているが、何が残っているのかよく見てみろ。
11になってより自然な仕様になってるのに 移行できないのはD3DXに頼ってたからじゃなくてセンスが無いだけ
人による
俺のソフトは大きくD3D9の仕様に依存してるから おいそれとは移行出来ない。 例えば、マルチパスのHDRとか、デファードレンダリングとか。 D3D11で動くかもしれんがベストな実装方法じゃなくなってるし。
ハードが無い
>>484 D3DX11の定義が少ないのは、D3DX9のまま使えるのが再定義されてないだけ。
数学系関数なんかは互換性があるから、D3DX9のを使える。
なんだまだ完成途中のものを世に送り出していたのか 後三年は様子を見た方がよさそうだな
数学系はD3DXよりXNA Math Libraryの方が 2割ほど性能が良い。こっち使った方がいい。
2割どころか行列の乗算をぐるぐる回したら20倍近く速くなったぞ。
どうせ同じルーチン回したとき「のみ」速いようにできてんだろw
>>490 ID3DXSpriteとかID3DXFontなんかの、ぶっちゃけどうでもいい機能は使えないけどね。
文字列とか描画早い?
>>494 SSEのレジスタがインラインで使い回されるからね。
組み方次第で差が出るよ。
>>496 フォントはDirectWrite
Direct3D単独でやるなら自分でテクスチャに書き込むなり白
なんで自分のレスにレスつけてる人がいるの?
>>494 >>493 がコンパイラの最適化によってそうなってるって意味ならそうだろうなw
ただ、20倍はそうそう無いだろうけどインライン化されやすいこととSSEの効果を考えたら
D3DXと同等かそれ以下なんて有り得ない。
というか今までD3DXの数学周りが初心者向け過ぎた。
初心者向け過ぎ?具体的にどうぞ。
505 :
デフォルトの名無しさん :2010/08/09(月) 07:30:45
Xファイルが廃止されたのに後継の標準フォーマットがないとか サンプル見たらなんか変なユーティリティクラス作ってサンプル間で使いまわしてて そんなもん作らないといけないならそれをSDKの中に入れとけよと言いたくなることとか 付属のヘルプが9,10,11全部一つになってるのだが、検索で見つかった奴の「場所」っていうのが 全部「Windows DirectX Graphics」になってて開いてみるまでどのバージョン向けかわからないとか ずいぶん初心者に優しい作りになってるよね。 TWIN TAIL LOVERS.(仮)ってサイト見るまでポリゴンの一つも満足に表示できなかったよ。
怖すぎ VisualStudioも最近センス悪いからなぁ str系の関数全部警告だしたりw こんなところで深刻なバグ出したことねぇよ マニフェストとかもセンス悪い ボタン一発で他で動く.exeができるのが魅力だったのに
SDKのサンプルってかなり良いコードなんですか? それとも無駄な処理が多いんですか?
気になるなら自分で確認すれば?
プロから見てどういう評価なのか教えてください
サンプルに良いも悪いも無い
ふーん
>>506 警告も切れるし、マニフェストも使わなければいい。
初期状態でそうしたいのならカスタムテンプレートを作ればいい。
きちんとカスタマイズできるように作られているのに、
くだらない愚痴をたれる意味が分からない。
サンプルはあくまでサンプルなのに、実際にコーディングする時にも、 サンプルと同じ流れで組んでしまう人間には害悪にしかならない。 そして自分でものを考えずに評価すら他人に頼る人間には、 何もかもが害にしかならない。
へ?
___ モシャモシャ / \ / ⌒ ⌒ \ / (●) (●) \ なに言ってんだろ こいつ | 、" ゙)(__人__)" .)| ___________ \ 。` ⌒゚:j? ,/ j゙~~| | | | __/ \ |__| | | | | | / , \n|| | | | | | / / r. ( こ) | | | | | | ⌒ ーnnn |\ (?ソ .|_|___________|  ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
何このスレ
DirectX9使ってたんだけどDirectX11に移行した方が良いのかなあ? でも移行すると作ったプログラムはXPとかで動かないし・・・
要はDx11はいろいろめんどいということとXファイルみたいなモンを自分で用意できないやつには 無理ってのはわかった
12になれば簡単に使えるフォーマットや関数が出てくるだろ。 それの繰り返しだよ
心配しなくても今勉強するところから始めたら、 完成するのはXPの公式サポートが切れた後だろう。
サポートが切れる頃にはまた新しい物が出てる気がするなあ
>>519 D3D11が今のところ初心者に優しくないというのは同意だけど、X形式ってスキニングやアニメーションには
適してなかったからね。
四元数を格納出来ない=スキニングで関節がつぶれるわ、アニメーションでSlerpとか一切使えないわ、
大昔の固定機能パイプラインにあった行列パレットを使うってんならまだしも、
スキニングやアニメーションに手を出した瞬間X形式は使い物にならない。
(四元数格納出来ないってのが間違ってたらスマソ)
商用だろうと個人だろうと、どうせ自前形式を実装するはめになるんだから、X形式をD3DX10〜11で切ったのは
DirectX開発チームの英断だと思うけどねぇ。
現状に即した新しい形式が出てもいいとは思うけどね。
まあでもそういうのに困ってる人は自己形式にしちゃうから問題ないけどね しかしその自己形式もあれもこれもと弄ったらよくわからないことになって Xファイルでイイよもう!ってなったことはあったけど
うん、間違ってるね
あぁほんとだ、格納できるのか・・・・ SkinnedMeshサンプルのXファイルに無いから出来ないものと思い込んでた
なんだーかんだーいって動けば何でもイイと思うのは変かなあ そこまでいろいろ考えてやったことない というかみんなDirectXを何に使ってんだ? そんな極めなきゃいけないことあったっけ?
俺がそもそも四元数を知ったのが、D3DRMのXファイルだったような希ガス
馬鹿だから自分はDirectX11が理解できる(キッ俺は偉い(キッ ってこういう勘違いしたい奴が必死に玄人気取ってるだけだろ。
>ってこういう勘違いしたい奴が必死に玄人気取ってる”だけだろ。” 何がそんなに気に食わないんだw
そもそも此処は質問スレであって雑談スレじゃないから
DirectX9でOnCreateDeviceやOnResetDeviceがどういう機能なのか詳しくわかってないんですけど 裸があってそこから服や帽子や武器を付けていくときにその都度ファイルを読み込んだ方が良いのですか? それともファイルは最初に全部読み込んでおいてバッファ的なところに溜め込んでおいて表示だけしないというような感じなのでしょうか?
>>533 g_pD3DDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_POINT );
g_pD3DDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT );
g_pD3DDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
>>534 直りました。
ありがとうございました。
>>532 多分SimpleProjectとかそういうやつの話だと思うけど、別にファイルの読み込みはイベントハンドラ内でなくとも
作るゲームの都合で好きなときにやればいい(デバイスが存在する時であれば)。
OnResetDeviceはデバイスロストでぐぐれば幸せになれるかと。
それもD3DPOOL_MANAGEDやSYSTEMMEMで作ったリソースには関係無いけどね。
DrawPrimitiveでデバッグ時のラインを表示したいんですけど カメラの位置からカメラの視点まで線を引くときって頂点リストにどういう点を入れれば良いですか? 描画はシェーダです
>カメラの位置からカメラの視点まで線 よく考えろ。 ディスプレイの真ん中に点を表示して何をするつもりだ?
せやな
ローポリゲー作りたいんですけどDirectX11に移行する意味ありますか?
意味はあるし無いともいえる。
ゲームの快適さだったらどうですか? しかも物理エンジン使ってるのですが使えるのですか?
XPを視野に入れないのであれば ローポリゲーだろうが2Dゲーだろうが恩恵はある
>ゲームの快適さだったらどうですか? 実装次第としか言いようがない。 >しかも物理エンジン使ってるのですが使えるのですか? 具体的に何かも分からないのに、他人が答えられるわけがないという判断は出来ないの? それと「しかも」はどこにかかってるの?
うわ、うざコイツ
論点と全然関係ないところで揚げ足を取りにかかるのはム板マ板ではよくあること プログラマの性なんだろうな
どうしてプログラマはそういう性格になる必要があるの?
そもそも論点自体が存在しない。
SDKのサンプルのBasicHLSL11でDirectX9と11のFPSの比較が出来るらしいのでやってみたら、 DirectX11の方が1.8倍ぐらいFPSが上だった。
Direct3D9は贅肉の塊
9世代のビデオカードの方が、11を利用した場合のパフォーマンス向上が大きくなるのは皮肉だよな。
えっ
dx11って9世代と10世代のVGA使っててもエミュレーションするんじゃないっけ?
>>554 エミュじゃねえよ。
適当なことを言う前に、最低限チュートリアルぐらいは動かせ。
>>552 それって9とか11とか関係無しに単にGPUの性能の差じゃ?
GeFoで言うとGTX480でもない限り
現行の400シリーズの性能は9世代のハイエンドクラスに及ばないぞ
10、11世代のビデオカードでDirect3D9と11を使った場合の性能差と、 9世代のビデオカードでDirect3D9と11を使った場合の性能差の話。
>>555-556 なるほど。おかしな事いって申し訳ない。
なんかのニュース記事で見た気がしたけんだど、夢だったか・・・。
WARPのことをいっているのならD3D_FEATURE_LEVEL_10_1までやってくれる。 現実的には使い物にはならないけどね。 DirectX9世代のビデオカードを11で動かすなら、 D3D_FEATURE_LEVEL_9_Xを利用することになる。
結局Direct3D9って、無理に固定機能をサポートするせいで、 GPUがその性能の半分も発揮できないんだよね。
はぁ?
11は速度が向上した以上に、複数のターゲットに描画する処理が、 ステートの切り替えを気にせず並行処理出来る点が大きい
>>561 コイツが何を言ってるか誰か説明してくれ。
>>563 こういうのってDirectX9じゃどんなに自分でプログラム組んでもできないの?
D3D9は基本シングルスレッド使用だからなあ 出来ないと思うよ
>>566 デバイスを複数生成すれば出来るが、パフォーマンスが落ちる上にリソースが共有出来なくなるので事実上無理。
568 :
567 :2010/08/10(火) 22:12:12
569 :
567 :2010/08/11(水) 10:52:23
>>564 固定機能の遺物の複雑なステートのせいで、パフォーマンスが発揮できないんだよ。
なんでそんなに必死なの?
?
画像をy軸で反転させて表示したいのですがmat2の初期化の辺をもっとシンプルにする方法はありますか? D3DXMATRIX mat, mat1,mat2; mat2._11=1; mat2._12=0; mat2._13=0; mat2._14=0; mat2._21=0; mat2._22=-1; mat2._23=0; mat2._24=0; mat2._31=0; mat2._32=0; mat2._33=1; mat2._34=0; mat2._41=0; mat2._42=0; mat2._43=0; mat2._44=1; D3DXMatrixTranslation(&mat1, 327, 81, 0); mat = mat2 * mat1; g_pD3DXSprite->SetTransform(&mat); g_pD3DXSprite->Begin(D3DXSPRITE_ALPHABLEND | D3DXSPRITE_DONOTSAVESTATE); g_pD3DXSprite->Draw(img,NULL,NULL, NULL, 0xffffffff);
matrixidentityして要素一つだけ変える
D3DXMatrixRotationY
D3DXMatrixIdentity
D3DXMatrixScalingでY軸のスケールを-1でいいんじゃない?
移動が前提なら D3DXMatrixTranslation(&mat, 327, 81, 0); mat._22=-1; でいいやん
578 :
572 :2010/08/11(水) 23:12:22
今DirextX SDK August 2009 で開発してるのですが、 このSDKが入っていないPCで動作テストをしたところ d3dx9d_40.dllが見つかりませんというエラーが出ます。 で、directx end-user runtimesとかを入れたりしてみたのですが d3dx9d_40.dllは入っておらず、結局上記のSDKを入れることでしか解決できませんでした。 これだと起動できないPCはあの重いSDKをダウンロードしなきゃならないハメになるのですが 何か設定とか間違えてるんですかね・・・
redistで
俺と一緒に2004oct使おうぜ
>>579 ってよく見たらデバッグバージョンじゃねーか
デバッグビルドは配布できないし、SDK無いと動かないのは当たり前
ライセンス的には、Redist配下の、 以下に書いてあるものとプラスして必要なcabを含めて配布すればいい。 >The following files in the above directory must be included in any distribution of >the DirectX Runtime. > >DSetup32.dll >DSetup.dll >DXSetup.exe >DXupdate.cab >dxdllreg_x86.cab
584 :
579 :2010/08/12(木) 11:34:01
申し訳ない、registというのをよく知らないもんで やはり別のSDKに移し替えるというのが無難なんでしょうか
だから、Releaseビルドにしろよ
何も書いてないけど、環境は? もしかしてVisualStudioのExpressEditionとかだったら ツールのオプションのプロジェクトおよびソリューションの全般から ビルド構成の詳細を表示にチェック入れてDebug→Releaseに替えてビルド
ってC#とかでなけりゃ設定しなくても切り替えできる気がするけど、一応ね。
588 :
579 :2010/08/12(木) 12:22:30
試してみましたがやはりd3dx9d_40.dllが見つからないと吐かれます・・・
>>586 環境はそれで言語はC++です
>>588 ビルドした後できるEXEの場所は変わるぞ?
DebugディレクトリのとこにReleaseディレクトリができてるはずだが
そこのEXEを動かしたか?
リリースビルド云々じゃなく、リンカのライブラリの指定が違うだけ。
#if defined(DEBUG) || defined(_DEBUG) #pragma comment( lib, "d3dx9d.lib" ) #else #pragma comment( lib, "d3dx9.lib" ) #endif
とにかく、d3dx9d_40.dllの9の後ろのdがデバッグ用の意味で これはsdkにしか入ってない。これ直さない限りどのSDK使っても同じ
2004dec以前ならd3dxのdllいらないんじゃなかったっけ
それ以前は静的ライブラリだったから必要ないけど 一部のライブラリにバグがあるから知らずに使うのは危険 解かってて使うならまったく問題ない EXEのサイズが大きくなるくらいか
まあライブラリ指定だけならいいけど、DebugからReleaseにしろと言って もうしてますと返ってこなかったとこみるとDebugビルドだったんじゃないの? それだとSDKが解決しても今度はVC++インストールしてないと動かないと 言ってきそうな気がするw
596 :
579 :2010/08/12(木) 13:35:00
なんかリンカのd3dx9d.libを消したら普通に起動できてしまったが果たしてこれでいいのだろうか・・・
>>589 やり方が違うのかわかりませんが
こっちだとリリースビルドしても独立したReleaceフォルダが生成されます。
>>595 ちゃんとリリースにしてますよ。
リンカの入力にd3dx9d.libって入れてたんだな? でそれはDebug、Release別々に設定できるのに、 わざわざ全ての設定に入れてたということだな 消してもビルドできるならヘッダのどこかでpragma指定で入ってんだろうけど そこにd3dx9d.libと入れるよう指示したのはだれよ?
598 :
579 :2010/08/12(木) 14:22:01
ダメだこいつ・・・早く何とかしないと
sptiteのDraw関数でPNG画像を表示しているのですが PNGファイルの透過を使っていない画像を表示した時、 40×40の画像だったら64×64の余った部分が黒く表示されてしまいます。 *pSrcRectを指定する以外の解決する方法はありませんか?
>>600 40x40以外の部分を透明色にしとけばいいじゃん
そうじゃなくて40x40の画像からテクスチャをつくってるのに64x64で表示されてしまうってこと?
あと「*pSrcRectを指定」がNGな理由を完結に
602 :
600 :2010/08/12(木) 20:42:46
>>601 後者の40×40の画像なのに表示は64×64ってことです。
PNGファイルで透過色を一色でも指定してあったら黒い部分は何故か消えます。
*pSrcRectを使うと画像のサイズ情報を入力しないとで不便なので
できれば使わずに表示したいと思ってます。
2の乗数の大きさしか受け付けないビデオカードなんじゃねーの?
>>602 D3DXCreateTextureFromFileじゃなくて
D3DXCreateTextureFromFileExでサイズを40x40でテクスチャ作ったら直らない?
605 :
600 :2010/08/12(木) 21:26:25
>>604 ファイルではなくリソースから読み込んでいるので
D3DXCreateTextureFromFileInMemoryExを使ってますが、
WidthとHeightを指定しても無理でした。
カラーキーを黒に指定すれば
>*pSrcRectを使うと画像のサイズ情報を入力しないとで不便なので この前提が間違っている。 まさか手動で入力しないといけないとか思っているとかいうことはないよな?
>>605 うちの環境じゃ再現されないんだよね
D3DXCreateTextureFromFileやExでサイズ指定無しでテクスチャを作成した場合
2の累乗でテクスチャが作成されるのは仕様なんだけど
サイズを指定してもダメなのは
>>603 の言うとおりビデオカードの問題もあるかもしれない
サイズ指定でテクスチャを作った後
D3DSURFACE_DESC desc ;
テクスチャ->GetLevelDesc(0, &desc ) ;
でdescの中身を確認してテクスチャが本当に指定したサイズで作成されてるか確かめて見て
609 :
600 :2010/08/12(木) 22:04:10
ミニマップレベルが8だったのを1にしたら指定したサイズで
テクスチャが作成されるようになりました。
レスくれた方ありがとうございました。
>>607 この前自動で入力しよう思って調べたけど良くわかりませんでした。
もしスレ違いでなかったら教えて頂けませんか。
>>609 D3DXCreateTextureFromFileInMemoryExのヘルプをよく確認しろ。
分からないんじゃなくて確認を怠っているだけだ。
誰か壁ずりのサンプルコードくれ
>>611 お前は 3D 壁ずり でググることもできないの?クズなの?
ついでにDirectX関係ねーしそれ
スルースキル磨こうぜ
>>611 俺も探したがなかった。
適当に法線方向に戻す
壁ズリはやったことないが床ズリなら幼稚園の頃からやってるから 何かアドバイスできるかもしれない
>>615 床ズリって発射するときどうすんの?
ちんこにあらかじめティッシュかぶせとくの?
あらかじめ下にティッシュ3枚を敷いておく 慣れないうちは目標を外して悲しいことになるんで注意だ
ウザイ
話を戻そうか で、キャラを中心にカメラを回転させる方法についてだが
すみませんが質問です。DirectX9c SDKで開発しています。
初歩的な質問かもしれませんが、DirectXを使って描画しているウィンドウの
クライアント領域(描画領域)が画面上から完全に見えなくなったとき
@他ウィンドウでDirectXで描画を行っているウィンドウの描画領域を覆い隠す
AタスクバーでDirectXで描画を行っているウィンドウの描画領域を覆い隠す
BDirectXで描画を行っているウィンドウの最小化ボタンを押してウィンドウを最小化
(DirectXで描画を行っているウィンドウの描画領域が画面上から無くなる)
などの場合にCPU使用率が100%に張り付いてしまいます。
↓図説です。
http://jishinkuma.aa0.netvolante.jp/etc/cpu_full.PNG このCPU使用率の100%張り付きの正しい対処法はございますでしょうか。
ご存知の人がいらっしゃれば、教えてくださらないでしょうか。
よろしくお願いします。
アイドルループでSleep(0)入れてみては
それ以前にメインループをどこに置いてるの? WM_PAINTとかに置いてないよね?
625 :
622 :2010/08/16(月) 14:48:19
>>623 ご指摘ありがとうございます。
Sleepに0を指定するテクニックを初めて知りました。
>>624 レスありがとうございます。
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
DrawSprite(); ← ★メインループはここに置いています
}
}
WM_PAINTには置いていません。
626 :
622 :2010/08/16(月) 15:05:27
// 垂直帰線間隔を待つ g_d3dpp_window.PresentationInterval = D3DPRESENT_INTERVAL_ONE; を指定した場合、 g_Direct3DDevice->Present(NULL,NULL,NULL,NULL); 関数の中で垂直帰線間隔を待っているのかな? それとも、Present関数からすぐに戻ってくるけど転送はしないのかな? 以下方法でCPU使用率100%張り付きが解消するか確認してみます。 メインループ { MyTime1 = timeGetTime(); Draw(); //描画 MyTime2 = timeGetTime(); Sleep(15 - ( MyTime2 - MyTime1 ) ); Present(); //転送 } 他にもっとよい方法があれば、ご教示よろしくお願いします。
なんか while( msg.message!=WM_QUIT ) がめちゃくちゃ臭いんだけど WM_QUITのチェックは PeekMessageの後にやったほうがいいんじゃないの?
628 :
622 :2010/08/16(月) 17:00:51
>>627 ご指摘ありがとうございます。
しかし、以下のように書いても結果は同じでした。
do
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// アイドル処理
if (!AppIdle())
{
// エラーがある場合,アプリケーションを終了する
DestroyWindow(g_hwnd);
}
}
} while (msg.message != WM_QUIT);
質問の件とWM_QUITの話は別でしょ こうすべきって話じゃ? if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break ;
でさ、AppIdleの中で処理する必要が無い時はそのままリターンしてたりしてない? そういう時に、Sleep(0)するんだよ。
要はウィンドウが非アクティブのとき全力でループを回しにいってるってことでしょ? どっかにカレントウィンドウじゃないときは描画(Present)しないって処理がはいってんじゃないの?
こう言うどうでもいいとことで躓くくらいなら ウィンドウ生成と初期化だけでもDXUT使えばいいのに
633 :
622 :2010/08/16(月) 18:56:19
>>629 話の切り分けありがとうございます。
(不覚にも
>>627 やったら問題解決するかとオモタ)
>>630 作法のご指導ありがとうございます。
処理しています。
>処理する必要が無い時
Presentもしています。
>>631 CPU使用率が100%に張り付く条件
>>622 の@の時にデバッガで止めて、
Presentを処理しているにも関わらず、
CPU使用率が100%に張り付くことを確認しました。
>>626 の方法で100%に張り付かなくなったけど、
描画領域が表示されているときはCPU使用率5%
描画領域が表示されていないときはCPU使用率30%となり
気持ち悪い状態です。
>>632 DXUTって何でしょうか。
具体的に実装に必要な関数名を教えていただければ助かります。
634 :
622 :2010/08/16(月) 19:16:32
>>632 すみません。
ググれカス状態でした。
ググッたら出てきました。
DXUTCreateWindow
後日試してみます。
sleepで戻ってくる精度が悪いから、 626のようなものはまずいと思われる 基本的にループではアイドリングのみのほうが良さそう ループの中で、 if(今の時間 - BeforeFlameTime < 16/*1フレームの時間*/){ BeforeFlameTime = 今の時間; Render(); } sleep(0);//Sleep(1)でもいいかも とかやってフレームレートを固定してみたらどうだろう 1000 / 60 = 16.666666だから上のだとずれるけど
636 :
622 :2010/08/16(月) 22:05:54
>>635 具体例をありがとうございます。
色々サイトを調べてみましたが
@timeGetTime()(timeBeginPeriod()で精度を上げる)
ASleep(0)
の組み合わせで制御したいと思います。
Sleep(1)は精度が悪く10msもスリープするらしいので使えません。
Sleep(0)で5μs程スリープするそうです。
timeGetTimeの精度が1msではないマシンは見捨てることにします
数日間プログラミングから離れるので報告は遅くなると思います。
色々参考になる意見を出していただきありがとうございました。
てか
>>625 ってSDKのチュートリアルと一緒じゃん?
チュートリアルそのままでのその現象は起きるわけ?
起きないんだったら自分で弄った設定を見比べれば自ずと原因が分かるはず
起きるんだったらハードとかドライバとかOSとの相性とかから見直す必要があるんじゃ
未だに昔のAppWizardで出来るCD3DApplication使ってる人いる? DXUT使うかCD3DApplication使うか悩む。
639 :
638 :2010/08/17(火) 01:07:44
ていうか、DXUTってC言語っぽいっていうか、構造化プログラミングって感じがする。 CD3DApplicationの頃のほうがオブジェクト指向!って感じで、洗練されているような 気がするんだけど、どう思う? CD3DApplicationはt-potさんの9.0系ののサンプルでみれる。 俺はDirectXに関してにわかなので、ほかの人の感想聞きたい。
自分のフレームワークに落とし込みやすいんだよ 俺はDirectXに関してはSDKをダウンロードしたことすらないがな
DirectX9、Jun2010で質問があります 他のOSでは問題なく動作していてるコードなのですが、windows7の64bitでLockRectを使用した場合にのみ たまにLockRectを呼んだときにエラーも返って来ないまま動作が停止してしまいます。 何か対処法みたいのってありますでしょうか?
リンクするライブラリをx86じゃなくてx64にするとか
x86とx64のlibが混在なんて、そんなのリンク通るのか?
140MのAVIってもうちょっとなんとかならなかったのかよ・・・ 荒すぎてよく見えないけどモーション間の補完になにか問題あるんじゃないの? 補完してるならモーション補完切ってどうなるか試して見たら 補完してないならプログラムかファイルに問題あるんだろうけど動画からは判断できない モデルファイルが自分しか読めない独自ファイルじゃないならそれをうp
独自ファイルです
じゃあ独自ファイルに変換するコンバーターが糞なんじゃね?
なんか触っちゃいけない臭いがするぞ わざわざ動画にしてくるあたり そのうちパクられるのが嫌なのでソースは出したくないファイルも出したくないって言い出しそうな空気
勘違いしてました できましたありがとうございました
ポカーン
>>648 つーか君には大切なソースってもんが無いの?
こんなバカしかいないゴミ捨て場みたいな
ところに大切なソースを晒すなんて
俺だったら無理
652 :
デフォルトの名無しさん :2010/08/19(木) 23:20:56
いつのまにか犯罪に使われてて共犯者にされたらたまったもんじゃないしな
大切なソース(キリッ)だっておバンバン
お前の頭の中からそんな大切なものが出てくるとは思えんが
怨念のこもったコードほど、愛着わいて出したくなくなる法則。
前いた会社からパクッった何かが含まれてるから
大切なソース(笑)
どんだけ自意識過剰なんだよって 超画期的なシステム組んでるわけでもない 既存のありふれた手法さえまともに動かせないくせに
ソースビーム
審議中..........
見てるかわからんし余計なお世話かもしれんが、 windowsなら付属のムービーメーカーででも圧縮すれば 140MのAVIもせいぜい数十メガ程度にできるからそれを推奨だ
そんな頭があったらこんな質問するわけないじゃん
XPのDirectInputでキーボードのキーが、離しても押したままになるという バグは何が原因でしょうか? ノートPCでもデスクトップPCでも、PS/2キーボードでもUSBキーボードでも 起きましたので特定のハードウェアが悪いというわけではなさそうですし
それはDirectInputが悪いんじゃなくて 取得したキー情報の扱いの方に問題があるんじゃないか?
>>665 BeginPass()とEndPass()
の中でパラメータでデータをセットしたら
ID3DXEffect::CommitChanges
しないと反映されないですぜ
といっても普通diffuseは頂点シェーダからピクセルシェーダへ出力
するのが普通じゃないか?
うわー・・・指摘されたとおりにしたらうまくいった あんなに悩んでたのがアホのようだ・・・ ありがとうございました
668 :
666 :2010/08/21(土) 23:52:04
普通〜って間違って書いたがぜんぜんそうじゃないな 下の文は以下スルーでたのむー
動画処理プログラムを初めて作成している超初心者です。
よろしくお願いします。
DirectX SDK(November 2008)とPlatform SDK(2003 SPI1)を使ってプログラムを作成しているのですが、ヘッダーファイルを
#include <windows.h>
#include <string.h>
#include <dshow.h>
#include <qedit.h>
#include <conio.h>
#include <stdio.h>
の順番でインクルードした場合、qedit.hでdxtrans.hが存在しないエラーが発生したので、以下のページを参考にdxtrans.hをコメントアウトしました。
ttp://d.hatena.ne.jp/denpafreak/20080117/1200666936 しかしまだ
c:\program files\microsoft directx sdk (november 2008)\extras\directshow\include\mmstream.h(99) : error C2065: 'DWORD_PTR' : 定義されていない識別子です。
c:\program files\microsoft directx sdk (november 2008)\extras\directshow\include\mmstream.h(668) : error C2061: 構文エラー : 識別子 'DWORD_PTR' がシンタックスエラーを起こしました。
などのエラーが9個出てきます。
ttp://questionbox.jp.msn.com/qa1813598.html ttp://homepage3.nifty.com/k-takata/diary/2005-05.html などのページを参考にしたのですが、解決しません。
何が原因か検討がつきません。
ご教授お願いします。
includeフォルダの extras\directshow\includeの優先順位を PlatformSDKの優先順位より下げて見たら? てか、2003だとDirectShowはPlatformSDKに入ってないの? ウチの環境(WindowsSDK6.0&7.0)だと dxtrans.hが無いとは言われるけどそこを直せばDWORD_PTR関連のエラーは出ないぞ
現在、インクルードファイルの順番は、 1.VisualStudio関係 2.DirectX SDK(November 2008)\Include 3.Platform SDK\Include 4.DirectX SDK(November 2008)\Extras\Include にしていますが、669のようなエラーがでます。 今、検索してみたらPlatform内にもDirectShowがありました。 ですが、Platform内のDirectShowにはIncludeディレクトリはないのですがどうやってリンクするのですか? 見当違いな質問ならすいません。
>>671 とりあえず4番を消せばいいんじゃないかな
673 :
669 :2010/08/22(日) 14:57:07
だめでした…
3の優先順位を上げる
675 :
669 :2010/08/22(日) 15:11:47
IncludeとLibディレクトリを 1.Platform SDK 2.DirectX SDK(November 2008) 3.VisualStudio関係 の順番にしたところ、669のエラーはすべて消えました。 ありがとうございます。 次は、 fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください というエラーになりました… 続けざまにすいません。
リビルドしろ
677 :
669 :2010/08/22(日) 15:18:03
リビルドしても同様です。 strmiids.lib(strmiids.obj)でエラーになっています。
ランタイムライブラリが一致してないとか VisualStudioのバージョン間の互換問題と思われ 特に理由がないなら2003じゃなくて新しくしたら? そしてそろそろスレ違い
679 :
669 :2010/08/22(日) 15:54:20
わかりました。 ありがとうございます。 Releaseでコンパイル通ったので、とりあえずは良しとしてもっと勉強します。
リビルドうまくいかないときはクリーンしてからリビルドするといけるときがある
エラーチェックの質問です HRESULT hr = D3DXLoadMeshFromX(...); if(FAILED(hr)){ assert(0 && "D3DXLoadMeshFromX"); } などエラーチェックを書くのが良いと思うのですが、 HRESULT の戻り値を持つ関数が非常に多いのでどこまで付けたほうがよいのか? と疑問に思いました 考えられる案としては、 1、何かを生成する関数の時だけチェックする 2、生成の時に加え描画もチェックする 3、すべてのHRESULTはチェックすべき 4、どの関数を使うかによるから答えは無い 経験で養え! よろしくお願いします
3
MSのサンプルにあるみたいにマクロで囲ったりするとそれほど面倒でもないよ 俺はMSのサンプルみたいに更にHRESULTで返すのがいやだから例外に変換してるけど
なるほど〜ありがとうございました
将来原因不明のバグが出たときに嫌でも全部チェックするハメになる
個人的にやたらきっついバグにあたったので書き込んでおく D3DXQUATERNION qA, qB, qC; D3DXQuaternionSquadSetup( &qA,&qB,&qC,&mQua[key.index[0]],&mQua[key.index[1]],&mQua[key.index[2]],&mQua[key.index[3]]); D3DXQuaternionSquad(&q,&mQua[key.index[1]],&qA,&qB,&qC,time); ↑このコード正常に動かないっしょ? やたらジンバルロックを連想させるようなぶっとびかたしてくれる かわりに D3DXVec4CatmullRomで代用しておいた
後、やばかったのが、DirectXViewerがバグってやがる・・・ DirectXViewerでの確認は役に立たない 一体どういう風に組んでるのか知らんけど 普通に動くはずのものが崩れて表示される・・・ときがあるw(←ココ重要w)
なんで崩れるのかはソース見れば一目瞭然、バグというか手抜きというか せっかく全ソースが付いてるので直して使ってる まぁ、ただの確認用なら昔のSDKについてきたmeshviewを使ったほうが便利なんだけど
みんなアルファ物のソートってどうしてる? ボーン入った物体とかもやってる? また、プログラムで勝手にアルファ物判定ってできないよね? 具体的にはテクスチャのアルファとマテリアルのアルファの話なんだけど・・・ これってデザイナにこのモデルはアルファ物ですって指定してもらったほうがいいよね?
アルファテストとオクルージョンクエリでできるんじゃね 出来たとしても事前処理のが圧倒的に効率いいからやらんけど
HLSLそろそろやろうと思ってるんですが、コンパイラとしてnVIDIA Composerをインストールしたんですが エラーが出て起動できません。 pythonとか入れないと駄目なんでしょうか? また、ほかに良いコンパイラがあれば教えてください。
御自分のプログラムでHLSL試せばよござんしょ
>>691 RenderMonkeyというのもあるそうだ
しかしまあ入門するのにはなくても十分だし、
普通にC++側でコンパイルするのが良いと思われる
>>692-693 なくても大丈夫ですかね。わかりました。頑張ります。
ありがとうございました。
シェーダーを使って描画しようとした場合、 DrawPrimitiveUPって使えないのでしょうか? 頂点バッファを使うDrawPrimitiveじゃないと駄目なんでしょうか?
>>695 なぜ使えないと思ったのかよく分からないがもちろん使える
>>696 ありがとうございます。
具体的にSetTextureとDrawPrimitiveUPはどこで呼び出せばいいのでしょうか。
ID3DXEFFECTインターフェースのBeginpassメソッドの後にDrawPrimitiveUPを
呼び出せばいいのでしょうか。
SetTextureはこのBeginPassメソッドよりも先に呼び出すのか後に呼び出すのか
どちらでしょうか?
参考になります。ありがとうございます。 しかし、皆さんレベル高いですねー
モデルのアニメーションについて質問させてください。 DrawPrimitiveでモデルを描画する方法で、アニメーションさせようとしたら頂点一個ずつにアニメ用の行列を 掛けていくと思うのですが、例えばモデルの中で胴体は固定して腕だけを動かそうとしたら腕に該当する頂点 だけに行列を掛けていけばいいのですか?
胴体と腕は別パーツなの? ワンスキンで考えてるならボーンやスキンメッシュの予備知識はあるの? 上の質問じゃどこから説明して良いのかわからん
胴体と腕は一つのパーツ(DrawPrimitiveの時に一気に送れるようにする為)になっていて例えば、 1〜20番の頂点が胴体で21〜40番の頂点が腕として決めています。 ボーンやスキンメッシュ等の知識は無いです。 ただ、単純に腕の部分だけを動かすにはどうしたらいいのかなと思ったのです。 Xファイルだとアニメ用の命令があるからいいのですが、無しだとどの様にしたらいいのか がわからないのです。
703 :
デフォルトの名無しさん :2010/09/07(火) 17:10:51
基本的な質問なのですが、 Xbox360ではA2R10FG10FB10Fの32bitフォーマットが定義されていると聞きます。 (10Fのうち、仮数部が7bit、指数部が3bit) DirectX上で利用可能なピクセルフォーマットで近いものといえば A2R10G10B10が考えられますが、10bitは整数値となります。 そういった認識でよろしいでしょうか? 上位互換としてはA16B16G16R16Fが考えられますが、 この場合は帯域が2倍必要ですよね。
>>702 頂点データにフレーム番号を設定して切り替える。
つまりスキンメッシュの変形版で出来る。
>>700 もしかしてこんなこと聞いてる?
だったら腕を動かすボーンだけ動かせばいいのでは?
_ ∩
( ゚∀゚)彡 おっぱい!おっぱい!
( ⊂彡
| |
し ⌒J
AnimationSet「おっぱい」の腕のボーンのAnimation行列だけ
( ゚∀゚) ちんちん! ちんちん!
( )
| 彡つ
し∪J
AnimationSet「ちんちん」のチンコのボーンのAnimation行列だけ
おっぱい ( ゚д゚) ちんちん
\/| y |\/
これがどういうことか、後はわかるな?
>>705 >これがどういうことか、後はわかるな?
_
( ゚∀゚)x"⌒''ヽ、 <こうですか?わかりません!
(| ...:: Y-.、
| イ、 ! :ヽ
U U `ー=i;;::.. .:ト、
ゝ;;::ヽ :`i
>゙::. .,)
/:::. /;ノ
ゞヽ、ゝヽ、_/:: /
`ヾミ :: :. ゙ _/
`ー--‐''゙~
たまーにアニメーションを絶対座標で吐き出すウンコツールの場合は
>>705 はできないので注意な
あくまでアニメーションを親子関係有でもってる場合のみ可
DirectXで球体を一般PCで3億テトラ程度で描こうとしたら何か制約はありますか? ボールベアリングが2億〜3億テトラ程度の精度らしいんですよ。 越えなきゃ!
クマー
>>706 かぁーーーねだぁーーーーーーーーーーーーー!!!!
>>708 DrawPrimitive一発でかける量にひっかかんね?
そっか、一発で引っ掛けないで描画すればいいわけだね! ・・・どのくらいまで、どの程度のFPSで描けるんだろう? ・・・1割るよね? 越える?
>>712 試せばいいじゃないか。
お前は何を言ってるんだ
__(゚∀゚) <テトラペイピッポォ /__  ̄ ̄ ̄\ | | | | ̄\ / (_) (__) (_) テトラペイピッポォに雌は存在しません。 テトラペイピッポォ(雄)はペイピッポォの雌と生殖活動を行います。 このとき生まれてくるのはテトラペイピッポォです。 テトラペイピッポォは主にペイピッポォの雄を捕らえて食べて成長します。
右手座標系で作っていたモーションをDirectX等の左手座標系のソフト向けにコンバートしたいのですが 右手座標系で回転角XYZで表示されていたボーンの形を、左手座標系ではXYZにどの値を打ち込めば同じ形になるかを知る術はありますか?
>>715 googleで「右手 左手 座標系」で検索して
「左手座標系と右手座標系間の変換 - 篤のメモ帳」
ってサイトが上手く解説してたよ
頂点バッファって作ったら、Releaseで解放されるまでVRAMに残ってるってことでおk?
NG
NGなんですか? ではいつVRAMに置かれるのですか?またいつ解放されるのですか?
そもそもVRAMに置かれるとも限らないし、保持される保証もない。
でも頂点バッファを作っていったら、いつか限界が来るんですよね? その限界の容量はVRAMのメモリぐらいしかないんですよね? なので、もし作りすぎたら逐次解放しながら管理しなければいけないのかと 思ったんですが、どうなのでしょう? もし入りきらなかったら、システムメモリに置かれるとかでしょうか?
全然人の話を聞いてないな。
>>721 CreateVertexBufferの時に指定したD3DPOOLフラグによる
D3DPOOL_DEFAULT→ハードによるけど大体VRAM
D3DPOOL_MANAGED→VRAMとシステムメモリの両方(ロスト時やソフトウェア側から変更があった場合システムメモリからVRAMへコピーが行われる)
D3DPOOL_SYSTEMMEM →システムメモリ
D3DPOOLフラグのことはしってたんですけど、D3DPOOL_MANAGEDの場合の時の話 をしてました。 ありがとう。二度と来ません。
725 :
デフォルトの名無しさん :2010/09/12(日) 19:25:57
726 :
5 :2010/09/12(日) 22:00:45
( ;∀;)イイハナシダナー
727 :
726 :2010/09/12(日) 22:02:40
5は完全にミス
枚フレーム頂点の位置が移動する場合 DrawPrimitiveのUPがあるのとないのとどっちがいい?
両方やってみた上で、利便性と速度で妥協点を見いだせばいい。
また来ちゃいました。許して。 お願い。深度バッファについて詳しく教えて。 深度バッファって、既に描画してあるポリゴンと 今から描画するポリゴンとのZ値というものを見比べて、自分の方が小さければ 描画するという仕組みですよね? CreateDepthStencilSurfaceで深度バッファを作るじゃないですか? でもこいつにZ値なんて設定する場所ないんですよ。 どこで設定するんですか? 考え方自体間違ってますか? 間違ってたら、わかるように説明してくれますか?? 一ヶ月以上理解できなくて、いつも深度バッファ使っていなくて、 後ろから順番に描画していってるの疲れたのでお願いします。
では次の方どうぞ
・・・悲しいです・・・お願い・・・
では次の方どうぞ
>>730 Clearするときにz値を指定して全体を初期化する。
ピクセル単位の値は、D3DRS_ZWRITEENABLEがTRUEになっていれば
DrawPrimitiveでポリゴンを描画するときに更新される。
Z値を比較して描画するかしないかは、D3DRS_ZENABLEで設定して
条件はD3DRS_ZFUNCで指定する。
CreateDeviceするときにEnableAutoDepthStencilをTRUEにしておけば
勝手に深度バッファを作ってくれるから、通常は自分でCreateDepthStencilSurfaceを
呼ばなくていい。
EnableAutoDepthStencilをTRUEにしておけば、D3DRS_ZENABLE等も
デフォルトで深度バッファを使う設定になっているから、普通はいじらなくてもいい。
>>733 本当にすみません。
>>734 本当にありがとうございます!
大体分かったんですが、
DrawPrimitiveで描画するときに、z値の値なんて設定しないですよね?
Z座標は設定するのは知ってますが、Z値とはまた別ですよね?
描画するときのどのようにZ値というのは設定されているのでしょうか?
オチはひねってくれよ
射影変換が実際に何をやってるのか分かってればそんな質問は出ないはず 当然「しっていた」んだろうから説明はしないけど
>>735 Z値とZバッファの意味から勉強しなおせ。
ビュー変換行列や射影変換行列はおまじない感覚で設定してる初心者多そうだよね 変換行列の求め方まで理解しなくていいけど その変換によって座標値がどういう座標系に置かれたのかは理解した方がいいと思うが
740 :
735 :2010/09/13(月) 13:21:10
射影変換行列はZ座標を元に左手座標系において、Z座標が大きければ大きいほど 奥に位置することになるので、その分オブジェクトは小さくなるんですよね? だから奥行き感が生まれる。 だから何なんでしょう? あともう少しなんです。よろしくお願いします。
741 :
735 :2010/09/13(月) 13:23:34
あ、すいません。僕は正気ですので。
743 :
735 :2010/09/13(月) 13:46:58
>>734 を読み返したら完全に理解できました。
結論から言うと「知らずにZバッファを使っていた」というのが結論です。
今まで当たり前のことかと思っていたんですが、
描画対象のオブジェクトのZ座標が既に描かれているオブジェクトより小さければ
描かれるのは当然というわけです。
逆に大きければ、既にあるオブジェクトに隠れるのは現実世界においても当然なわけで。
Zバッファを作っとけば、その部分の描画を省略してくれるというわけですね。
とまあ、こんなオチでした。
こんなクソつまらない話に付き合ってくださいまして、ありがとうございました。
また来ます。
ということで、次の方どうぞ〜
うん、全然分かってないね
745 :
735 :2010/09/13(月) 13:51:38
え!?違うんですか!? ちょっとお待ちください。
746 :
735 :2010/09/13(月) 13:57:25
でもちょっと惜しいですよね?
初心者だったらその程度の理解でもういいよ 自分から突っ込んでたZ座標からZ値の求め方は 話を混ぜっ返したかっただけで本当は別に知りたかったわけじゃないんだろ?
748 :
735 :2010/09/13(月) 14:06:42
いえ、質問するまではZ値とはどう設定されるのかまったく分かりませんでした。 だから、デバイスでClearするときの1.0fの値がずっとわかりませんでした。 話してると、この1.0fの意味が知りたくなってきたので、 求め方が知りたくなってきました。
749 :
735 :2010/09/13(月) 15:03:50
ありがとうございました。
750 :
735 :2010/09/13(月) 15:17:07
>>749 あなた前も同じことしましたね。そのときも相手が僕でした。
もう求め方も分かったのでいいです。
こんなクソスレ二度と来ません
何で自分ばかりそういうことされるか考えたことある?
もう来ないって言ってんだから放っとけよ
質問に対して煽るように答える奴って ただ優越感に浸りたいからかな? 自分より出来ないのを見て安心したいのかな? まあ所詮2chだからなにいってもしょうがないか
構ってちゃんだからだよ
さすがにこれは酷いよ 昔はチャットレスってマルチ並みに嫌われてたと思うんだが、今はそうでもないのか
z値というのはz軸の値だろうか? zバッファはz値を書き込めるメモリ領域
そもそもDirectXにZバッファなど存在しない
ここまでわからないことが明確なんだからもう一度ググってこいと
Zバッファの範囲は通常0.0(近)〜1.0(遠) Z座標がいつZ値に変換されるかと言うと上の方にも書いてあるけど射影変換時 初心者が「右にならえ」でやってる D3DXMatrixPerspectiveFovLHで生成された行列で何を変換してるかって言うと ビュー変換行列によってカメラ空間に配置された座標値において 視野角とニアクリップ面、ファークリップ面で形成される視錐台の空間を -1.0<=x<=1.0 -1.0<=y<=1.0 0.0<=z<=1.0 の直方体にトランスフォームする この変換によって求められたZ値がZバッファに書き込まれる パースペクティブ射影の場合は ニアクリップ面の方が小さいのでカメラに近いものほど大きく拡大され遠近感を生む Zバッファを1.0でクリアするのは1.0が最遠だから 射影変換の計算式を見ればわかるが 変換後のZ値はニアとファーのクリップ面の間に均等に分散するわけではないので ファークリップ面はなるべく遠くに設定するとZ値の精度が上がる
Zバッファ法と深度バッファを混同している馬鹿は何なの?
>>760 いまの議論にどんな不具合が生じてるの?
聞きかじりの間違った知識を広めることが問題だと感じないのなら、 不具合が生じていても気がつくことすら出来ないだろう。
自分が分かってなだけなんじゃないの?
>>764 深度バッファはzバッファやwバッファ等のことで
zバッファはzバッファじゃね?
>>765 なるほど。早速Wバッファでぐぐってみたが、
z値をzの代わりに1/zで評価するだけであとの仕組みは同じなのか。
実に些細な差だなぁ。
色空間の違いと大差ないじゃないか。
同義で語っても揚げ足取りがうざいくらいで何の問題も無いな
些細だと…
ていうか今の話とまるでかんけーねーしって俺は思うんだけど
>>760 は何が言いたかったの?
w bufferはdepth bufferが16bit時代の技術 今は使わない
無駄に煽るから、せっかく間違いに気がつかせても頑固に間違ったまま使い続けるようになるんだよ。 同じような流れを何度も見た気がする。
で、結局どこが間違ってるの?
D3DXCreateSphereで作ったメッシュにtu,tvを設定してテクスチャを 貼ってみたんですが、端のほうが上手く貼れません たぶん同じ頂点でtu=0,tu=1の2通り必要な箇所があるせいだと思うんですが 上手く貼る方法はないでしょうか?
あっそ
>>772 Zバッファと深度バッファを混同していると書かれているだろう。
>>775 引用つけて抜き出せよ
っていうか今の流れと関係ないならそういってから指摘してほしいよ
なんか話の主旨まで180度変わっちゃうような間違いだったの?
変な雰囲気の中申し訳ない。 質問ですが、100×100の画像をそのままの大きさで指定した位置 に移動させるにはどうしたらいいのでしょう? たとえば、頂点バッファの座標にそのまま100×100の大きさで 指定しても画像が実際の大きさより大きくなってしまいます。 あと、移動行列を使って、1進めたとしても2D座標で言うと100ぐらい移動してしまいます。 おそらく、ワールド、ビュー、射影変換によってスクリーン座標に変換 される際におかしくなってると思うんですが、 どのような座標の設定と行列を設定すれば、自分の思い通りの位置 に移動できるのでしょうか?
わからない人だけ質問してください
>>777 その画像ってスクリーン座標に描いてるんちゃうのん?
>>779 何て言ったらいいのか分かりませんが、
変換済座標を使ったときみたいに、スクリーン座標で指定できるような感覚で
オブジェクトの大きさと移動量を設定したいのです。
>>780 2Dスプライトを直感的にスクリーン座標と一致させたいってことだよね?
パースペクティブ射影(D3DXMatrixPerspectiveFovLH)じゃなくて
正射影(D3DXMatrixOrthoOffCenterLH)で射影行列作ればいいと思うよ
スクリーンサイズが800x600なら
D3DXMatrixOrthoOffCenterLH( D3DXMATRIX *pOut, 0, 800, 600, 0, FLOAT zn, FLOAT zf);
で左上(0.0)になって分かりやすいんじゃないかな
もう憶えてないけどD3DFVF_XYZWとかもそんな感じだったっけ
じゃなくてD3DFVF_XYZRHWか
>>781 こんな関数あったんですね・・・!
ちょっとやってみます。
>>781 ありがとうございました。無事できました。
追加で質問なんですが、普通に射影変換を行ってオブジェクトを移動する場合、
スクリーン座標では横に10移動させたいというときは、
ワールド変換行列や座標の設定はどうすればよいのでしょう?
先ほども言ったように単に10とか設定しても移動しすぎたり、画像がおおきくなってしまいます。
今後3Dを扱っていく上で知っておきたいので、計算式等があれば教えてほしいです。
後ろから順に逆行列を掛けてけば出るだろうけど 3Dでスクリーンのドット単位で移動させることに意味があるの?
>>787 あれじゃん?定番の
マウスで指したところにオブジェクト置きたいんですが・・・
的な・・・
ゲームじゃそんなねぇけどツールだと結構使うんじゃね?
>>786 ありがとうございます。参考にさせていただきます!
>>787 うまくいえないんですが、今まで2Dではキャラの座標値をそのままパラメータに
してしまえば、その数値を変えるだけで思い通りの場所に動かせたんですが、
3Dになると思い通りの場所に動かすのが難しいんですよね。
なので、どうにかして、moveっていうパラメータを1増加させると自分の
思い描く場所に動かせたらいいなと思ったんです。
みなさんは、3Dの場合どの値を移動するときのパラメータとして持たせてるかがすごい疑問です。
移動行列の値でしょうか?
>>789 そもそも3D空間における距離の単位は自分で任意に決めていいもの
距離1000の世界の中で1ずつ移動したらゆっくり移動してみえるけど
距離10の世界で1ずつ移動したらめっちゃ速いスピードで動いてるようにみえるでしょ?
まずやるべきことは距離1をどれくらい相当にするかを自分で決めること
それがタバコ1個分でも東京ドーム1個分でも構わないけど
あとはそのサイズにふさわしいモデルを用意したり移動量を与えたりすればいいだけ
>>789 そうじゃなくて
こう3Dのバーチャルな閉じた世界を構築してそこをカメラで撮るって概念だから・・・
考え方の根っこの部分が違ってるような希ガス
見た目で設定しようとすると逆にカメラがたまたまその角度だったから、
たまたまそこが調度いい位置に見えただけってフェイクが多い気がする
モデリングソフトでも触ってみたらどうでしょうか?
メタセコイアのフリー版でチュートリアルでもやってみるとか・・・
>>790-791 何か少しだけイメージが湧きました。お二人ともありがとうございます。
もっと勉強します。
本当にありがとうございました。
画面割れエフェクトって具体的に言うとどうやるんですか? ひび割れる場所は毎回ランダムでお願いします。 シェーダーはそこそこ使えます。
シェーダーで質問です。 頂点シェーダやピクセルシェーダの関数で BasicVS(float4 in_pos : POSITION, out float4 out_pos : POSITION) という関数がよくあるんですが、 float4型になってる時とfloat3型になっているときがあります。 float3の時は mul(float4(in_pos,1.0f),wvp) みたいにfloat4型にキャストしてから計算しているんですが、 最初からfloat4の時は、 mul(in_pos,wvp); と両方とも同じ型なのでこんなにシンプルにかけてしまってます。 完全に後者の方が簡単で書きやすいので後者の方にしたいのですが、 何か違いはありますでしょうか? 最初からfloat型にした場合、そのメンバのwには何が入っているのでしょうか?
最初からfloat型にした場合、そのメンバのwには何が入っているのでしょうか? ↓ 最初からfloat4型にした場合〜
>>793 お前のPCのディスプレイを窓から投げ捨てる。
じゃなくて全体が板ポリ自体の矩形になるよう複数のポリゴンで分割して、
頂点をアニメーション移動させれば良い。
固定テクスチャの場合はそれだけだけど、描画結果を処理したい場合は
フレームバッファの代わりにテクスチャに書き込む、いわゆるポストエフェクト処理が必要。
>>796 ありがとうございます。
描画結果を処理したいので、ポストエフェクト処理はするんだろうと思ってました。
テクスチャに画面を描画するまではできるんですが、
複数のポリゴンにランダムで分割して、アニメーション移動させるには
どうすればいいのかが分からないんです。
それくらい自分で考えろwww
答え:複数のポリゴンにランダムで分割して、アニメーション移動させる
わかりました。1日考えてみます。 わからなかったら明日来るのでよろしくお願いします。
>>797 面のランダムな方向に直線を入れる。
お好みの回数繰り返して、直線の交点すべてにに頂点を生成する。
後は頂点アニメーションでお好みの動作をする。その際UVの扱いはご一考。
>>802 ありがとうございます。イメージは湧きました。
後は計算できるかにかかってます。
>>794 もともとセマンティックPOSITIONで指定されたシェーダー データ型は
float4なのでfloat3にする意味はまったく無い
頂点ストリーム内のデータの成分が対応するシェーダー データ型よりも少ない場合
不足している成分は
w成分は1、それ以外は 0 に初期化される
つまりmul(float4(in_pos,1.0f),wvp)はまったくの無駄
>>804 なるほど。ありがとうございます。
本の中でほかにfloat2型のTEXCOORD0型が頂点シェーダではfloat2型で
受け取って、float2型でデータを渡しているのに、
なぜかピクセルシェーダ側ではfloat4型で受け取ってるんですが、
なぜfloat4型で受け取ってるのでしょうか?
これも間違いで、float2型で受け取るのが正しいのでしょうか?
ちなみにこんな感じになってます。
BasicVS(float2 in_tex : TEXCOORD0,out float2 out_tex : TEXCOORD0)
{
省略
}
BasicPS(float4 in_tex : TEXCOORD0,out float4 out_color : COLOR0)
{
省略
}
シェーダーシュミレートツールとかないのかね? あれば便利だと思う
>>805 別に間違いじゃないし、あまり気にするところではない
TEXCOORD[n]は本来float4型なので
float2にキャストしてるのは最初の2成分しか使用しないという意味でしかない
テクスチャ座標以外の頂点情報を送りたいときに
TEXCOORD1〜を使用するのは良くある手法、別にUとVの2成分だけを送るためのものじゃない
PSでfloat4で受け取っても
>804に書いた通り
足りてない成分はin_tex.z=0,in_tex.w=1に自動で初期化されるだけ
POSITIONの場合はw成分が1か0かで計算結果が変わってしまうので気にするのは正しい
>>807 なるほど。本当にありがとうございます!
良い人がいてよかったです!
SetTransformとかDrawPrimitiveの度に一回しか効果ないんだけど プログラミングシェーダー使えばかわめ?
日本語でおk
できるだろ
ポリゴンにテクスチャマッピングするときって、 必ず0.5ピクセル分ずれてるんでしょうか?
ピクセルの中心が0,0,0になっていることは分かったんですが、 そのテクスチャ座標を0,0にしたとするとテクスチャの左上部分が そのピクセルの中心に重なるから0.5ピクセルずれるって本当ですか?
偶数だからね
0.5ピクセルずれるとなぜボケるんですか? 0.5だけずれた位置にボケずに描画されるなら意味がわかるんですけど、 なぜ「ボケ」るんですか? 意味がわかりません。
>>815 ピクセルは最小単位なんで
0.5ピクセルずらすとかできない
0.5ずれると左と下の1行が上や右にきてうざってーだけで ボケるのはフィルタかかってんじゃねーの?
言い忘れました。 LINEARをかけた時の場合です。 LINEARをかけてテクスチャマッピングをしたら、ボケちゃうので、 必ず0.5ピクセルテクスチャ座標をずらす必要があるのでしょうか?
>>819 何いってるのかわからない
ボケる話とずらす話がなんだかマッチしない
バイリニアフィルタかけたときにズレる話が余計酷くなる的なケースは俺の脳みそにあるんだけどw
わかる人の降臨を待とう
ピクセルはコンピュータにとって最小の画素単位だ。 それに何らかのフィルターをかければ回りの色に影響されてボケるのは必然だと思うのだがね。
本にはピクセルの中心が座標値になってると書いてあるんです。 だから、その位置にテクスチャの角っこが来るようになると0.5ピクセルずれちゃうと。 だから、あらかじめテクスチャ座標を0.5ピクセルプラスした値をその座標の テクスチャ座標にしろとかいてあるんですよ。
馬鹿なんだから余計なことは考えず、ピクセルとマッピングが一致しているDirect3D10以降を使え。
>>823 それはずらす話だろ?
ボケる話はどう絡んでくるんだよ
ボケる話はですね、どうやらLINEARのフィルタがかかってると、 ピクセル内の色を混ぜ合わせてしまうらしいんです。 つまり、0.5ずれてると、ピクセル内に本来あるべき画像が0.5ずつずれるわけです。 すると本来あるべきピクセルの半分とあるべきでないピクセルの半分とが 混ぜ合わされすこし汚い画像になってしまって、それがボケたように見えるらしいんです。 ピクセルは四角形です。 その中に画像を0.5ピクセルずらして考えてみたら、ああなるほどって分かります。
>>826 じゃあ、とりあえずフィルタを切ればズレる話は解決してるんだな?
>>827 ずれる話は解決してません。
フィルタを切れば、ボケないだけです。
ずれないようにするには、テクスチャ座標を0.5ピクセル分ずらすしかないようです。
あれ?じゃあつまり解決してるってことです。失礼しました。
アドレッシングモードにCLAMP指定すれば解決するんだぞ
確かにフィルタをかけなければ、CLAMP指定するだけで見た目的には解決しそうですね。
\(^o^)/ I'm a dreamer! ひそむパワー! ヘ(^o^)ヘ |∧ 私の世界 / / (^o^)/ /( ) 夢と恋と不安で出来てる (^o^) 三 / / > \ (\\ 三 (/o^) < \ 三 でも想像もしないもの ( / / く 隠れてるはず!
>>831 フィルタかけるとまわりの色も混ざるぐらい敷き詰めてるのか?
>>833 敷き詰めてるというかテクスチャ自体が色んな色が入ったテクスチャなので
混ざりやすいというか、混ざってしまう部分が多く汚く見えてしまう感じです。
テクスチャ作ったデザイナ絞めてくるか フィルタOFFにするかの話で悩むこっちゃない
そうですね。ありがとうございました。
837 :
デフォルトの名無しさん :2010/09/16(木) 09:44:49
DirctXって下位互換だけど切り捨てた技術は新しいバージョンで使えないよね 古いバージョンでつくったやつを動かしてもらうには古いバージョンのランタイムも入れてもらわないとダメなんだよね
>>837 DirectX再頒布パッケージは
かなり古いバージョンのDirectXランタイムまで
同時に収録されているんだが、お前は何を言ってるんだ。
839 :
デフォルトの名無しさん :2010/09/16(木) 10:35:39
おうそうだったのか サンクス 複数入れないとダメなのはSDKだよね
また下位互換と上位互換を混同している馬鹿が。
シェーダーについて質問なんですが、 SetTechniqueメソッドの呼び出しタイミングがいまいちわからないんです。 SetVectorとかSetmatrixなどを呼び出すまえに呼び出しときゃあいいんですか?
>>841 それでいいと思うよ
俺もそうしてるし、それで動いてるし
>>842 ありがとうございます。
追加で質問です。
同じエフェクトファイルのパスが三つあるとするじゃないですか。
で、その中でSetStreamSourceとかSetVertexDeclarationとか、
SetMatrixの設定をするじゃないですか?
でまず一つのパスの処理が終わってEndPassで終わらすじゃないですか?
で次のパスの描画を始めるときに、またこのストリームソースの設定とか
もう一度設定しなきゃならないんですか?
一度設定したらずっと有効なんですかね?
>>843 シングルスレッドで処理している限りは基本的にされる。
VRAMが足りなかった頃は
1枚の大きな画像を断片化された複数のテクスチャに分割して
テクスチャ1枚分ずつ描いたりするテクニックがあった。
その時はxyz,uv,テクスチャデータ以外は同じパラメータで動かすから
割りと高速に描画できる。
>>844 本当にありがとうございました!最高です!
一度D3DXを使わずにコンパイル済みシェーダに定数を設定するなりして、 原理を覚えた方がいいよ。
シェーダーで点光源に設定するにはどうすればいいのでしょうか?
そんなのない。計算する
そうなんですか。まいったな〜。
DirectXってMinGWから使えますか?
>>850 だいじょうぶ そんなむずかしくなかったよ
>>852 うーん。そうですか。ありがとうございます。
現在はライトがでかすぎるのでどうにかして縮めようと格闘中です。。
そういえば視覚的効果無さ杉で久しく使ってないな>点光源、スポットライト等 大抵こんな効果出したいときって加算か荷重平均でそれっぽいモデルを貼り付けたほうがいいよね
DirectX初心者です。 質問があります。 m2tsファイルをレンダーして、そのファイルの時間幅を IMediaSeekingのGetDurationを使用して取得しています。 自分のPCでは問題なく取得できているのですが、特定にPCで取得できません。 違いがあるとすれば 私のPC:WindowsXP SP2 ダメなPC:WindowsXP SP3(もしくはWindows7) です。 WindowsXP SP2以前のPCでは大丈夫のようです。 XPがSP2からSP3に変わることで何かDLLなりが更新されたのでしょうか? 何か対応策を御存知の方、よろしくお願いします。
>>855 >WindowsXP SP2以前のPCでは大丈夫のようです
の根拠は?複数のXPSP2のPCで試して問題ないの?
>>856 >
>>855 > >WindowsXP SP2以前のPCでは大丈夫のようです
> の根拠は?複数のXPSP2のPCで試して問題ないの?
はい、XP SP2のPC5台ほど試しましたが全部OKでした。
SP3も5台ほど試しましたが全部NGでした。
>>855 ,857
そんなの、必要なコーデックがあるかどうかだろ?
m2tsってことは通常H264/MPEG-4 AVC形式のビデオデータだから
インストール直後のWindowsには入ってないはずだよ。
ゲームで使用したいならメディアにコーデックのインストーラーをつけるべき。
その辺色々とめんどくさいので、
ゲームに使用する動画はWMV9にしておくのがおすすめ。
これで十分綺麗だし、Windows機ならどこでも動く。
>>858 >
>>855 ,857
> そんなの、必要なコーデックがあるかどうかだろ?
> m2tsってことは通常H264/MPEG-4 AVC形式のビデオデータだから
> インストール直後のWindowsには入ってないはずだよ。
> ゲームで使用したいならメディアにコーデックのインストーラーをつけるべき。
>
> その辺色々とめんどくさいので、
> ゲームに使用する動画はWMV9にしておくのがおすすめ。
> これで十分綺麗だし、Windows機ならどこでも動く。
仕事で使用してるので、コーデック等全て同じ条件でインストールしています。
(勿論SP3特有のコーデックがあるのは知ってますが)
動いてたSP2をSP3にUpdateすると動かなくなります。
ちなみにフィルタの構築も自分で全部指定してコーディングしていますし
レンダーもオートレンダーではなく、自分で全て構築しています。
フィルターの構築・ピンの接続等でエラーが発生しないのはデバッグモードでも
確認済みで、レンダーは正しく完了しています。
後出しですみません。
動画の再生自体はSP2でもSP3でも問題なく出来ます。
再生してる途中でGetCurrentPositionやGetPositionsを実行すると
正しいカレント位置が返ってきますが、GetDurationが失敗して正しい値が取れません。
(エラーコードが0x80004001が返ってきます)
もう一つSetPositionsを実行するとエラーになります。
(エラーコードが0x80004005が返ってきます)
最初から最後まで再生して、最後の位置でGetPositionsを実行すれば
動画ファイルの時間幅は取得できるのですが、再生前にGetDurationなどで
時間幅情報を取得するのにエラーが返ってくるという状況です。
長文すみません
DirectShowと戦うスレ行ったほうがいいんじゃないの?
>>859 質問内容は長いが、回答は割りと明確。
>正しいカレント位置が返ってきますが、GetDurationが失敗して正しい値が取れません。
>(エラーコードが0x80004001が返ってきます)
E_NOTIMPL
実装されてない。
>SetPositionsを実行するとエラーになります。
>(エラーコードが0x80004005が返ってきます)
E_FAIL
何か分からんが、とにかく失敗した。
要するに他の操作方法を考えろってことだね。
>>860 了解です、そちらに移動して聞いてみます。
シェーダーで質問です。 頂点座標とかテクスチャ座標以外の値をTEXCOORD#の頂点デクラレーションを 使えば色んな値を渡せるじゃないですか? こうやってTEXCOORD#とかいっぱい使っていくと、自分ではどれがテクスチャ座標なのか分かりますが、 ラスタライザはいろんな情報を渡されても、何でテクスチャ座標がこのTEXCOORD#だ、と 理解してくれるのでしょうか? FLOAT2型の変数でTEXCOORD型のものをテクスチャ座標と判断して 処理してくれるのでしょうか? わかりにくくてすみません。よろしくお願いします。
>>866 ラスタライザはもともとそんなの判断しないぞ?
別にはいってきた情報ごとに処理が分かれてるわけじゃないし
なにか勘違いしてないか?
ラスタライザを抜けてきたデータをどう扱うかはピクセルシェーダの仕事だ
>>868 ありがとうございます。
でも、頂点シェーダ側でテクスチャ座標をそのまま出力するとするじゃないですか?
でその後、ピクセルシェーダ側で「ピクセルごと」にtex2Dで読んでいくじゃないですか?
ということは、頂点シェーダ側で渡したテクスチャ座標がピクセルごとに自動計算されて分割されたものが
ピクセルシェーダに渡されるから、tex2Dでピクセルごとに処理できるのではないのですか?
根本的に考え方がおかしいんですかね?
>>869 ラスタライザの中身はハードによって違うしあまり公開されてないけど
入力されたのがテクスチャ座標だろうが色だろうが法線だろうが
まったく同じ計算式で補完された値が出力されてる
何をなやんでるの?
>>870 そうなんですか。もう一回整理しなおしてみます。
本当すみません。ありがとうございます。
>>870 逆にそのままピクセルシェーダに渡されるって考えたら
すっきりしました。
なんかすみません。本当にありがとうございました。
■■■■■■ ■■■■■■ ■■■■■■ D3DPT_TRIANGLESTRIPで↑みたいに正方形を敷き詰めようとしたら 行の終わりと次の行の始まりが斜めにつながるんだけどどうして?
一筆書き
頂点ストリームに頂点バッファをセットして描画した後は、 頂点ストリームは一旦空っぽになるんですか?
>>876 ならない
入れたらクリアでもしない限り入ったまま
質問です。よくインプットデバイス(PADとかJOYとか)をネットワークでトンネリングして DirectXで動くソフトウェアで遠隔対戦するようなソフトウェアがありますが、 どのように動作しているのでしょうか。(メモリをいじるなど) 端的に言えば、adonisの動作の仕組みを知りたいです。 仮想的なデバイスを用意しているのでしょうか?
>>877 ありがとうございます。
頂点デクラレーションの作成でいくつかの頂点ストリームにわけて作ったときに、
必要なものだけセットして使うようにしたいのですが、
いつまでもクリアされなかったら、無駄なものがセットされたままになってしまいます。
いったんクリアするにはどうすればよいのでしょうか?
>>878 そんなの、Adonisのreadmeに全部書いてあるじゃん。
公式ドキュメントすら読めないんかね。
>>879 d3ddevice->SetStreamSourceは参照する予定の
バッファを設定するだけのことで、参照するのはDrawPrimitiveをかけた瞬間だけ。
心配ならnullでもセットしておけばいいんじゃね?
ダイレクトXとダイワマンXってどう違うの?
男らしさ
産地
fc.exeという便利なプログラムがあってだな・・・
シェーダー関連で非常に悩んでいます。 こういう頂点デクラレーションを作成したとします。 D3DVERTEXELEMENT9 testelement[]={ {0,0,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION,0}, {0,12,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,0}, {0,20,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,1}, {0,32,D3DDECLTYPE_FLOAT1,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,2}, D3DDECL_END()}; つまり普通のテクスチャマッピング+それぞれのオブジェクトに対して それぞれ2つほど値を渡したいんです。 その構造体は以下のように定義しています。 struct VERTEX2{ D3DXVECTOR3 v[4];//座標 D3DXVECTOR2 t[4];//テクスチャ座標 D3DXVECTOR3 vector;//ベクトル float time;//時間 }; この場合の頂点バッファの作成方法が分かりません。 この構造体のサイズ×作りたい数分のバッファを作ればよいのでしょうか? そもそも構造体の定義が間違えているのでしょうか? 具体的にやりたいことは、何百個ものオブジェクトを一気にシェーダーに渡して それぞれ微妙に変化をもたせた動きをさせたいんです。 でも、四角形の頂点は4つでテクスチャ座標も四つで一つのオブジェクトが できるじゃないですか? それぞれのオブジェクトに対して、値を与えて処理する方法が わからないんです。
>>886 VERTEX2とかいってその構造体、1頂点の内容じゃないだろ?
v[4]とかt[4]って1頂点の内容じゃなくて四角形の内容だろ?
1頂点に必要な内容と四角形に必要な内容を洗い出してもう一回聞きにきてくんね?
それともその内容で1頂点に対する内容であってるの?
>>887 わかりにくい質問なのにすみません。ありがとうございます。
1頂点に必要な内容は
D3DXVECTOR3 v;
D3DXVECTOR2 t;
この頂点を表す座標とそのテクスチャ座標を表す2つだけです。
四角形に必要な内容は
D3DXVECTOR3 vector;//ベクトル
float time;//時間
その四角形の向きを表すベクトルと表示させておく時間の二つです。
上で書いていたVERTEX2という構造体にはv[4],t[4]っていうのもありますが
四角形には最低頂点とテクスチャ座標が4つ必要かと思いまして、
この二つもつけてしまいました。
こんな感じです。
わかりにくくて申し訳ないですが、よろしくお願い致します。
なにか根本的な勘違いしてる 1つの頂点情報に4個分の情報を詰め込んでも処理できるわけなかろう? 四角形を描きたいなら頂点は4個必要だ
>>889 ありがとうございます。
1頂点に必要な内容は
D3DXVECTOR3 v;//頂点
D3DXVECTOR2 t;//テクスチャ座標
頂点を表す座標とそのテクスチャ座標を表す2つの情報だけです。
これを四個作って、座標をセットしたら四角形を作れるのはわかります。
この四角形一つ一つに、ベクトルや時間の情報を与えてシェーダー側で処理
したいんですが、その際の頂点デクラレーションの定義と頂点バッファの
作成がわからないんです。
>ベクトルや時間の情報を与えて これは頂点情報として持つべき情報なの? だとしたら変化があるごとに頂点バッファをロックして書き換える予定なの? それとも ID3DXEffect::SetVectorとかでソフトウェア側から変化をシェーダーに伝えるの? 質問を変えて最終的に何をしたいのかをちゃんと書いた方がいい希ガス
何度もすみません。自分でもすごい分かりにくい質問だと思っています。 簡単に言うとポイントスプライトと同じ事を、普通の4つの頂点を定義して 四角形を作成してやりたと思っています。 ポイントスプライトでやると以下のコードのようになります。 文字数制限のため一旦きります。
893 :
892 :2010/09/19(日) 13:37:06
D3DVERTEXELEMENT9 m_vertexElements[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {0, 12, D3DDECLTYPE_FLOAT1, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_PSIZE, 0}, {0, 16, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0}, {0, 28, D3DDECLTYPE_FLOAT1, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1}, {0, 32, D3DDECLTYPE_FLOAT1, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 2}, D3DDECL_END() }; pD3DDevice->CreateVertexDeclaration(m_vertexElements, &m_pVertexDecl); // オブジェクトの頂点バッファを生成 if( FAILED( pD3DDevice->CreateVertexBuffer( NUM_SPRITE*sizeof(MY_VERTEX_POS), D3DUSAGE_WRITEONLY, 0, D3DPOOL_MANAGED, &m_pVB_POS, NULL ))){ return E_FAIL; } //以降は頂点デクラレーションで定義した値を全て埋めていく。
894 :
892 :2010/09/19(日) 13:38:18
こんな感じです。 こうすると、頂点シェーダ側では頂点デクラレーションで定義した値を 一つのポイントスプライトごとに受け取って処理できるので、 一つ一つ違った動きをさせることができます。 これと同じことを普通の4つの頂点で作った四角形で再現したいのです。 同じ事をするのは不可能なのでしょうか? 今ふとおもったんですが、頂点座標4つとテクスチャ座標4つの頂点デクラレーションを作成し、 それぞれの値はSetVectorで与えていって、描画したいオブジェクトの数だけ DrawPrimitiveを連投するしかないのでしょうか?
シェーダー・インスタンシングってやつ?
なんかまだ出てない後だし情報がありそう ビルボードを含めたポイントスプライトを完全再現したいの? それとも頂点を4つにしないとできないような 例えばそれぞれの頂点が別方向に動くみたいななにか特別な理由があるの?
897 :
892 :2010/09/19(日) 14:43:42
単にパーティクル系のエフェクトをやりたいと思っています。 ある場所を中心に飛び散る感じのやつです。 ビルボードは含めません。 そのエフェクトだけ再現したいと思っています。 頂点4つにしないと四角形が作れないと思ったから4つの頂点にしようと思いました。 基本的に頂点は全て同じ方向に動かす予定です。 テクスチャマッピングされた四角形のオブジェクトが、 パーッと飛び散る感じです。 分かりにくくてすみません。色々ありがとうございます。
>>886 頂点バッファに入れるデータは頂点のデータであって
プリミティブのデータではない。
>>894 スキンメッシュ組めばわかるんだけど
そういうのってインデックスもっておいてSetVectorで必要なもん全部渡すんだぜ
例えば1発のDrawPrimitiveで四角形を100個表示するとしたら
100個分の必要なもんをSetVectorで突っ込んでやればいい
このときの頂点バッファは
>>888 の1頂点に必要な内容で頂点数分作る
四角形に必要な内容はSetVectorで四角形の数の分だけぶち込むことになる
SetVectorで渡したものと頂点バッファで渡したものを結びつける情報が
1頂点に必要な内容の中に必要になるからそれは自分で考えろ的な感じ
900 :
892 :2010/09/19(日) 15:25:43
>>899 大分イメージが沸きました!
でもたくさんぶち込むとかなり処理落ちしそうですが、そんなもんなんですかね。
とりあえずガンガンぶち込んでやってみます!
ありがとうございました!
100個くらいならいいけどそれ以上になると定数レジスタの数たりなくなんね? SM3.0の256本はともかくSM2.0だと96本じゃなかったっけ? 微妙に無駄に見えるけど4頂点それぞれに同じ情報突っ込んどいた方が総合的には楽なんじゃない?
画面中にパーティクルを何個描画するのかにもよるけど、 現在のビデオチップだと最低5000〜7500プリミティブ位は1回で描画しないと 処理が軽すぎてビデオ側が空回りしてしまう。(CPUの処理能力が先に足りなくなる) 一方、〜100個くらいなら1個1個描画してても別に問題はないだろう。
ジオメトリシェーダを使えよ。
904 :
892 :2010/09/19(日) 17:18:15
残念ならがバージョン3.0で開発してるのでジオメトリシェーダは使えません。 できれば、1000個ぐらい描画してド派手にしたいんですけどねぇ。 ほかにいい方法が思いつかなくて^^;
ファイナルファンタジーXIVのベータ参加したら デバイスロスト対策してなかった デバイスロストで強制終了しますってダイアログが表示されて終わり プロでも厄介なところには手を付けないものなんですか?
次行ってみよう!!
>>905 DirectX10以降は、基本的にデバイスロストしないんだよ。
DirectX9で実装されてるってのなら知らないけど。
デバイスロスト対策手をつけててもリセットするときに、 リソース開放漏れがあったんだろう
D3DFVF_XYZWって具体的いうとどんなフォーマットなんですか? ポイントスプライトって皆さん使ってますか? ポイントスプライトをサポートしてないビデオカードって今の時代でも多いですか?
ポイントスプライトて方向固定だから弾幕STG作れないじゃん。 てことではないかな。
DirectX9でもFF14みたいな凄い奴作れるのか てことは10や11って必要あるの?
14は別にグラフィックは凄くねぇよ MMO目的だから多数のキャラと背景を同時に描画しても大丈夫なようにポリも荒いし エフェクトもそんなに凝ってるわけでもない トータルかかってる手間は凄いとは思うが
>>914 具体的に何が凄いのかを明確にしろ。
小学生の感想みたいな曖昧な表現じゃ、
それがDirect3D10以降の追加機能が必要なのか否か判断できない。
モデリングやモーションが上手くできていることと、 APIの機能について分けて考えられない人間が、 プログラミングをやっている者にも存在することが残念でならない。
素人なんじゃね?
919 :
892 :2010/09/20(月) 18:03:33
>>912 本当にありがとうございます!
すごい綺麗ですね・・・!
本当に参考になります!やる気出てきました!
920 :
892 :2010/09/20(月) 18:07:24
>>912 コードも私のと全然違ってすごい勉強になります!
すごいレベル高いですね!
本当にありがとうございました!
>DirectX10以降は、基本的にデバイスロストしないんだよ。 途中で ビデカ引き抜いても?
基本じゃねえだろ
グラボ引き抜くみたいなのは正直どうでもいいな でもどの範囲でデバイスロストしないんだろね? DirectXの機能使ったフルスクリーンモードの スクリーンセーバー動いても大丈夫なレベルなのかな?
うちの7600はたまによく飛ぶぜ 自動復帰してくれるけど、デバイスロストになるんだろうかな
>>924 俺もたまに飛ぶ
「XXXが停止しましたが復帰しました」みたいなメッセージがでるよ
DirectX9までのエクスクルーシブモードのフレームバッファは 本当にいつロストするやら信用できない代物だった。 けど10以降(正確には9Ex以降)はこちらからフレームバッファのサイズを 変更掛けたりしない限りはリセットする必要はなくなったな。 Dx9のリセット復帰問題はマジ面倒。 だから商用のゲームエンジンでもウィンドウモードしか使ってない処理系が多い。 が、オレはプロの端くれとして、そんな手抜き実装は許せねえ。
ウインドウモードだってロストはするよ。
UACのウィンドウが出ると死ぬゲームとかあったなぁ
ROだな
2分で速攻正解出されるくらいそういう間抜けなゲームは少ないのか・・・
FF14βもUACで落ちてたよ。
DirectSoundで質問です IDirectSoundBuffer8を使っているのですが、音の再生が終わったことをどうやって知ればよいのかで悩んでいます。 GetCurrentPositionで、再生ポジションが末尾にあるかどうかで判断するのでしょうか?
>>932 DWORD dwStatus = 0;
IDirectSoundBuffer8::GetStatus( &dwStatus ) ;
if ( ( dwStatus & DSBSTATUS_PLAYING ) != 0 ){
}
ごめ、これだと再生中がどうかを調べるかになってるわ 終了してるかどうかならifの条件変えてね
ありがとうございます! たった21個のメソッドを、全部見て回っていなかったことを恥ずかしく思います・・・ GetCurrentPositionを見た瞬間に「これでとれってことだよね・・・変なの・・?」と思いこんでしまっていました 丁寧にありがとうございました
すみません。背景描画に関してなのですが、 何やら風景をxz平面でブロック化して一定距離のブロックだけを描画してる作品を見かけたのですが、 何かメリットが有るのでしょうか? 風景モデルがバラバラだと、マテリアルの切り替え回数が数倍化したり 負担が多いだけじゃないのかと思えてしまうのですが・・。
作者にとっての作りやすさを優先したんじゃないの? 詳しいことは分からないし作者に聞いたほうがいいと思うけど
開発当初はオンラインRPGで、 地形をQuatTreeで可視部分だけ描画、さらにはLODも、ローディングも裏でやる・・・・というシステムではあるが、 完成したらバーチャロンモドキになったので意味無かったとか。 そんな感じ。
すみません。DirectXのエラーログについてなのですが、 ログレベルをMAXまであげると Direct3D9: (WARN) :Ignoring redundant SetRenderState - 19 というログが出るようになりました。 (変更がないのに同じ内容のSetRenderStateを行うと出ている?) これは無視していても問題ないのでしょうか? 悪い影響があると恐いので…。よろしくお願いします。
>>939 昔のビデオカードだとSetRenderStateの空回しは負荷になってたけど
ここ最近のチップならPIXで見る限り何の影響も与えてないように見える
ただ慣習的に不必要なレンダリングステートの変更は避けるようにはしてるけど
941 :
936 :2010/09/26(日) 14:55:35
>937-938 ありがとうございます。何か特別主流だったり有効な技術が有るのかと思いましたが そうでもないのですね。
>>940 回答ありがとうございます。
昔はそうだったのですか…。
たいして描画するものがあるわけではないので、
不必要な変更は避けるように努めます。
ありがとうございました。
昔このスレで、GPUがオンボなのでマルチレンダリングターゲットできずにトゥーンレンダリングできなかったのですが モデリングツールだとトゥーンレンダリングでレンダリングできるのはなぜですか?
>>943 ハード側の機能使ってないからじゃね?
その場合はCPUが頑張ってる
てかトゥーンにマルチレンダリングはいらんでしょ 使えれば多少パフォーマンスが上がるってだけで 普通に2パスか3パスで描けばいいだけじゃね?
ソースを出して、いろいろ改造してもらったのですが最終的に全部できなかった思い出があります
その時に貰ったサンプルでたとえばこことか
if ( g_DeviceCaps.PixelShaderVersion < D3DPS_VERSION(PS_MAJOR,PS_MINOR) )
{
::MessageBox( g_hWindow, L"指定のピクセルシェーダーをサポートしていません。", L"エラー", MB_ICONSTOP );
return false;
}
その時にグラボのせいだということを聞いたので、秋になったら買おうと思ってて
そして今買おうとしてるのですが、一番安いので良いのでしょうか?
たとえばこれとかでトゥーンシェーダはできますか?
http://kakaku.com/item/K0000138064/ http://kakaku.com/item/K0000145763/ http://kakaku.com/item/K0000117285/ それと、PS3の二ノ国とかロロナのアトリエみたいなアニメ調?にしたいのですがどうすれば良いですか?グラボ買ってきてトゥーンシェーダにするだけでなりますか?
それと、最新ゲームの3Dのモデリングやシェーダリング?を解説してる本みたいな本があったような気がするのですが何でしたっけ?
デバイスの消失に対応する作業きつすぎだから諦めようかな・・・ ユーザーが別ウィンドウをゲーム中に最大化する場合なんてほとんどないからいいよね。
Ctrl+Alt+Del押しただけで死ぬけどよろし?
>>946 まるで成長していないAAを貼ってやりたいぐらいだが
まあ続けているだけ良しとしよう
ゲーム中に間違えてAlt+TabとかWinキーとかよくある話
自分のPCだとAlt+TabやWinキー押しても消失しないけど 普通のPCだと消失するんですか?
>>951 Vista以降とXP以前で全然挙動が違う。
描画能力周りを突き詰めていくと、nVIDIA GeForce、ATI RADEON、Intel GMEで全部違う。
まあそう言うのは一つ一つつまずいて発見していくんだな。
>>949 ちょwww答えになってねえwww一つぐらい教えてくれwwwww
D3DXCreateLineで作成したオブジェクトも解放しないと デバイスの復元が出来なかったのか・・・
DirectX的に見てPS1と2と3では何が違うのですか?
DirectX的に見てとは一体どういうことなのかをまずは説明しろ。 お前の頭の中にある定義をきちんと書かない状態で、他人が理解できるはずがないだろ。
PS123ではDairekuto X使ってないよwww
>>951-953 フルスクリーンモードだと消失するが、ウインドウだと消失しないだろ
必ず消失するのはCtrl+Alt+Delなので、これで消失復元実験するといい
ところがようこそ画面が有効だとCtrl+Alt+Delを押すとタスクマネージャがいきなり起動するだけで デスクトップが切り替わらないという。
画面の色数変更
起動したままスリープ状態にする
今でも日本のRPGはローポリっぽいのが多いですがそれはアニメ調にするためにPCの処理力は余ってるのにわざとやってるのですか? それともまだ余裕は無いですか?それか実はテクスチャがそう見えるだけで実はポリゴン数は多いとか
具体的に何のRPGだよ
directXで作ったゲームってxbox360に簡単に移植出来るんですか? 出来るんなら移植の手順とか分かるサイトありませんか?
俺みたいにノートPC搭載のオンボードグラボでしかも仮想PC上で動かすような状態で処理力の余ってるゲームなんてそうそうないはず FFなんか全然まともに動かないからもっと軽く作ってくれると助かるんだが つまり何が言いたいのかというと、どういうユーザ層を想定してるのかによって全然違うんじゃないかと
>>965 ローポリ ニノ国 アトリエ
ハイポリ 白騎士物語 デモンズソウル FPS全般 のイメージです
自分はローポリゲーを作ってるのですが、モデリングのサイトを見てると俺はこれだけポリゴンが少ないぜどうだ!みたいなサイトがよく見つかるのですが
最近のゲームが明らかに綺麗すぎて、もしかしてもうポリゴンとか気にする必要ないんじゃね?と思い始めて、モデリングは適当でポリゴン多めに作って整形しといて
テクスチャとかライティングの勉強した方が綺麗なローポリゲーになるんじゃね?と思い始めたのですがどうなのでしょうか?
ローポリって3000ポリゴンぐらい?
LOD(Level of Detail)について調べてみよう
>>969 作ってるのは7000ぐらいです
Xファイルはカラーコーディネートの時頂点が分割されてないとできないから頂点数が増えると見たことがあって、分割させないと3000ぐらいになるのですが
>>971 俺の中では7000って十分ハイポリのような気がする
要はローポリ作る技術が無いから 今のPCスペックならある程度ハイポリでも大丈夫って後押しが欲しいだけでしょ?
うん
>>968 そのどっちも、ローポリだと思わんが。
DSのニノ国を見てローポリとか言ってるなら、そもそもDSの性能考えろよ。
>>975 ラブプラスはDSで5000ポリゴンを実現しているということで
技術的なトピックになったが、
これですら60FPSは出せてないから。
ラブプラスは同時にキャラが1体しかでなっから5000でもOK ローポリだから良いってわけじゃなくて ターゲットマシンに置いて最大キャラ数で処理落ちしなければいくつでもいいんじゃね? 360だとエフェクトとかばら撒きまくって 最大負荷がかかったときにギリギリ処理落ちが起きるくらいのバランスのが多いんじゃね?
ゲーム作るときに想定しうる最大の重さやポリゴン数の上限を設定する指標みたいなのってあるんですか? それを計算してから各オブジェクトを発注するとか?
経験を積むしかない
>>978 FFなんて秒間60フレを常に捨てることで派手にしてるときもあんぞ
PSのFFなんて秒間15フレームぐらいで動いてた
そういえば別スレで出てたクロスフェードも秒間30フレームぐらいにあきらめれば
どんなシーンでもクロスフェードできるじゃんなw
だれか新スレよろ
DIBSectionの中身をテクスチャにコピーしたら 横向きに転がってるんだけどどうして?
座標軸が違うから
おおー
256*128のテクスチャを作ったら VU座標の(1.0, 0.5)が右下になるのね。 故障?
↑VU(1.0, 1.0)を指定すると縦方向が2回繰り返される。
だから色情報の書き込まれてる順番が違うんだってば
>>985 正方形のテクスチャしか作れなかったんじゃね?
グラボの能力調べたらどう
> 256*128のテクスチャを作ったら これだろw
作れたとしても内部では縦256だろうな
透過テクスチャを作っているのですが フォトショで2階調補正して白黒にわけたa_.jpgを作って DirectXTextureToolでテクスチャを作るという流れなのですが さかい目のところにドットのつぶつぶが残って全然綺麗にできません。ある程度修正しても汚いです 3Dゲーム用のテクスチャですが512×512で一般的ですか? どうすれば綺麗にできますか?
>>991 つかフォトショがあるならわざわざツール使わんでもαチャンネル使ってできるだろう
jpgにした段階で圧縮レベルが高いとモアレがでて境目が綺麗にいかないとかそういうことじゃないのか?
どうしてもツールでやりたいなら未圧縮フォーマットでやらないと
2階調補正とかやった時点で絶対綺麗にでないだろw アンチエイリアスの仕組みでも勉強して円を綺麗に出す方法でも考えてみるべき
DDSかTGA使えば綺麗になると思う。っていうかPNGでいいんじゃね?
>>995 >>996 ありがとうございます
サイトでそうやって作るって書いてあったのです
じゃあどうすれば良いんでしょうか?
最終的にddsで保存します
PNGでちょっとやってみます
フォトショにプラグインつっこめばDDS入出力できるくね?
cobol
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。