【C++】 DirectX初心者質問スレ Part33 【C】
回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part32 【C】
http://hibari.2ch.net/test/read.cgi/tech/1288282082/
DirectXのXInputで質問です。
Windows7上で、USB接続したXbox360ゲームパッドから入力を受け取っています。
左右のスティックをプレスし続けた場合、最初ONになった後、一瞬OFFになってから再びONになり続けるようですが、これで正常なのでしょうか?
一瞬OFFになるのがちょっと困るのですが…
なんで前スレ消費しきってないのにこっちに質問すんのバカなの?
5 :
デフォルトの名無しさん:2010/12/23(木) 07:18:31
メモ帳でHLSL書いてるんだけど、どこでエラーがでているのかわからない・・・
プロジェクトの中に入れる方法あります?
>>2 >・DirectXに関係のない、
> C/C++の部分や、ゲーム製作全般はスレ違いなので注意しましょう。
勝手に追加するな
初心者にそんな切り分けできるわけないだろ
ここはDirectX初心者スレであって、プログラミング初心者スレではないから大丈夫。
>>7 それは暴論
前から初心者の受け皿だった
玄人用には「鬱だ氏のうDirectX」というスレがあった
鬱だ氏のうDirectXって無くなったのですか?
まあ、DirectX云々以前の質問は適切なスレに誘導すればいいだけの話。
>>10 煽り合いが酷くて消えた
それとそもそもできる奴は滅多に質問しないからスレ自体いらないってなった
まあ、人の発言の意図を汲むことができない奴のいるスレは
スレにいくらルールをつけようがすぐに終わると思うけどね
あのスレも最期の方は書いてないけど普通はわかることまでしつこく指摘しててすごく空気悪かったな
情報が不足していたら相手から引き出すってやりとり自体をそもそも嫌う奴は
掲示板なんてこなけりゃいいのにいるんだよな
質問側は煽られたら完全スルーで頼む
最近よくあるケースは、人の意図をくんだつもりになって、
頓珍漢な回答をして変な方向に進んでいく流れ。
まずは不足している情報をきっちり出してもらった上で回答に入らないと、
毎度毎度、グダグダな流れになる。
>>13 まあ、そりゃ、回答した奴が未熟だからってのもあるだろう
それと回答側にやたら完璧を求める奴もいたな
人間同士のコミュニケーションってことを忘れてる質問者もいるからな
OpenGLスレもDirectXスレもビックリするぐらい人がいないよね。
大丈夫か日本
WEB上から情報がいくらでもとれるし、そもそも質問自体2chを利用する必要性も無いと言うことなんだろう。
若いやつはもう2chなんて使ってないよ。
>まずは不足している情報をきっちり出してもらった上で回答に入らないと、
そもそも初心者にそれを期待するのが難しい上に
聞き取りを始めようとすると
「それが答えられるくらいならこんなところに質問に来ない」
等の横槍が入るので無理
dxlibって何ですか?
すっかりスルーされちまった
入力デバイス周りに詳しい人がいたら
>>3について教えてほしい
適切なスレがあればそっち行くので誘導お願い
>>21 アナログ入力はノイズがあるって言うから、たぶんそれじゃない?
>>21 とりあえず、ドライバを最新にする
別PC、別OSで検証する
くらいはやった上で聞いてるんだよね?
パッドいじったことがないなら知らないでいいじゃないか
わからないことを無理やり答えるのやめようぜ
知ってるなら「俺のところじゃそんな風にならない」って回答がほしいだけなんだろ
パッドいじったことがないなら知らないが、チャタリングってやつ?
360コントローラなんて公式ドライバを使った場合
不具合がでることで有名な奴じゃん
そんなもの使っておいて
>>3だけの情報だけじゃ
プログラムの問題なのかそれ以前の問題なのか判断するのは不可能
>>27 不具合がでるなんて聞いたことないけど、具体的にどんな症状?
google「360コントローラ 公式ドライバ 不具合」でググると当たるな
おいおい、みんな情報古いな、DirectInput時代で止まってる?
XInput使えばZ軸や振動対応の不具合なんて起きないぜ?
dxlibって何ですか?
>>30 あのデカい糞パッドを誰でも持ってる
とかありえん
友達居ないだろ?
Xbox360のコントローラが公式ドライバだとDirectInputでトリガーが1軸になってるとかは、
過去のゲームとの互換性のためにあえてそうなってるだけで、不具合とは言わないよ。
> The combination of the left and right triggers in DirectInput is by design.
> Games have always assumed that DirectInput device axes are centered when there is no user interaction with the device.
> However, the Xbox 360 controller was designed to register minimum value, not center, when the triggers are not being held.
> Older games would therefore assume user interaction.
> The solution was to combine the triggers, setting one trigger to a positive direction and the other to a negative direction, so no user interaction is indicative to DirectInput of the 'control' being at center.
> In order to test the trigger values separately, you must use XInput.
公式のアナウンスを鵜呑みにしちゃう男の人って
気付いたらいつの間にかウインドウを最大化した時にエラーが出るようになってたのですがなぜでしょうか?
ウインドウを最大化した時にエラーが出るようなコードを差し込んだからじゃない?
ウインドウを最大化したら何か特別なことが起こるのですか?
グダグダな流れになるのが嫌なら、
具体的にどんな処理手順で何をしているのかを明確にすること。
情報を出すのが面倒なら、どんなグダグダな回答でも受け入れること。
あまり急いでないのでグダグダでもいいです
ウインドウを最大化する時って何か特別なこと起こります?
呼び出し履歴見たらCreateFrameの時にヒープコピーのあとメモリ関連でエラーが出てるみたいでした
他の方質問どうぞ
どうして流そうとするんですか?教えてください
言われたことぐらいやらんと誰も答えれないと思うよ。
俺がわざとそれっぽい事いって、故意にミスリードしてもいいのかい?
DXUT使ってるなら
ウィンドウリサイズ時にデバイスを作り直してるから
なにかロスト対策をしてないリソースを追加した時点でエラーが出るようになってるんじゃない?
ぶっちゃけエラーが出なくなる最小コードまで戻してひとつずつ確かめながら追加していけとしか言えない
もしくはソースうp
>>46 ありがとうございます。デバイスロストっていうのと関係あるんですね。ありがとうございました。
>>45 お前アホなの?
は、別にできなかったらまた聞きに来るだけだから問題ないだろ
最先端の質問してるわけでもあるまいし
一人だけ性格の悪いゴミクズ荒らしが粘着してればスレが終わるだけ
>あまり急いでないのでグダグダでもいいです
これがお望みのグダグダな流れという奴なので、何の問題もない。
グダグダな流れの一例
情報が致命的に足りない質問をする
情報を出すように要求される
情報を出さない
答えが得られない
逆ギレ
フルスクリーンモードとウインドウモードの違いを教えてください
フルスクリーンモードは画面いっぱいに表示します
ウィンドウモードはウィンドウの中だけに表示します
ってそんなことが訊きたいんじゃないよな・・・?
>>35 それそれ、その記述の日本語版見てXInput使うことにしたんだよね
おかげでLTriggerとRTriggerは別々に値取れるようになった
う〜ん、結局Xbox360ゲームパッドを持ってる人は居らんみたいね、残念。
>>53 もっと低レベル層の仕組みが知りたいのです
>>55 Xbox360ゲームパッドもってるけどそんな風にはならんよ
せめてハードの問題なのかソフトの問題なのかくらいは絞ってくれないと
>>56 そうなるとWDKのビデオドライバの実装辺りを調べてみるといい。
そこまでは普通の人間はやらないが、好奇心を持ったのならとことんやるといいのではないか。
XInput使っても使えるのはXBoxのコントローラだけだしな
他のデバイスなら断然DirectInput
>>52 動作に関してはフルスクリーンはなにもやらなきゃ楽だな
でもAlt+Tabとかサポートしはじめるとお前の実力じゃ2〜3年使うぐらい嫌な目にあう
それに対してウィンドウモードはロストとか起こりにくい
スクリーンセーバー(3Dデバイス使用&占有型)のもん動かしたときどうなんのかとか知らんけどw
後、フルスクリーンはリフレッシュレートを自由に設定できるけど
ウィンドウモードはリフレッシュレートはユーザーが自由に変えられる
もちろんゲーム実行中にも・・・
何いきなり語りだしてるの?
>>61 とっととあきらめてFlashいじってろよw
文部省そんなもん作ってるのか
なかなか興味深い教材だな
無駄にエラそうな割りに実の無い情報しかしゃべれない人ってなんなんだろうね
こんにちは。仕事でDirect3D10を使用するプログラムを書いています。
ゲームのようなダイナミックなものではなく、単純にテクスチャを1枚貼っただけのものです。
それでも私には一苦労でした。Direct3D10とシェーダープログラムはサンプルを利用しました。
ここまでは良かったのですが、同じメッシュ(表現正しいのかな?)にアルファチャネル付きの
テクスチャを何枚も貼ってほしいと要求されました。枚数は不定です。この場合のシェーダーの
書き方はどうすればよろしいのでしょうか?使えるテクスチャの上限を決めておいて、
テクスチャの数だけシェーダーを用意しなければならないのでしょうか?
>>67 シェーダーと頂点情報はそのまま、テクスチャだけ切り替えて
繰り返し描画するだけ。
d3dx9anim.hをインクルードするとエラーが出ます、助けて下さい……
1>c:\program files (x86)\microsoft directx sdk (august 2007)\include\d3dx9anim.h(14) : error C2065: 'IID_ID3DXAnimationSet' : 定義されていない識別子です。
1>c:\program files (x86)\microsoft directx sdk (august 2007)\include\d3dx9anim.h(15) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files (x86)\microsoft directx sdk (august 2007)\include\d3dx9anim.h(15) : error C2078: 初期化子の数が多すぎます。
以下d3dx9anim.hでのエラーが80近く……
ゲーム制作でXファイルのアニメーションをしようとして調べてみて、いっちゃん最初で躓いてしまいました、どうかお願いします
>>69 ライブラリの設定ができてないとかじゃね?
>>66 お前みたいに煽りしか入れないのとか2度とレスしないでいいけどなw
てか
d3dx9anim.hでエラーがでるって
d3dx9.hをインクルードするとエラーがでるってこと?
それとも直でインクルードしてるの?
DirectX関係無いよね
>>74 いや、これはアリでいんじゃない?
厳密にはないけどw
設定方法とかわからんでしょ?
初心者だし
他の方質問どうぞ
>>65 >・ 回答して貰ったら、出来るだけお礼もしよう。
さっさとお礼言えよクズ
追加の依存ファイルは「d3d9.lib d3dx9.lib winmm.lib dinput8.lib dxguid.lib」を設定しています
d3dx9anim.hは自分で作ったプロジェクトのヘッダーファイルからじかにインクルードしています
と、ここまで書いた時点で
>>72さんの書き込み見て解決しました
d3dx9.hのインクルードが必要なんですね……
いつもは共有インクルードヘッダーに書き込んでいたので、抜けていたようです
こんな事でお手数取らせて申し訳御座いませんでした
色々言って頂いた皆様、ありがとうございます。今後このような事が無いように、確認を徹底しますね
>>74 関係無いようでしたら申し訳ないです……他にどこで聞けばいいのか解らなかったもので。
d3dx9anim.h作った人はなんでd3dx9.hをインクルードしなかったんだろうね
えっ
>>81 だってd3dx9.hがないと動かないソースなわけじゃん
基本、自分が必要なもんは自分が読んでおけば問題おきないと思うぜ
d3dx9anim.hがd3dx9.hを必要としてるんじゃなくて
d3dx9anim.hを含むライブラリ群がd3dx9.hなんだよ
実際にd3dx9anim.hが必要としてるのは
d3dx9.h自体じゃなくてd3dx9.hでd3dx9anim.hより前にインクルードされてるヘッダのどれかだ
ってことを理解できてない浅いPGの書いたソースってことだな
>>83 じゃ、なんでそれ自分で呼んでないの?馬鹿なの?
>>86 具体的に呼んでないとなにかいいことあるの?
>>87 依存しているヘッダが分割された場合の修正や、
多重に呼び出しているかどうかを無駄にチェックする回数は減るね。
>>88 さっぱり意味がわかりません
メリットないならないっていいなさいよ
育ち悪いな
>>89 レベル低いな
もう少し勉強してから出直しておいで
>>89 ある程度の規模のプログラムを組んだことがないとメリットは分からないよ。
無能で理解できないのは致し方がない。
>>90 はぁ?
じゃ、エラーの出るヘッダでも一生呼んでろw
ちょっと考えてみろよ
<stdio.h>からはじまって色々ヘッダ呼んでるとしたら
使う側はその全部をわざわざインクルードするのかよ
どうせなきゃ動かないのに馬鹿らしい
このスレが糞ったのはお前みたいに自分の間違いとか絶対に認めない糞が増えたからだな
俺がレベル低い?はぁ?
こんな簡単なことわからないお前より俺のがレベル低いっての?
面白いなw
>>92 そういう面倒を回避するためにd3dx9.hがあるのに、
わざわざd3dx9anim.hを呼んでエラーが出ると喚いている意味が分からん。
知っている人間が最小限のヘッダを呼び出すのなら分かるが、
無知なのに個別にヘッダを呼び出してコンパイルできないと怒り出すって、
どれだけアホなんだよ。
>>91 なにいってんだ
まだ、頑張るのか?
メリットないだろ
なんで認めないの?
自分が間違ってるのがそんなに嫌なの?
どうせ大した経験もないくせに
>>93 明らかに話わかってないのに無理して参加するなw
いまはなんでd3dx9anim.hがd3dx9.hを呼んでないのか?って話をしている
レスするなら、まず、自分のレス(
>>93)がとんちんかんだったことを認めてからレスしてね
>>95 d3dx9.hを穴の開くほどみてこいよ
d3dx9.hがd3dx9anim.hを呼んでるんだよ
さらにd3dx9anim.hがd3dx9.hを呼んだら相互インクルードになるだろうが
>>96 さらにウンコだよね
そのd3dx9anim.hがd3dx9.hを呼ばないとエラーになんだぜ
えっ
d3dx9.hを呼び出せば、d3dx9anim.hを呼び出す必要がないのに、
d3dx9anim.hにこだわる理由がさっぱり分からない。
簡単に使えるようにわざわざMSが用意しているのに、
仕様を無視して勝手なことをして対策しろというのが、
無能を通り越して知的障害か精神障害レベルだよ。
馬鹿なの?死ぬの?
この仕様だとD3dx9anim.hはユーザーに存在を知らせる必要ないな
D3DXの依存関係が怪しい
>>100 宣言している箇所を示しているだけで、呼べなんて一切書いていないよ。
Win32APIの開発経験が足りず、宣言と呼び出すヘッダが違うことに無知な人間や、
サンプルやチュートリアルを確認しない馬鹿のための配慮が足りないのは確かだろう。
頭の回らない馬鹿に厳しいことは確か。
ユーザーに知らせる必要のないヘッダをヘルプに書くことになんの意味が・・・
分かっている人間の中には、余計なものを呼び出さず最小限でヘッダを構成する場合がある。
ただそれだけの話。
>>108 馬鹿だなお前
だからd3dx9.hはどの道呼ばなきゃ動かねぇってw
d3dx9.hを呼ばなくても依存しているファイルを呼び出せばいいだけの話だが、
どこまで頭が悪いんだろう?
>>110 はぁ?
だからそれは
>>92の話でアフォだって言っただろ?
使う側は全部インクルードすんのかよ糞がって話だ
ループさせんなよ死ね
>>111 >ユーザーに知らせる必要のないヘッダをヘルプに書くことになんの意味が・・・
これに対する答えだよ。
依存関係を理解している人間が、
コンパイラに送るコードを少しでも少なくするためにやるための方法なの。
絶対にやる必要がある訳じゃない。
つまり意味が理解できない馬鹿には何の意味もない情報。
初めて書き込むが、俺的には
ライブラリ使う側
全ての依存関係をインクルードしたヘッダを使う
(d3dx9.hはライブラリ完成後に作ったんだよ、多分w)
ライブラリ作る側
依存関係だけの必要最低限のヘッダをインクルード
つまり
>>69は、依存関係を調べないで使うんだったらd3dx9.hをインクルードすれば良かった話で
d3dx9anim.hをインクルードするんだったら、依存関係のヘッダーもインクルードする必要があったって事だね
で、依存関係を調べるべきなのに、依存関係が全てインクルードされているd3dx9.hをインクルードして解決とか言ってるって話だね
余談だけど、作る側が依存関係だけの構成が良い理由は
ヘッダー定義等に変更があったときに関係ないobjまで再コンパイルになって非常に面倒だから
114 :
69:2010/12/25(土) 12:21:43
>>113 なんか妙に論争になってたんで引っ込んでましたが、おおよそ理解出来たかと思います。
依存関係とか全く気にしてなかった弊害が……
とりま無事コンパイル通って、やりたかった事の実装も半分程終わった所です
余談ですが、プログラム打ってると煙草の本数増えて仕方が無い今日この頃、です
まだやってたのか
馬鹿の相手をするのはやめろよ
>>113 >で、依存関係を調べるべきなのに
それを使う側が調べるのが正しいとしちゃっていいの?
117 :
デフォルトの名無しさん:2010/12/25(土) 13:33:30
メモ帳でHLSL書いてるんですが、どこでエラー出てるか調べる方法はありますか?
>>117 メモ帳を使うのをやめて、Visual StudioやNVIDIA FX Composerなどの
もっとリッチなツールを使う。
やたらスレが伸びててなんだと思ったら、ヘッダファイルの話なのか。
Windows(Win32API)でプログラムを作るときは、まず<windows.h>をインクルードする。
DirectX9でプログラムを作るときは、まず<d3d9.h>をインクルードする。
それ以外のライブラリやヘッダファイルのMSDN上での指定は、
コンパイルエラーやリンクエラーが出たときに初めて追加すればいいよ。
MS流のプログラミングスタイルは大体がこんな感じ。
>>68 テクスチャーだけ切り換えるということは、シェーダーに
Texture2D txA;
Texture2D txB;
Texture2D txC;
としておいて、ピクセルシェーダー内で切り換えるということでしょうか?
それともC++のプログラム側で切り換えてピクセルシェーダーだけ呼び出せるということでしょうか?
あと申し訳ありません、使用したサンプルは C++\Direct3D10\Tutorials\Tutorial07 です。
>>119 NVIDIA FX Composerはエラーで開きません。
VC++で扱えますか?
>>121 違うよ。同じ設定でテクスチャだけ張り替えてDrawPrimitive() (DirectX9の場合)を
必要なだけ呼び出せということ。
ps_3_0まででも1回の描画で16枚までテクスチャ参照できる。
ps_4_0ならもっと増えてるはずだよね。
>>122 じゃあHLSLが文法的に間違ってる。
fxファイルのコンパイラにかけて様子を見てごらん。
>>124 いや、NVIDIA FX Composerが動きません。
>>125 知らんがな。
どういうエラーが出て動かないのか、
どういう環境かも分からないのに答えられるはずがない。
自分で考えろ。
レンダーモンキー使おうとしてるけど何がなんだかさっぱりわからん
解説サイトあります?
128 :
デフォルトの名無しさん:2010/12/25(土) 16:43:12
メタセコイヤでモデルを作ったんですが赤色にすると
周りに作った壁なんかも赤くなってしまうんですが
どうすれば他のに影響しないようになるでしょうか?
マテリアルが同じになってる?
>>123 10以降はシェーダだけじゃないっけ?それ以外は廃止された
多分複数のuv座標とテクスチャは必要だと思う
といっても10以降(9もだっけ)はテクスチャ配列とか便利なものがあった気がするのでそれを使えばテクスチャは複数不要かも
俺も勉強中なのでよくわからん。後は詳しい人が教えてくれるはず↓
まず
>>67のやりたい事が、マルチテクスチャなのか、テクスチャブレンドが出来れば良いのかによる
文章を読む限りマルチテクスチャに思えるが、
>>68が言ってるのは
フレームバッファを対象にレンダーステートを設定して、一枚づつテクスチャをブレンド描画していけって意味
これなら一枚テクスチャ描画の処理だけでも、複数テクスチャを張った結果と同じ事が実現出来る
そうではなく、純粋にマルチテクスチャの手法を求める場合は
シェーダーに渡すテクスチャを必要枚数セットして
UVやサンプリング方法が違うならサンプラーも必要分を容易してセットする
ただし扱える最大数はハードスペック依存だから、
アプリ起動時にでも調べて最大数を超えない処理をいれないと駄目かと
それから、マルチテクスチャの場合は
レンダーステートで行っていた場合のブレンドを、シェーダー内で行わないと駄目だね
67ではないが非常にわかりやすい解説でよくわかりました
デバイスのロストについて調べるとよろし
>>134 タスクマネージャーってCtrl+Shift+Escで呼び出す物なんだけど。
オレ、釣られてる?
Ctrl+Alt+Deleteで表示が死ぬのはまた別の話。
おそらくは >135
オレの書いたプログラムだと大丈夫だった。
Ctrl+Alt+Deleteにタスクマネージャってボタンがあるから別に間違いじゃないな
必ずデバイスロストしてくれるのでチェックに便利だよ
>>136 むしろ俺は、Ctrl + Shift + Escでタスクマネージャを直接呼び出せる事を初めて知った。
Vista以降の仕様なのかな? まぁ時計表示右クリックでも出せるから不便には感じてなかったんだが。
Ctrl+Shift+EscはXPにもある
つかタスクバー以外に時計の右クリックでもでるんだな
あれも一応タスクバーの中か
なぜタスクマネージャを表示するとロストするのか
vista以降だとディスプレイアダプタがWindowsに乗っ取られるから
タスクマネージャーはショートカットかタスクバーから起動できるからまだいいけど
UACが発動した時に同様の理由でロストするのはどうにかして欲しかったな
なんか話が混乱してるな。
前提: XP
・簡易ログオン有効時
Ctrl+Alt+Delでいきなりタスクマネージャが起動。デバイスロストなし。
・簡易ログオン無効時
Ctrl+Alt+Delでデスクトップが切り替わる。デバイスロストする。
Ctrl+Shift+Escでタスクマネージャが起動するのは少なくともNT4の頃にはあった。
Vista以降のUACでデバイスロストするのはデスクトップが切り替わるため。
これはグループポリシーで変更可。
間違ってたら訂正にょろ。
143 :
デフォルトの名無しさん:2010/12/27(月) 15:50:59
tiny.xのマテリアルって
ディフューズ r1.0 g1.0 b1.0
アンビエント r0.0 g0.0 b0.0
で合ってます?
あってる
145 :
デフォルトの名無しさん:2010/12/27(月) 16:33:10
的外れな質問してるかもしれませんが、スキンメッシュのシェーダーで
デバイス->SetTexture();
だとテクスチャが貼られますが、
エフェクト->SetTexture();
だと上手く貼られません。
デバイス->SetTexture();は固定機能パイプラインではないのですか?
だとしたらシェーダーで描画できてないのだろう
>>145 エフェクトと言ってるんだから ID3DXEffect を使ってるんだと思うんだけど、
あれはIDirect3DPixelShader9やIDirect3DVertexShader9 のラッパーなわけで、
それを念頭においた上で ID3DXEffect 自体の作法に従わないといけないよ。
詳しくはサンプルソースを読め、だけど、
例えばBegin、BeginPass、EndPass、Endはちゃんと呼んでる?
148 :
145:2010/12/27(月) 17:05:51
セオリー通り、シェーダー描画のステップを踏んでます。
.fx内でテクスチャの色を変えたりすると描画も変わるので、テクスチャはエフェクトファイル内を通っていると思います。
あと、これからもDx9をサポートするGPUは固定機能も使えますか?
描画部のコードとピクセルシェーダを書いて
できれば全部書いてくれ
>>148 うーん。ID3DXMeshは使ったこと無いからその辺はわからんな。
他のやつよろしく。
正常時、異常時それぞれでPIXで描画シーケンスの
ログを取って比較してみたら何かわかるんじゃない?
RADEON HD2600系以降でDirectDrawがソフトウェア実装になったように、
古い機能がエミュレーション化される可能性は常にあるよ。
ま、どうせ描画機能は複数パターン作って適宜切り替える実装になるので
必要になったものを順に実装していけばいいよ。
うーん。ID3DXMeshは使ったこと無いからその辺はわからんな。
他のやつよろしく。
正常時、異常時それぞれでPIXで描画シーケンスの
ログを取って比較してみたら何かわかるんじゃない?
RADEON HD2600系以降でDirectDrawがソフトウェア実装になったように、
古い機能がエミュレーション化される可能性は常にあるよ。
ま、どうせ描画機能は複数パターン作って適宜切り替える実装になるので
必要になったものを順に実装していけばいいよ。
なんで2回いうんですか?
なんで2回いうんですか?
154 :
デフォルトの名無しさん:2010/12/27(月) 19:19:25
大事なことだからだよ。
D3DXIntersectを使い3D空間での「3Dモデルのメッシュ」と「平面の板のメッシュ」の当たり判定を取りたいのですが
MSDNを見てもいまいち引数の内容が分かりません、第1引数から軽くでいいので教えて頂けないでしょうか
数学的な考え方として何をどうしようとしてるは
そもそも理解出来てるのか
pU,pVが最初にヒットした面の座標かな?
そのまんまだね
レイの始点と向きをワールド座標軸で指定してるから思った通りに当たらないとかってオチじゃないの?
こいつはメッシュのローカル座標軸で指定
多分質問の仕方からして、特に
>「3Dモデルのメッシュ」と「平面の板のメッシュ」の当たり判定
って質問からして、そもそも意味自体丸ごと理解出来ていないと思われ
数学って難しいね
質問です。
3D空間に半透明物体を配置したいのですが、正しく描画するためにはソートが必要だと思います。
このソートを行うには、どういう方法が一般的なのでしょうか。
GPUに頂点データを送り、射影変換などの変換をし、半透明物体だけその結果を一端CPUに戻し、ソートして、またGPUに送る、ということをしないと駄目なのでしょうか。
どういう方法もクソもない。
カメラと物体の距離を計算して遠い方から描画するだけだ。
>結果を一端CPUに戻し
出来るのなら好きにしろ
>>162 >GPUに頂点データを送り、射影変換などの変換をし、半透明物体だけその結果を一端CPUに戻し
これはあまり現実的じゃないなぁ
GPUの計算結果をCPUに戻すには一旦定数レジスタに放り込まねばならず
そしてそのサイズは余り大きくはないのでモデルの規模にもよるけど、まず無理
半透明のオブジェクトのみCPUで座標変換してソートしてから描画するしかないと思われ
半透明物体の頂点の処理だけソフトウェアでやるといい、ということですね。
その方向で実装してみます。
ありがとうございました。
マルペケ参考にして影の精度を上げようとしてるんだけど上手くいかんなー
自己影の角が取れん・・・
シャドウ処理は精度を上げることを考えるより
低い精度でもなんとか見られるように+α工夫する方向で考えた方がいいぞ
ボリュームとか?
IDirect3D9の変数名は何にしてますか?
d3d9
俺はd3ddeviceはunkoって決めてる
mD3D
d3dってなんやねん!
175 :
67:2010/12/28(火) 21:28:44
>>122 >>131 丁寧に説明ありがとうございます。
テストプログラムではうまくいきました。
実際に組み込む時でちょっとうまくいってませんが、これは自分の勉強不足なので
解決できると思います。
176 :
デフォルトの名無しさん:2010/12/29(水) 15:30:10
ピクセルシェーダーの引数でPos:POSITIONとすれば
入ってくるのは頂点シェーダーから出てきたポジション?
ピクセルシェーダに入力セマンティックPOSITIONは無いよ
ピクセルシェーダーにポジション入れたいんだけどどうすればいいかな
なるほどサンクス
どうも
>>167 俺もあれやってみたが、劇的な変化はないよな
結局シャドウマップのサイズが足りないなら結局焼け石に水ってことか
183 :
デフォルトの名無しさん:2010/12/30(木) 04:31:24
HLSLでポイントライトをやろうと思っています。
float Light_vol = clamp( distance(ライトのポジション, 頂点のポジション), 0.0f, 1.0f );
Col = dot( 法線, normalize( ライトのポジション.xyz - 頂点のポジション.xyz ) * Col * ライトの色 * Light_vol;
これで光の当たる場所がうまくいきません。どこが問題でしょうか。
ライトをワールド空間座標で指定してるなら
法線もワールド行列変換するか
ライトを予めワールドの逆行列を掛けてローカル空間座標に変換しておく
185 :
デフォルトの名無しさん:2010/12/30(木) 04:53:03
ライトはワールドのポジションで、法線もワールドに変換してあります。
>>183 なんで情報の出し惜しみをするんだろう?
頂点シェーダ部分全部書けよ
一般的なポイントライトだと
float3 vL = ライトのポジション.xyz - 頂点のポジション.xyz;// 光源ベクトル
float lenL = length(vL);// 光源ベクトルの長さ(光源への距離)
// 光の強さ(距離の二乗で減衰させて適当な係数を掛けて調節)
float Light_vol = 100 * dot( 法線, normalize(vL) / (lenL*lenL) ;
Col = Col * ライトの色 * max(0, Light_vol);
傾斜に対してキャラクターをクォータニオンで垂直に回転させるソースをくれ
うわーやっとうまく行った!
>>186ヒントさんくす!!
>>187 クォータニオンなんか使わないで傾斜にそった姿勢行列(傾斜行列)に対して
ワールド→ローカル(傾斜行列)→ローカル(傾斜行列)で垂直に回転→ワールド
でベクトル取得すればいいんじゃね?
後はクォたんでかけるもかけないも好きにしろと思う
190 :
デフォルトの名無しさん:2010/12/31(金) 16:20:07
画面から外れるものは描画されずにGPUが節約されるということですが、
メッシュがカメラから外れる場合は描画ループに入れずに飛ばしてもパワー節約にはなりませんか?
たとえば、マトリックスとかライティング計算とかが省かれて軽くなるとか。
そりゃもちろん描画しない分だけパワー節約になる
じゃあオブジェクトを大量に作る場合、カメラの近くに来たものだけレンダーしたほうがいいのか
まぁ、そんなのは常識の範囲内でさらに一歩進んだ先
描画する描画しない閾値付近で
オブジェクトがパッと消えたり現れたり
或いはLODレベルが切り替わってしまうのをどうにかしようっていうことの方問題になりやすいんだが
194 :
デフォルトの名無しさん:2010/12/31(金) 18:10:56
レンダーターゲットをテクスチャサーフェイスにしようと思っています。
大きすぎるテクスチャだと古いGPUでは対応していないということはありますか?
1024^2でやろうと思っていますが、5年くらい前のPCだともっとサイズを小さくしたほうがいいですか?
5年前くらいなら最低でも2048x2048はあるはず
テクスチャの最大サイズはデバイスのCapsから取得できるので
想定値より小さかったらそれに合わせるとかにしとけば良いんじゃ
ポリゴンにテクスチャを着けたビルボードを、画面にピッタリ張り付いたようにしたいのですが、どんなマトリックスの設定にすれば良いですか?
>画面にピッタリ張り付いたように
もうちょっとゆとり成分を抜いてくれ
体力ゲージとかを作りたいって事だろ。・・・たぶん。
タイトル画面とかで1枚絵をべたって貼りたいということだと俺は思った
そんなのに、ビルボードのポリゴン使わんでもいいやん
3D空間で屈折マップをやりたいんですが
毎フレーム、テクスチャはどうやって用意したらよいでしょうか?
>>196 これか
D3DXMatrixOrthoLH
単純に正面を向いたビルボードを表示したいだけかもよ?
>>203 なるほど
だったら
D3DXMATRIX mat = camMat;(ビュー行列ではない)
mat._41 = pos.x;mat._42 = pos.y;mat._43 = pos.z;
的なコードだな
>>196 みたいな問いでも、このスレの住人は本能的に数学的な解釈して回答してくれる
ゆとりを生み出すのは、お前らの優しさのせい
このイケメンどもめ。 そして謹賀新年、明けましておめでとうございます
206 :
196:2011/01/01(土) 19:22:44
>>199 これです。クライアント領域の0,0から画面いっぱいに合わせて貼りたいです。
207 :
196:2011/01/01(土) 19:24:46
>>199>>203 これにも流用できるようにビルボードにしました。
カメラからの最低描画距離とかいろいろ考えるうちにちんぷんかんぷんになってしまいました。
>>206 なにそれ?
スクリーン座標での描画方法が知りたいわけじゃなくて
ワールドにおいたもんをどうやって画面ぴったりに描画するかってところで悩んでるってこと?
はい。
それが座標変換済み頂点かな
すいません、初めて書き込むんですがここってHLSLの質問でも大丈夫ですか?
ありがとうございます。XNAで作っていてシェーダーの部分でわからないことができたのでこういう聞き方をしました
いざ質問しようとすると自分の中で問題が整理できてないように思ったので、もう少し考えてから質問します。よろしくお願いします
甘えた質問かもしれませんがよろしくお願いします
3Dソフトでいう「ベンド」とか「パスに沿って変形」を作りたいと思ったので(なので頂点シェーダに関する質問です)
イマギレさんのt-potにある頂点ブレンドを参考に、ブレンドウェイトを使えばできるのかな、と思いまして
(0,0,0)を一番底にしてモデルを作りweighttemp=normlize(pos(ポジション).xyz)のz座標の値をもとにweight[0]=weighttemp.z、weight[1]=1-weighttemp.zという風に設定し
float4 pos0=mul(pos,rotatexyz(回転行列)); を作りpos=weight[0]*pos0+weight[1]*posという風に行なったのですが期待通りの変形が行われているように思えません。
この場合weight[0]*pos0というのはpos0にweight[0]の値だけ近似させるということを行っていると思っていいんですよね?
全く整理できてない件について
すいません。出直してきます
D3DXCreateEffectFromFileを呼ぶと、失敗してD3DXERR_INVALIDDATAが返ってきます
別のプログラムでは成功してるし、ユーティリティにあるコンパイラでも
正常にバイナリが出力されているのでエフェクトファイルのプログラムに問題はありません
ファイル名が間違っているということもありません
リソースに組み込んでD3DXCreateEffectFromResourceを呼べば成功しますが
外部から変更したいので、ファイルから読み込む方法を取りたいです
失敗する原因は何が考えられるでしょうか
>>215 いきなりそんなギミック動かしても動いてるのかよくわかんねーじゃん
pos=0.5*pos0 + 0.5*pos;
pos=1.0*pos0 + 0.0*pos;
pos=0.0*pos0 + 1.0*pos;
こんなん動かしてみてそれっぽいかどうか確認したらどーなん?
>>218 なんかよくわからんけどピクセルシェーダのバージョンを2.0ぐれーにしてみたら治んない?
>>220 治りませんでした
しかもプロジェクトのフォルダをコピーして、そっちで再びビルドすると
エラーの中身がE_FAILになった
どういうことだ?
>>221 google「D3DXCreateEffectFromFile E_FAIL」
これでググると一発目に外人が似たような質問してる
それの返しレスでこのコードでチェックしろ的レスがあるからやってみたら?
>>215 甘えた質問かどうかって言うより、
>3Dソフトでいう「ベンド」とか「パスに沿って変形」
が、実際どういう計算で行われているのかを先に理解するといいかも
どう 「設定すれば」 、と言うより、どう 「計算したら」 、って話だから。確実に。
とりあえずスプラインとかn個の頂点を通る曲線とかあるいはベジエとか、その辺をおいかけてみろ
HLSLじゃなくて数学
>>219>>224 ありがとうございます!
円柱を移動させてを擬似ポリラインを描くことは出来るのですが、その式を使うと上手く言い表しづらいのですが頂点を回転させてるのではなくずらして表示させてるため複雑なモデルを使うとモデルの向きが変わらず表示が不適切になってしまうのです
もう少し自分で調べてみようと思います
わからないところが出てきたらまた質問させてもらおうと思いますので、よろしくお願いします。
Managed DirectXのドキュメントってどこで見れるんですか?
XNAに移行して今はまともなドキュメントは無いんじゃなかったかな
228 :
デフォルトの名無しさん:2011/01/04(火) 02:02:04
今DirectX9でマルチモニタにムービーを全画面出力することを試みています。
2出力のカード3枚刺しです。アダプタの数だけ(この場合6つ)デバイスを作って
出力することは出来たのですが、3つの「マルチヘッド」デバイスを作って全て
表示することはできるのでしょうか?
「DirectX初心者質問スレ Part25」などにマルチデバイスでのヒントなどは
発見出来たのですが、マルチなマルチヘッドデバイスのヒントがいろいろ探したの
ですが発見できませんでした。
どなたか、詳しい方おられませんでしょうか?
普通にモニタつなげてメディアプレイヤーでAlt+Enter押したらいくんと違う?
231 :
デフォルトの名無しさん:2011/01/04(火) 02:33:37
早速の書き込みありがとうございます。
すみません説明が足りませんでした。
各グラフィックカードに渡されるムービーは同じとは限らないのです。複数のムービーを
テクスチャとしてDirectShowでポリゴンに取り込み、違った映像を狙ったモニタに出力
したいのです。
ただ、同じグラフィックカード上のアダプタ間ではテクスチャを共有させたいのです。UV値
を変えてずらしたりはします。
それでマルチヘッドデバイスが動画の同期をとったりするのに都合が良さそうだ
ということでこの方法を試したいのでした。
232 :
デフォルトの名無しさん:2011/01/04(火) 02:41:58
>>231 ありがとうございます。このヘルプは以前読みました。このヘルプとマルチデバイスに
関するヘルプ等も読んで、組んでみているのですが、なかなかうまくいきません。シングルの
マルチヘッドデバイスで2画面なら既に出来ているんですが、複数のマルチヘッドデバイスで
「同時に」6画面出すのに苦労しています。
D3D10では出来ているんですね。なるほど。わけあって9を使っていますが、10も
考えてみる必要があるのかなぁ。幸い9と10は一つのコードから同時に使えるらしいですし。
233 :
デフォルトの名無しさん:2011/01/04(火) 02:45:33
234 :
228:2011/01/04(火) 11:27:42
うーん、この辺を読んでると
http://msdn.microsoft.com/ja-jp/library/ee422553(VS.85).aspx
複数のデバイスをフルスクリーンモードで同時に使うには、アダプターごとにデバイスを
作った上、それらがフォーカスウインドウを共有しなければならんとあります。
実際それで、マルチな独立デバイス的コードを書いて動画出力出来ました。(ヘッド間
で全然同期出来ませんけど...orz)
でも、そうなると、この辺の記述
http://msdn.microsoft.com/ja-jp/library/cc323931.aspx にある、hDeviceWindowの説明とかみ合わなくてよくわかりません。実際
シングルのマルチヘッドデバイスで2画面のフルスクリーンモードを実現する
コードでは、主アダプタと従属アダプタにそれぞれ違うウィンドウをクリエイト
しないとうまくいきませんでした。
このあたりの不整合性が「マルチなマルチデバイス」がうまくいかない原因なのかな?
どなたかうまくいく方法ご存じないでしょうか。
DirectX9じゃそれは不可能だよ、という合理的な説明でもありがたいです。
>>234 やり方はほとんどヘルプに書いてあるので、大雑把に手順を説明すると
ヘッドの数だけウインドウを作成する
D3DPRESENT_PARAMETERSの配列を作り、hDeviceWindowにそれぞれのウインドウをセット
CreateDeviceにD3DCREATE_ADAPTERGROUP_DEVICEのフラグを指定してデバイスを作成する
GetBackBuffer->SetRenderTarget->描画 をヘッドの数だけ行う
Present
3つ以上のヘッドがある場合に、2つだけ使うとかはできないと思う。
ヘッドの割り当ては、D3DCAPS9のMasterAdapterOrdinal、AdapterOrdinalInGroupで確認。
ヘッドごとに解像度が違う場合は、EnableAutoDepthStencilが使えない。
236 :
228:2011/01/04(火) 18:01:12
>>235 ありがとうございます。そのやりかたで、マルチヘッドデバイスを一つ作って
複数のモニタに出力することは既にできています。
問題は、例えば2出力あるボードが2枚あるとして、2つのマルチヘッドデバイスで
2x2の計4つに出力する方法です。
ようは、「マルチヘッド」デバイスを「複数」作って(その意味ではマルチデバイス)
そのすべてにフルスクリーン表示する方法です。
DirectX8までは複数のアダプタにフルスクリーン出力するにはそれぞれ個別の
デバイスを当てる方法が主流でした。DirectX9から「マルチヘッド」デバイスに
よって一つで同じボード上の複数のアダプタに出力しやすくなりました。
私が知りたいのはそれらを合わせたような、マルチxマルチヘッドデバイスの
実現が可能かどうか、ということです。
ひきつづきよろしくお願いします。
DirectX 1.0のころはどうやって3Dを描画していたのですか?
行列バッファじゃなくてなんだっけ?
OpenGLみたいなの
Direct3Dは存在していないから、
ビデオカード専用のAPIを使ったり、OpenGLを利用したり、
CPUで計算して勝手に各自でそれっぽく作ってただけだよ。
DirectX1.0ってWinGだろ
WinGとDirectXの間にGameSDKとかいうのがなかったっけか
GameSDKが後からDirectX1扱いされているだけ。
WinGは無関係。
>239-242
どもでした
ここの人はDX1.0の頃からコード書いてるのか
何歳なんだよ
3Dのゲームに使えそうなリアルタイム変形に関する本って何かありませんか?
GPUGEMSなら研究室にあるんですが
リアルタイム変形ってなんだよ。
モーフィングでもやりたいのか? それともスキニングか。
多分、単純な頂点の移動自体切り分けというか、処理が見えてないと思われ
すいません…今の自分の言葉で説明できないので(ゲームエフェクト作りたいということだけですので)みなさん参考にした本など教えて欲しいです
ゲームエフェクトマニアックスは持ってます
本から吸収できてないんだから、書籍をいくら読んでも無駄。
とにかくチュートリアルを見ながら少し付くこつこつ作れ。
ゲームエフェクトマニアックスに書かれていることは理解していますが。無駄って言い方は傷付きます
すいません、情けない書き込みでした…
自分で探してみます
>>250 とりあえず数学やれ。マジで
周期関数で頂点動かせ。話はそれから
>>248 もう300冊以上あってオススメなんてわかんね
時代もズレてるし
色んな本読んだほうがいいな
いいと思った本片っ端から買えよ
>>236 マルチヘッドを複数ってことだったか。
それは、さすがに検証できる環境がないな。
マルチデバイスとシングルデバイスマルチヘッドのどっちもできてるなら、
その発展でできるんじゃない?
わざわざアダプタグループの定義があるくらいだから、仕様としては
問題ないと思う。
三角関数で動かすことぐらいはできます。そこまで頭悪くありません
あんまり覗く価値ないですねここ。二度ときません
イライラしたら負けだぞ
まあ気持ち悪い連中はスルーしておけばいいんだ、力を抜こうぜ
使用可能なテクスチャステージの数を得る方法を教えてください
>>259 GetDeviceCaps
単純にステージ数ならMaxTextureBlendStages
使用できるテクスチャ枚数はMaxSimultaneousTextures
ステージ数が8ない機種なんて、RivaTNT以前とかの話になるから
基本的に8あると思っていい。
テクスチャ枚数はGeForce4くらいまでは2枚、それ以降は8枚使える。
>>256 でも自分がどこまでできるか言わなかったよね
なのに他の人には「わかれよ!」っていうんだよね
いままでは回りの人は君のいうこと全部いいように汲んでくれたと思うけど
これからはそういうの少ないから気をつけてね
CreateDIBSectionって、GameSDKだっけ?WinGだっけ?
>>244 女性に歳を聞くもんじゃないよ?
WinG
>>261 こんな掲示板でしか説教できないんだね
かわいそうだね
265 :
228:2011/01/06(木) 13:46:55
>>255 >わざわざアダプタグループの定義があるくらいだから、仕様としては
>問題ないと思う。
そうなんです。自分もまさにそう思って始めたんですが、なかなか
うまくいきません。理由を探っているうちに234で書いたような考え
すなわち、
複数デバイスで同時フルスクリーンの場合と、マルチヘッドデバイス
を作るときの場合とで、ウインドウの当て方に矛盾があるように
思えてきたわけです。
で、誰か出来るか出来ないかだけでもご存じないかと・・・・・
266 :
デフォルトの名無しさん:2011/01/06(木) 17:07:25
実例で学ぶ ゲーム3D数学 オライリージャパン で勉強始めたのはいいのですが。
サンプルソースがDiectX8なんです。PCに入っているのはDX9で、何処かにDirectX9
に移植したサンプルソースは有りませんでしょうか?
自分で移植すれば勉強になるだろう。
268 :
デフォルトの名無しさん:2011/01/06(木) 17:15:17
最初は移植しようと始めましたが、DirectXを勉強している身にはとても出来ないレベルに
感じました、DX8とDX9の違いも分からず。困難であると実感したので、ここで聞いています。
PCに入ってるのがDX9でも、DX8を使えるはず
いったんDX8を学ぶという手もある
>>265 234のリンク先を見ても、べつに矛盾はしてないと思うけど。
まとめると、
1. フォーカスウインドウは全てのデバイスで共有する。(同じウインドウを指定する)
2. デバイスウインドウはアダプタ(ヘッド)ごとに異なっていないと駄目。
3. 必ず1つのデバイスがフォーカスウインドウをデバイスウインドウとして使用しなければいけない。
271 :
デフォルトの名無しさん:2011/01/06(木) 17:21:24
>>268 DX9SDXを入れてもDX8SDKは入ってません><
そうだっけ。じゃあDirectX8のSDKを入れれば・・・って、もしかして手に入らないのか。
273 :
デフォルトの名無しさん:2011/01/06(木) 17:33:57
はい、現在入手不可能です
274 :
228:2011/01/06(木) 17:47:06
>>270 なるほど。明解な説明ありがとうございます。
もうちょっといじってみて、後ほど結果など報告します。
275 :
デフォルトの名無しさん:2011/01/06(木) 17:49:31
実例で学ぶ ゲーム3D数学 オライリージャパン
のサンプルソースは↓のURLの関連ファイルからダウンロードです。
http://www.oreilly.co.jp/books/9784873113777/ 本に載ってるライセンスは、ソースの大半を製品やCDへ乗せる場合は連絡が
必要ですがその他は、自由です。
このなかのviewerとcommonをまとめてコンパイルしています。VC++2008EE使用。
どなたか出来ませんでしょうか?
エラーを出すソースは全ソースファイルの一部です。
August 2007以前なら8.0のヘッダ類も入ってるがD3DXとかはないな
>>277 よろしければ、修正したソースを上げて貰えると嬉しいです。
ライセンス的には問題ないです、お願いいたします。
279 :
266:2011/01/06(木) 22:20:44
>>278 コンパイルエラーなんて一つしか出なかったしログ見たらすぐ分かるしで
わざわざファイル上げるまでもないような?
d3dx8.libはなくてもd3d8.libがあればとりあえずおkらしい
手持ちの本の付録CDにDirectX8.0のSDK一式あったけど、これ勝手に再配布していいの?
圧縮しても377Mあるんだが・・・
282 :
266:2011/01/06(木) 22:26:56
え!? すみませんDX9でお願いしています m(_ _)m
283 :
266:2011/01/06(木) 22:28:40
>>281 MSはサポート終了となり、一切の情報が消えていました。
配布はいいと思うのですが… 私には分からないです orz
EULAを全く見ないで「いいと思うのですが・・・」って・・・
かわいそうにw
マイクロソフトは馬鹿だなw
テメェでバージョンつけたくせに配布止めちまうからなw
古いバージョンの本をゴミにすることで経済効果でも狙ってんのかねぇ・・・(笑)
ちーん!
286 :
281:2011/01/06(木) 22:45:58
そういえばお約束のレスがまだだったな。
>エラーを出すソース
これのエラーは何と出てるんだ?
287 :
266:2011/01/06(木) 22:46:33
実例で学ぶゲーム3D数学の日本語版の初版は2008年10月1日です。
これそれほど古くないでしょ>< (泣き泣き
>>285 一体なんのためのバージョンなのかわからないな
289 :
266:2011/01/06(木) 22:53:14
少し手を加えているので。エラーが違うと思いますが。
c:\dunn_example_code\common\renderer.cpp(446) : error C2660: 'IDirect3D9::EnumAdapterModes' : 関数に 3 個の引数を指定できません。
c:\dunn_example_code\common\renderer.cpp(606) : error C2660: 'IDirect3D9::EnumAdapterModes' : 関数に 3 個の引数を指定できません。
c:\dunn_example_code\common\renderer.cpp(700) : error C2065: 'D3DPRESENT_RATE_UNLIMITED' : 定義されていない識別子です。
c:\dunn_example_code\common\renderer.cpp(705) : error C2039: 'FullScreen_PresentationInterval' : '_D3DPRESENT_PARAMETERS_' のメンバではありません。
c:\program files\microsoft directx sdk (march 2009)\include\d3d9types.h(1493) : '_D3DPRESENT_PARAMETERS_' の宣言を確認してください。
c:\dunn_example_code\common\renderer.cpp(770) : error C2065: 'D3DTSS_ADDRESSU' : 定義されていない識別子です。
c:\dunn_example_code\common\renderer.cpp(1065) : error C2065: 'D3DVIEWPORT8' : 定義されていない識別子です。
c:\dunn_example_code\common\renderer.cpp(1065) : error C2146: 構文エラー : ';' が、識別子 'viewData' の前に必要です。
c:\dunn_example_code\common\renderer.cpp(1065) : error C2065: 'viewData' : 定義されていない識別子です。
c:\dunn_example_code\common\renderer.cpp(1837) : error C2065: 'D3DTSS_ADDRESSV' : 定義されていない識別子です。
c:\dunn_example_code\common\renderer.cpp(1954) : error C2664: 'IDirect3DDevice9::SetVertexShader' : 1 番目の引数を 'int' から 'IDirect3DVertexShader9 *' に変換できません。(新しい機能 ; ヘルプを参照)
例としてこんな物が 、もっと出ています。
290 :
266:2011/01/06(木) 23:03:39
うわ〜ん><
291 :
266:2011/01/06(木) 23:05:03
代わりに泣いてくれてありがとー
うぜぇ
294 :
266:2011/01/06(木) 23:17:54
>>293 そこを見てやっていたのですが、今ひとつマトリックス演算が理解できず。
そこの紹介で、実例で学ぶゲーム3D数学を参考にして理解しましたと、有ったので。
買ったんですよ。
GDIができるなら、塗りつぶした三角形を自由に書けるようにして、行列で回転とかやれば劣化版だけど勉強にはなるんじゃないかと。
それともDXじゃないといけない理由があるとか?
297 :
266:2011/01/07(金) 00:00:12
>>296 できました、本当にありがとうございます。
しかし、このSDK何処かに保存して、最新のSDK入れて区別しないとですね。
いま2004上書きしちゃいました。
でも、できるようになったので嬉しいです。ありがとうございます。
DX8から9の変更点ってそんなにあったっけ?
8のサンプルコードと変更点まとめてあるとこ見ながらやってるけどほとんど問題ないよ
せいぜい引数が1個増えたり減ったりしてる程度
あわれwww
>>298 HLSLなくね?
描画部分がほぼ組みなおしになった気が・・・
case WM_MOUSEMOVE:
GetCursorPos(&point);
ScreenToClient(hwnd, &point);
Drawtest(point.x, point.y);
break;
で呼んで
void Drawtest(int x, int y)
{
char str[] = "Hello World";
// 描画開始
g_lpD3DDevice->BeginScene();
RECT rc;
rc.left = x;
rc.top = y;
rc.right = x+16*strlen(str);
rc.bottom = y+16;
// 描画処理
g_font->DrawText(NULL, str, -1, &rc, NULL, D3DCOLOR_XRGB(255,255,255));
// 描画終了
g_lpD3DDevice->EndScene();
// 表示
g_lpD3DDevice->Present( NULL, NULL, NULL, NULL );
}
Hallo Worldの文字がマウスにぴったりと追従してくれません
ウィンドウの左上から離れれば離れるほど、カーソルと文字がの間が離れて行ってしまいます。
どこがいけないのでしょう?
60fpsで1フレームあたり1万ポリゴン描画は数年前の普及型オンボードやネットブックでは厳しいかな?
たとえば、入力や衝突だけ毎回やってif文で奇数フレームだけ描画とかのほうがいいかな?
>>302 たとえばMQOのフリー版で試験することは一応可能だが。APIはDXで。
あれで動かなそうだったら、もっとロジック突っ込むゲームでは無理じゃね?
簡単なMQOのポリゴン増殖講座〜。
1、基本形状を作る。
2、メニューからオブジェクトパネルをだしてオブジェクトのプロパティから、曲面分割する。
3、メニューから曲線をフリーズする。
4、気が済むまで2に戻る。
5、マウスの左ドラッグ。おもいかも〜。
ポリゴン数はオブジェクトのプロパティから確認できるので、簡単♪
ちなみに、C2DとRadeonHD5670でプロパティの数字で20万四角形位出すと10フレーム/秒位だ。体感で・・・。
>>302 Radeon HD 4350
ただ表示するだけで10k/1frame @60FPSくらいらしいよ
これ基準に考えると良いかも
でも1万っていうとかなりの量だな
俺の同人ゲーが1キャラ5〜600ポリで地形もそんなもんだから
随分たくさん画面に出せるな
頂点処理能力だけで言えば秒間60万ポリゴンなんて7-8年前のチップでも余裕なレベル
ぶっちゃけ頂点数だけじゃ評価できないよ
足引っ張りそうなのは描画回数とか
フィルレートとか半透明処理とか当時あんまり速くなかったピクセルシェーダとか
シェーダー使うだけで半分になる?
310 :
301:2011/01/08(土) 12:18:19
右下隅にカーソルに合わせたときのxyの値がウィンドウのサイズと一致するか調べなよ
ウィンドウのサイズが 640x480 で
クライアント領域が 624x442 くらいか
640*480で
623(横)*441(縦)
でした
ウィンドウ作る時にシステム領域を除いたクライアント領域が640x480になるようにするか
クライアント領域のサイズで割って補正しる
315 :
301:2011/01/08(土) 14:16:47
> GetCursorPos(&point);
> ScreenToClient(hwnd, &point);
で、クライアント領域になってるのでは?と思うので
Fontを描くときになんか間違ってるのではないかと思って
DirectXのバックバッファのサイズと
クライアント領域のサイズが違うんじゃないか?
>>316 うまくいきました!
答えてくれた人たち、ありがとうございます
うまくいきました! じゃねーよ。
原因と対処方を書け。お前は解決してうれしいかもしれないが、他の人にとってはまったく無意味。
この程度も理解できないとかウゼイよね
初心者質問スレだろ
何が悪いんだよ
320は318に言ってるんじゃないの?
HLSLのSamplerとSampler2Dって同じ動作なん?
256色のパレットカラー形式で途中でパレットを切り替えて
アルファブレンドを使わずにフェードイン/フェードアウトしたいんですが
DirectDrawにそういうAPIがあるようなんですがこの場合に
ハードウェア支援は受けられるんでしょうか。
それ以前に256色をサポートしてるチップ自体が既に存在していませんので
ということはハードウェアアクセラレーションを受けるには
24ビットとか32ビットとかで処理する必要があるということですかね
その場合にアルファブレンドを使わずにパレットアニメーションのような
フェードイン、フェードアウトをするにはどうすればいいですか
色違いの画像を予め用意する以外の方法でお願いします
例えば入力画素のRGB値が特定の値だったら別のRGB値に変換して
高速に描画をするようなことはできますか。OpenGLなどではどうでしょうか
アルファブレンドを禁止する理由は何
普通にいたポリを画面いっぱいに
黒で線形合成か白で減算合成かじゃだめなのか
シェーダー使えばインデックスパレットみたいな事を擬似実装できるとは思うけど
フェイドにパレットアニメーションを使う意味が分からない
331 :
デフォルトの名無しさん:2011/01/09(日) 21:08:37
スキンメッシュをバイナリにしてヘッダに埋め込んだら凄いサイズになったんだけど小さくしたい。
何かいい方法ない?
元の.xから4倍になってる。
>>331 具体的に何をどうしたのか書かないと答えられないだろ。
容量の増加にしても、四倍っつーと凄いように思えるが、
8KBが32KBになったのか、100MBが400MBになったのかで圧縮の可能性だって違うしな。
ただ増え方から言ってインデックスバッファで解決しそうな気もする
その前に4倍って何が4倍になったのだろう?
まさかexeのサイズじゃないよね?
.xをバイナリ形式にしてコード内にコピペしただけ
いや、.x部分だけが4倍
.xと.hのファイルサイズを比べてるなら無意味な話だぞ
読み込むバイトサイズで比較しないと
0x00みたいになってるからな気がするんだけど違う?
あー、だからテキストで貼ったんと違うか
ま、どっちにしても解決方法ないけどなw
圧縮してからそのバイナリコード貼り付けて、実行時に解凍するとかじゃダメ?
テキストで張るって全部""で囲うの?
配列の初期化みたいに入れるんと違うか?
1行1行""で囲わなきゃならなくない?
まずそれ用のツール作りからか
素直に自分用のモデルデータに変換するプログラム作った方がいいな
Resourceとして放り込んじゃダメなのか
バイナリにすると一気に実行ファイルサイズが4倍に?!
なんか、それって、Hello World 作ったら10Mのexeになった、みたいだな。
100倍以上だ。
tiny.xが1.46Mから7.5Mになったんだが
必要ない情報でも入っちゃったのかね
テキストのファイルサイズで見てるだけじゃね?
16進数に直したものをコピペしてるからなんだろうけど、
実用上問題無くても気分が良くない。配布するときも小さいほうがいいだろうし。
>>361 tiny.xをバイナリ形式にしてソースコード内に埋め込んだら大きくなった
だから、どこ見て大きくなったって判断したのか聞いてるんだって
埋め込んだヘッダファイルのサイズ
テキスト形式→バイナリ形式
1.46M→7.5M
埋め込まずにこうなるの?
ファイルサイズとデータサイズが別物だって理解してるのだろうか・・・
もしかしてexeは最適化されてちいさくなってる?
その7.5とやらのヘッダをうpして貰えればどこが悪いのか指摘しやすそうな
ソースコードはテキストファイルなわけで、そこに埋め込むということはバイナリをもう一度テキスト変換してることになるわけで
しかもバイナリをテキスト表記しようとするわけだからソースコードのサイズが増えるのは自明というかなんというか
あー多分勘違いしてた
ヘッダ中のtiny.x自体はサイズが変わってるわけなくて、展開された「0x00」みたいな文字列が7.5メガなんだ
その自明なことが分かってないお馬鹿さんなんですよ
そんな物うpしなくてもいいっていうか、もしかして
「バイナリファイルを、ヘッダに埋め込んだ」 ってのは、
例えば元のファイルが
FF FF FF FF ← 4バイト
の、4バイトの時、これを16進表記の文字列にして
"FF FF FF FF" ← 例えばこんな表記で 12bytes
みたいな事を言ってるんじゃなかろうかと邪推。
てかバイナリって意味理解してないような気がする。
テキストだってバイナリだって
リロードしたら既に書かれていたでござるの巻
たぶんそれです。お騒がせしました
大体バイナリデータを16進表現でソースに書いちゃう事を、
ヘッダに埋め込むなんて言い方、まともなPGなら普通言わないよな
他のやり方として例えばどんなやり方がある?
やり方って、何をしたいんだよ
Resourceに含めるんじゃダメなのか
てか普段どんなプログラム作ってるんだ
普通にファイルとして読み込めよ
リソースにしたって実行ファイルが肥大化するだけ
多分DirectX以前にWindowsプログラミングの基礎とかやらせないとダメな気がする
丸っきり理解してない気がする。
Cをひと通りとWINAPIをさらっとやったけどまだ内部でどんな挙動してるか把握しきれてない
>>371 じゃあ入門書当たるか、win32APIとか基本的な流れの入門サイトいくか、
そういうスレ行った方がいい。 ここはあくまで DirectXっていう1ライブラリの為のスレだから
いやマジで。 間すっ飛ばして着てもトンチンカンな事にしかならないぜ
374 名前:デフォルトの名無しさん[sage] 投稿日:2010/11/24(水) 22:24:26
exe が極端にでかいと、セキュリティソフトのチェックが長引いて起動に時間がかかることがある
UAC が絡むとやばいことになる
しかも XP で開発してると気づかないからめんどい
ってことらしいし普通にファイル読み込んだほうがいいよ
複数の xファイルやテクスチャを固めた独自形式・・・ってほど大したもんじゃないけど
データファイルを外出しにはよくしてるな。パックルーチンと、アンパックとあって、
パックは開発時用、アンパックは実行時用。実行時って行っても初期処理で開いてメモリに置いちゃう訳だが
>>328-
>>330 ファミコン風のフェードイン/フェードアウトをやりたいんですよ…
むしろwin32apiでBitBltでもいいのかもしれないな
8bitビットマップなら転送量も少なくて済むだろうし
377 :
228:2011/01/10(月) 15:31:00
>>270 報告遅れました。今のところ失敗です。
同じコードでマルチヘッド(一枚の場合)とマルチデバイス(従属アダプタが
ない場合)の両方動くのですが、合わせた場合だとうまくいきません。残念。。。
ウインドウは、
一つのフォーカスウインドウを全てのグラフィックカードで共有。
一枚目のカードの主アダプタのデバイスウインドウでこのフォーカス
ウインドウを使用。その他のアダプタにはすべて違うデバイスウインドウを
作成。
すみません。
あるベクトルを正面として、90度上下左右方向のベクトルを求めたいのですが、どうすれば良いでしょうか?
D3DXMatrixRotationAxis で正面方向を軸に90°回そうとしたのですが、
正面で90度回しても上下左右を向く訳がないと気付き・・。そもそもその軸が求まれば解決なのですが; orz
正面ベクトルと仮の上方向ベクトル(0,1,0)との外積が横方向のベクトル
正面ベクトルと横方向のベクトルとの外積が本当の上方向ベクトル
380 :
378:2011/01/10(月) 16:44:41
>>379 なるほど〜・・。D3DXVec3Crossで求まるのですね。 感謝・・! orz
クオータニオンじゃダメなのか?
数学弱いのでクオータニオンは任意軸での回転しか使った無い
クオータニオンだろうがなんだろうが
正面ベクトルを軸にくるくる回っちゃって無限に存在するから
>>379みたいに天井方向なり水平方向なりを1つ決めてやらないと求まらないでしょ
382先生はクオータニオンの隠れた性質について行ってくれるんだろ
じゃなきゃ趣旨がまるで解ってないアホだ
すみません。モデルの大きさは抜きにして、
モデルがカメラより前に有る、またはカメラに映るかを判定するにはどうすれば良いのでしょうか?
388 :
387:2011/01/11(火) 00:05:23
内積で求まるらしい計算方法を見つける事ができました。失礼しました。
はぁ・・・
Visual Studio 2010 C++ を利用して d3d9.dll のラッパー dll を作りたいと思ってます
今までマイコンでの C 程度の知識しか無く、いまいち分かりません
とりあえずすべての命令を d3d9.dll に丸投げするには、どのようなコードになるのでしょうか?
マジレスを待っている釣りならもう少し上手くやってほしい
>>391 何を持って釣りとするのかよく分かりませんが、もしかして Visual Sutdio 2010 C++ では不可能です?
>すべての命令を d3d9.dll に丸投げする
意味がわかりません
>>392 マイコンの C 程度しか知識がなくていまいちわからない人が、
どうして C++ で d3d9.dll の、ラッパーの、DLLを、作ろうなんて思ったのか
何をする為のラッパなのか。目的が無いのに知らない言語で書こうとはしないだろ?
「全ての "命令" を丸投げするようなコード」 って奴がもしもあったとして、
それをどうやってスレなんかで説明出来るって言うのか。 またそんな曖昧な質問する奴が、仮にそれをどうしたいのか
その辺、例えばWindows上でMS謹製のIDE使ったからって、どうにかなるなんて普通思わないだろっての
>>393 要するに、d3d9.dll と全く同じ挙動をする dll を作りたいと言うことです
でも、d3d9.dll と全く同じプログラムを組むのはとても無理です
そこで調べてみたところ、ラッパーやらフックやらの単語には当たったのですが、いまいちよく分からなくて
>>390 ウィンドウを丸投げして作ってくれるような便利機能はDXにはない。あえて言うならDXUTということになるが。
どっとnetではないDXの最低要件はC/C++&WINAPI&DX だからな。
>>395 その道は正道ではないと思われる。
普通にインターフェイス取得して普通のアプリつくりなよ。
3Dゲームライブラリみたいのを作りたいわけじゃなくて?
>>395 まったく同じ挙動でいいならラッパ書かずにそのまま使えよ
そうでないなら必要な仕様起こして C++ で書けよ
C++ 自体わからないならこのスレ来る前に、言語の勉強しろよ
言語だけならわかるって話ならOSの挙動理解しろ
その中で、OSと同調して動くプログラムは直でBIOS叩かないでAPI関数を経由させるって事の意味を理解してコード書けよ
その後DLLってどんな物なのか理解しろ
その上で、やろうとしてる事をもう一度自分で自分に説明してみろ
おわり
>>394 おっしゃるとおりなのですが、C の知識で触っていく内に分かることもあるかと思いまして
ただ、.Net 上で動く 2010 ではそもそも無理なのかなーとは思いました
具体的にやりたいことは、既存のゲームの画面に時計を表示させたりですね
>>396 とりあえず、です
そこへ独自の挙動を組み込んでいきたいというか
>>397 DXUT について調べてみますが、どのみち .Net framework 上で動くようなプログラムでは難しそうですか
あぁわかった・・・ もしかして鍵はこれか
>今までマイコンでの C 程度の知識しか無く、いまいち分かりません
もしかして、8bitないし16bitの時代にBASIC、マシン語、C言語でプログラミングしてた時代の人か
もしもそうなら、今のOSの下で動くプログラムは全てブラックボックス(ベンダ提供の何らかのライブラリ、win32やDirectXなど)
を叩く格好で動かすのが正道だから、もしもそれを外れて・・・
例えば直接機械語でVRAMやGRAM叩いて動かすようなイメージ持ってるとしたら、ちょっと難しいとは思うよ。
そしてその場合全責任は自分で取る訳で、その手順の中でさらに DLLっていうOSが管理するリンク手段使おうって話なら
もっとややこしい事になると思うよ。 少なくとも Microsoft製品のエキスパートにならないと無理
ハッキングだの何だのといった悪い方向に育つから止めときなさい
とりあえず組み込みで3Dっぽいことやりたいならこういう感じだ。
1、任意の座標に塗りつぶした3角形をかけるようにする。
2、行列や、クオータニオンでアフィン変換する。
3、3角形を書くときにピクセル単位でシェーディングできるようにする。
すべての図形は3角形から作れるといわれている。
しかし、トップを行くにはPC業界が積み上げたスタックを習得しないといけないかも。
>>404 単純に描画したいだけなら、G-RAMのどこかのアドレスにまず適当なbit数でデータ描けて、
あとはその処理で線分を描けるようにして、
三頂点で作られる面をスキャンラインのようにして塗りつぶすような処理があればおkじゃね
別にそれ自体は行列も四元数もいらない。アフィン変換もいらない・・・ アフィン変換的な処理はいるけど
皆さん、いろいろ親切にありがとうございます
VC が駄目なら gcc でコンパイルとか、APIHijack と言う物で実現できるんじゃないかと今調べてましたが、自分の質問がスレの趣旨とずれているような気もしてきました
DirectX を利用した純粋なプログラムというわけではないので、やっぱりズレているかな
API や ライブラリ、フレームワークといったカーネルの上に乗っかってる諸々についてはある程度分かっているつもりでしたが、
そのライブラリひとつに引っかけるのにもいろいろ大変なんですね
うーん
>>406 もしもお前が古代から来たおっさんでなく、まして機械語でG-RAMを直接叩いて、
DirectXの代用品のような物を自作したい、って話でも無いとしたら、
技術の伴わない、読んで得た知識だけの、目の前の物が理解できないから自分で全部やってしまおうと思った中二病
というか、VCとgccがどこが同じでどこが違うかの違いもわかってないとか、なんでやねんって話
408 :
デフォルトの名無しさん:2011/01/11(火) 22:51:41
あげてしまった・・・。
>>407 文面から中二病と判断するに至る経緯がいまいちよく分かりませんが、技術が伴わず、読んで得た知識だけというのはその通りです
当然結果には結びつかないので、こちらにお邪魔した次第です
いろいろ荒立ててしまい申し訳ありませんでした
ネット上に散らばった資源を有効活用し、もう少し考えようと思います
>>408 ありがとうございます
やりたいことが既存のゲーム画面に介入するという物で、もちろん正道ではないですね
よく分かります
「その前に覚えることがあるだろ」
急がば回れですね orz
>>410 とりあえず、聞きかじりで良いから、白紙のウインドウだしてみー。コードのこぴぺ禁止で。
おまじないばかりだけど、ウインドウズではよくある話。
>>やりたいことが既存のゲーム画面に介入するという物
これを最初に言っていればどれだけレスがうまくついたやら。
今までの全部無駄になっちゃったよ・・・。
>>410 お前はここに来るより前にもっと基本的な所からやり直せよ
じゃないと何も書けないよ。 とりあえず win32API を使って
C/C++ で普通にGUIアプリケーション書けるようになってから考えろ。 まずそれ。
カーネルがどうだとか、そんなのどうでもいいから、まずそれ。
「なぜd3d9.dll(というかDirectX)を使おうとしないのか」という点が分からないのでどうにも答えようがない。
>>401で独自の挙動という話はあったけれど、DirectXの提供する機能は割と下位のものが多く、
極端な話printf()とかと同じような標準的な関数レベルで使っていくことになる。
普通のアプリケーションやゲームを作る上で、その挙動を置き換えたいという発想は(少なくとも、あんまり)出てこない。
出てくるとすれば「何をやるにも逐一面倒で、もっと簡単に〇〇をできるようにしたい」というような発想であって、
またそういうためのライブラリ(簡単に使えるようにしたもの)を普通ラッパーと言う。
決して「DirectXを置き換えたもの」じゃない。wrapper、「包み込んだもの」。
>>412 JAVA であるライブラリを利用した RS-232C 通信プログラムなら作ったことがあります
これもマイコンとやりとりするのに必要でw
でも、そういう基礎から作り直すのも必要ですね
質問者は学生か。マイコンのCって、学校でやる基礎の話で、
あとはGC言語しか触った事がなく、でもゲームが大好きで
既存のゲームをそのまま改造的な事をしたいとかそういう奴か。
>>416 に送る言葉は
>>400 と
>>414
あー、外部から別のアプリやゲームの画面情報を取得したり、また描画に(擬似的に、或いは完全に)割り込んだりすることもできるが、
それをやるのに基本的にはDirectXをハックする必要はない。
また、それはWindowsのウィンドウ描画やイベント処理まわりに付随するので、その辺が分かっていないとどうしよもうない。
夢見がちな勘違いド素人のゆとりに付き合うとか
お前らもずいぶんお人良しだな
何とかなりそうです
いろいろアドバイスをいただき、ありがとうございました
なんとかなりそうなのか・・・
やべぇマジかっけぇ
Microsoftに就職できるだろ
この文章だけで見通しが立つとか天才じゃないのか?
中二病らしい幕切れ
常駐サービスを起動する形でもいいなら
単純にウィンドウをゲーム画面の上に置けば割り込まなくても描画できね?
アクティブなウィンドウの右端に〜って感じでデスクトップマスコットみたいなのでいけんじゃん
特定のウィンドウ名でしか起動したくないっていうならそうもできるし
描画自体を書き換えたいとかじゃねえの
まあぶっちゃけ初心者質問スレに書きこむレベルじゃ次元が違いすぎて何していいかもわからないとは思うが
何故ここまで見当違いの回答ばっかなんだ
>>427 君が見てるゴッドビューと流れが違うんだよ。
最初の質問の仕方で大分変わる見本という感じだな。
最初の質問の時点で何がしたいのかすぐわかったが。
長すぎるんでポイントになる部分だけおいておく。
#define CINTERFACE
#include <d3d9.h>
DWORD OldProtect;
VirtualProtect(D3DDevice->lpVtbl, sizeof(IDirect3DDevice9Vtbl), PAGE_EXECUTE_READWRITE, &OldProtect);
D3DDevice->lpVtbl->EndScene = MyIDirect3DDevice9_EndScene;
VirtualProtect(D3DDevice->lpVtbl, sizeof(IDirect3DDevice9Vtbl), OldProtect, &OldProtect);
あちゃー。
>>431 そういう話なら VirtualProtectEx じゃないの?
ProxyDLLなりDLLインジェクションなりで割り込みたいソフトのプロセス内で実行するから
Exである必要はないよ
435 :
デフォルトの名無しさん:2011/01/12(水) 05:54:09
面(壁)と球の簡単な当たり判定のやり方を教えてください
Z軸0地点+側を向いた無限長の壁があると想定して、
ボールのポジションからボールの半径を引いたzの値が0以下になったら当たってる
437 :
デフォルトの名無しさん:2011/01/12(水) 06:14:57
┏━━━┓━━━━┳┓
┃┃━┓┻━┓┣━┛┃
┃┣┓┣━┓┣┓┳━┫
┣┓┗┛━╋┓┻┓┏┫
┗━┻━┻━━┗━━┛
このようないろいろな向きがある壁に、当たったら球の座標を
壁に当たるギリギリのとこにしていく迷路のようなものを想定しています
当たり判定に簡単も難しいもないから真面目に勉強しろよ
DirectXの質問じゃなくてアルゴリズムの質問だよなこれ
DirectX的に答えればよくね?
メッシュにレイ飛ばす関数使って、当たったポリゴン取得して
その法線と当たり位置取得して、球の中心と当たり位置の距離が球の半径より小さかったらHit
Hitしてたらあたり位置から法線方向へ球の半径分だけ置いた距離を球の位置に設定して補正完了
これ全部DirectXの関数でできるね
すみません。
地形(不透明)以外の、全モデルをソートして遠い順に描画しています。
その中に【両面描画する半透明モデル】が有るのですが、
z値の書き込み(D3DRS_ZENABLE)次第で下のようになります。
Off・・・×理想どおりに描画されない(一部ポリゴンが欠落) ○他モデルとの前後関係は正常。
On・・・○理想どおりに描画される。 ×他モデルとの前後関係は破綻。(z値が0.0になる?)
何か、両方の○を兼ね備えた良い方法はないでしょうか・・?
D3DXMatrixInverseの第二引数は何に使用するのですか?
いまいちヘルプを呼んでもわかりませんでした。
行列式は、関数内部で逆行列を求める際に使っている。
引数になっているのは、せっかく作ってもったいないからお裾分けする為。
例えば何に使うかはwikiってください。
四角ポリゴンってDirectXで三角2つに変換される?
DirectXのXファイルの読み込みルーチンたしかゴミだろ
マテリアル分割もしてくれないし、N角形ポリゴンも変換して描画してくれなかった希ガス
間違ってたらスマンコ
じゃあメッシュつくるツールでわざわざ三角2つにして法線の向きを調節したりしなくてもいいん?
四角1つのほうがポリ数節約になる?
描画されるかどうかということなら四角ポリゴンを三角二つで描画する機能はあるけれど
四角ポリゴンの描画規則が一つではないので、意図した通りにされるとは限らない。
(TriangleStrip、TriangleFanとかで調べてみるといい。頂点を並べる順番が違う)
DirectXでは三角ポリゴンのみ扱うみたいなこと書いてあった記憶があるから心配になった
ああ、リロードすりゃよかった…
>>447 四角を四角として描画する機能はない。内部的には全て三角になる。
頂点数は節約されるけどポリ数は変わらない。んで、今の環境だと頂点数を節約するメリットもあんまりないかと思う。
内部的には全て三角になるってことはやっぱ対角線を指定しておいたほうが確実か・・・
Xファイル読み込みルーチンはなにもやってくれないっけ?
それともテキトーに描画してくれたっけ?
D3DXあたりに最適化したストリップを作るとかそういう機能はあったような気もするが
昔からの癖で最初から三角で作ってしまうな…
1つのメッシュに複数のマテリアルつくと強引に1つで描画しようとするでしょ
もういい加減治った?
完全に平面な四角の場合、どっちに対角線付いても同じか・・・
と思いきや法線をスムーズにすると結構変わる?
複数のマテリアルって表示できないの?
メッシュのロードのメソッドの後にマテリアルの数を数えたような・・・?
どっちでもいいだろそんなの
くだらねぇ
それで売上上がるの?
こだわるなよ給料泥棒(俺のいた会社の社長談)
>>443 だいたいイメージはわかりました ありがとうございます
DirectXは三角形しかとかツールが云々とか言ってる人は
多分プログラミングまったく関係無いただのエンドユーザ
ちょっとハマってるので教えてちょーだい
縮退三角形で変形済みの平面ポリゴンを表示しようとしてるのだけど、
何故か左回り(D3DCULL_CW)じゃないと表示されないという謎の状態。
色々省いてるけど、コードは次のレスのような感じで組んでる。
カリングの設定を、(D3DCULL_CCW)でポリが見えるようにしたいのだけど
何がダメなのかな。
461 :
460:2011/01/13(木) 17:38:15
D3DVERTEXELEMENT9 VertexElements[] = {
{0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0},
{0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD , 0},
D3DDECL_END() };
m_pVertexData[ iVertexIndex ].v4Pos.x = fX;
m_pVertexData[ iVertexIndex ].v4Pos.y = fY;
m_pVertexData[ iVertexIndex ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex ].v4Pos.w = 1.0f;
m_pVertexData[ iVertexIndex + 1 ].v4Pos.x = fX;
m_pVertexData[ iVertexIndex + 1 ].v4Pos.y = fY;
m_pVertexData[ iVertexIndex + 1 ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex + 1 ].v4Pos.w = 1.0f;
m_pVertexData[ iVertexIndex + 2 ].v4Pos.x = fX + m_v2Size.x;
m_pVertexData[ iVertexIndex + 2 ].v4Pos.y = fY;
m_pVertexData[ iVertexIndex + 2 ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex + 2 ].v4Pos.w = 1.0f;
m_pVertexData[ iVertexIndex + 3 ].v4Pos.x = fX;
m_pVertexData[ iVertexIndex + 3 ].v4Pos.y = fY + m_v2Size.y;
m_pVertexData[ iVertexIndex + 3 ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex + 3 ].v4Pos.w = 1.0f;
m_pVertexData[ iVertexIndex + 4 ].v4Pos.x = fX + m_v2Size.x;
m_pVertexData[ iVertexIndex + 4 ].v4Pos.y = fY + m_v2Size.y;
m_pVertexData[ iVertexIndex + 4 ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex + 4 ].v4Pos.w = 1.0f;
m_pVertexData[ iVertexIndex + 5 ].v4Pos.x = fX + m_v2Size.x;
m_pVertexData[ iVertexIndex + 5 ].v4Pos.y = fY + m_v2Size.y;
m_pVertexData[ iVertexIndex + 5 ].v4Pos.z = 0.0f;
m_pVertexData[ iVertexIndex + 5 ].v4Pos.w = 1.0f;
pDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 3, m_pVertexData, sizeof(VERTEX_INFO) );
スクリーン座標のイメージで頂点を置いてしまってないか?
CCWでやるなら上下を反転させる必要がある。その置き方だと「下から上に」置いている。
463 :
460:2011/01/13(木) 18:27:00
>>462 変換済みなのでスクリーン座標のイメージであってる。
CCWだと上下反転するのか!びっくりだなぁ。
なにわともあれ、ありがとう。
CCWだから反転してるわけじゃなくて
変換済み頂点だから
通常の座標系(上方向y+)ではなく
スクリーン座標系1(下方向y+)だから反転してるように見えてるだけじゃ
D3DRENDERSTATETYPEの内容がD3DRS_ZENABLEかなどを真偽したい場合、どのようなコードになりますか?
>>465 やっぱGetRenderStateじゃねぇか?
DirectX9で2Dゲームを作っています。
テクスチャーのアルファ値のある部分を、赤色で塗りつぶしたり、
青色で塗りつぶしたりしたいのですが、どんな方法があるでしょうか?
やりたい事は、テクスチャーに描かれたキャラを、
特定の色で光らせたいと考えており、今のところは、
二つのテクスチャーを用意して、片方のテクスチャーの
抜き色以外の部分を光らせたい色で塗りつぶして、それを表示し、
その上に半透明で本来のキャラを描写するという事をやっていましたが、
もしかしたら他に方法があるかもしれないと思い、質問しました。
その演出で光ってるように見えるかは置いといて
シェーダー使えば一発だろうし
使わなくても
ポリゴン(頂点)の色を光らせたい色にしてテクスチャカラーと
加算か乗算でブレンドすれば似たような効果になるんじゃね?
加算か乗算でブレンドすると透明になりませんか?
とりあえずシューダーを勉強してみようと思います。ありがとうございました。
>>469 背景とブレンドするわけじゃなくて
テクスチャステージステートで頂点カラーとテクスチャカラーをブレンドするんだよ
>>471 重ね重ね、ありがとうございます。ようやくやりたい事が実現出来ました。
Directx11にて、フルスクリーン切り替えでちょっと躓きました
症状としてはフルスクリーンからの復帰で画面が真っ白になるというものです
どうやらwarningによると、IDXGISwapChain::ResizeBuffersを呼ばなければならないようですが、
Alt EnterでDx11が勝手にやる上にWM_SIZEイベントで補足できません
勝手にフルスク機能を無効化、
またはこのResizeBuffersを実行するタイミングをどうすれば知ることができるか教えてください
よろしくお願いします
>>474 毎フレームやってりゃ問題ないんじゃないか?
まぁ、画面が真っ白ってデバイス消失してるだけのような気もするけど。
IDXGIFactory::MakeWindowAssociation()はどうしているの?
これをDXGI_MWA_NO_WINDOW_CHANGESで呼び出しておけば
勝手に何かしちゃうってのは無くなる様だが
(ノートPCを閉じて)マシンを休止状態→再立ち上げすると
DirectDrawでの描画が止まってしまうのですが
原因はなんでしょうか?
ウィンドウプロシージャで
case WM_POWERBROADCAST:
UMsg = BROADCAST_QUERY_DENY;
return 0;
break;
は既にやっています。
また、描画を行う関数は再立ち上げ後も
普通に動いているみたいです。
サーフェスが壊れる?か何かしてるのかと思いましたが
デバッグで見るとプライマリサーフェスのアドレスが
再立ち上げ前後で変わったりはしていません。
モデルを拡大すればするほど、そのモデルだけが暗くなってしまうんですが、
どうやったらそれを防げるでしょうか?
拡大縮小したら法線を正規化
D3DRS_NORMALIZENORMALS
>>475-476 ありがとうございます
この線でもうちょっと試行錯誤してみます
ありがとうございます
>>479-480 法線が原因だったんですね!
今までライトを色々変えて試していたんですが、無駄でしたね(苦笑)。
おかげさまで、解決することができました。
ありがとうございました。
Directx9のアニメーションコントローラーで質問です
複数のAnimationSetを含むxfileを使いID3DXAnimationControllerで切り替え等の制御をしているのですが
各アニメーションの長さを取得する方法はないでしょうか?
ID3DXAnimationSet::GetPeriod
>>478 ミップマップを作らなくしてみる
って縮小じゃなく拡大か…違うっぽいな
487 :
474:2011/01/16(日) 18:17:31
IDXGIFactory::MakeWindowAssociation()でDXGI_MWA_NO_WINDOW_CHANGES
ですが、戻り値では成功を示していますが、
動作としてはalt + enterで勝手にフルスクされてしまいました
毎フレームIDXGISwapChain::ResizeBuffersを呼び出すと、
一応フルスクリーンとウィンドウを行き来がうまくいきました。(RenderTargetViewを開放し、Resize、再作成)
しかしDirectxx11の警告は残ったままです
DXGI Warning: IDXGISwapChain::Present: Fullscreen presentation inefficiencies
incurred due to application not using IDXGISwapChain::ResizeBuffers appropriately,
specifying a DXGI_MODE_DESC not available in IDXGIOutput::GetDisplayModeList,
or not using DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH.
DXGI_SWAP_CHAIN_DESC::BufferDesc = { 800, 600, { 1, 60 }, R8G8B8A8_UNORM, 0, 0 };
DXGI_SWAP_CHAIN_DESC::SampleDesc = { 1, 0 }; DXGI_SWAP_CHAIN_DESC::Flags = 0x2;
一応初期化コードを張ります
http://codepad.org/6FA8kpcQ 原因がわかりましたら教えていただきたいです
488 :
デフォルトの名無しさん:2011/01/16(日) 20:34:01
SlimSX + VisualC#2010 + DX11で勉強しているんだが、
標準出力にD3Dのデバッグメッセージが出ない。
VisualC++2010では出るんで、DXのコンパネの設定には問題ないみたい。
どうすればいいかわかりますか?
>>488 D3D11_CREATE_DEVICE_DEBUG
をたまたまセットし忘れてるとか?
491 :
デフォルトの名無しさん:2011/01/17(月) 00:44:25
DirectXアプリって一度に何個まで実行できますか?
WindowsXP、DirectX9です。
D3DERR_OUTOFVIDEOMEMORYが返るまで
あっそ
で?
>>493 頭よわいこはマンガでも読んでてください
495 :
デフォルトの名無しさん:2011/01/17(月) 18:18:46
D3DXMatrixOrthoLH();
これがイマイチわかりません。ビューボリュームのサイズを決定していると思うのですが、
四角垂ではなく長方形なのに近平面と遠平面を指定する?のがわかりません。
この関数は空間のどこに描画しているのですか?
>>495 画面に表示されるときは平面だが、
このZは遠くのものを小さくするためには使われずに、
Zバッファに渡される値の計算のために近平面と遠平面を指定している
普通に2Dに書きたいだけならば、
頂点バッファの頂点のzの値を近平面に設定しておけばいい
実際に頂点を自分で紙の上ででもmsdnの行列の式で掛け算してみると、
最終的に-1 <= x <= 1,-1 <= y <= 1, 0 <= z <= 1 の間に変換されるのがよくわかる
ただあの式は行優先の行列だから注意が必要だが
すみません。現在、キャラの頭上の名札&HPを
VertexBuffer=キャラ数分でDrawPrimitiveもキャラ数分 テクスチャ=全キャラ共有(UV座標別)
とやって描画しています。
しかしDrawPrimitiveやSubsetは重いと聞き、VertexBufferを1纏めにしようかと思ったのですが、
纏めるとソートして描画順序を操作する事は出来なくなりますよね。
でも抜き色しか使わないなら1纏めでも問題ないハズですし、纏めるべきでしょうか?
それともせいぜい200キャラ未満の板ポリなんて纏めても大した意味がなく現状で良いのか。
自分ならこうする という意見で構いませんので助言頂けますと助かります。
>>497 マネージャをひとつ作って、
そいつが動的に書き換えられる唯一の大き目の頂点バッファを持って、
描画リクエストをそいつに送り、
描画自体はマネージャが纏めて行うと早いはず
「重さ」だが、FPS制限をはずすと直感的にパフォーマンスを計測できるから
オススメだ
499 :
498:2011/01/17(月) 22:40:36
>>497 あとは4角形ならインデックスバッファを
使ったらいいんじゃないだろうか
>>497 200キャラ未満の板ポリだからこそ纏めるべきだと言える
4頂点しか描かないDrawPrimitiveを200回も発行するのは結構足引っ張ってるぞ
てす
503 :
497:2011/01/18(火) 19:45:44
>>498-501 色々なご助言ありがとうございます。纏める事に決め、IndexBufferでの描画を最低限実装しました。そこで2点質問が。
@名札ではなく、情報窓(最前面(D3DFVF_XYZRHWでz値は常に0.0f))のそれぞれの前後関係(重なり具合)を
Indexの並び替え(つまり描画順序の操作)で再現すると、zファイト(ちら付き)が起きる危険は高いでしょうか?
A名札やダメージも纏めて、D3DXVec3Projectで得たz値+αで描画しようと思うのですが、
z値は相対的な存在と聞き及びました。
つまり常に固定値で+αすると手前のキャラを貫通したり、逆に対象にめり込む危険が有るのでしょうか?
良い方法が有れば、ご助言頂けますと幸いです。
あれ? リロードしたつもりだったのに。
>>503 前者はチラつきは起こらない。
D3DRS_ZFUNC と描画順によって決定される。
後者はどんなゲームでも大丈夫な銀の弾丸は無い。
良い方法は、
A) 勉強して z について理解し、そのときのプロジェクトの z の範囲を分析した上で適切な値を設定すること。
B) 衝突判定を行って重なったりめり込んだりしないようにする。
のどちらか、または両方。
506 :
503:2011/01/19(水) 02:45:13
>>504 情報ありがとうございます。双方少し目を通して上はページ保存、下はDLさせて頂きました。今後参考にさせて頂きます。
>>505 前者は大丈夫なのですね環境差の不安が拭えました。後者は衝突判定というのも手だったのですね。
解決方法の目処が立って来ました。ありがとうございます。
そして再質問で申し訳ないのですが、
@描画時(DrawIndexedPrimitive)にテクスチャを切替たく、何度もバラして呼ぶと負担は当然増大するでしょうか?
A現在、テクスチャは全て2048x2048を上限に作っています。
最終的に、常に多数のモーション付きモデルを再生し続ける類の、負担が多めの物になるのですが、
切替コストを減らす為に4096x4096や、8192x8192のテクスチャを利用すべきと思われますか?やめた方が無難でしょうか。
個人的なお考えで構いませんので、ご助言頂けますと幸いです。
てか、うぜぇ
こんなの実測あるのみ
名札出す前にその分モデルも描画するんだからぶっちゃけまったく変わらないと思う
509 :
506:2011/01/19(水) 16:26:03
>>507 とても嬉しい情報が多数載っておりました、勉強になります。 ありがとうございます。
>>508 失礼致しました; その辺は変わらない可能性も有るんですね。 ご助言ありがとうございます。
今回はとても勉強になりました。回答下さった方々、有難うございました
MIDIの再生にはMIDI APIを使ってwavの再生にはdirectMusicを使うことってできますか?
MIDIは知らんがwavならXAudio2かちょっと古いDirectSoundだろう
質問です
日本語フォントをポリゴンとして描画したいが、
サイズが大きいのでテクスチャフォーマットを小さい
D3DFMT_A8を使おう、そして色はシェーダー定数でいれてしまおう
という流れは自然ですか?不自然ですか?
>>512 A4L4 お勧め。
A == 0 が抜き、
A != 0 && L != 0 が文字色
A != 0 && L == 0 が縁取り色
というようなことができる。
で、色の指定はシェーダ定数でもいいけど、頂点色にして
>>504 のやり方を使うと DrawPrimitive() の回数が減る。
(画面中の文字色が一色の場合は減らないけど)
514 :
デフォルトの名無しさん:2011/01/21(金) 09:39:36
マルチプルレンダリャンゲターゲッツ(複数形大事)を取り消すとき、
for (int i = 0; i < HoweverManyRenderTargetsIJustUsed; i++)
{
GraphicsDevice.SetRenderTarget(i, null);
}
美しくないそうですが
これの何が美しくないというのですか。
> レンダリャンゲターゲッツ(複数形大事)
ただの質問にいちいち小ネタをはさもうとするあたりが美しくない
>>512 シェーダー使うならRGBA全部を完全に別のモノクロバッファとして使うと
1つのテクスチャにかける文字数が増えるから、1回のDrawで書ける文字数が大幅に増えておすすめ
R32
>>514 言ったヤツに聞かないと分からないが、考えられることとしては、
・0 を無効にする意味は無いから for の初期化は int i = 1 とすべき
・有効無効は bitset で指定すべき
・レンダーターゲットのセットを表すクラスを用意するべき
・ever を紛れ込ませるような小ネタを控えるべき
・インデントに を使うべき
あたりかな。
>>516 自分の使ってない方法を薦めるのは誠意が無い。
もし使ってるなら、帯域とシェーダリソースの無駄だから、固有の事情が無い限りはやめたほうが良い。
519 :
516:2011/01/21(金) 17:24:22
>>518 自分のGUIライブラリの文字表示部で使ってるので教えてください
上記でDrawの呼び出し回数が少なくなるのは分かってもらえると思いますが
それ以上に帯域の無駄使いによるオーバーヘッドが大きいと言う事ですか?
一般的なテクスチャフォーマットなので、ある程度の最適化はされている様に思います
日本語や漢字も使うとなると512x512では足りなくなり、サイズはビデオカードの
制限があるため大きくはせず、この方法を採用しました
シェーダーリソースの無駄と言うのは意味が分かりません
確保した領域が無駄に空いている前提の話ですか?
自分の方法を押しつけたいのではなく、この方法があまりに無駄だと言うなら考え直したいと思います
520 :
512:2011/01/21(金) 22:29:18
>>513 ありがとうございます!確かにシェーダ定数より頂点カラーのほうが
楽ですね!こっちでやろうと思います。そして縁取りが必要になったら、
D3DFMT_A8L8も考えたいとおもいます!
>>516 ありがとうございます
すいませんこっちの方法はちょっとわかりませんでした(汗
とりあえず今は513さんのやり方でやってみようかとおもいます。
>>519 518ではないけど俺が思ったこと。
まぁ、話半分に聞いてくれ。
>一般的なテクスチャフォーマットなので、ある程度の最適化はされている様に思います
8bppのテクスチャ送るのと32bppのテクスチャ送るのとどっちが軽いかなんて最適化とかそういう問題ですらなく自明だろ?
>日本語や漢字も使うとなると512x512では足りなくなり、サイズはビデオカードの
>制限があるため大きくはせず、この方法を採用しました
日本語や漢字も扱うなら、文字(文字列)が必要になるたびにCPU側のコードで描画して、
テクスチャとして転送するのが普通だと思うが。
(そこに最適化のためにキャッシュ機構を組み込んだりはするだろうけど)
毎フレーム完全にランダムな文字を適当に表示するとかでもない限り、
一枚のテクスチャに全文字を描画しておくなんてことはしないと思うぞ。
512x512x4では、たとえば一文字を16x16としても4096文字しか置いておけない。
この文字数は、例えばノベルゲームのように、完全な日本語の文章を表現するには
ちょっと足りないくらいのレベル(JIS第一・二水準漢字の合計が6000文字強くらい)。
ましてや太字化や文字サイズ変更など望むべくもない。
おとなしくDirectX11に移行しなよ
テクスチャサンプラが配列に入れられるからテクスチャ1枚に収める努力がいらないぞ
9でも擬似的にできるけど制限がある上にあまりスマートじゃないんだよね
DirectXはまじで新しい奴の方が全然いいな
初学者にはハードル高くなってるかもしれないけど、
一度理解した人にとってはどんどん高度な機能を直感的に扱えるようになってきてる
524 :
デフォルトの名無しさん:2011/01/22(土) 01:52:42
fxc.exeがエラー吐くなんでだろう?
fxc.exe effect.fx /T fx_2_0 /Fo effect.cfx
526 :
デフォルトの名無しさん:2011/01/22(土) 01:58:57
.....\fcx.exe は有効な Win32 アプリケーションではありません。
というメッセージボックスが出て
コマンドプロンプトでは「アクセスが拒否されました」と出ます。
>>526 DirectX SDK Command Promptで実行すればいい
DirectX SDK Command Promptとは何ですか?
>>528 スタートメニューのDirectXフォルダのどっかにあるだろ
お前はまずコマンドプロンプトの使い方と環境変数PATHから調べるべきだ
あとfxc.exeを使わなくても十分なDirect3Dのアプリケーションは作れるぞ
D3D11が出たのでD3D11、ってのは俺は大嫌いだな
D3D11デバイス持ってない人はどうなる。
俺ならD3D7パスから必ず書く。
x D3D7パスから必ず書く
o D3D7パスしか書けない
シェーダー無いとCPU側の最適化で
構造変わりすぎてやってらんないし、
HLSLしか書けないので、
DX9
何がムカつくって、アセンブラシェーダ書けなくなったのがムカつく
何がHLSLだ
何がGLSLだ
しゅっぽっぽぅーとか煙吐いてろっての
モバイル機ではアセンブラシェーダーは現役っていうかHLSLつかえん
DirectInputで、マウス左ボタンのダブルクリックを判別するにはどうしたらいいですか?
>>535 押されていない間フレームを数えればよろし
GetDoubleClickTimeというそのまんまなAPIがあってだな
2Dゲームの効果音を鳴らすくらいなら
Xaudio2よりdirectMusicの方がいいですか?
539 :
538:2011/01/23(日) 00:58:27
間違えた×durectMusic○directSound
XAudioの方が簡単だと思う
1ms未満のティックをやりたい場合どうしたらいいのですか。
最悪でも1nsでカウントしてくれないと話にならないのですが。
>>541 QueryPerformanceCounterという関数があるらしいが
ぶっちゃけ実際にしっかり動いてるのかどうか試してみたことない
精度を求めるならASIO
よってスレ違い
544 :
538:2011/01/23(日) 09:55:52
>>540 ありがとうございます。
XAudio2でやってみます。
x86なら、本来はAPICを自分で制御するのが当たり前。
このタイマユニットを利用して1nsを得る。
ところが、これをやろうとするとカーネルサンダース側のドライバが必要だときたもんだ。
バカか
OS上で叩きたいならそのOSの都合も許してやれ
自分で時間計測用のスレッド裏で走らせればいいじゃん
実測値ではなくて予想値になるからパフォーマンスが不安定な環境だと精度悪いかもだけど
スレッドの切替にどんだけ時間食うかわからないからなー
俺の予想では1ms単位になると思うな
>>547 わざわざスレッドを設けるとどんなおいしいことがあるんですか?
RDTSCなどは、使い物にならない。
まずRDTSCの呼び出し自体が遅い。
TSCカウントはコアごとに違うので一定ではない。
TSCがクロックにより変動するCPUが多数を占める。
更に問題なのは、マルチコアの場合
RDTSCで読み取るTSCの値がどのコアのものなのか分からない
呼ぶたびに違うコアが呼ばれるので、
例えばあるコアのTSCが100のときに呼んだとしても
次にRDTSCしたら別のコアが呼ばれ、そのコアでは60
だということも大いに有り得るわけで
まったく役に立たない。
>>541 DX使用で1ms以下のタイマーが必要な場合を想像つかないが、何に使う?
制御関係なら、PCにオンボードCPU繋げて使えばいいだろ。
具体的に何に使うんだ?
少なくともAIなら1msスライスじゃ
まともなもん出来ないな
>>552 >少なくともAIなら1msスライスじゃ 、まともなもん出来ないな
そこんとこkwsk、想像つかんぞ
AIの場合、余程アルゴリズムが複雑でない限り
1クロックで解を出すべきものだろ
そういう性格だから、switch-caseは絶対に使わない。使っているのもいるかもしれないが、それはカスだ
1クロック、1デューティが1nsだったら1nsで出す。
だから1msは無駄もいいとこだ
>>554 それは1msスライスと全然関係が無いじゃないか?
AIで1msスライスを必要としているのはあるのか?
要は、
1msの間に何回1nsがあるか
ってこった
処理回数は多ければ多いほどいい
だから、1msスライスを必要とする処理を
>>552は説明すべき。
AI持ち出した奴が聞きかじりのガキなことが解ったので終了
こっちは必要ねえって言うのに
必要とする処理って何。
1msでは足りない、1msは必要ない
必要なのは1ns
なのに
1msスライスを必要とする処理を
は?????
キチガイのフリをして誤魔化そうとしていますw
こういうのが歳喰ってもまとまになれないことは
ゆとり教育が証明しちゃったからな
あーあ
ダメだこのバカw
ヒント:物理シミュのタイムスライスにタイマーは必要ない
1クロックで解を出すって本当?
Z80の記憶だとレジスタに値入れるだけで1サイクルなんだけど
どうすんのマジで
AIは、逐次で進んでいかないからタイマー制御がいるんだよ
決まりきったルートで制御していくわけじゃないぞ
566 :
デフォルトの名無しさん:2011/01/23(日) 16:13:20
晒しあげ
ここら辺は組み込みと同じだ
単位時間内にちゃんと解を出せればいいのだが、
そうでないときももちろんある
デッドラインを超えたら問答無用で次に渡さないといけない。
そういうときもタイマーが必要
それは1msの分解能では荒すぎる。
>>568 その様なクソな設計だから、いらぬタイマーが必要だとなる。
世の中のゲームはその様なタイマーは不要な設計をしている。
自身を見直した方がいいのじゃないか?
まさかタイマー使われてねえとか言い出すんじゃねえだろうなw
レンダリングも、フレームレート計測もタイマーありきだぞw
バカだバカ
救いようがない
そもっそも割り込みそのものがタイマー要るんだからな
ドライバ書いたこともないどころか、ソース見たこともない無知バカだなこりゃ
タイマーというと特殊な例でしか使ってねえみたいに恥ずかしい事言い出すのは
たいていそういうバカ。
>>569 嘘を嘘と見(ry
鹿爪らしく並べてるだけの超理論を
相手にするなよ
575 :
デフォルトの名無しさん:2011/01/23(日) 16:31:48
タイマーの使われ方も知らないバカを晒し上げ
はやくタイマーバカはWindowsで1nsの分解能で出せるタイマー教えてやれよw
AIでミサイルの誘導でもしたいのかな?
フレーム単位だと微分値としては荒いのは分かるけどどうしようもないな。
いっそ処理自体を毎秒1万フレームで回すとかw
>処理自体を毎秒1万フレームで回す
タイマー無しで処理を10倍100倍回すのはレーシングゲームでは常識
579 :
デフォルトの名無しさん:2011/01/23(日) 16:41:21
1nsは可能だが、それにはドライバが必要だって既に書いてあるだろw
日本語も読めないのかあのバカw
物理演算なんかもタイマーは必要。
そうなのかw
なら解決じゃん。
VSYNCが16.66msか否か程度で
馬の首取ったかのようにしゃしゃり出てきた
要は痛々しいんだよオマエ
ということで世の中のゲームAIはカーネルドライバで
タイマー取得してないので総じてカスが結論だそうです
お し ま い
今はたいていがAPICだろうが、そのAPICを自分でやればいい。
WindowsやLinuxのウェイト関数やカウント関数もそれ使ってるんだからな
その分解能が大体1msだというだけ
それが不満なら、自分でAPICを駆動さすしかない。
そもそも高精度なタイマーの精度が必要ならWindowsは使わないし、
出来もしない、存在しないタイマーの話をDirectXスレでする馬鹿はいったい何がしたいんだろう?
16.6msなのは更新されるのがそれなだけであって
16.6msごとに処理してるわけじゃないぞw
その間にも凄まじいフレームが出来上がっている。
だからダブルバッファやトリプルバッファができんだよw
60フレームとして、16.6ms内に2枚ないし3枚終わらなかったらバッファリングできねえんだよw
>>585 まさに
,〜〜〜〜〜〜 、
|\ ( 釣れたよ〜・・・)
| \ `〜〜〜v〜〜〜´
し \
゙'゙":"''"''':'';;':,':;.:.,., ヽ○ノ
~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ト>゚++<
ノ)
被害妄想
>>586 :真性の(ry
AI処理や物理演算に必要なタイマは
描画タイミング(VSYNC)かほぼ無視してよい
入力タイミングしか無いんだよ
V-syncないときはどうするつもりだよw
ないゲームももちろんあるし、ユーザーが選択しないときももちろんある
バカバカしい
w使う奴は会話についていけないんだな
>ないゲームももちろんあるし、ユーザーが選択しないときももちろんある
もっと精度の低いタイマでOkの場合だろ
アホは黙ってろ
はやく1ns以下の頻度でドライバに問い合わせてカーネル遷移を繰り返す
クソじゃないゲームばかりになると良いですね(笑)
頼むからこれ以上は無知を晒さないでくれ
あと
>>567はさすがにそれじゃわからん
1ms=1000000ns?
596 :
567:2011/01/23(日) 17:52:40
ウィンドウを非アクティブにすると、
カーソルKeyでしか移動しないはずの、表示されている画像が、
かってに移動してしまうということでした
が
SetCooperativeLevel(HWND hwnd, DWORD dwFlags);で
DISCL_BACKGROUND のフラグを設定したら
ウィンドウが非アクティブでも画像が勝手に動くことはなくなりました
自己解決してしまいましたが
レスを返してくれてありがとうございました
精度が高くてもV-syncなしのゲームなんか山ほどあるぞ?w
16.6msなのは更新されるのがそれなだけであって
16.6msごとに処理してるわけじゃないぞw
その間にも凄まじいフレームが出来上がっている。
だからダブルバッファやトリプルバッファができんだよw
60フレームとして、16.6ms内に2枚ないし3枚終わらなかったらバッファリングできねえんだよw
トリプルバッファって意味なくね?
Xaudio2使おうと思ったけどDecember 2004には入ってないのか
しょうないからDirectSound使うか
なぜ、新しいのを使う選択肢を無くす?
Xaudio2やdirectInputをXboxと同じプラットフォームに置き換えたいのは経営上仕方ないんだろうけど
開発側からしたらクソ面倒だよな
使わなきゃいいだけでなにも面倒は無いが
D3DXのDLLバージョン問題を回避するには、2004を使い続けるしかないんだろう。
ランタイムのインストーラーもいっしょに配ればいいんじゃねーの?
そもそも計算結果プロットするようなシミュレーションなら
高精度タイマーとか不要だよね
素人じゃやらないだろうし、職業にしていても縁なんかあまりないが
3Dなんてなるとダブルバッファも4枚だぞ
この板は職業の人も沢山来るから、そんな恥ずかしいことを言い張らないほうがいいよ。
自分が知らない事を書かれる
↓
嫉妬する
初心者でもBulletやPhysXのチュートリアルはできる
煽るにも無理がありすぎ
612 :
デフォルトの名無しさん:2011/01/24(月) 22:46:15
C言語〜ゲームプログラミングの館〜 [DXライブラリ]
http://dixq.net/g/ を一通り試してみた。
基本的なことはいろいろ分かってきて面白いんだけど、いざゲームを作ろうと思うとここだけじゃ無理なのね。
このあとどのサイトや本を見たらいいんだろう?シーンクラスとかそれっぽい言葉は分かるんだけど…
ちなみに、C++はド初心者で、Rubyとかスクリプト言語を少し使える程度。
RPGが作りたいけど初心者だし定番のシューティング→アクション→…って形でも全然おk。
とにかく、「ゲームという形にする」ための知識がほしい。
>>612 あー、ゲームを作るチュートリアルみたいな本やサイトがほしいのね
ねぇよ
もう10年もPGやってるけど
いまだにその類の書籍やサイトをみたことがないw
あっても「え〜(笑)」って内容w
教科書に教えてもらって作るもんじゃないもんな、こればっかりは。
むしろ溜め込んだ自分の中のロジックを実験とか応用しろって話
いやマジで
全部人から教えてもらってコピーペーストしたいです
絵だけ描いて自作と言い張りたいです。あなたのアイデアを全部下さい
考えるのめんどいです
>>612 一通りやってシューティングの1つも出来ないとは、それはやったんではなくて、
眺めただけ。または、本当に無能なので、プログラマ諦めろ。
>>612 最初から完成された作品を作るんじゃなくて
機体の画像を←→↑↓のボタンで動かせるくらいの簡単なプログラムを
組むのを目指すといいよ
>>612 アマゾンで「ゲーム プログラム」とかで検索してみて、
良さそうな本を片っ端から漁ってみたら。
ま、とりあえず一からテトリス作るだけでもとっかかりが見つかるし、
見つからないなら諦めた方がいいと思う。
そもそもRPG作りたいとか言ってる時点で向いてないと思う。
>>612 これ結構網羅されてると思うんだけど
もしかして3Dやりたいって事?
620 :
デフォルトの名無しさん:2011/01/25(火) 06:08:35
Effect->SetTechnique();
Effect->Begin();
Device->SetRenderTarget( 0, テクスチャ1のサーフェイス);
Device->Clear();
Effect->BeginPass(0);
Device->SetRenderTarget( 0, テクスチャ2のサーフェイス);
Device->Clear();
Effect->BeginPass(1);
Effect->EndPass();
Effect->End();
これでPass(1);が描画できません。なぜでしょうか。
試した事
・描画に入る前にGetRenderTarget()で保持した(画面全体にテクスチャ1が描画されてしまった)
ちなみに
Device->SetRenderTarget( 0, テクスチャ1のサーフェイス);
Device->Clear();
Effect->BeginPass(0);
の部分をコメントアウトすると、Pass(1);が描画されます。
>>620 型宣言が無い
intとして認識しろという事か
Device->GetRenderTarget();これのことですか?
パス1のEndPassが無い
>>620 BeginPass(0) に対応する EndPass は?
{ } 式にしねえからダメなんだよな。
スコンパイラは { } の抜けはちゃんとチェックするのに
if end とか begin end とか、end関係は軒並みチェックしない。
628 :
516:2011/01/25(火) 10:36:51
ダイレクトイソプットって、俺にとっては使いづらい
なにがダイレクトじゃボケェ
GetASyncKeyStateで十分だな
joy***で十分だな
つーかMSもベンダーにXInputの対応強制させるくらいすれば良いのにー
633 :
デフォルトの名無しさん:2011/01/26(水) 02:20:21
2つテクスチャを作ってそれぞれのサーフェイスに書き込まれたあと、片方をもう片方に代入する場合、
Tex1 = Tex2;
で問題ありませんよね?
でもこれをやると代入されたほうのテクスチャが何も描かれていない状態になります。どうしてでしょうか。
スレ違いかもしれませんが、お願いします。
634 :
デフォルトの名無しさん:2011/01/26(水) 06:45:11
IDirect3DTexture9オブジェクトをつくり、NULLを代入して
D3DXCreateTexture();で描き込み用のテクスチャを作り、サーフェイスを取得して書き込める状態にしました。
が、テクスチャには何かメモリ上のゴミが入ってるようです。どうしてでしょうか。
また、描画ループで初期化する方法はありますか?
何も書いていないのなら、中に入っているのは当然不定だろう。
初期化したければすればいいだけの話。
何が疑問なのかさっぱり分からん。
変数 = NULL;でいいの?
そもそもC/C++自体理解してるのだろうかって匂いがする
変数はあくまでインターフェースであって
NULLを入れようが代入しようがテクスチャの中身が初期化されたりコピーされる訳ではない
Lockしてピクセルを書き換えるか
レンダリングターゲットに指定してClearするとかしないと
>レンダリングターゲットに指定してClearするとかしないと
これをしているのに何か入っています。
俺が入れた
とりあえずソース出せと
ポインタでない物をコピーしようとしてる時、そもそも
コピーコンストラクタや演算子オーバロードの状況を気にせず
= で結んでそのまま放り込んじゃうとかありえない
どうせくだらないミスをしているんだろう。
なんで釣られるかな。
後から来て釣りとか言い逃れ
宣言や確保ってのは、あくまで「ワク」を用意したに過ぎない。
「こっからここまで俺の土地ね!」って囲った
しかし、囲っただけでは雑草は取れない。
ちゃんと草むしりしないといけない。
どんな言語でもそうだが、それと同じだろう
最近はコンパイラが勝手に0で初期化してくれるものもあるようだが
>>644 同じメモリ領域を2度消そうとしている?
ちなみにテクスチャを他のテクスチャに移そうとするときどうやります?
どうやるも何も、わざわざコピーするための命令が用意されているだろ。
本当だ1つ前のソースでちゃんとやってた
もうどこが悪いのかすらわからなくていままでやってきたのが間違ってるんじゃないかとか疑いはじめてメチャクチャだわ
間違ってるから動かないんだろう。
いったい何を言ってるんだ?
ああそうなんだけどC言語まで理解してない気がしてきて変な質問が出てきた
常識だと思っている事が通用しない世界もあるので難しい。
free(Fuckintosh);
Fuckintosh = NULL;
Fuckintoshを使い回すので、一回freeしたらNULLを入れる
これが当たり前だと思っていたら
「余計な事すんな!」
と来た。
654 :
デフォルトの名無しさん:2011/01/26(水) 21:12:19
メタセコイアで作ったモデルが黒くなって色が出なかったり
色が出ても周りの色まで変わっちゃうんですがなにか対策ありますか?
原因を調べて改善すればいい。
そもそもメタセコイアって時点でメチャせこいわ。
>>654 SetMaterialあたりの設定ミスだろう
もしくはD3DRS_DIFFUSEMATERIALSOURCEの値とか
>>654 どういう処理でそうなるのか言わないのに
対策なんて想像でしか書けなくね
>>656 セコくてごめんよう
俺もメタセコなんだw
俺もメタセコ
Bryceも使ってる
今、「15歳からはじめるDirectx9、3Dゲームプログラミング C++編」を見ながら
DirectxのチュートリアルフォルダのTut04_Lightsフォルダ内のLights.cppを新しいプロジェクトに
コピーしビルドしようとしているのですが以下のエラーが出てビルドが出来ません
1>------ ビルド開始: プロジェクト: d3dtest02, 構成: Debug Win32 ------
1>LINK : fatal error LNK1104: ファイル 'd3d9.lib d3dx9.lib winmm.lib' を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ちゃんとDirectx SDK もインストールし、追加の依存ファイルに d3d9.lib d3dx9.lib winmm.lib を指定し
インクルードディレクトリ、ライブラリディレクトリにパスも設定しました。
これは何が原因なんでしょうか、解決方法を教えてください。
開発環境はVC++2010です、宜しくお願いします。
>>661 Google「'd3d9.lib d3dx9.lib winmm.lib' を開くことができません。」カチッ!
>>662 明らかに的外れ
>>661 全角スペースで区切ってたり " で全ファイルを囲ってたりしないか?
>>663 返信ありがとうございます、確認した所ちゃんと半角スペースで区切られていました
ファイルを"で囲っていることもないです。
googleでも検索してディレクトリパスの確認、libファイルはちゃんと入っているのかなど
いろいろ確認してみたのですが解決できませんでした。
>確認した所ちゃんと半角スペースで区切られていました
それが原因だ
>>665 おおおおおおおおおおおおおおおおおおお!!!!!!!!!
それが原因だったんですか!今スペースじゃなくて改行で複数指定した所しっかりビルドが通りました
書籍では半角スペースで複数指定と書かれていたのでここを疑うことがなかったです。
本当にありがとうございます、これでまた一歩ステップアップできそうです。
えええええええええええええええええええええ!!!!!!!!!
vsの設定はなんでこんなオンボロなのかな
文字列で書かせないでちゃんとファイル参照ボタンにしたらいいじゃないか
ファイル指定する場所なんだから
ファイル名のみを指定する場所であってフルパスを指定する場所じゃないから
>>669 ライブラリ参照パスは設定してあるんだから
そこのファイル一覧でも出して選択させてやりゃいいんじゃね?とか思ったり
まあなんつーか他の部分はやたら豪勢なのにこういう設定部分がショッパイ出来だから
なんか気になったって感じだけど
そのライブラリ参照パスは複数あるのが普通だし
どこのパスを最初にGUIで表示するのかは一意に決められんよ
>>671 じゃ、パスの中にあるファイルを一覧で全部出せばいいじゃん
とか、なんかテキトーに(別のやり方も色々あると思うよ)解決策が浮かんじゃうのに
なんでコレなのよ・・・ってショッパイのが結構あるじゃん
開発環境なのに、なんでそんな初心者仕様でどうでもいいところを作り込まないといけないんだよ。
ゆとりにも程がある。
>>673 まあ、思想はどうでもいいけど
「だっせー」ってただそれだけなんだけどねw
大量のライブラリサーチパスから数百数千のライブラリをずらずら表示なんて
そんな糞重くて使いにくいUIイラネ
>>675 いや、そもそも他にやり方いくらでもあるでしょ
ライブラリ参照パスをフォルダ一括にしてるのがそもそもの間違いだろってところから入ることになるけどw
だから何もかも古いんだよ
まあ、ちょっと前のvsは環境変数とか使ってたから仕方ないっちゃそうだけど
それもvs2010になって変えたみたいだけどあんまりセンスいい仕様にはならなかったなぁ的なガッカリ具合
今のところお前が出してる解決策は全部駄目出しされてるみたいだけど?w
視差マップから水面の波をやっているんですが、小学生の絵みたいな波しかできない・・・。
どなたかサンプルを見せてもらえませんか?
>>677 それは今の話題とはあんまり関係なくない?
そもそもの仕様がダサいってところが根本にあるわけだし
ダサいといっている人間のセンスが無いから、
ダサいとのたまうだけで、ろくな解決方法を提示できないというだけの話。
その辺にいる、文句だけ言うくせに何も出来ない自称評論家。
>>682 じゃ、参照フォルダは無しでフルパスで1つずつ(いつものファイルダイアログ)で
現状の仕様より大分マシになるじゃん
現状より数倍酷いわ
>>684 なんで?
ソースファイルとかだって同じように追加してるじゃん
仮にソースとかをライブラリファイルみたいに
フォルダ+ファイル名で指定するようにしたらブーイングの嵐だと思うよ
*.libもソリューションエクスプローラ上でドラッグドロップで追加できるが、
いったい何を言ってるんだ?
単純に環境の使い方が分かっていないだけの馬鹿だろ。
そんな話も何も、ソースファイルと同じ追加方法でライブラリの追加も出来る。
阿呆にもほどがある。
>>688 さっきからツッコミがまるで的外れなんだけど
なにか病気でももってるの?
操作方法すら分かっていないんだから、
これ以上恥の上塗りをしても仕方がないだろ。
脳内だけの妄想センスが凄いのだけは分かったよ。
どっちの病気持ちもスレ違いだから消えろ
>>691 操作方法?
ああ、「;」と「 」で間違えてなんのエラーもでなくて苦しんだ被害者が出たねw
すごくいい仕様だと思うよ理想的だ
ヘルプを読まない馬鹿がいても、すべてMSの責任。
凄いゆとりだ。
シェーダーのディスプレイスメントマップって重い?
水面の波作るのにこれやったらリアルになりそうだけど5年くらい前のローエンドPCじゃ描画はキツイかな?
>>694 センスが悪いって話をしてるのに
ヘルプを読めってどうとらえたらいいのかな?
君の脳みそが腐ってる可能性を考慮したほうがよさそうだよね
>>696 自分のセンスが悪いのに気がつかない時点で痛いよ。
簡単にライブラリを追加したいならソリューションエクスプローラを利用するし、
コードに依存するライブラリが明確なら#pragmaを指定しておけばいいだけの話。
使い方が分かっていないのを棚に上げて、センス云々とか恥ずかしいにも程がある。
>>697 じゃあ、なんであんな余計な設定画面ついてんだよw
あの設定画面はセンス悪いのは認めるんだよね?
どうでもいい話してないで、DirectXの話しろよ
>>698 VSのUIがダサイかどうかはそれこそ今は関係無いよね
お前の提案がことごとく現状より役に立たないだけw
で、次のぼくのかんがえるさいきょうのUIは?
>>695 5年前じゃ重いかどうか以前にサポートしてるかどうかも怪しいよ
>>700 何が関係ないんだよ
もともとあの画面のセンスが悪いって話してたんだよ
また、全然関係ないこと結び付けて話ししたでしょ?
大丈夫かよお前w
PG組めるのかってより社会人として仕事やっていけるのかw
すべてのレスが
とーんちーんかーんちーん一休さーんw
∩___∩
(ヽ | ノ ヽ /)
(((i ) / (゜) (゜) | ( i)))
/∠彡 ( _●_) |_ゝ \
( ___、 |∪| ,__ )
| ヽノ /´
| /
>>701 >もともとあの画面のセンスが悪いって話してたんだよ
君がそう主張したいのに誰も同意してくれないから可哀想だよね・・・
みんな少なからずVSのUIには不満を持ってるはずなのに
なにせ君から出てくる解決策がさらにセンス無いもんで同意のしようがないwww
センスがない奴ほど他人のセンスを攻撃したがる。
これクレタ人のコモンセンス。
入力処理作るのが面倒でxファイルをD3DXLoadMeshFromXで読み込んでるのだけど
頂点バッファをロックして値を取り出したい場合に構造体でキャストをする必要があるじゃない?
その構造体って、どうやって決定すればよいのか分からないんだ。
現状はCloneMeshFVFで強制的に変更しちゃってるのだけど
何か他に方法があったりする?
頂点構造体のサイズはGetNumBytesPerVertexで調べられるけど
要素へのオフセットや型はGetDeclarationで地道に計算するかないんでないの
とーんちーんかーんちーん一休さーんw
>>705 自前でX-Fileを読めば、余計なことを考えなくてすむよ。
パーサは用意されてるし。
用意されてるよね
ブラックボックスの積み上げコードは予定通りの方法が楽になるだけ
自前で自由にしたければ自分で書くのが普通
>>706 Pixでよくね?
プログラム中で調べるて、FVFをジェネレートでも
するの?
713 :
695:2011/01/29(土) 06:42:40
Core2Duo3GHzでCPUエミュレーションで水面と太陽の描画だけ
ディスプレイスメントマップ付き:CPU 30%
ディスプレイスメントマップ無し:CPU 15%
キューブマップなどは、あまり負荷に影響せず
みなさん、ハイエンドではない一般ユーザ向けに作る場合どんな基準で開発しますか?参考に教えてください。
オプションでON-OFF切り替えられるようにしとけば解決
715 :
デフォルトの名無しさん:2011/01/29(土) 16:50:54
DXUTを使って、.xファイルから描画を行いたいんですが、
サンプルを見る限りでは、.fxファイル(エフェクトファイル)を使用してる例ばかりです。
DXUTは、.fxファイルの使用は必須なのでしょうか?
.xファイルのみから描画をしてるサンプル等がありましたら教えてもらえないですか。
チュートリアルにメッシュの描画って無かったけ?
DXUTにXファイルの読み込み描画ヘルパークラスがあったはず
そいつのRender関数が
Effect使用版と固定機能版の二通り用意されていたはずだが
DirectX9です。
バックバッファ以外に、バッファを用意してそれにレンダリングし終わってからバックバッファに転送する、ってのをやりたいです。
自分で考えた流れは、
1. CreateRenderTargetでサーフェス確保
2. SetRenderTargetしてレンダリング
3. UpdateSurfaceでバックバッファに転送
しようと思ったんですが、RenderTargetになるのはD3DPOOL_DEFAULTだけで、それはUpdateSurfaceできないとSDKのドキュメント読んで分かりました。
普通、こういうことをやるときはどういう構成にするものなんでしょうか?
組み込みスクリプトのフロントエンド的なものを作りたくて、そのためにバックバッファにもう一段バッファを噛ませたいんです。
ほとんどDirectXは初めてなので何か根本的に理解してないとこがあったら指摘お願いします。
>>718 つStretchRect
テクスチャをレンダーターゲットにするのもあり
単なるトリプルバッファじゃないのか?
サーフェイスじゃなくて普通のテクスチャをレンダリングターゲットとして作成して
そのテクスチャを描画するだけじゃだめなのか?
>>721 横から失礼してくだ質だけど
サーフェイスとテクスチャの違いって何?
ディスプレイスメントマップって意味わからんな
ポリゴン数が減るわけでもないしスキンメッシュじゃダメなのか?
>>722 テクスチャはサーフェイスを含むが、
サーフェイスがテクスチャとは限らない。
イクロソフト(MS)が27日発表した決算は、純利益が5四半期ぶりの減益だった。中核のパソコン用基本ソフト(OS)「ウィンドウズ」の事業部門で、営業利益が4割減ったのが響いた。
アップルの「iPad(アイパッド)」に代表される「タブレット型」の多機能情報端末との競合に加え、無償OSが普及したためだ。
レンダーターゲットテクスチャにレンダリングすればミップマップも自動で作ってくれる
727 :
722:2011/01/29(土) 20:57:32
テクスチャの方がサーフェスよりも大きい物だったのか
サンクス 今まで逆だと思い込んでたんで混乱していた。
今まで上手く解釈できないでいたヘルプを読み直してくる
Direct3D9を使用してます。
頂点カラーを所持したXFileをD3DXLoadMeshFromXを使用して
読み込み、描画を行いたいのですがどうも落ちてしまいます。
頂点カラーが反映されずに描画はうまくいく。という状況であれば、
データが所持されていない等など推測できますが、
ゲーム自体がその場で落ちてしまうことから、現プログラムが頂点カラーに
対応していない、と考えてよろしいのでしょうか?
よろしくお願い致します。
729 :
718:2011/01/29(土) 21:32:25
ありがとうございました。
>>719 StretchRectで動作しました。感謝です。
>>720 そうなんですけど、こっちのほうが柔軟性があるかなと。
>>721 何となく、余計なものがない単なるサーフェスのほうがこういうバッファには似合うじゃないかっていう理由です。
テクスチャのほうがいいですか?
>>828 まぁ、そんな難しい話じゃなくて
単にファイル読み込みに失敗しててNULLポインタにアクセスしてるから落ちてるとかってオチじゃね?
ちゃんとデバッガ使えばどこで落ちてるかななんて一発だ
731 :
デフォルトの名無しさん:2011/01/29(土) 22:31:56
一発だって・・・
すみません。
「カメラ座標とキャラクター座標の間に、地形ポリゴンが有るかどうか」
を検出するにはどうすれば良いでしょうか?
(多くの3Dゲームで有る、カメラが地形にめり込まない事を表現したく思っています。)
>>732 仮にあったらどうするの?
カメラを地形の前までもっていく?
地形自体を半透明にするか消す?
コナミカメラの特許マジでなんとかしてほしい…
>>732 キャラクターとカメラの座標を結ぶベクトルに、
ボリュームをつける(円柱とか、一番良いのは視錐台と同じ)
そのボリュームと地形との当たり判定
つい最近DirectXスレで1ns精度のタイマが必要とか言って暴れてたのがいたような・・・
いやんスレ間違えた
つい最近DirectXスレでとーんちーんかーんちーん一休さーんとか言って暴れてたのがいたような・・・
とーんちーんかーんちーん一休さーんw
∩___∩
(ヽ | ノ ヽ /)
(((i ) / (゜) (゜) | ( i)))
/∠彡 ( _●_) |_ゝ \
( ___、 |∪| ,__ )
| ヽノ /´
| /
テクスチャは2の階乗じゃなきゃいけないとか、サイズは512*512までとか書いてあったりするんですが、
SDKのマニュアルのどこに載ってますか?
そんな小さかったら2D描画には分割でもしないと使えないですよね?
単に2D画像ファイル(1280*720とかの大きめの)を表示したいだけの時の王道(D3DXのスプライト以外で)は何なんでしょうか?
Web探しても断片的で解説がしっかりしてないのがほとんどで、見よう見まねで
矩形ポリゴン書いて、D3DXCreateTextureFromFileして、巨大なテクスチャ貼り付けたら上手くいったんですが、ちゃんとしたやり方なのか不安です。
SDKのドキュメントとかサンプルもテクスチャはいきなり3Dっぽくなったりしてて……
D3DXLoadSurfaceFromFileを使ってやる方法もあってどっちにすればいいのか迷ってます。
良い模範サンプルがあったら教えてください。
具体的な制限値はビデオカードによります
D3DCAPS9のMaxTextureWidthとかMaxTextureHeightとかD3DPTEXTURECAPS_POW2とかを調べてください
512*512ならどのカードも安全ってことでしょ
別に分割描画くらい面倒がらずに書けばいいじゃない
ビデオカードがどこまでサポートしてるのか知りたいなら
dxinfoと↓の見といたほうがいいよ
> C:\Program Files\Microsoft DirectX SDK (August 2007)\Samples\C++\Direct3D\ConfigSystem\CardCaps.pdf
> にCAPS一覧がある。
分割描画くらい、って簡単に言うけど
拡大縮小や回転とかしたら境目が浮き出たり、割と大変だよな
確かにその辺りを解説した本もサイトも見たことないや
テクスチャの拡大フィルタとかとの格闘になる
サイトはともかく、そういう本ってあるのかな?
境目とかビデオカードのクセもあるので一概にはなんとも
>>745 画面よりデカイテクスチャ作っちゃえばいいじゃないですか
などと意味不明な供述をしており・・・
いまどきそんなグラボはねぇんだよ
みんな画面よりデカイテクスチャ作っちゃってるから
そんなところは対応してない
だいたいフィルタかけたら線が入っちまって対応不能だろ
2xだか4xだか8xだか16xだか対応してらんね(俺は)
グラボは問題ないけどチップセットに内蔵のはどうなんかね。
2000年以降であれば2048くらい行けるのかな?
化石みたいなチップへの対応に時間使うくらいならもっと別のことに力いれろよ
だいたいなんだ512って
いまどきVooDooでもサポートするつもりか?w
バックバッファのフォーマットにアルファ持たせると何かいいことあるんですか?
>>753 色が変わったピクセルの差分だけを描画できる・・・というのは冗談として、
エコーやブラーが表現しやすいとかあった気がする。あれ、バックバッファだったっけな。
VooDooって256*256じゃなかったっけ
756 :
デフォルトの名無しさん:2011/01/30(日) 20:36:09
頂点カラー+テクスチャのXファイル読み込んで描画させたいんだけど、
3Dソフト上と同じように中々描画されなくてなきそう
DxViewerで見てもテクスチャ張られてないわ、頂点カラー描画されてないはなんだが
これはもう書き出し時点で何かしら間違ってるってこと?
ファイルの中身を確認すればいいだろ。
普通の人間だったら質問する前にやるべきことだが、
脳みそが腐っているのか?
だろ。
>>756 DirectXViewerは信用できないよ
昔のSDKについてたMeshViewでみるのが一番なんだが
762 :
732:2011/01/30(日) 22:47:29
>>733 ありがとうございます。
>>734 特許情報も読んでみましたが、理解できたのはコナミ邪魔。って程度でした。
>>735 線分と面で作ってみてボリュームの必要性を理解しました。
視錐台について再勉強しようかと思います。ありがとうございました。
>>756 Xファイルの中身見てテクスチャのパスとか確認してみたら?
764 :
デフォルトの名無しさん:2011/01/31(月) 11:35:37
HLSLでテクスチャを貼ってライトをあてて描画するとチカチカと点滅してしまう・・・
エスパーの方この情報だけでどこに問題がありそうかわかります?
描画処理
描画処理?
何で聞き返すんだよ
どういう意味かわからなかったので
提示された内容でどこがおかしいかって答えで
真っ先に思いつくべき処理はそれだから見直した上で
これをこうやったがダメだった 何がおかしいんだろうか って展開させろよ
答える側に何もかも丸投げするな
僕の質問はなんでしょうか。エスパーの方、答えてください。
初心者なので考えるのがめんどくさいです。
正解以外はいりませんのでよろしくお願いします。
>>770 「僕の質問はなんでしょうか」が質問なら、答えは「僕の質問はなんでしょうか」だろ
ああもうわかったよ
描画処理とだけ言われても描画処理で詰まってるんだから狭義で何かを指してるのかと思ったんだよ
まだ話は全然進んでないのにその怒り方とか予定調和が好きそうだね
他で聞くことにするわ
directSoundでセカンドバッファを100個くらい作っても問題ないですか?
wavファイルごとバッファを作って同じ音を同時に鳴らす音は
同じファイルでも複数バッファを作るプログラムを作ったんだけど
後から考えたらこれでいいのか不安になりました。
不安が問題なら、まずはカウンセリングを受けることから。
775 :
741:2011/01/31(月) 13:26:15
ありがとうございました。
どうも大きいテクスチャを気にしないのが普通みたいなので気にせず大きいの使うことにします。
>>772 その処理をどうやってどう詰まったのかも言わないまま逆ギレとか
お前が100%悪い
わかれよ!
俺がイライラしてんだろが!
ぶっ殺すぞ!
とーんちーんかーんちーん一休さーんw
∩___∩
(ヽ | ノ ヽ /)
(((i ) / (゜) (゜) | ( i)))
/∠彡 ( _●_) |_ゝ \
( ___、 |∪| ,__ )
| ヽノ /´
| /
エスパーすると
頂点宣言と実際の頂点バッファのフォーマットが違うから正しく表示できない
正解はメソッドで正規化されたベクトルをシューダー内で再びノーマライズしたからでした
何回正規化しても結果は変わらないはずなのにおかしいな・・・
俺もおかしいと思うわ
他のものと組み合わせて使ってるわけじゃないから俺のプログラムのどこかから廻り廻ってバグってるんだろうな
行列のどれかがあやしいんじゃないか?
法線の正規化はシェーダ内でやるようにしたら?
当方、DirectX初心者です。ここ数日悩んでいる事があります。
下記サイトのソースを使ってDirectX9上で頂点バッファによる直方体を
描こうとしています。
http://www.h2.dion.ne.jp/~takusoft/directx8/d3d/chapter1/sec14/d3d_14.html ソースにあるように奥の面 -> 手前の面の順でDrawPrimitiveを呼び出す場合
問題なく描画されるのですが、手前の面 -> 奥の面の順にすると
Zバッファが効かず呼び出し順で描画されてしまいます。
何か根本的な間違いをしているのでしょうが原因がわかりません。
他のソースにある座標変換済み頂点(RHW)で試したところ、
DrawPrimitiveUPではきちんとZ値を意識して描画できているので、
D3Dデバイスの初期化や設定に間違いは無さそうなのですが。
当方環境
・DirectX SDK(August 2008)
・VS2005
785 :
773:2011/02/01(火) 13:10:17
レスが無かったので質問を変えます。
directSoundでセカンドバッファを最初につくりまくって再生するのと、
再生するたびにセカンドバッファを破棄して作り直すのはどっちがいいんですか?
>>785 最初に作りまくったほうがいいんじゃね?
あんまりでかいwavをリアルタイム処理中に読み込むとちょっと時間かかるからゲーム止まるかもよ
や、でもボタンクリックしたら音を鳴らすみたいなツールを作ってるときは
用途によって違うかもしんない・・・
一覧でファイル名出してクリックしたらBGM再生なんて場合は
一覧のファイル全読み込みしたらさすがに製作者に殺意がわくかもしれん
>>784 デプスバッファかレンダーステートのどちらかの設定がおかしい。
ソース一式どっかに上げて見せてもらわないと原因は特定できない。
それと、最初は分かりにくいけど、そういうバグの原因を調べるには便利だから PIX for Windows を使ってみろ。
>>784 そこのサイトのコードに問題がある。
>D3DXMatrixPerspectiveFovLH(&matProj, D3DXToRadian(60.0f), 1.0f, 0.0f, 1.0f);
後ろから2番目の引数は0にしてはいけない。
ここを0にすると、すべてのZ値が同じになってしまう。
>>785 どのみち同時に鳴らしたい音の最大数が決まってるなら選択の余地はないでしょ
一応確認するけどDuplicateSoundBufferでメモリ自体は共有できるのは知ってる?
791 :
773:2011/02/01(火) 17:12:37
>>786-787 レスありがとうございます。
BGMじゃなくてSEなので最初に全部読み込むことにします。
792 :
773:2011/02/01(火) 17:14:46
>>790 DuplicateSoundBufferなんて知りませんでした。
使うことにします。
>>788-789 ありがとうございます。
下記のようにすることでZバッファが効くようになり
問題なく描画できるようになりました。
D3DXMatrixPerspectiveFovLH(&matProj, D3DXToRadian(60.0f), 1.0f, 1.0f, 100.0f);
過去ログにも同じ質問がありました…失礼しました。
DirectXの質問か微妙なところですが質問します。
SDKのサンプルで動きのあるやつ(例えばText3D)のウィンドウで、タイトルバーをクリックしている状態
だと描画が停止してしまいますよね?
それどころかクリックをやめると停止してたところからそのまま再開することを見ると、メインループ自体が
停止している気がするんですが、これを動作し続けるようにするにはどうしたらいいんでしょうか?
既存のウィンドウを使わない
797 :
794:2011/02/02(水) 17:33:10
>>795 すみません、もうちょっと詳しく説明をお願いできますか?
DirectX SDK(June 2010)には、xファイル・ビューワが付属していますか?
拡張子がアプリケーションと関連づけられていないため、関連付けを行いたいのですが、どのexeに関連付ければいいのかよくわかりません。
>>802 DirectX SDK(June 2010)にはビューワはついてないぞ
質問です
DirectX11で
・板ポリに絵を貼っつけて表示
・同じ絵を画面に複数表示
までは出来たのですが、
違うテクスチャを描画する方法が分かりません
〜に〜したあと〜しろ 程度でいいのでアドバイス頂けませんか?
805 :
804:2011/02/02(水) 22:51:34
すみません、違うテクスチャ・板ポリを同時に描画する方法でした
テクスチャを変更して描画すればいいだけ。
何が疑問なのかさっぱり分からん。
すみません、解決しました
根本的に理解していなかったようです...
808 :
794:2011/02/03(木) 02:34:28
>>800 ありがとうございます。
すみません、言葉足らずでした。
恐らくメッセージループをどうかすればいいのかはわかっています。
詳しく言うと、(サンプルは分かりませんが自分のプログラムで)メッセージが来ていようが来ていなかろうが毎フレーム描画し続けるようにプログラムを組み、
WM_DESTROY以外はDefwindowprocに任せているのに何故うまくいかないのかが知りたいのです。
DirectX固有の問題ではないかもしれませんが、恐らくDirectXを使うとき一般に出会う問題だと思ったので質問しました。
>>808 自分がやりたい事が、Windowsアプリの作法から外れることを理解してる?
で、DirectXはWindowsのSDKだよね?
問題なんかじゃ無いでしょ、貴方が勝手におかしな事をやりたがってるだけ
それを理解できたなら
メッセージ、キュー
PeekMessage(), TranslateMessage(), DispatchMessage()を調べてみな
メッセージ無視で描画をするようになったら、他がどうなるかも体験するといいよ
因みに、普通はフルスクリーンと言う手を使う
と思うけどね
動的キューブマップってクソ重いな
単純に描画が6倍増えるんだな
811 :
808:2011/02/03(木) 04:17:37
>>809 ありがとうございます。
>自分がやりたい事が、Windowsアプリの作法から外れることを理解してる?
そうなんですか?
私の手元の市販のDirectXを使用しているゲームでいくつか試してみましたがどれも私の期待通りの動作でした。
それからご指摘の関数等についてはMSDNのリファレンスを自分で出来る限り読み込んだ上で質問しています。
もう少し深いヒントをいただけないでしょうか?
アプリの作法から外れるというのは答えている人間が馬鹿なだけ。
描画用のスレッドを作って、そこからレンダリングすればいい。
メッセージループ上でやるから止まるんだよ。
>>809 の話は アプリの作法 じゃなくて Windowsアプリの作法 の話だと思う
メッセージングとそのディスパッチによる駆動というOSベンダが提供要求してる、作法の話
その辺理解出来ない人は多分、不慣れで馬鹿なだけ
>因みに、普通はフルスクリーンと言う手を使う
この時点で頭が悪いのがにじみ出ている。
フルスクリーンは今回の件とは何の関係もない。
あまりにも回答者のレベルが低すぎるよ。
>メッセージングとそのディスパッチによる駆動というOSベンダが提供要求してる、作法の話
Windows3系統でそれでは不便だから、9x以降マルチスレッドが使えるようになったんだろう。
解決策はきっちりOSベンダが提供しているんだが、作法云々ってあまりにも無能すぎるぞ。
描画を別スレッドで処理の一言で解決なのに
作法がどうのとか変なこと喚いてる子がいるのか
今丁度話題っぽいので聞きたいんですが、描画を別スレッドに投げると、
1フレームにAだけ動いて欲しいのに、描画と移動のタイミングが合わないのか
途中で1フレーム程度描画が止まってしまいます
描画スレッドとMoveスレッドのタイミングがズレているのが原因だと思うのですが、
どうすればスムーズにできるでしょう?
819 :
808:2011/02/03(木) 11:00:31
>>812 ありがとうございます。
試してみたら確かに期待通りの動作をしてくれました。
ただ、データの同期がめんどうすぎるのでスレッド使わない方法もありませんか?
別スレッドだと動くことから何らかのメッセージをDefwindowprocに渡さなければできそうな気がするのですが。
(DirectXでゲーム作るなら避けて通れない問題のはずなのに解説サイトがなかなかないです)
面倒くさいならプログラムを組むな
(なにがやりたいんだこのクズは・・・)
>>819 描画スレッドより簡単な方法はない。
DefWindowProcがWM_NCLBUTTONDOWN(こんぐらい調べろ!)でブロックするのはWindowsの仕様。
スレッドよりNC系メッセージを自前で実装する方が楽だと思うなら好きにすればいい。
823 :
808:2011/02/03(木) 14:32:30
>>822 >DefWindowProcがWM_NCLBUTTONDOWN(こんぐらい調べろ!)でブロックするのはWindowsの仕様。
なるほど。
確かにこれじゃどうしようもなさそうですね。そしてプログラムの挙動に納得がいきました。
あきらめてスレッド使うことにします。
大感謝です。
824 :
802:2011/02/03(木) 15:03:35
DirectX SDK(June 2010)には、xファイル・ビューワがないのですか。。。
フリーでお勧めのビューワとかありますか?
DXUTのサンプルのxファイルを見たりしたいのですが。
>>817 mutexとか使ってスレッドの同期をとるか、描画と移動を同じスレッドで処理する。
重たい処理をしない限り、描画と移動を別スレッドにする必要ないと思うが。
>>819 SetTimerして、WM_TIMERのプロシージャから描画処理呼べば、
シングルスレッドでもタイトルバーをクリックしてる最中に動かせるよ。
828 :
826:2011/02/03(木) 16:10:22
>>817 あと追加だが、スレッド間でデータを共有するときは慎重にやらないといけない
例えばグローバル変数の座標を移動スレッドで更新しても、描画スレッドに反映されないことがある
詳しくはvolatile変数とかで調べてくれ
非同期でいい処理は、なるべく、細かく分けたスレッドで処理する方がいいのかな?
それともスレッドの数は最小限に納めた方がいいのかな?
ちなみにマルチスレッド対応コンパイラは、
グローバル変数にvolatileを付けなくてもスレッドセーブでコンパイルされるので書く必要はない。
つまりグローバル変数にvolatileを付けろと言うのはただの知ったか。
マルチスレッド対応コンパイラってあるのか知らんかった・・・
>グローバル変数にvolatileを付けなくてもスレッドセーブでコンパイルされる
おいおい
ただ少なくともvolatile使えばおkというのはおかしい
VCもBCCもgccもメジャーなコンパイラは対応しているよ。
volatile云々はさておいて、スレッドセーフかどうかは実装次第だろ
//win32に用意された関数を使う場合 --------------------------------
CRITICAL_SECTION so;
スレッドとして処理したい関数() {
EnterCriticalSection(&so);
//同期的に触れる処理はここで
LeaveCriticalSection(&so);
}
// boostを使う場合 --------------------------------
typedef boost::mutex::scoped_lock lock;
boost::mutex mtx;
スレッドとして処理したい関数() {
lock l(mtx);
//同期的に触れる処理はここで
}
マルチスレッドでvolatileが必要なケースは実は無いんだよね。
同期が必要なデータはmutexなりで保護しないと意味はないし、
保護されているならvolatileを書く必要性はない。
ケースが無いと言うより、逆に 「ロックして同期処理」 を 「しない」 場合の保護だろ volatile
メモリの READ WRITE のタイミングによる、いわゆる H側とL側が違うタイミングで更新されないように、
だとか構造体の要素などの更新タイミングがズレないようにだとか。 ロック処理するなら、いらないだけであって、
実はいらない、じゃない。 なんか混同してる人間多すぎないか。 てかここDirectXの初心者スレだからわかってないのか
HLSL内でテクスチャの一部だけをマッピングすることはできますか?
たとえば512x512のうちの0,0から64,64までとか
むしろ何で出来ないと思ったのか聞きたい
おしえてください!
>>837 グローバル変数にvolatileを付ける話をし出した馬鹿がいたからだろう。
別スレッドから参照されるのを考慮して、最初から最適化に巻き込まないようになっており、
付けても付けなくても生成されるコードに変化がないのに。
コンパイラの動作を全く理解していない。
多コアの時、キャッシュの書き戻しのコントロールってどこでやってるんだろう
グローバル変数にvolatileがいらないってのは初めて知った
グローバル変数使わないけど・・・
CreateTextureでD3DFORMATを指定してもデバイスによって
指定フォーマットがサポートされていたりいなかったりしますが
どんな環境でもサポートが保証されているフォーマットってありますか?
ありません。
846 :
840:2011/02/04(金) 20:08:31
お願いします
>>846 テクスチャ座標は頂点座標といっしょに渡してるの?
テクスチャ座標ををいっぱいにセットした四角ポリゴンにHLSL内でtex2Dで貼り付けてるだけです。
DXUTって実用性ありますか?実際どれほど使われているのでしょうか?
想定してるプログラムは、World of Warcraft や リネージュ2といったMMORPGです。
スレチだが、リネ2は確かUnrealEngineスクリプトで作られてた希ガス
DXUTなら下手に自分でウィンドウ作るよりよっぽど安定した動作するよ
多少カスタマイズしないと使いにくい部分はあるけどソース全部ついてるから問題なし
ただしDXUTはあくまでフレームワークであってゲームエンジンではないので
UT使ったからといってゲーム作りが楽になるわけではない
質問です。
ID3D11DeviceContext::DrawInstancedで今詰まっています。
一つのオブジェクトデータ(頂点群-テクスチャ)を使って複数オブジェクトの描画を行うものだと思うのですが、
そのまま使っただけだと表示は変わらないため、おそらく同一座標に複数回描画するだけになってると思われます。
描画座標を変えて複数オブジェクトを描画するにはどうしたらいいのでしょうか?
頂点シェーダあたりが怪しい気はするのですが・・。
質問です。
ChangeDisplaySettingでフルスクルーンとウインドウの切換を出来るようにしたのですが、
ウインドウに戻したとき、常に最前列になってしまいます。どのようにすればよいでしょうか。
念のためHWND_NOTOPMOSTを入れてもダメでした。
SetWindowLong(hWnd,GWL_STYLE,WS_POPUP|WS_VISIBLE);
SetWindowPos( hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, (SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE) );
ウインドウの配置を記憶しておき、全てを元に戻す。
>>854 サンクスです。
原因がわかりました。
画面を作り直す際に、WindowsのバグでTopMostを付けられてしまったので、
1秒ぐらい時間をおいてからNOTOPMOSTを行うことでした。
ありがとうございます。
それ本当にバグ?
最初にCreateWindowするとき何指定してる?
>>852 もう見たかもしれんが
Instancing10 サンプルとか参考になるんでは?
SV_InstanceIDを使って定数バッファを切り替えながらインスタンスを描画ということだろう
>>853 ついでに聞きたんですがウインドウからフルスクリーンにするとき別のモニターに表示されてるウインドウが横にずれるんだけど
原因わかりますか?
859 :
857:2011/02/06(日) 22:00:03
860 :
819:2011/02/06(日) 22:31:03
>>827 ありがとうございます。考慮にいれてみます。
>>858 モニターが変わるとずれるなら、モニターの調整位置がずれてる
SDKのドキュメントによればDirectShowはゲーム開発には非推奨らしいけど、じゃあ代替に何使えばいいのかってことが
書いてないんですが。
他のコンポーネントはほとんど代替物書いてあるのに。
みんな何使ってるんですか?
863 :
862:2011/02/08(火) 03:20:50
やってみて結果がダメじゃないならそれで正解
ゲームシーンで動画流したいとかなら存分に使えばいいべよ
現状GPUにスムーズに動画流すとなるとVMR9が現実的だし
Media Foundation+EVRとかあって性能特化してるけど
まとにも使うにゃ条件厳しすぎる
866 :
デフォルトの名無しさん:2011/02/08(火) 04:29:23
テクスチャをコピーするメソッドを忘れてしまいました。
メソッド( コピー元, RECT, コピー先, 色, コピー方法)
こんな感じだったと思います。教えてください!
UpdateTexture
UpdateSurface
StretchRect
ColorFill
D3DXFill***
カメラの動きをプレイヤーが直感的に操作出来る様にするには、どうすればいいんでしょう?
オイラー角で回転させてもロールピッチヨーで回転させても、直感的でない動きをします。
(前を向いてる時と横を向いてる時で、視点を傾げるキーと上下を見るキーが変わったりとか)
これでだいぶ悩んでいるんですが、解説されているサイトなどをあんまり見ないので、
もしかしてカメラを直感的に動かす為のヘルパー関数みたいなものがあったりするんでしょうか?
>>868 そんな関数ねぇよw
直感的とかわかんねーよ
ちょっと有名ゲームでも挙げて
これと同じようにしたいって質問したほうがまだわかりやすい
実はあるよ
関数っていうかクラスがDXUTcamera.hとDXUTcamera.cppに
その二つをひっぱってくればUTベースのアプリじゃなくても使える
フルスクリーンってGDI使わないのになんでウインドウハンドルが必要なの?
フォーカス
HWND は別に画面に出る矩形領域の為のモノじゃないし
ウィンドウメッセージを受け取るため、かなぁ。
>>871はHDCではなくHWNDのことを言ってるんだよね?
ふーん
875です
よくよく考えてみればウインドウハンドルがないとウインドウズが管理できませんよね。。。
失礼しました。
DirectXでMMORPGを作る場合のネットァーク部分の実装って、DirectPlayが一般的に使われますか?それともWinSockでガリガリ書くのが普通ですか?
879 :
デフォルトの名無しさん:2011/02/10(木) 07:27:53
880 :
デフォルトの名無しさん:2011/02/11(金) 02:28:48
CrossFireの場合、デバイスは2つなんでしょうか、それとも1つ扱いになるんでしょうか?
「デバイスを2つ以上使う場合ってあるんだろうか」と気になっただけなのですが・・・
>>880 それ用のコードを書かないといけないような仕組みだったら、
過去のゲームに対応したりできないだろう。
882 :
880:2011/02/11(金) 07:24:10
なるほど、確かにそうですね・・・とすると2つ以上のデバイスを使う必要は
複数のVGAに別々のモニタをつないでそれぞれ別々に処理する場合以外
(・・・できるのか??)ありえなさそうですね。ありがとうございました
883 :
デフォルトの名無しさん:2011/02/11(金) 21:05:28
D3DXMatrixIdentity( &mat );
D3DXMatrixIdentity( &rot ); D3DXMatrixIdentity( &tra ); D3DXMatrixIdentity( &sca );
D3DXMatrixTranslation( &tra, 0, 0, 0 );
D3DXMatrixRotationYawPitchRoll( &rot, D3DX_PI * 0.5, 0, 0 );
D3DXMatrixScaling(&sca, 0, 0, 0 );
mat = rot * tra * sca;
---エフェクト---
pos = mul( mat, ビュー );
pos = mul( pos, プロジェクション );
return mul( In.Pos, pos );
これで正確な位置に表示されません。例えばtraのx座標を増やしても斜め奥に移動してしまいます。
どこに問題がありますか?ちなみにカメラはz軸-から正面を見て設置しています。
ちなみにD3DX_PI * 0.5だと90度回転すると思うのですが、なぜか180度回転します。
とりあえずスケーリングを物体のサイズとして使ってるなら
mat = sca* rot * tra;
にしようぜ
やってみましたが変化はありませんでした。
>>883のソースのスケーリングは
D3DXMatrixScaling(&sca, 1, 1, 1 );の間違いです
>mat = rot * tra * sca;
これをエフェクトに渡してるなら、エフェクト側では
return mul(In.Pos, mat); // matは↑の渡されたやつ
の1行でいけるはずなんだけど
すまんボケてたw
883で合ってるね。posって名前おかしいけど
それはローカル座標とは違うの?
とりあえず
>>883がX方向に1動かしたつもりの
matの行列の中身を書いてみなよ
それで少なくともワールド変換以前で間違ってるのか
それ以降で何かおかしいのかは分かるから
モデルのローカル軸がZ+が正面じゃないってオチじゃないのか
サンプルなど問題のないものを参考にしてみては?
そもそも他の部分がすでにおかしいとかありそうだな
>D3DXMatrixRotationYawPitchRoll( &rot, D3DX_PI * 0.5, 0, 0 );
これ嘘書いてない?
>>892見るとヨーじゃなくてピッチ軸で回転してる気がするんだけど・・・
y軸回転じゃなくてx軸で回ってる
この分じゃ全然関係ないところでもミスしてそうだな
GPUのハード的な動きについて詳細に解説している書籍やWebサイトってないでしょうか?
DirectXではAPIを呼ぶことでGPUを動かしてますが、効率よく処理したいので、GPUがどのように動くのか知りたいです。
例えば、描画コマンドの発行やリソース管理、メモリアクセス等です。
同じような情報でも、頂点ストリームに含めたほうがイイのか、テクスチャとして与えたほうがイイのか等を
判断できるようになりたいです。
また、DirectX9から10への移行で大きく変わったという話もありますが、
このあたりの具体的な内容も知りたいです。
ttp://journal.mycom.co.jp/column/architecture/index.html CPUだと、こういう詳細解説のコラムがありますが、
これのGPU版みたいなのがあるとうれしいです。
よろしくお願いします。
そういう類の話って、本当に好事家か専門な人でもいない限り、
本に書かれた瞬間から情報が古くなってしまう気がする
nvidiaの記事でどうやったらパフォーマンスが出るかみたいな記事があったよ
900 :
883:2011/02/13(日) 10:32:38
今までスキンメッシュの頂点ブレンデリング後にやっていたらおかしかったのですが、それを飛ばして入力POSITIONセマンティクスを直接投影変換するとマトモに動きました。
ボーンによる頂点ブレンデリングは投影変換後にやるものなのですか?
>>900 スキニングの仕組みからわかってねーじゃねーか!
×頂点ポンデリング
○頂点ブレンドのing
903 :
883:2011/02/13(日) 12:43:33
もうわからなくなってきた・・・
頂点ブレンドと投影変換の手順だけでも教えてください
質問よろしいでしょうか?
IMediaControlのGetStateのWaitってどの程度いれればいいのでしょうか?
905 :
897:2011/02/13(日) 15:32:45
>>903 やだよ
お前見込みねーもん
お前なんかにスキニングを理解するなんてムリムリムリムリかたつむりよ
そもそも普通のワールド座標からスクリーン座標に変換するまでの流れ知ってるのかよ?
ちょっと書いてみろ
ムリムリムリムリかたつむり(笑)
とーんちーんかーんちーん一休さーんのヤツかおまえ。
答える気がないなら黙ってろよw
わからないので初心者用の質問スレ教えてください
数学の初心者質問スレとかどうだろ
>>908 多分 「DirectXの初心者」 じゃなくて 「3DCG処理の初心者」 にしか見えないから
上で言われてるんだと思うので、その嫌味は嫌味にならない
とことん馬鹿だなこいつ
礼儀の勉強から始めた方がいい
自分で座標変換に問題があると決めつけてるだけで
実は別のところに問題がありそうな予感
ここはDirectXライブラリの初心者スレなんだが、
処理自体の初心者や計算の意味の初心者、あと言語そのものの初心者まで舞い込んでくるスレ
そしてそれらの初心者の多くは、自分が何がわかってないのかすら、わかってない場合があったり
DirectX10からXファイルのサポートが打ち切られましたが、
みなさん、どんな形式を使っておられますか or オススメですか??
独自形式が鉄板
有名どころだとFBXだろうけど意外と超えなきゃいけない壁が多すぎなので
自分で適当なフォーマット作った方が良いよ
916 :
914:2011/02/15(火) 00:51:47
>>915 やはりそうですか・・・
自分で作ると、勉強になるし、独自情報を組み込んだりしやすいし、最適化し易いしと、
いいことが多いので、ここいらでいっちょやってみます!!
ありがとうございました!
某PMD形式って言うメッシュとマテリアルとボーン情報を持ったファイルの
Load/Save IOと構造体データクラスと、あとそれを受け取って時間軸で動かすモジュールなら
個人的にライブラリ化した
そんな非公式の解析データしか情報がなくてソフトの仕様変更に怯えなくてはならず
不要な情報が多すぎる/必要な情報が少なすぎるローカルフォーマットをお勧めされましても…
馬鹿なんだろ。
>>915 FBXのアニメーションは絶対座標で出力されてるので使い物にならない
改善されねぇかなアレ
wavefrontが簡単で最初ならお勧め
DirectSoundで、波形データを毎フレーム作成してストリーム再生したいんですけど
音階とか音色は望みどおり鳴ったんですけど、バッファの末尾から頭に戻る一瞬途切れるんです。
バッファ量を長くしても短くしても、必ずループの瞬間に途切れます。
どうやって回避したらいいんですか?
ストリームするにはバッファをループ再生させて、再生にかぶらない部分を書き換えるだけですよね?
流れは合ってるつもりなんですが、バッファが1秒なら1秒毎、バッファが2秒なら2秒毎に規則的に無音が入ります。
公式リファレンスを見たら「ループ再生は巻きもどす処理に時間がかかるので不向き」みたく書いてありますし
なのに「ストリームで途切れなく再生させるにはループ再生をONにしてください」とも書いてあります。
他人が作ったゲームでは大丈夫なので作り方の問題だと思うんですけど、
上の流れをくんでも直らないのは、何が悪いのかわからないんで教えてください。
そりゃあ、なんかまちがってるんだろう(笑)
最初にヘッダの一部まで再生してるとかは?
ソフトウェア音源の実装ならマルチメディアAPIでもいいんじゃないかな
最近まじめにこたえもしないカスがいるな
わからないならだまってろよ ヘボ
そうはいうがなヘボ2
どう考えてもトレースしながら攻めていくしかない場面で質問されてもよw
やり方としては正常に動いてるサンプルがあるなら自分のと
両方同時に動かしてデバッグトレースしてみたらどうだ?
適当にこたえるけど、
最後のフレームの尻尾はちゃんと埋めてるのかねー。
バッファの半分位でソースが途切れたらちゃんと残り半分をループ頭で埋めてる?
質問いいですか?
WCHAR wstrFileName[MAX_PATH] = {0};
LPCTSTR _lstr = _src;
MultiByteToWideChar(CP_ACP, 0, _lstr, -1, wstrFileName, MAX_PATH);
if( FAILED( this->_pMediaControl->RenderFile(wstrFileName)))
{
return -1;
}
というかんじでMediaControlにファイルをロードしているのですが
XPでは上手くいくのですが、7(x64)ではエラーになります。
原因が分からず困っています。
分かる方がいましたら、教えていただけないでしょうか?
>>929 そんな短気でこの仕事続けるのは無理じゃね?
>>931 >LPCTSTR _lstr = _src;
LPCSTRの間違いでは?
エラーってのがコンパイルエラーなら、
おそらく_srcがxpではCHARで7ではWCHARになってると思われ
>>933 御返事ありがとうございます。
コンパイルは通るのですがXPではサウンドが流れているのにもかかわらずに
7のほうでは、流れないので、 FAILEDでエラーがでた場合にはMessageBoxを表示するようにしたら表示されたので
ロードの問題だとおもうのですが
あと書き忘れてしまいましたが、プロジェクトの設定はマルチバイト文字を使用にしています。
とりあえず、↑のようになおしてやってみます
>>933 LPCSTRに直してみてやってみたのですが、やはり再生がされません。
>>924 ファイル読み込みじゃなくて自作波形なので、当然ヘッダは含んでないです。
>>925 既知のバグかなにかでDirectSoundでは常に起こるってことですか?
個人的に解決しないまま投げ捨てて、なんとなく乗り換えるってやり方が好きじゃないんで。
>>930 データ量が不足して無音部分がある、と言うのでしたらそれは一切ありません。
試験的にバッファをあらかじめ波形データを満たしてから鳴らしても、2〜3ms程度の無音が挿入されます。
なぜか440Hz、880Hzとかの基本音に限り、途切れは一切はないんです。
>なぜか440Hz、880Hzとかの基本音に限り、途切れは一切はないんです。
それは興味深い現象だなぁ、ソースを晒す勇気はないですかね
>>936 波形がちゃんと満たされてるなら、波形の急激な変化によってギャップを聞き手が感じてるって感じにならんかなー?
うまいことMIXしたらどうだろう??
うまくいってるソースがあるんだろ?
だったらさっさとトレースでもしろよ
>>938 波形の周波数によってはバッファにキレイに収まらないから、末尾の半端な山の部分が
頭に戻って形状がリセットされた時に無音に感じる、という事でしょうか?
でもそれだと無音というよりプチノイズが出る気がしますが・・・
とはいえアドバイスはありがとうございます。
波形の合成はなんとか考えてやってみるようにします・・・が
みんなそうやって波形のつなぎ目のタイミングを高度に考慮してストリームをやってるんでしょうか?
ネット見る限り、イベンで通過信号受け取ったりタイマーで書き込んだりする程度のことに思えたんですが。
もっと簡単に出来ると考えていたので肩透かしをくらった気分です。
>>939 うまくいってるソースなんて知りません。他人のゲームは大丈夫ってだけです。
他人の作ったオープンソースなんて持ってませんから。
1つだけありますけど、セカンダリバッファを使わずにプライマリバッファ使ってたので参考にしてません。
お気遣いはうれしいですが、とっくに何百回と検索しまくってこのザマです。
そのワードもそのサイトもさんざん見ましたw
みんなプチノイズの話がメインで、無音についてはヘッダの読み間違いとか、データサイズ間違い、
メモリスワップが発生しているとか、フォーマットがおかしいんじゃないかとか・・・
上のほうで誰か言ってくれた事象と解決法ばっかりしか見つからないんです。
ソースを晒す勇気はありませんが、コード的におかしい事はしてない自信はあるんです。
こんだけ探して見つからないってことは、自分のサウンドカードだけの固有バグなのかとも・・・
DirectSoundはカードによっては不具合だらけとも見つかったので。
Vista以降はHALが廃止されたから他のAPIを推奨とも確かに書いてあるし
まあとりあえず波形の合成に工夫がいる、との方法を信じてやっていきます。時間がかかりますが。
だからこのハナシは忘れてください。作ってみてダメだったらまた来ます。
失礼しました。
944 :
914:2011/02/15(火) 22:49:38
>>943 意味わかんね
再生時のデータを全部ファイルで吐き出してみるとかしたらいいんじゃないの?
っていってるんだけど
>>945 解決しました。
えっとファイルで出力してというか、PC上で録音して波形の確認をしたら、やはり無音になっていたのですが
矩形波なのにその前後で波形が小さく丸くなっていたことから、何かでフィルタされてると考えて
PCの設定を見直したら、デバイス側で自動ノイズフィルタがかかっていました。
それをOFFにして、再度聴いてみたらノイズが走っていました・・・
やはり繋ぎ目の波形の整合がとれていませんでした。
それがノイズになって、うちのカードが律儀にフィルタリングして無音になってただけでした。
んで基本音の場合はたまたま波形の形状がバッファサイズぴったりで継ぎ目の整合がとれていたので
フィルタされずにキレイに鳴ってたみたいです。いろいろすいませんでした。
947 :
デフォルトの名無しさん:2011/02/16(水) 11:57:51
D3D9でデバイスを作るとき、D3DCREATE_SOFTWARE_VERTEXPROCESSINGで作るとウインドウがすぐに閉じてしまいます。
よく調べると、HLSLエフェクトファイルを読み込むときにヒープ領域が...というメッセージでブレークポイントが作られていました。
D3DCREATE_HARDWARE_VERTEXPROCESSINGだと問題ありません。どうしてでしょう?
SOFTWAREかHARDWAREはカードによって異なるので
HARD+HARD → HARD+SOFT → SOFT+SOFT の順番でエラーキャッチして作成し
全て失敗したらエラーメッセージを出す処理を行うのが一般的。
ウィンドウがすぐ閉じるのは強制終了されているから。自分で正しくエラーメッセージ処理しないとそうなる。
949 :
デフォルトの名無しさん:2011/02/16(水) 21:14:48
それは既にやってます。各クラスを個別にSOFTWAREで作って、作動していたのですが、
今回スケルトンとして(SOFTWAREで)まとめた後に、どれくらいの負荷がかかるのかテストしてみようとHARDWAREからSOFTWAREに切り替えたら動かなくなりました。
950 :
949:2011/02/16(水) 21:16:02
× 今回スケルトンとして(SOFTWAREで)まとめた後に
○ 今回スケルトンとして(HARDWAREで)まとめた後に
ウィンドウがすぐに閉じるとか表現が曖昧だなあ
メソッドの戻り値をちゃんと調べてるのかどうか
その文面からは判断できないわ
CreateDeviceはS_OKを返しています。
その下の行で「この行まで実行」でエフェクトファイルの読み込みで止まります。
そこまでのプロセスは全て正常な戻り値です。
おおかたスキニングに頂点テクスチャでも使ってんじゃねーの
デバッグランタイムでも何も言わずしぬの?
いえ、個別に作ったクラスと同じものをまとめただけなのでその部分に問題は無いはずです。
デバッグでやってます。
CreateDevice が D3DCREATE_SOFTWARE_VERTEXPROCESSING を使う場合、CreateVertexBuffer は 0 または D3DUSAGE_SOFTWAREPROCESSING を使う必要がある。
これは大丈夫?
すみません。マウスのクリックで地面(メッシュ)の座標を得たいのですが、
D3DXVec3Unprojectの結果の第一引数をレイにして、D3DXIntersectで距離やHitポリゴンの頂点から計算できないかと
あれこれやってるのですが、上手く行かない上に意味がよく解らず・・。
SDKやWeb上に、このサンプルって有ったりするでしょうか? ※DirectX9です
Pick サンプル
>>949 リファレンスモードと勘違いしてるのかな。
HARDWAREはもちろん、SOFTWAREだって全部の機能を持ってるわけじゃないよ?
本来は持っているべきなんだけどメーカ次第だし、そのために混在モードもあるよね。
とりあえず使用する機能がSOFTWAREモードできっちり対応しているか、CAPS見たらいんじゃないかな。
「ヒープ領域が・・・」の続きも知りたいけど、重要なヒントは省略しなくていいと思うよ。
てか、そのメッセージにそのまま答えが書いてあるんじゃないのかな。
960 :
956:2011/02/17(木) 01:03:16
>>957 ありがとうございます。読んで仕組みを勉強します。
>>958 やはりサンプルが有ったのですね。いじって色々と知識を増やそうと思います。
ありがとうございました。
961 :
949:2011/02/17(木) 09:23:34
スレ違いですが、ウインドウの初期化と作成に問題があったようです。
タイトルを変えると上手く行ったり行かなかったり・・・原因はよくわかりません。
ちなみに
>>955はD3DUSAGE_WRITEONLYでも作動しました。やはりどこかおかしいのでしょうか・・・?
962 :
デフォルトの名無しさん:2011/02/17(木) 09:42:13
lerp、slerpって何て発音するんですか
D3D9の質問です。
D3DRS_FOGENABLE でフォグを有効にしたら
D3DFVF_XYZRHW で描いてる2Dスプライトが真っ黒になるんですけど
これは仕様ですか?
だとするとスプライト描く時だけ D3DRS_FOGENABLE をFALSEにして
終わったら復元するのが定石という事ですか?
965 :
964:2011/02/17(木) 19:53:47
ID3DXSpriteがD3DRS_FOGENABLEをFALSEにしてるのをみると
仕様っぽいですね。
レス消費すまそ。
余談ですが、真っ黒と書きましたが正確にはフォグ色でした。
>>965 こんなとこで質問する前に、フォグの設定に関係する要素を全部調べるんだ。
D3DFVF_XYZRHWでもフォグは使えるから、そのための設定をちゃんとしないから
そんなことになってるだけだよ。
directxってインプロセスサーバーなの?
そうだよ
>>968 ありがとうございます
てっきり他にプロセス動いてるのかと思っていました
どう見てもただの関数群です
971 :
964:2011/02/18(金) 00:52:47
>>966 ピクセルフォグにしたら出来た。
ありがとー
すみません。
モーションを上半身(行動)と下半身(移動)を別々に動かしたいのですが、
これは普通どう実現するものなのでしょうか? ※モーション再生はSDKサンプルの加工品です。
現在「下半身と上半身それぞれに対して、アニメーションのセットとミックス完了後、
それぞれの不要部分のマトリクス更新をカットしあってみよう。」
と思って試行錯誤しているのですが、これは正しいor間違っているでしょうか?
また、何か読めば勉強になりそうな書籍やサイトが有れば教えて頂けますと助かります;
下半身と上半身を別ファイルにすれば解決
1つのファイルから複数のインスタンスを生成するでもいいけど
974 :
972:2011/02/18(金) 08:23:27
>>973 (゚Д゚) ・・・そんな手が・・。
元が同じモデルで同じモーションで再生時刻が同じなら綺麗にくっ付いて見えるんですよね;
ありがとうございます! orz
>>972 普通、どう実現するかって言い方があれだけど
>>973 も言う方法か、
あるいは予め指定してある頂点のグループ部分だけを動かせるような管理構造で、
単純に自前で持つように俺はしてるってか、全部書いてる
976 :
972:2011/02/18(金) 08:25:04
あ、あれ?でも何か論理破綻している予感も・・? orz
頂点つながってなかったらキレ目は見えるよ
当たり前だけど
978 :
972:2011/02/18(金) 09:24:20
>>975 ありがとうございます。実現方法は色々有るんですね。頂点変換に至りさえすれば。
>>977 プログラム以前の話でしたね; 綺麗にくっつけるには何かしら頂点を触らないとですし、手間が増えそうですね;
あまり複雑な事をしたい訳でもないですし、
いっそ全て全身モーションで作り、移行タイミングで誤魔化すのも手かな・・と。
色々勉強になりました。 ありがとうございました。
980 :
972:2011/02/19(土) 02:12:58
>>979 ありがとうございます。そういう手も有るんですね。
そこで、早速その方法に合わせてモデルを分割し、下半身の上に上半身を上に乗せようとしたのですが、
「乗せるボーンの合成済みマトリクス」を取ってきて描画すると
上半身が「形状は綺麗に保ちアニメーションも正常」「ただしやたら離れた位置で、下半身(腰)の回転と同期して大きく振り回されている」
という症状になってしまいました。
何となく、拡大縮小→回転→移動 の順番を間違えた時のような症状にも見えるのですが・・。
乗せる位置のマトリクスをどうにか分解し、順番に合成しなおせば正常になると思えますでしょうか?(分解方法を模索中です;)
981 :
972:2011/02/19(土) 07:03:54
すみません、上は何とか解決できそうです。
マトリクスの掛け合わせの理解が根本的に間違っている様で。
先にボーンのマトリクスを掛け合わせ、胴の境目の2ボーンの結果で上半身下半身を描画したら、ほぼズレずに上手く行きました。
お騒がせしました;
埋め
test