【C++】 DirectX初心者質問スレ Part31 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part30 【C】
http://hibari.2ch.net/test/read.cgi/tech/1278214135/
BMPで上げんな
>>3 もうちょっと綺麗にならんのか
つか元の画像はどんななんだ?
TGAはフォトショップで普通に出力できた記憶がががが。ぷらぐいんだったのかねぇ・・・。 PNGってダイレクトによめたっけ?読めればアルファも保存できるんだが。
>>8 TGAは出力できます
PNGは、最初JPGで保存してたのを名前を変えてPNGとしたらエラーになったのですが
JPGで開いてPNGでインターレース付きで保存したら透過付きで読み込めました
SDKのサンプルではよくDDSが使われてるのでDDSにしたいのですが
TooLで合成しようがフォトショで出力しようが同じものができますよね?
>>9 何がそれを保障するかはわからんけど、
一応どっちも製品なんだから同じかどうかは知らないが、途方も無くおかしな方式は採用しないだろ。
一つの見方だが、
フォトショップの内部形式から他のステップを踏むことなくダイレクトにPNGなりDDSになったほうが品質の面では良くないかい?
>>10 なるほど!
ようつべの動画を何回も上げて落とすを繰り返すと劣化するって動画がありましたがそんな感じですね
TGAかDDSのプラグインを探すようにします
バッカ お前、仕組み理解しろよ 「アンチエイリアス」でググレよ >できたのがこれで2階調補正して白黒反転させてToolでddsにしました なんで2階調補正するんだよーーーーーーーーーーーーーーーーーーーーーーーー! ググレって自分が何アフォなことやってるのか一発で理解できるから
別にこういうビルボードっぽい草ならαは2階調でいいと思うぞ 変にアンチエイリアス入れると描画順を考えないと半透明部分のZ値がおかしくなる ソートなしでαテストのみで描画できるから完全に抜きの方が楽 という話は置いといて 元素材をちゃんと作れ、そしてαチャンネルについて勉強しろ 2階調ににした白と黒の部分が何を意味してるのか理解してるのか?
えーソートなんてすぐじゃんー
>>14 ビルボードならいいけど
よくRPGとかであるように十字に組み合わせて配置したいときに面倒だろ?
>>11 フォトショのDDSプラグインはNVIDIAが配布してんぞ
>>12 ありがとうございます
アルファチャネルと間違ってググってました
つまり…PNGだと自動的にアンチエイリアスになるってことですか…?
そういや昔のSDKはUtilitiesのとこにフョトショDDSプラグイン入入ってたけど最新のだと無くなってるな
>>13 すいません
アルファチャンネルについてググったのですが理解できませんでした…
背景をカットしたコピーと同一ではないのですか?
ある色を透過色としてその色をスルーするのが透過の仕組みですよね?
そしてDDSだかは透過色が始めから決まってるからその範囲を黒の部分として合成してDDSを作る…みたいなイメージでした
>>17 なんで汚く見えるのか?
ってところから理解できたの?
それとアルファ画像もその仕組みも理解してねーのかよ
いろいろ覚えることあるな
全部1つ1つ丁寧に覚えてったほうがいいぞ
1.アルファブレンド(αが0のとき、128のとき、255のときでそれぞれどうなるか?)
2.アルファチャンネルの仕組み(2階調?ありえないw)
3.アンチエイリアスの仕組み
4.アルファ画像の作り方
の順番でしっかり覚えていかないと理解できないと思うけどな
覚えること山積だな。 フォトショップの使い方とか、アルファブレンディングの仕組みとか、ファイルフォーマットの区別とか。 DirectXの前段階じゃね?
>>20 ぐぐりました
1.アルファブレンド(αが0のとき、→透明
128のとき、→半透明
255のとき→不透明
2.アルファチャンネルの仕組み(2階調?ありえないw)→つまり、2階調にすると灰色の半透明ができないだろ!みたいなことですか…?
3.アンチエイリアスの仕組み→色のさかい目がだんだn混ざっていく?それでPNGだとアンチエイリアスになってJPGだとならないんですか?
4.アルファ画像の作り方→つまり各マスの黒から白の0〜255をα値にするってことですか…?
合ってたら理解が繋がった気がしてきた
>>22 質問!RGBAってなんだかわっかるー??
>>23 レッドブルーグリーンアルファの値?
アルファ…?ピクセルごとに透明度が決まってるみたいな?
>>24 半分丸だね。
ピクセルを構成する要素で、色の3色である、赤、緑、青、に透明度の単位であるアルファチャンネルをつけたもの。
つまり、2ピクセルを合成するときにアルファチャンネルに基づいて、赤と緑と青の合成濃度が変わるということ。
それが結局透けて見えるとかガラスの表現だとかそういうほうに結びつくの。
つまり JPG→RBG PNG→RBGAってこと? フォトショで切り抜いたから端のアンチエイリアスが混ざる色が0000とかで だからJPGだと端のコマがアンチエイリアスされず全部白に置き換わる PNGだとアンチエイリアスされてだんだんAが0に近づくからアンチエイリアスされて見える。みたいな?
>>22 JPEGや24bitBMPはもともとα値を保存してない(RGB)しかない
ここにグレースケール画像(0〜255段階)をα値として合成することで
ARGBのDDSとして保存するのがDirectXTextureToolのやってること
0と255の2階調なら完全な抜き絵になるし
白→黒へ徐々にグラデーションさせればアンチエイリアスになる
PNGはもともとα値を含む画像フォーマットなので
フォトショップ上でどう編集してるかにもよるけど
おそらく回転だの拡大だのしてるときにフィルターがかかって自動で縁にアンチエイリアスがかかってる
だからフォトショでPNGとして保存したものをそのまま読み込むと(DirectXTextureTool)を使わない
アンチエイリアスのかかったテクスチャが出来上がる
>>26 半分丸だね。
JPGは別の問題があって、高圧縮の影には非可逆圧縮系の方法がさいようされてて、画像は絶対劣化する。
透明なJPGができたかは忘れた。こういう用途ではあんまり使わない。
PNGは大雑把に言えばZIPと似たような方式をとってて可逆圧縮系の方法が採用されているのと、
アルファチャンネルなどの要素も仕様に含んでいる。
PNGはアルファチャンネルが保存できるから、
そのアルファによって透過させるということは、君の言うアンチエリアスの機能も実現できるんだ。
>>27 おおーなるほど。もう完璧にわかりました
下手すればフォトショでPNGで作っといて名前を変えるでDDSにしてもいけるんじゃないかってぐらいに理解できました
ツール要らないんじゃないかとか一瞬思ったけど、ミップマップレベルとかあるからやっぱり要るんでしょうね
>>28 ありがとうございます
アルファ値の保存と、アルファチャンネルの保存の違いはまだよくわかりませんが
512×512ピクセルとはいえJPGの圧縮の劣化と言ってもそこまで無いでしょうし
とりあえず今は透過=PNGかGIFと覚えておきます
あーアルファとアルファチャンネルはほとんど同意だ。 まー、がんばってくれ。GL&HF!!
ありがとうございました!
>>32 がなんかいろいろ勘違いしたまま去っていった気がするのは俺だけだろうか・・・。
なんで自分でプログラミングする以前の問題として、 まともなモデリングソフトを触って研究しようとしないんだろう? どれだけ馬鹿なの?
>>33 こんな短時間で理解するのは無理だよな
まあ、わからなかったら何回でも書き込みを読み直せばいい
そのうちできんだろw
どこが違うんだ? 完璧に理解したつもりなんだが
>>38 アルファチャンネルをちゃんと適用したものを
>>39 すいません理解できません
どういうことですか?
具体的に何をどうしたやつを出せと言ってるのかゆってください
ここまでのやりとりは一体なんだったのだろうか・・・?(笑)
すべて無駄だったな
そもそも画像ファイル自体にアンチエイリアス目的でアルファ情報を含める必要性がまったく無いんだが、 いったいこいつらは何を言っているんだ?
>>43 淵が綺麗にならない問題はあきらめるってこと?
でも今回のレスって綺麗に貼れないか云々じゃなかったっけ?
まあ、やり方はどうでもいいけど
>>3 の汚い草を改善できなかったらいままでのやり取りはすべて無駄だな
そもそも元データが背景の白と融合してしまっている時点で、 それを分離しなければどうにもならず、 前段階の問題なんだからアンチエイリアス云々でどうにかなる話ではない。 手作業で地道に修正するしか無い。
話が読めねえ
>>3 じゃPNGの方でも汚すぎるってこと?
明らかに不自然だろ。
>>46 白と融合してる部分はアルファで見えないぐらいに消しちまえばいいんじゃね?
アルファチャンネル理解して淵を綺麗にできることが今回の話を理解できたってことだと思うけどな
>>47 そういう話だっただろ
そもそもの画像の切り取り方が下手糞とかじゃなくて?
>>50 それもある
でも
>>3 の画像って2階調で処理しちゃった奴でしょ?
2階調にしといてもテクスチャのフィルタ次第でアンチエイリアスになるしな
恥を承知で質問します。
あるエフェクトの表現方法について教えていただきたいのです。
よくRPGとかの戦闘シーンで件で切りつけた瞬間に本当に切ったような光が
ランダムに描画されて消えていくエフェクトを見たことあると思いますが、
それを表現したいのです。
具体的に言うとテイルズオブヴェスペリアのユーリの秘奥義である漸毅狼影陣
で切りつける瞬間に出る光のことです。
↓の動画の一番最初の技のやつです。
http://www.nicovideo.jp/watch/sm9545804 何がわからないのかといいますと、どういう画像を使って、どのような描画を行えば
よいのかが分かりません。
三角形の画像を使って、拡大しながら加算ブレンドするとか、ポリゴンの頂点を急激に伸ばしながら描画するとか
そういう表現で説明していただけると助かります。
コード等は必要ありません。
表現方法を教えてください。
最高のRPGを作りたいのです。よろしくお願い致します。
56 :
54 :2010/10/01(金) 12:16:07
>>55 テクスチャに動画なんて貼れません。
DirectXの知識自体はあるのです。
エフェクトを表現するスキルが不足しているんです。
よろしくお願いします。
貼れないというのが意味不明。 動画から画像を取りだして、更新が必要なフレームでテクスチャを書き換えればいいだけだよ。
58 :
54 :2010/10/01(金) 12:34:15
つまり、ある一つの画像を使っては表現できないということでしょうか? ああいうエフェクトは最初から、一つの画像を色々プログラムで駆使して表現しているのではなく、 何枚もの画像を使って、切り換えているだけなんでしょうか?
でも、この動画を見る限り1枚絵だな α値含むエフェクト画像を加算合成 全体の透明度を0.0→1.0→0.0の変化と αテストの閾値を0→255の変化を同時進行させているように見える
>>51 そうです
フォトショでまず自動選択ツールとか消しゴムで切り抜いて、白紙を背景にして保存して、2階調補正して透過のために白黒ファイルを作って、ツールで重ねました
jpgの時の散らばりが無くなったので結構満足してたのですがどうやるのが正解なのでしょうか?
>>52 自分の作ったPNGと違いがわかんねえ…あんまり変わらないような
それと、グラボ買ってきたから今から取り付ける
これからはトゥーンレンダリングしまくってやんよ
本職じゃないから正確なところは知らんけど、 透明な線ポリや板ポリを発光させたり、 板ポリ+アルファ付テクスチャを発光 & フェードイン/アウトさせたりするんじゃないの? 負荷は増えるだろうけどパーティクル使っても可能だろう。 何にせよ応用思考の全く出来ない人っぽいので、ググるか大き目の本屋に行ってみる事をお勧めする。 タイトルは忘れたが、その手のエフェクトについて解説した本がある。 シェーダー関係だったかな?
>>62 あいつはテクスチャアニメーションの代わりに使おうとしてたクズだろ
あんなのといっしょにするな
2chで聞くだけ無駄
66 :
54 :2010/10/01(金) 13:09:06
>>59 DirectShowを使えば可能なんですね。まったく知りませんでした。
私の知識不足です。
>>60 なるほど。参考になります。ありがとうございます。
>>63 ありがとうございます。
シェーダーもそこそこ扱えるので、
本の名前思い出したら、また書き込んでいただけると助かります。
こんなにも大団円なのになんでそんなレスが
「本当に切ったような光」に誰か突っ込もうぜ。 台所で料理してるオカンの手元が光りまくってるのを想像してしまった。 っていうか、質問するほどのネタでもないような。 放射状に筋を描いて、ポストエフェクトでライトブルームを加えてるだけじゃない? 中心部分には円形の光を加えていそうだが。
70 :
54 :2010/10/01(金) 13:19:58
>>63 ありがとうございます。ダウンロードしてやってみます。
>>69 言い方おかしかったですねw。すみません。
なるほど。ありがとうございます。
そういう「閃き」や「連想」のスキルがゼロの人間も世の中には少なくないんだよ
くそっ どうやったらDirectXマスターできるんだよ
DirectXなんてマスターしてどうしようっていうんだ 仮になるにしてもとりあえずサンプル全部作れるようになってからそんなこと言ってるのか?
まずはマスターの定義を明確にしろ。
人型のモデルが動かせるようになったらマスターしたといっても いいと思う。
ずいぶん簡単なんだな。
それよりもオススメ書籍とかないの?
とりあえずDXライブラリ始めた
それでもいいけど DirectXのチュートリアルからはじめたらどうか? 虎表示するのあったじゃん あれやるとモデルの表示がわかるからその後 固定モデル→アニメーションモデル→スキンメッシュモデル→各種シェーダ って自分ライブラリ作っていったほうがランクアップしやすいぞ DXライブラリの中身とかなにやってるのか読まなきゃいけないとか結構きついんじゃね? (いや、ソースついてるのかどうかから俺は詳細知らないんだが・・・) 他の人の作ったもんだし
なんでこんなバカばっかなの?
じゃあ、バカじゃない意見を頼む
ごめん質問者たちのこと(´・ω・`)
それはこのスレが初心者用だからさ 気に入らないなら「DirectX上級者質問スレ」でも作りたまへ
質問に答えないで茶々をいれるのは辞めて欲しい
わざわざ小学校に来て、馬鹿にしたり説教したりしているようなもんだからな
DirectX初心者の定義って、せいぜいDirectXのプログラミングを始めてから3ヶ月がいいところだろ。
3ヶ月だったらアニメーションとシェーダ終わったぐらいだな 調度このスレに来てる層だろ
え、俺は理解するのに5年ぐらいかかった
dxdiagを見るとDirectX version 11と書いてあるのですが グラボはオンボで、グラボのサイトを見てるとDirectX10.1対応(キッ とか書いてあるのですがこれはどういうことなのでしょうか?
win7だとソフトウェアエミュレーションできるんじゃなかったか
プログラム板にもネ実補正みたいなのがあるんだな 当然か
vistaです
>>90 知らんがな
dxdiagじゃなくてSDKインストールフォルダの\Utilities\binフォルダにあるDXCapsViewer.exeを実行して
メニューからprint whole tree to fileを選ぶ
exeと同じフォルダにdxview.logというファイルができるのでそれを晒したら話が早いと思うよ
デバイスの謳い文句とOSにインストールされてるDirectXのバージョンは関連ほとんどないだろ
D3DCOLOR_ARGBで(128,255,255,255)は多少薄くなるんですけど、(64,255,255,255)は完全に描写されない なにかいかんのかね
それだとコードを書いた人間が馬鹿だからとしか言いようがない。
少し調べれば分かることなのに、
WARPが分かっていなくてソフトウェアエミュレーションとぼかして言ったり、
Direct3D11エミュレーション機能が無いことが分かっていなかったりで、
あるようなニュアンスで答えるような
>>91 って何なの?
ちなみにWARPはVistaでも使えるし、機能レベルはDirect3D10まで。
>>97 シェーダーがおかしいとか
αテストの閾値が64以上になってるととか
程度が低いよね よくそんな姿勢で技術者やってられるなと思う すぐに仕事なくなっちゃうし 職場でも浮いちゃうと辞めるしかなくなっちゃうぞと思う
>>54 とか前スレにも何回かでてたけど
エフェクトを難しく考えすぎなんじゃないか?
一見して派手に見えるエフェクトはもうほとんど絵の問題でプログラムどうこうってのは少ない
エフェクト専門にやってるデザイナさんにツールみせてもらったけどあれは素人がなんとかできるもんじゃない
基本上がってきたエフェクトアニメーションを再生してるだけってのが実態だと思うぞ
あえて、アニメーション無しの
透明度変化、回転のみでやってみたけど
いかんせん絵の専門家じゃないのでしょぼさが隠しきれない
これも絵次第でなんとかなるんじゃないかなぁと思うんだが…
http://www5b.biglobe.ne.jp/~mya_a/dx/effect.html
この程度のだったらアニメーション付きのモデルファイルを再生して終りだね
まぁ、それ以前に初心者だと光っぽいグラフィックが描けないんだけどな
>>107 単純に職場のデザイナさんがアニメーション形式で作ってきてくれるってだけ
俺は画面に出すだけw
>>103 十分よくできてると思うよ。
筋の方のテクスチャの半透明の部分をもっと増やして太くすると
ライトブルームっぽくなるかも。
>>106 本屋に雷や炎、水しぶき、雲、煙、岩のテクスチャの描き方的な本ってあるんだぜ
俺がもってる本(photoshop デザインコレクション)が絶版状態だから似たような本を探してくればいいんじゃね?
デザイナさんもそーゆーの見て描いてたしw
グラボ付けたらトゥーンシェーダーできたwwwwwwwwwwwwwww これで俺も3Dゲームプログラマーの仲間入りだおwwwwwwwwwwwwwww
>>111 スキニングできましたか?
スキニングできましたか?
画像を表示させるのにZ座標を持たせる方法ってあります? いまやってる方法だとどうも描写順に表示してしまってるようで不便でして
116 :
115 :2010/10/02(土) 15:33:57
自己解決した
COMオブジェクトはboost::shared_ptrで管理してデストラクタでreleaseすれば問題ないですよね?
boostならintrusive_ptrを使うといい
ATL使えるならCComPtr使え
ありがとうございます 効率の面でintrusive_ptr、CComPtrをつかえってことですよね?
効率面で言えば使う必要はない
shared_ptrとの比較の話じゃ? 余計な処理のないCComPtr一択っしょ
ATLの要らない_com_ptr_tの事も思い出してあげてください
>>103 みたいなエフェクトテクスチャは何で描くの?フォトショ?
gimp
本とか読まなくても そういうのを描く用のブラシとテクニックがあってだな
kwsk
テクスチャを設定する時に Device->SetTexture(ステージの番号,ポインタ) とする時のステージを指定するのって Effect->SetTexture("識別子",ポインタ)でする時はどうすれば良いのでしょうか?
>>128 pEffect->SetTexture("シェーダーのテクスチャ変数orセマンティクス", テクスチャオブジェクトへのポインタ);
>>128 シェーダー側のテクスチャ変数を増やせば良いだけじゃ
>>129 >>130 ありがとうございます
ずっとググってるのですが全然理解できません
ステージの番号iはfxファイルの中のTexiと繋がっているのでしょうか?
>>132 指定するのはステージ番号じゃないよ。リファレンスにはステージ番号なんて書いてないだろ。
SetTexture(D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture);
IDirect3DDeviceのSetTextureとID3DXEffectのSetTextureは違うモノだ。
//テクスチャの設定 char number[] = {"01234567"}; for(int i=0;i<8;i++){ //テクスチャの取得 LPDIRECT3DBASETEXTURE9 temp_tex = NULL; aDevice->GetTexture(i,&temp_tex); //テクスチャがなければ終わる if(!temp_tex)break; //テクスチャの設定 string out = "texture"; out.push_back(number[i]); effect->SetTexture(out.c_str(),temp_tex); temp_tex->Release(); }
ありがとうございます。
>>133 だろ。に笑ってしまったのですがw
>>134 >>135 よくわかりません…具体的にはマルチレンダリングターゲットをしてて0と1とあるのですが
サンプルだとdevice->SetTexture(1or0,ptex)で指定してるのでわかりやすいのですが
>>135 だと全くeffect->を使ってないのですが自分は殆どeffect->SetTexture("g_texture",ptex)を使ってるのでどうすれば良いのかわからないのです
effectでやりたいのですがこういう時どうすれば良いのでしょうか?
すいません 目が腐ってました
目より頭が腐ってると思うよ
まさか SetTexturetとSetRenderTargetを勘違いしてたってオチ?
えっ SetTexturetとSetRenderTargetの第一引数って関係無いんですか?
なんで質問するやつはすぐカスだの何だの言い出すの?
どうりでググってもでてこないわけだな
やべええガチで頭腐ってた
というかこれは教える方が悪いんでは
>>135 もなんかずれてるし
エフェクトファイル側を出さないで何を伝えるつもりなの?
シェーダデバッガーってダウンロードできますか? ユーティリティーにPIXは入ってたのですがシェーダデバッガーらしきものは入ってませんでした MSDNにもここからダウンロード的な誘導も付いてませんし、VisualStudio.Netが必要だというページもあるのですが自分はExpressEditionです どうすれば入手できますか?
わけがわからん もうシェーダ無理マジで なんでエフェクトファイルだけCと違うんだよ 既存の↓に適当に入れただけでエラーってどういうこと? struct VS_OUTPUT { float4 Pos : POSITION; float4 Diffuse : COLOR0; float4 Diffuse : COLOR1;←加えた float2 Tex0 : TEXCOORD0; }; typedef struct VS_OUTPUT{も無理だし
>>148 変数名が同じだからでは?
fxcでコンパイルしてエラーメッセージをチェックするといいかも。
>>149 サンクス
普通にVS_OUTPUTの前にsとかつけたら通った
なんでこんな簡単なことが気付かなかったんだろうか
2ちゃんに文句書き込んだ瞬間解決するんだよないつも
fxcとかいうソフト、つけた瞬間一瞬だけひらいて閉じるんだけどなんだこれ?
サンクス 出力のところ見たら普通に載ってたな 特殊形式っぽいしツール無いと無理だと思って探しまくってるうちに洗脳されてた
シェーダわかった。完璧だわ 一気にトトリっぽくなったしもうあとリソース作るだけだわ ktkr
>>146 >>134 のリンク先でその仕組みが分かって
SetTextureで設定しておいたものをシェーダ用として使うコードが
>>135 のつもりで貼った
まあ、でもよく考えるとすでに動くHLSLのサンプルがSDKのサンプルにあるのに
こんなことで迷ってるなんて相手にしないほうがいい人だったねw
自分が迷ってる部分が単発でサンプルにあるなんてわからないだろw
>>156 今回に関して言えばテクスチャが貼られてるサンプルならなんでもよかったよね?
>>157 __、
,r´⌒ヽ,⌒ヽ,ヽ
(⌒)、 .人 λ\、 ._____
\. \ 、 ヽ./ ー ー\
|\ \ ヽ./ ( ●) ( ●)
| \ \ / (__人__) \ はいはい、どーもすみませんでした
|. \ | ` ⌒´ |
. |. |.\_ノ\ /
. |. | | \______/
. | ) .| . . ̄ ̄
. | | .|
| |.| .|
. | | .| .|
/ / / ヽ,
(__ノ ヽ、__つ
>>158 すっごい馬鹿だったよねw
見てて惨めなくらい間抜けだよね?
SDKに載ってることを馬鹿みたいにわかんないわかんないってw
PG向いてないんと違う?大丈夫?
>>160 __、
,r´⌒ヽ,⌒ヽ,ヽ
(⌒)、 .人 λ\、 ._____
\. \ 、 ヽ./ ー ー\
|\ \ ヽ./ ( ●) ( ●)
| \ \ / (__人__) \ はいはい、どーもすみませんでした
|. \ | ` ⌒´ |
とりあえず件のトゥーン君は 質問するとき判別できるようにコテハン付けてくれ そして質問に関係すること以外はチラシの裏にでも書いといてくれ
しかし、DX9って息長げーな もう8年になるかというのに、いまだ手を出す奴が絶えないもんな といいつつ俺も9で完全に止まってる化石だが
DX10がVistaと共に沈没してしまったからな DX10.1もNVIDIAがついてこずこれも黒歴史化 Win7とDX11が普及しきる迄はまだまだDX9の天下
プログラマブルシェーダーが主流になって 7以前のハードの進化とのイタチごっこが終わったからだな 今後はSMのバージョンアップ=DXのバージョンアップになっていくんだろう
SMの進化が進んで、IA32+SIMDと同程度になったら D3Dの時代は終わるかも まあLarrabeeやCellがずっこけてるし、まだまだ先かもしれんけど D3D9はその時でも依然現役だろうな
最低でも4年後までは9の天下のままだろ
シェア最大のIntelのグラフィックが腐ってるからな ここがDirectX11をまともに動かせるようになるまでは駄目だ
MSはエンドユーザーへ浸透を促進するためにまず開発者を移行させようとしてくるからな とりあえずVS2012くらいでXPのサポート打ち切って じょじょにDXSDKのVS2010以前のサポートを打ち切ってくるだろう 世間ではまだ9が全盛でも9で開発したかったら古い環境でやってね、となるに違いない
プログラムを辞める
デバックしろ どうせ「かまってトゥーン君」なんだろうが…
次のトゥーン君の発言は死ねか黙れかカスだなたぶん。
かまってツォーん君って誰だよ 弄る前の状態にしてもエラーでるしワケ分からん
だからデバックしろって VCみたいだからF5でデバック実行する エラーがでて止まったら呼び出し履歴をみて最後に呼ばれた関数に飛ぶ その中に適当にブレークポイントを打って止まる原因になってる行を突き止める まぁ、たぶんNULLインターフェースのメンバを呼んでるとか new してないインスタンスのメンバを呼んでるとかそんな感じだと思われ
二重deleteだろ
EVRでレンダリングしている動画の上にIDirect3DSurface9を使って簡単なアニメーションを重ねたいと思います。 それに使うIDirect3DSurfaceはどこから取得するのが最適でしょうか?
別アプリのEVR対応アプリの上にってこと?
現在、Windows2000対応のアプリのためにDirectX SDKの October2004をインストールしているのですが、最近のバージョンの SDKと共存させることはできるでしょうか? インストール先を別々にするだけで良いとかだとうれしいです。
結局何が別であるとうれしいかというとライブラリとかヘッダなので別にインストールすればいいんじゃね? でも、環境変数とか同名の名前の衝突とかで食い合う気がするのでその辺の調整はいるかも。
Win2000対応のアプリなんて捨てろよw XPからにしとけwww どうせ貧乏人をサポートしてもそいつらコピーでしかあそばねえからwww
一応共存させることは出来る インストール先を別にして 環境設定のインクルードディレクトリとライブラリディレクトリの優先順位を2004Octの方を上にしとけば基本そっちから使ってくれる ただMSもあまりそれは推奨してないようなので不具合がでても自己責任
VS2010からは環境変数で設定するんじゃなくて 個々のプロジェクトごとに設定できるようになったから良いね その分ちょっと煩雑にはなったけど
2010のってプロジェクトファイルそのものにSDKのフルパスが書き込まれるあたりダメダメじゃね? インストールパスが違う他環境だとそのままじゃビルド不能になるし。
>>181-183 ありがとうございます、一応できるんですね
環境変数も注意して見ることにします
ソリューションフォルダ以下にヘッダとライブラリを全部コピーするような真似しない限り 結局環境依存じゃねーか
$(DXSDK) $(WindowsSDK)
SDK複数バージョン同居前提の話なんだから環境変数はダメだろ。
なんだその話続いてたのか
そういう特殊な環境で作りたいんだったら 自分で環境変数を増やせばいいじゃない 別に一個じゃなきゃいけない理由も無いんだし
シェーダを使った場合、 SetRenderStateで設定してるものは全て無効になるんですよね? すべてシェーダー側で設定しろってことですか? カリングモードの設定もですか? よろしくお願いします。
まずは自分で試してみろ。 そうでないと話にならない。
>>194 試しました。たぶんそうなんですが、念のための確認です。
スパルタ教育は好きです。
もう一度やり直せ。
>>196 やり直して確信に変わりました。ありがとうございました。
>>179 同じアプリ内のEVR (DirectShow)です。
>>197 αブレンドの設定は生きてるぞ
他にも生きてるもんあんだろ
ひねくれたこと言わないでちゃんと回答してればこんなことにはならなかったのに
固定シェーダの恐怖が減っただけでもありがたいことだな
>>199 何が生きて何が生きてないんですか?
勉強不足でホントすみません。
あ、生きてるやつだけでいいです。
>>202 知らん
そのときどきで「おーこいつ生きてるじゃんoh!yeah!」って対処しろ
なんか釣りっぽいけど マジレスするとシェーダー使っててもSetRenderStateは全て無効にならない 基本事項はSetRenderStateで設定しといて シェーダー内のみで変更したい項目をシェーダー側で変更する ID3DXEffect::Beginでパラメーターを指定しなければEndの時に変更部分が復元される
>>206 最高です!釣りじゃありません!
ちょっと前から厳しい人がいたんで反応を見てただけです!
スパルタ教育は好きなんですけどね!
ありがとうございました!
>>206 追加で質問です。
Beginでパラメータを指定しないってことは第二引数を0にするってことですよね?
変更部分が復元されるというのは、シェーダ内での変更がそのまま維持されるということでしょうか?
それとも、シェーダ内で変更した項目は全てリセットされ、シェーダーで変更する前の状態に復元されるということでしょうか?
何度もすみません。よろしくお願いします。
209 :
207 :2010/10/05(火) 09:52:12
もうわかったのでいいです。 シェーダ内の変更がそのまま復元され維持されるということですね。 復元されちゃったら、また元に戻さないといけないのでやめたほうが良さそうですね。
話の流れが見えない 207=209じゃないよな?
思い込みが激しい奴に何を言っても無駄。
普通に同一人物に見えるが
だから思い込みが激しい奴に何行っても無駄だって
人の話も聞かずに勝手に頓珍漢な結論を出すんだから放っておけばいい。
てか、昨日から上から目線で混乱させるようなことばかり言ってるやつでしょ だろ。の人は回答する気がないならいい加減消えればいいのに
なんだかんだ言って、誰も間違いに突っ込まないところが、 人が悪いなと思ってしまう。
合ってるって言ってあげろよ
てか勘違いしてるのか日本語が下手なだけなのゆとりなのか判断に悩む
リソースをコンパイル中にこんなエラーが出ました。 対処法がわかりません。教えて下さい。 fatal error RC1011: compiler limit : 'XSKINEXP_TEMPLATES': macro definition too big
誰もわからないの?バカなの?死ぬの?
>>220 compiler limit : 'identifier' : macro definition "too big"
Try to split the definition into shorter definitions.
LoadObjectFromFileでWAVは読み込めるんだけど MP3が読み込めません。 どうすればいいんでしょうか。
API調べるのめんどい。Direct何のどのクラス使ってるのさ XAudioだかはWMA風データなら読めるがMP3は読めない MP3を簡単に再生するならWin32APIかDirectShow ちゃんとやりたかったらSDKなりでWAVに変換せよ
>>224 自前でデコードするかDirectShowを使うしかない
mp3はライセンス問題があるからoggにしとけ oggなら展開用のライブラリもそのへんに転がってるし
>>225-227 レスありがとうございます。
DirectShowやoggを検討してみます。
229 :
デフォルトの名無しさん :2010/10/05(火) 22:53:52
>>230 面倒だけど癖になるからアク禁依頼だしてくるか
こいつマ板でも宣伝してたわ。
皆さんのテクスチャ管理方法をざっくりでいいんで簡単に教えてください。 読み込みから解放までを。 すみません。
テクスチャ登録用のリストを作る ファイル名や識別子などからリストを検索 未登録ならテクスチャを作成しリストに登録 登録済みならテクスチャへのポインタを返しAddRef(参照カウントを増やす) 必要なくなったら参照先でRelease 参照カウンタが0になったらリストから削除
シェーダープログラムでのテクニックとパスの違いを教えてください パスはレンダーステートとプログラムのセットですか?
>>235 ありがとうございます。
描画する際もファイル名などからリストを検索して描画ルーチンに渡しているのでしょうか?
もしそうなら、その検索時間は気になりませんか?
>>237 ハッシュマップとかIDでソートかけておくとか
ちゃんと文章読んでるのかよ
>>238 なるほど。ありがとうございます。
STLのコンテナを使わないのは何故ですか?
>描画する際もファイル名などからリストを検索して描画ルーチンに渡しているのでしょうか? しないよ 描画オブジェクトもテクスチャへのポインタを持たせておけば読み込み時の1回だけでいいだろう? なんのための参照カウンタだ
>>241 なるほど!本当にありがとうございます!
最高のシステムですね!参考にさせていただきます!
すごいですね! 本当に本当にありがとうございました!
float4 col = 1って全部1が入るんですか? col.xyzw = 1と同じですか?
yes
thankyou
>>235 自分は別な質問者ですが、
参照カウンタが0になったら、というので
内部参照カウンタの値を取得するにはどうすればよいですか?
それとも自分で数えておくのですか?
248 :
247 :2010/10/06(水) 22:39:48
すみません普通にわかりました ULONG = Hoge->addref() - 1; Hoge->Relase(); ですね
そのカウンタを使って処理をするな的なことがドキュメントのどっかに書いてなかったっけ
D3DXCreateEffectFromFile()って素敵ですね。
251 :
247 :2010/10/07(木) 07:23:57
>>249 あれ?そうなんですか?
もしよければ詳しくおねがいします
>>251 Syntax
C++
ULONG Release()
Return Value
Returns the new reference count. This value is for diagnostic and testing purposes only.
253 :
247 :2010/10/07(木) 09:30:05
>>252 まじすか ありがとうございます
じゃあ上の参照カウンタが0になったら、
っていうのは自分で数えておけということでしょうか?
それとももっとましな方法がありますか?
255 :
247 :2010/10/07(木) 10:54:31
>>254 まあ、たいした手間ではないですよね
ありがとうございました
>>252 それって単にマルチスレッド環境での保証がされてないってだけじゃね?
僕はテクスチャ型と座標を毎回関数に渡して描画してるんですが、 もっといい方法ないですか? 皆さんの描画システムを簡単に教えてほしいです。
何をしたいのか目的も書かないで、方法だけ語ることに何の意味があるの? 前提条件も把握せずに答える馬鹿が出てくるかもしれないが、 頭の悪い内容しか返ってこないぞ。
頭の悪い回答すると テクスチャ型と座標を管理したクラス配列を持つクラスにやってもらう てか、テクスチャ型と座標って何の話だ?www
ごめんなさい。
具体的に言うと、LPDIRECTD3DTEXTURE9とそのキャラクターの位置座標を渡して
描画してもらうようにしています。
>>259 こんな回答でも参考になります。
IDirectSoundBuffer8::SetVolume を使って音のフェードアウト中にノイズが乗ってしまいます。 【ソースコード】 for(i=DSBVOLUME_MAX; i>DSBVOLUME_MIN; i-=25) { pDSData->SetVolume(i); Sleep(1); } pDSData->Stop(); フェードアウトの方法が間違っているのでしょうか。 よろしくお願いします。
目的があって手段があるのに、未だに目的が不明。 手段の説明しかしていないのが分からないのか?
>>261 まずはサウンドカードを別の物に交換して確認する。
264 :
261 :2010/10/07(木) 15:30:21
>>263 DirectSound対応を堂々とうたっているサウンドカードにて確認してみましたが、
やはりノイズが乗ります。
>>264 日本語は通じてる?
対応云々の話なんて一切していない。
別のサウンドカードで確認しろと言ってるの。
266 :
261 :2010/10/07(木) 15:38:26
それでノイズが気になるのなら、波形データの方を少しずつ減衰させるしかない。
>>266 具体的にその2品の製品名なりチップセット名は?
ボリューム値の変動を細かくする。 Sleep間隔を長くする。 もっとまともなタイマーを使う。 完全なフェードにするには1サンプル毎に減衰させる。
270 :
261 :2010/10/07(木) 16:04:38
>>267 wavデータをセカンダリバッファに書き込むときに減衰した値を書き込む訳ですね。
しかし、ストリーミング再生をしているので、恐らくセカンダリバッファをロックして
バッファの値を読んで減衰した値に書きなえないとダメだと思うのですが、
フェードアウトするためにバッファをロックするタイミングがわからなかったりします。
>>268 @SoundMAX Integrated Digital Audio
ADigidesign MBOX2Pro ← プロ用のDirectSound対応
です。
まずは製品の名前を聞こうぜ。
@SoundMAX Integrated Digital Audio サウンドカードとしては最悪に分類される製品。 音が出るだけありがたいと思わなければならない。 ADigidesign MBOX2Pro ← プロ用のDirectSound対応 不明
しつこく聞いといてこの体たらくである。
確かあんまり細かい間隔でボリュームを変えようとするとダメだった記憶がある Sleep(1)が良くないんじゃね?
275 :
261 :2010/10/07(木) 16:20:38
>>269 >ボリューム値の変動を細かくする、Sleep間隔を長くする
10秒ぐらい掛けてフェードアウトするとなめらかなのですが・・・
50ms以内にフェードアウトしたいです。
>もっとまともなタイマーを使う
Sleepには、1ms〜14msのばらつきがあるのは確認しましたが、
もっとまともなタイマーを使うというのは、1msよりも短い時間で
ボリュームを変更するということを兼ねているのでしょうか。
>完全なフェードにするには1サンプル毎に減衰させる
本当はこれをやりたいのですが、どのような方法で実装すればよいのか
僕の技術力不足でわかりません。
>>272 >Digidesign MBOX2Pro
ミュージシャンがDirectSound対応のソフトシンセを使って
音を鳴らすことを前提に設計されているようです。
>Digidesign MBOX2Pro ← プロ用のDirectSound対応 USB接続の時点で、細かく切り替えたら駄目だろ。
とりあえず60FPSで1フレームごとに下げることを想定して Sleep(16)くらいで試してくれ
そもそもフェードとはいえ短時間に急激に音を止めたり発生させたりすれば、 その衝撃がノイズになって当たり前なのは分かっているのか?
279 :
261 :2010/10/07(木) 16:32:04
>>274 僕も過去にそういう経験があったような気がします。
もともと、やりたいことは、
ストリーミング再生において、「play → stop → 曲を変えてplay」のときの
stop時に発生する、ノイズを消し去ることです。
ノイズを消し去る方法をインターネットで調べているうちに下記の方法を知りました。
----
セカンダリバッファを2つ用意して
1個目 -- 曲のplay → stop → 曲を変えてplay
2個目 -- 無音の音をずっと流す。
----
実装しましたが、stop時のノイズは消えませんでした。
>>276 IEEE1394仕様です。
>>277 了解しました。
Sleep(16)あたりで試してみます。
>>278 あまりわかっていません。
どこかのサイトで50msでフェードアウトするとstopノイズが消えると見かけたので
50msを目標にしています。
280 :
261 :2010/10/07(木) 16:33:29
>「Windows プロフェッショナルゲームプログラミング」という本からの引用ですが、 >このバグの対処法として、セカンダリバッファの停止時に、 >50msくらいでフェードアウトさせると良い、とあります。 というのを見かけました・・・
50msでファードアウトって・・・ 5段階くらいのフェードアウトで十分だと思う
それって50msでフェードアウトじゃなくて 50ms間隔でフェードアウトの間違いなんじゃ
俺の持ってる本じゃこういう表記になってるな。 > 徐々に(50msぐらいで)フェードアウト
そんな本は窓から投げ捨てた方がいいんじゃないか?
その文だと50msってのが間隔なのか総時間なのかどっちとも取れるような
ここって何でこんなに低レベルなの? 二度とこないよ。
はい、おつかれさん
無音の音を流し続けるって解決方法は別の話なんだっけ?
Stopノイズが発生するのは DirectSoundって言うよりWDMサウンドデバイスのバグでしょ?
291 :
261 :2010/10/07(木) 19:58:34
改良したつもり・・・ ジョリってノイズが鳴る。 LONG v; float x; for(x=0.0f; x<100.f; x+=2.0f) { v = (LONG)(x > 99.99f ? -10000 : -100.0f * log(100.0f / (100.0f - x)) / log(2.0f)); pDSData->SetVolume(v); Sleep(1); } pDSData->Stop();
sleepが1mscのままじゃん
ストップノイズが出るのと 変更間隔が短すぎてノイズが出るのは別問題
50msなんて極小の時間の中でリニアに変化させたって人間には知覚できん x+=20.0fにしてSleep(10)くらいにしとけ
Core2のWinXPの話だが、Sleepは10以下を設定しても10より小さくならないからな。
10msってかOSのタイマー割り込みの精度による Sleepから復帰させるスケジューラーがこの割り込み分解能より短い時間で仕事できないから 10msだったり16msだったりまちまち timeBeginPeriod(1); を呼べば精度の低いSleepでは限界があるものの1msに近づけることはできる ところでtimeBeginPeriodを呼んでる臭いアプリ(WindowsMediaPlayerとか)を同時に立ち上げとくと いきなりぬるぬる動き出すアプリあるよねw そのプログラム内のみの変更じゃなくて OS自体のタイマー割り込みに対する変更だから起動してる全てのアプリに影響があるので注意
298 :
261 :2010/10/07(木) 23:57:37
>>293 >>294 >ストップノイズが出るの
無音のwavファイルを再生中にストップしてもノイズが出なかったので、
ストップノイズの問題は発生してないようです。
>変更間隔が短すぎてノイズが出るの
>>294 に教えていただいた値にしたいと思います。
しかし、最大の疑問は、
『v = x > 99.99f ? -10000 : -100.0f * log(100.0f / (100.0f - x)) / log(2.0f);』
の式が本当にあっているか、とても怪しいです。
上記の式では、音は多少小さくなりますが、きちんと無音までフェードアウトしているようには
聞こえないからです。
ちなみにこのサイトに情報が載っていました。
ttp://www.hgw-a.info/?date=200304 申し訳ありませんが、音の世界に詳しい人に上記の式を検証していただけると幸いです。
>>295 PentiumMのWinXPの場合、Sleep(1)は、timeGetTimeの精度を1msに上げて
測定したところ、ほとんどが1〜2ms、ばらつきがあり、最大が14msでした。
>>295 の結果は酷く精度が悪いですね。僕の持っているマシンがたまたま精度がいいだけかも。
299 :
261 :2010/10/08(金) 00:01:27
>>296 その方法で精度を上げています。
>>297 >ところでtimeBeginPeriodを呼んでる臭いアプリ(WindowsMediaPlayerとか)を
>同時に立ち上げとくといきなりぬるぬる動き出すアプリあるよねw
興味があるので検証してみたいと思います。
結局、ノイズ自体を出さないようにすることはもうできる状態なの?
>>298 とりあえず今回に限ってはその式を適用させる意味はないよ
50msのフェードはユーザーに聞かせるための目的じゃないから普通に線形にボリュームを下げていいかと
一応書いとくと
「-100.0f」 * log(100.0f / (100.0f - x)) / log(2.0f);
↑の-100.0fがボリューム(x)が半分(50)の時の値になる
そこに書いてあることが正しくて
10db(10%)下がった時に半分に聞こえるとするなら
DSBVOLUME_MINの10%である-1000.0fじゃないとおかしい
>>298 人のソースを意味も分からずコピペして
「怪しいです」「検証してください」はどうかと・・・。
ソースを公開している方にも失礼ですよ。明らかに間違っているならともかく。
x > 99.99f のときに -10000 (-10000が無音と仮定) になるんだから、
式が間違ってるわけではないでしょう。
検証するとすれば、
DSBVOLUME_MIN(無音) が本当に -10000 かどうか
x > 99.99f になるルートがあるか
といった部分だと思う。
>>291 のソースでは、x =98 でループを抜けてしまう(xが100にならない)から
無音にならないのでは?
>>298 あと
>>261 や
>>291 だと、時間が基準になってないから
思ったようなきれいなカーブ/線を描かないと思う。
設定するボリュームは、経過時間/フェード時間 を基準にするべき。
double total, fadetime;
clock_t start, end;
total = 0;
fadetime = 2.0f; //フェード時間(秒)
while (total < fadetime)
{
start = clock();
pDSData->SetVolume(DSBVOLUME_MIN * total / fadetime);
Sleep(1);
end = clock();
total += (double)(end - start) / CLOCKS_PER_SEC;
}
pDSData->SetVolume(DSBVOLUME_MIN)
こんな感じ?Volume計算式とかSleepの値は調整してね。
環境なくてちゃんと試してないけどご容赦を。
>>303 いや、時間を基準とか関係無しに
線形にデジベルを下げると
音の性質上急速にボリュームが下がってしまうという話だから
言ってることは正しいが今は関係ない
組み合わせて
pDSData->SetVolume(-1000.0f*log(1.0f-total/fadetime)/log(0.5f));
とするなら有りだと思うが
Direct3DのPresentメソッドが -2005530516って素敵な数を返すんですが、これって何の エラーですか?どうやらClearなどは成功していて、この関数だけが失敗しているようなんですが
>>305 HRESULT: 0x8876086c (2289436780)
Name: D3DERR_INVALIDCALL
Description: Invalid call
Severity code: Failed
Facility Code: FACILITY_D3D (2166)
Error Code: 0x086c (2156)
呼び出しが無効
引数が不正か
IDirect3DDevice9::Presentの場合
BeginScene 〜 EndScene のペア間で呼び出されると、失敗し、D3DERR_INVALIDCALL を返す
参考までに教えとくと
SDKインストール時に一緒に入ってくる
DirectX Utilitiesのなかに
DirectX Error Lookupというツールが入ってる
16進ならHex、今回のように10進ならDecimalにチェックいれてLookUpでエラーコードを確認できる
>>306 >>307 ありがとうございます。BeginScene〜EndScene間で呼んじゃってました。
エラー処理って大事ですね、今度から使うようにします
>>307 こんな便利なのあったのか
半年間知らずにdirectXやってた
310 :
261 :2010/10/08(金) 16:46:48
皆様ご指摘ありがとうございました。
>>303 と
>>304 のソースを、そのまま使わせていただきましたが、
SetVolume命令を使うとSleepを何ミリ秒にしようが、
ノイズが乗る仕様だと諦めました。
『fadetime = 0.3f; //フェード時間(秒)』にて実装しました。
>>303 ソースを動く状態で載せていただき、大変感謝しております。
>>304 ご指摘ありがとうございます。
>>303 の方法とマージさせていただきました。
フォームアプリにdirectxって組み込める?
できる
そもそもフォームアプリって何? ダイアログベースのアプリのこと? CLIで作ったWindowsフォームアプリケーションのこと?
>>313 すいません、説明不足でした。
Windowsフォームアプリケーションのことです。
普通にcppファイルに書き込めば良いのでしょうか?
どっかにCLIでDirectXの動かす解説のあるサイトがあったはず ぐぐれ
316 :
261 :2010/10/08(金) 23:47:56
話題を引きずって申し訳ないのですが、DirectSoundのSetVolumeによるフェードアウトの件、 CPU:atom330 OS:Win7で試してみたところ、ノイズはまったく乗りませんでした。 Win7ってリアルタイム処理が強化されているのかなって思いました。 当初の目的は @リソースの状態になったwavファイルをストリーミングで再生する。 A停止する。 だけだったのですが、曲を変えるときにノイズが乗るため、 Bフェードアウトする という処理を付け加えました。 後になって思ったのですが、@ABの機能は、DirectMusicでも、できたのではないかと思います。 しかも、DirectMusicだったら、フェードアウトを意識せずに曲を変更してもノイズは乗らなかった かも知れません。 DirectX9関係の本を何冊か読んだのですが、DirectMusicについては紹介されていない本もあり、 DirectSoundによるストリーミング再生が紹介されているものがほとんどでした。 DirectMusicの命令を知らないのですが、DirectSoundの上で動いてそうなので、 やはり、音量をいじってフェードアウトする場合は、同様にノイズが乗ったのかも知れません。 また、質問で申し訳ないのですが、DirectMusicで@Aを実装されている人はいますでしょうか。 もし、DirectMusicでフェードアウト時にノイズが乗らなかったら、DirectMusicで作り直すことも、 考えています。なお、DirectMusicを使った場合、OSの互換性の問題など発生しませんでしょうか。 よろしくお願いします。
自分も丁度曲チェンジの時ノイズが乗ってるって友達に指摘されたから聞きたいとこでした。
IDirectMusicAudioPath8::SetVolumeは、まんまフェードを作れる模様。 ただどういう実装でどの程度の精度があるのかは知らない。 ただDirectMusic自体が廃止される方向なのは周知の通り。 DirectSoundの話に戻ると、 Sleepでタイミングを作ってSetVolumeする方法は運任せすぎる。 せめてIDirectSoundBuffer8::GetCurrentPositionとかIDirectSoundNotify8でタイミングを作るべき。 ただDirectSound自体もVista以降はWASAPI上で動いてるから、期待した精度が出る保証はない。 確実にフェードを作るには、既に出ているように、バッファ内のサンプル値を直接いじるしかない。 なんつって
>>316 リアルタイム処理云々は無関係。
いい加減な間違った情報を書き込む前に、WindowsVista以降でDirectSoundのデバイスドライバがどういう扱いになったのか調べろ。
>>319 最近のOSのサウンド事情っぽい記事読んできたけど混乱してるなぁw
エミュレーション機能があるならこのままDirectSoundがいいんじゃねぇかと思ったけど
使っただけでエラーでたって報告あるのかよ
でも、それだと以前のゲームが動かないからそれは修正するハメになると思うけどね
俺等はとりあえずエミュにまかせてこのまま様子見か?
なんかいま色々動くのは損な気がする
DirectX10使ってるんですが CreateTextureとかで作ったリソースについて デバイス解放前に全て開放されているかどうかチェックしたいのですが そういう機能ってSDK側では用意されてますか?
自分で管理するしかない
SetTextureStageStateを使わなくてもピクセルシェーダーでテクスチャブレンディングできるとおもうのですが なぜ存在するのでしょうか
固定機能パイプライン
>>323 固定シェーダの名残みたいなもんじゃねーの?
DirectX10以降で消滅
どうも
そういや11のテッセレーターは固定機能シェーダーなんだよね? シェーダー側に記述するんじゃなくて デバイスに対して設定するとかそんな感じなの?
Direct3D11では描画に関する操作は、デバイスから一切が切り離されているが、 いったい何を言ってるんだ?
お前ら頭よすぎなんだよ。ちくしょう。
>>322 どうもです
うーん独自レイヤー作るのだるいな・・・
そもそも開放し忘れが起きるかもしれないような設計がおかしい それとも何か特殊なタイミングでチェックしたいわけ?
質問です。 Direct3Dで読み込んだ256色bmpの パレットの操作はどうすればいいんでしょうか? 現状 D3DXCreateTextureFromFileExでテクスチャを読み込み、 PALETTEENTRYの配列にパレットの値の取得及び、画面へ描画も出来ています。 ※パレットの値も正確に取れています
336 :
335 :2010/10/10(日) 03:00:37
追記スマソ。 Direct3Dのバージョンは9です。
>>335 無理
実際に作られたテクスチャのフォーマットを見ればわかると思うけど
現在普及してるビデオチップじゃ256色以下のパレットテクスチャを作ることはできない
PALETTEENTRYには読み取った時の色情報が書き込まれるだけで
それをどうこうしてパレットアニメーションとかはできない
シェーダーで似たようなことはできるかもしれないけど
素直に画像で用意した方が早いと思われ
確かにD3Dだとスライムベスすら 簡単に表示できない・・
昔あったアルファ値と普通の画像を2枚用意して合成して透かすのってできる? 検索しても見つからないし困ってるんだよ
>>339 どういう意図でアルファ値と画像を分離したいわけ?
単に抜きがやりたいだけなら最初からアルファチャンネル付の画像フォーマットを使えばいい
アルファ部分を動的に変化させたいとかなら
シェーダーを使うかテクスチャブレンドで対応できる
>>337 ,338
回答ありがとうございます。
素直に画像用意します。
ただ、1つ疑問なのはギルティギアイスカ(PC/PS2版共に)はゲーム中に
カラーエディットが出来る仕様になっていますが、
あれは337の言うようにシェーダーで行っているんでしょうか?
聞きたいのはPC版の方なので、PS2の方はスルーして下さい。 スマソorz
343 :
261 :2010/10/10(日) 15:22:34
>>318 使用する関数を教えていただきありがとうございます。
なんとかフェードアウトを実装することができました。
@GetCurrentPositionにて再生カーソルを取得する
A再生カーソル+60ミリ秒の位置からバッファをロックする
B100ミリ秒のフェードアウトをさせる
(バッファの中のサンプル値をフェードアウトした値に書き直す)
Cフェードアウト後の100ミリ秒のバッファを0(無音)に書き直す
Dバッファのアンロック
ESleep(60 + 100) ⇒ A+Bの時間
F再生のStop命令
手順は上記の通りとなります。、
Aは強引なような気がしますが、こういう方法をとるのが
一般的なのだろうかと思いました。
Bは、音楽ソフトで波形をフェードアウトさせたとき視覚的に、
直線でサンプル値が0に向かっていたのでlogを使いませんでした。
とりあえず、問題はなさそうに動いています。
どうもありがとうございました。
>>341 画像ファイルから直接テクスチャを作ってるんじゃなくて
インデックスデータとパレットデータを使って
生成した空テクスチャに色情報を書き込んでるんじゃないの?
動的に変化とかじゃなくて.palの上書きとかでしょ?
ピクセルシェーダを使って、画像を二枚用意して片方をテーブルデータとして使えばパレット的なことは出来るけど、 そこまでして何故パレットが必要なのか理由がさっぱり分からない。
10年前からきたんじゃないの?
>>344 >>動的に変化とかじゃなくて.palの上書き
俺がやりたいのはそれです。
PC版のGGイスカやGGXX#REには外部コンフィグには
「パレットエフェクト」って設定項目があるのでD3Dで出来るのかと
思ったんです。
>>345 カラーエディット的なことをやりたいんです。
それこそゲーム中にガンガンいじる気はないんですが、
プレイヤーが設定したカラーを反映したいんです。
それをやるのにパレットにする必要性が全くないんだが、 何故パレット云々が出てくるんだ?
読み取り時にパレット情報を使ってるだけでパレット操作をしてるわけではないな 普通にテクスチャをロックして書き込んでるだけでしょ
DirectX9.0cなんだけど、 デバイスを作成した後 IDirect3DDevice9::GetBackBuffer() でバックバッファを一度だけ取得して そのインターフェイスをずっと保持して使いまわすのは変? デバイスロストとかはちゃんと処理するとして
好きにすればいいよ。 いちいち聞くことじゃない。
スワップチェーンとの兼ね合いを考えると 毎フレームインデックス0のバックバッファを取得する方が 自然を思うな。 つーか、普通レンダーターゲットを使うよな。 バックバッファ直接描画ならD3D使う意味無いし。
シェーダー使って描画する際、2D描画の時は皆さんどうしてますか? シェーダーの時は変換済み座標って使えるのしょうか? 初心者なのでお手柔らかにお願いします。 今まで固定機能パイプラインでやってきました。 そのときは変換済み座標を使ってました。 それをそっくりそのままシェーダーでの描画に変えたいのです。 すいません。
シェーダーで何もしなけりゃいいだろwwwwwwwwwww
シェーダーでやりたいのです。 頂点変換済み座標ってシェーダーでは使えないんですか?
とりあえず試してみれば?
>>355 頂点シェーダで出力する頂点は
-1 < x < 1
-1 < y < 1
0 < z < 1
で、たとえば(-1,1,-)の頂点が画面左上にくる
同様に(1,-1,-)が右下にくる
この考え方でとりあえず3角形を描画してみたらどうだろう
ありがとう。本当に。 やってみます。
あの、シェーダーで描画するときの話です。 移動行列や回転、拡大行列等の行列の計算についてお伺いしたいです。 これらの計算もCPU側で行わずにシェーダー側で行っていますか? そのほうがはやいですか?
まずは試せ。 その結果に疑問があるのならそれを聞けばいい。
ごめんなしゃい
シーンによると思うけどね
>>359 行列を作るのはCPU
適用するのはGPU
頂点トランスフォームは、GPUがその能力を発揮出来る
数少ない機会だからな、やらせなきゃ損
カリカリに描画命令数の最適化をしない限り CPU時間は余りまくりなんだからどっちにやらせてもトータルは変わらんよ
>>363 みたいな間違った認識をするから自分で試すべき何だろうね。
まず頂点シェーダをGPUでやらないビデオカードがあるのが一点。
GPUとCPUの性能バランスが悪ければ、CPUにやらせた方がパフォーマンスが高いことがあるのが二点。
つまり速いかどうかは環境依存。
>>365 で、レアケース持ち出して
「いろんなパターンがあるからわかりません」が
正しい認識だって?
笑える
確かにそこら中に存在するIntelのオンボードがレアケースだと言う認識は笑える。
DrawPrimitiveを連発してるようなアプリなら普通にCPUにやらせた方が速いんじゃね?
まあ、そっからの議論は実測値が予想と違うときのみすればいい話であって いま、色々考えてみるのははっきりいって無駄 信じられるのは実測値のみ この考え方は徹底しておかないといつまでも無駄なことをしたり おかしな発言を繰り返したりと現場を混乱させるばかりでちっとも開発は進まないとかいう状況になる
Directxで何も描画しないのに、FPSが62ぐらいしかでないんだが、 内部で60ぐらいに制御するようにコード組まれてるの? 本当にbeginsceneとendsceneぐらいしかしてないんだが。
VSYNC
D3DPRESENT_INTERVAL_ONE D3DPRESENT_INTERVAL_IMMEDIATE
ありがとうございます! oneにすると自動的にリフレッシュレートを超えないように制限されてしまうんですね! 環境に依存しないで、FPSを制御するにはIMMEDIATEを指定して、 自分でFPS制御を行わないとぴったり60FPSにはならないんですね! めんどくさかったらONEに設定すれば、勝手にリフレッシュレートぐらいの FPSに制御してくれるというわけですね。 でも環境によって、FPSが変わるとゲームにならないので、前者の方法が良いですね! 知らなかったら、環境によってFPSが変化してしまうところでした。 本当にありがとうございました!
DIRECTXってなんで座標指定するときにFLOAT型なんでしょう? 画面に描画されるときの最小単位はピクセルなんですよね?
ドットバイドットで表示するなんてめったに無いわけで
シェーダープログラムのコンパイル済みファイルをエクセルで全パターン自動生成することを思いついた
>>371 >DIRECTXってなんで座標指定するときにFLOAT型なんでしょう?
そもそもそんな規則はない
たとえば(1.5F,1.5F)のところに描画しても、切捨てられて (1,1)のところに描画されるんですよね? 考え方自体破綻してますか?
破綻している。
そもそもDirectXとDirect3Dは同義ではないので、 >DIRECTXってなんで座標指定するときにFLOAT型なんでしょう? は意味不明。 Direct3Dのことだったとしても整数型の入力はサポートされているし、 Direct3D10以降なら整数値のハードウエアサポートもある。 またラスター化されるときにどうなるかも設定次第。
もしかしてシェーダーで、行列をセットするとき beginPass,Endpassの間でセットしても反映されない?
>>381 >ID3DXEffect::BeginPass/ID3DXEffect::EndPass 対応ペア内部にある Effect::Setx メソッドのいずれかを使用して、
>アプリケーションがエフェクト ステートを変化させる場合、アプリケーションは ID3DXEffect::CommitChanges を呼び出して、
>ステート変化のあるデバイスに更新を設定する必要があります。
>ステート変化が ID3DXEffect::BeginPass および ID3DXEffect::EndPass 対応ペア内で発生していない場合、
>ID3DXEffect::CommitChanges を呼び出す必要はありません。
ID3DXSPRITEでやってたときは画像の範囲していの描画はうまくできていたんですが、 シェーダーを使ったときの範囲指定描画の方法がわかりません。 頂点バッファを毎回いじればできそうですが、いじりたくないです。 いじらずにやる方法ないですか。
画像範囲指定とは、たとえばキャラ画像が8枚で一セットになった画像とかを ちょっとずつ分割して描画したいってことです。
シェーダでuvを好きなように調整しろ
頂点バッファに全て書き込んどいて読み出し位置をずらすことで切りかえるか サイズが一定ならシェーダーにどれだけずらすか送るだけ
ありがとうございます。参考にさせていただきます。
>>378 描画される位置は一緒でも、参照されるテクスチャ座標が変わる。
シェーダ万能すぎない? なんか有るぞこれは
馬鹿にはそう見えるんだろうな。
>>387 頂点バッファに全て書き込んどく方法はやめます。
サイズは等間隔の画像になります。
どれだけずらすかを送ってその後どうするんですか?
そもそも、頂点シェーダは書けるんですけど、どういった順序で計算されてるのかわからないんです。
例えば頂点が4つあったとしたら、頂点シェーダの関数は4回実行されてるんですか?
一回ごとに渡される頂点が違うってことですか。
その辺が詳しく解説されてるサイトがあれば教えていただきたいです><
>>392 四隅が等しくずれるんだから順番なんて関係ない
頂点バッファには1つ分のuvを書き込んでおく
プログラム側からuvをどれくらいずらすかシェーダーに送る
シェーダーでずらす
OK?
.cpp
ID3DXEffect::SetVector ( "tex_offset", &D3DXVECTOR4(0.5f, 0.5f, 0.0f, 0.0f) ) ;
.fx
float2 tex_offset
void VertexShader(
in float4 inPos : POSITION,
in float4 inTexture : TEXCOORD0,
out float4 outPos : POSITION,
out float4 outTexture : TEXCOORD0)
outPos = mul(inPos, WorldViewProj);
outTexture = inTexture+tex_offset;// ←ずらす
}
>例えば頂点が4つあったとしたら、頂点シェーダの関数は4回実行されてるんですか? その認識で正しい
静的な頂点バッファに書き込むとどうなるんですか?
パフォーマンスが落ちる
て言うかシェーダってなんなんですか
>>398 要するに描写の前にフィルタをかませてなんかいろいろ効果を出すってことか
まるで目の前にフィルムがあるかのような
そういう使い方もあるがそれだけじゃない
>>393 なるほど!
その手がありましたか!
すごい嬉しいです!ありがとうございました!
でもさ、俺も同じことやってるけど 物理的にはDrawPrimitiveUPなんかと似たようなもんだよねw って思うんだけど違うの?
シェーダーを設定しなおすと前に設定していたシェーダー定数の値はクリアされてしまうのでしょうか?
>>405 テストコードかけばいっぱつじゃない?
まあ環境依存のことを考えれば未初期化で使うなんてことは考えないはず。
>>406 簡単なテストでしてみました。レジスタには同じ値が入っているみたいです。
>>404 1フレ当たりにグラボに送る情報量がさほど変わらないじゃん
例えばこんな風にまるで意味がない感じにしても頂点バッファに触らないってのはそれだけでメリットあるんかな?
ってことが言いたいわけよ
.cpp
ID3DXEffect::SetArray的な何か(名前忘れたw) ( "pos", pos4) ;//頂点4つ分
ID3DXEffect::SetVector ( "tex_offset", &D3DXVECTOR4(0.5f, 0.5f, 0.0f, 0.0f) ) ;
.fx
float4 pos[4];
float2 tex_offset;
void VertexShader(
in float4 inTexture : TEXCOORD0,
in int inIndex
out float4 outPos : POSITION,
out float4 outTexture : TEXCOORD0)
outPos = pos[inIndex];
outTexture = inTexture+tex_offset;
}
何が言いたいのかまるで伝わってこない
頂点に座標を含むかどうかの違い?
>>411 いや、SetVectorなどの関数から描画に必要なデータをすべて渡している状態(でも頂点バッファにはアクセスせず)
DrawPrimitiveUPで描画するのとどっちが速いの?的な話
この2つとも1フレ当たりにグラボに渡すデータ量はほとんど変わらないよね?
大して変わらないことしてるのか、大きな差があるのか?ってとこ
何か勘違いしてるみたいだがグラボに送る情報量とか関係ない 頂点バッファは一度のDrawprimitiveで数千ポリを同時に描画するときに真価を発揮する そもそも1矩形を1回のDrawprimitiveで描くような仕様ならUP系とコスト的には大差ない UP系は使ってもいいけど使うときは 1000〜2000ポリくらいをバッファに溜め込んで一度のDrawprimitiveUPで描画したほうが効率は良い それ以上になるとシステムメモリからの頂点情報の転送がボトルネックになって 頂点バッファを使った時ほどのパフォーマンスが出せなくなる
414 :
デフォルトの名無しさん :2010/10/13(水) 19:41:01
ちょっとまってください。 DrawPrimitiveで数千ポリを一気に描画する方法があるんですか!? メッシュとかの話じゃなくて?
415 :
デフォルトの名無しさん :2010/10/13(水) 19:55:54
すいません。 まちがえました。。。
416 :
デフォルトの名無しさん :2010/10/13(水) 20:19:16
いえ、間違えてません。↑は別人です
ネタなのかマジボケなのか判断に困る
そこらへんの詳しい情報ってデベロッパーにしか公開されないんですか?
バカだからって死ねって言うのは差別につながると思うんです そもそもバカというのは基準が決まっていないじゃないですか 何が出来なかったらバカなんですか?それじゃあまだ何も出来ない幼児赤子はバカなんですか?
421 :
デフォルトの名無しさん :2010/10/13(水) 21:21:43
ここは初心者スレです
なんで死ねといわれなきゃいけないの?
まずは
>>414 がポリゴンとメッシュをどう認識しているのか確認するのが先だろう。
425 :
デフォルトの名無しさん :2010/10/13(水) 21:46:28
ポリゴンはいくつかの頂点で作られたオブジェクト メッシュは頂点データのかたまり。 これぐらしかわかりません。ごめんなさい。
ということで間違った認識をしていることが確定したので、 まずはポリゴンがなんなのかを調べるところから始めろ。
427 :
デフォルトの名無しさん :2010/10/13(水) 21:54:26
本当にどーやって勉強してるんですか?皆さん。 独学っすか?学校の授業とかですか?
まずはチュートリアルをやれ
ググったらいくらでも出てくるだろうが。 そんなことだからバカとか言われるんじゃね
いや、情報少ないよ 仕方ないよ
2DでdirectX9使うの完璧になったけど 3Dが全く分からなくて手を着けられない。 シェーダの仕組みもさっぱり分からない。 次に進む為のお勧めの書籍はありませんか?
自分で完璧とか言ってしまう人はちょっと
完璧なのにシェーダが分からないってどういうことだろう?
434 :
431 :2010/10/13(水) 23:13:58
シェーダって3Dを表示する時使う奴じゃないんですか?
理解できてないという意味では完璧だな。 入門書買って1からやりなおせ。
こういう場合に分かる奴、出きる奴は何でソースファイルとかアップしないの? 俺も分からないから知りたいんだけど何を信じていいのか分からん。
何のソースが欲しいんだよ?
ここは初心者質問スレです。 お願いですので、やさしくしてくださいよ。
シェーダーを使ったパーティクル形エフェクトのソースをお願いします。 バージョンはvs,psとも3_0でお願いします。
3Dが分からないってことはチュートリアルとか全然やってないのか? ドキュメントとか全然読んでないのか?
3Dまったくわからないとかいってるヤツに何のソースを出すんだよ。 初心者以前の問題
「UP系は本当に遅いのか?」計測してみたよ 結果から言うとだいたいヘルプに書いてあるのと同じ感じ DrawIndexedPrimitive、DrawIndexedPrimitiveUPで それぞれ20000ポリを1〜10000回に分けて描画 DrawIndexedPrimitiveの方は 静的頂点バッファ(Lock無し) 動的頂点バッファ(描画と同じ回数だけLock)の両方計測 静的頂点バッファをロックするのはお話にならないのでやってません 以下結果 20000ポリ(40000頂点)×1回 静的VB:890fps 動的VB:790fps DrawUP:710fps 2000ポリ(4000頂点)×10回 静的VB:880fps 動的VB:780fps DrawUP:700fps 1000ポリ(2000頂点)×20回 静的VB:870fps 動的VB:760fps DrawUP:690fps このあたりはほとんど変化なし やはり1000〜2000ポリを1回で描画するのが効率がよさげ
続き 200ポリ(400頂点)×100回 静的VB:830fps 動的VB:680fps DrawUP:650fps 100ポリ(200頂点)×200回 静的VB:760fps 動的VB:590fps DrawUP:590fps 20ポリ(40頂点)×1000回 静的VB:470fps 動的VB:300fps DrawUP:340fps 4ポリ(8頂点)×5000回 静的VB:165fps 動的VB: 85fps DrawUP:120fps 2ポリ(4頂点)×10000回 静的VB: 90fps 動的VB: 45fps DrawUP: 65fps 動的頂点バッファを200回LockしたあたりでUP系と並び、それ以上で逆転 1000回ほど描画命令を発行すると最高速の半分以下までパフォーマンスが落ちる それ以上はお察し
なんだよ。結局DrawPrimitive数千ポリゴン描画できるって言ってたのは嘘かよ Draw[Indexed]Primitiveじゃねえかよ。 ありがとう。
>>446 何をどう勘違いしたのか分からんが
頂点数が増えるだけでDrawPrimitiveでも当然出来るぞ
今日夜中に質問しまくるから、よろしく。 見捨てないでください。お願いします。
>>445 DrawPrimitiveを連投してポリゴンをたくさん描画するより、
一回のDrawPrimitiveでたくさんのポリゴンを描画したほうが断然速いんですね。
今まで2ポリをオブジェクトの数だけDrawPrimitiveを連投してたわ。
勉強になった。ありがとう。
ビデオメモリへの転送量は少ない方が速い。 API呼び出し回数は少ない方が速い。 おっぱいは小さく方が美しい。 基本です。
なんかめんどくさい事を言ってる奴がいるので
>>445 をプリプロセッサで
DrawPrimitiveとDrawIndexPrimitiveを切り替えられるようにしたものと差し替えた
後、補足して置くとこの計測値は低CPU負荷の状態で
D3DPRESENT_INTERVAL_IMMEDIATEでぶん回してるだけなので
一見、描画命令1回と10000回の間に10倍のパフォーマンスの違いが有るように見えるけど
例えば当たり判定やAI処理などでCPUに高負荷をかけると
1回の方はその分がガッツリFPSに影響が出るのに対し
10000回の方はGPUのブロック時間の間にCPUが仕事できるのであまりFPSに影響は出ません
つまり、パフォーマンスは差は縮まります
上の方で描画命令が多い場合はCPUで計算させてもかわらねーよ、と言われてるのはこのせいです
それでもなるべくまとめて描画した方が圧倒的に速いですが
その辺の詳しい理屈はこのあたりを読むとわかるかも?
ttp://www.atmarkit.co.jp/fdotnet/directxworld/directxworld01/directxworld01_03.html
高速に大量に描きたいならインスタンシングとかも勉強しとけよ
>>451 心から感謝いたします。
さっき生意気なこといってすみませんでした。
本気で勉強いたします。
レンダーステートの切り替えとか定数パラメータのセットって重いんですか?
ダミー設定を用意して実際に測定してみるといいよ。
最近のチップは以前と比べると格段に負荷は軽くなったけど >ステート変更をできるだけ減らし、残ったステート変更をグループ化する。 とMSDNにはある
誰がUPが遅いなんて話してたの? 変なことやったシェーダとUPとの比較の話だったんでしょ?
>>457 じゃあ、変なことやったシェーダーとUPで実際に動かして比較して見ろよ
絶対にお前が思った通りにはならないから
何を、もって違いがないって言ってるわけ?
「なんとなくいっぱい情報送ったら遅くなりそう」とか思い込んでるだけじゃね?
>>460 そんなこといってねぇだろ
日本語大丈夫か?
いきなり誰も聞いてないような比較データが貼られるから
話わかってるの?って言っただけ
今の話題と違うデータ出してない?
ってことな
ろくに理解してないのに煽るだけの奴より データ出してくれる奴のほうがよっぽどマシ
ここまで説明されて何が遅くなる原因なのかが理解できないとは… お前さんがまるで見当違いの問題提起してることに気づけよ
馬鹿なんだろ。
466 :
デフォルトの名無しさん :2010/10/14(木) 19:32:04
真面目に質問します。 皆さんはDIRECTXをどうやって勉強したんですか? 独学ですか? ある壁を境になかなか進まないのです。 それはシェーダです。 おそらく座標変換がちゃんとわかってないのです。 皆さんの学習法をお教えください。 真剣ですので、バカとか死ねとか言わないでください。
468 :
デフォルトの名無しさん :2010/10/14(木) 19:37:12
もういいです。 本気で呪っときます。
>>464 は?
誰もそんな話してなかったじゃん
お前馬鹿?
もう一度言うよ
誰 も そ ん な 話 し て な い よ ね ?
もう一度言うよ
誰 も そ ん な 話 し て な い よ ね ?
顔真っ赤w
>>463 まったく関係ないデータでも?
はぁ?プログラマ辞めちまえよクズ
>>470 そうやって誤魔化してるけど
君、自分がまったく関係ない話をしてること理解できてないでしょ?
新卒によくいるんだ君みたいなの
会話にちょろっと出てきた単語だけつまんで発言する人w
誰と戦ってるんだ?
どうせ全部自演だろ
このスレの存在意義ないだろ。 毎回人をけなすようなアドバイスしかできないカスがいるからな。
そう思うならこなければいい。さようなら
なんかいつも人のことをバカにするゴミみたいなやつがいるよな。 毎日どんな時間帯にもいるし、おそらくニートだろうねw
で?
みんな苦労してるんだよ
>>466 ただ漠然とどうしたら良い?とか聞かれても困るな
シェーダーが分からないにしても
どの段階で分からないのかも伝わってこないし
とりあえず手を動かして具体的に躓いたら質問に来ればいいよ
とりあえずサンプルのチュートリアルをシェーダーで表示するところから始めたら?
参考にならないかもしれないが俺はPIXでデバッグするようになって理解が深まったよ
オススメの入門書を載せてるサイト紹介して
>>466 >おそらく座標変換がちゃんとわかってないのです。
答えは出ているじゃないか。
入門書は無い
>>482 本当にありがとうございます。
単純に画像を表示するまでならできます。
その後の応用が効かない感じです。
エフェクトファイルもパスをわけて、新しい関数定義すべきなのか、
新たにファイル作るべきなのかとか、その辺もです。
>>483 こんなツールあったんですね・・・!これかなり良さそうです!
本当にありがとうございます。
488 :
487 :2010/10/14(木) 20:42:52
今日から座標変換について質問しまくる予定です。 どうか見捨てないで下さい。お願いします。
ここにそんなクソ下らないこと書いてる暇あったら ググればいいと思う
アホなんだろ。
質問するのは構わないけど「何がやりたいのか」ははっきりさせてね
アホかどうかの境目は、質問する前にどういう回答が返ってくるか予想しているかどうか。 それだけで質問内容が的を射るかどうかが決まる。
座標変換をGoogleで調べて勉強しようとすると大変だな ボケとかカスとか教えるの下手糞なサイトばっかり当たる 基本、物理とか数学まわりってはじめからよく知ってないといいサイト見つけるの難しいな
つーか、DirectXの最良の資料は DirextXSDKドキュメントだろ。 とりあえずD3D9の日本語版ドキュメント全ページ嫁
496 :
デフォルトの名無しさん :2010/10/15(金) 11:55:36
本格的なのやりたいなら英語か数学のどちらかができないと
数学ができないならミドルウェアとか使ったほうがいいのかなぁ。
DirectXを使いたいだけなら数学はいらない ある程度まともなゲームを作りたいなら多少は求められるがそれならミドルウェアでも変わらない それに数学が必要といっても公式覚えたり難しい方程式が解ける必要はない 計算はプログラムがやってくれるんだから 要は自分が求めたいことを何を使えば求められるか、ということを知ってれば良いだけ 例えば「2本のベクトルの内積や外積が一体何になるのか」ということさえ知ってれば 内積・外積を求める計算自体は別に知らんでもいい事だ
499 :
デフォルトの名無しさん :2010/10/15(金) 15:51:03
ゲーム作るたってモノによる だから線形代数はちゃんとやろう
500 :
デフォルトの名無しさん :2010/10/15(金) 15:51:54
ついでに群論環論もやろう
三角関数と内積外積、あと行列を少し分かっていれば3Dゲームは作れちゃうでしょ まぁ、だいたい線形代数の範囲内なんだが。 ライブラリ作成に命をかけてる人たちはその限りではないが
502 :
デフォルトの名無しさん :2010/10/15(金) 16:02:08
基底とかは?
知ってた方が楽な知識はたくさんあるが 知らなければならない知識はそれほどない 難しく感じるとしたら単に慣れが足りないのだろう
どれぐらい勉強したら、 普通にゲーム作れるようになりましたか?
勉強とおもっているうちはゲームを作れない。
早くMMDが作れるようになりたいよぉ
答えになってないんですが。 勉強と思わなくなるのにどれぐらいかかりましたか?
ゲームを作るだけなら勉強と同時進行で出来たしそれなりのものも作れた しかしDirectXを理解してきたなぁと実感できるようになるまでには5年かかった
マジすか・・。 数ヶ月でマスターなんて無理なんですかね・・・・
まぁ個人差あるだろうね。。。 俺みたいな馬鹿だと20年掛かるかもしれない
まあいい。私は不可能を可能にする男だ。
勉強してマスターしようなんて土台無理な話 とにかく手を動かして何度も失敗して試行錯誤していくうちに身につくもの 最初はどんなにショボくても何か形になるものを仕上げた方がいいよ やりたい事が明確になれば自分に何が足りないのかが見えてくる そうなれば「どんな本を読めばいいですか?」なんてアホな質問しなくても自分で選べるようになるし ただ漠然と「覚えなきゃいけない事がたくさんある」なんて考えて立ち止まるのはむしろ時間の無駄
>>513 すばらしいご意見ありがとうございます。
本当にその通りだと思います。
何事もたくさん経験して、失敗して覚えていくものですね。
これからはアホな質問はしないように頑張ります。
前にここでパーティクル系のソースアップしてくれた人いますか? あの画像って何のソフトで作ったんですか? GIMPで同じようなもの作れますか?
>>516 おお!すごいです!
photoshopのようですが、参考にさせていただきます!
ありがとうございます!
このレスは俺の日記帳の切れ端 こうやったらクオータニオンうまくいった mQuaはXファイルのアニメーションキーの回転から取得した値 D3DXQUATERNION q1,q2; q1.x =-mQua[key.index[1]].x; q1.y =-mQua[key.index[1]].y; q1.z =-mQua[key.index[1]].z; q1.w =mQua[key.index[1]].w; q2.x =-mQua[key.index[2]].x; q2.y =-mQua[key.index[2]].y; q2.z =-mQua[key.index[2]].z; q2.w =mQua[key.index[2]].w; D3DXQuaternionSlerp(&q,&q1,&q2,time);
一念発起してD3D11のサンプルをみているが やっぱりいろいろ整理されててわかりやすい印象 移行すべきだろうなあ・・
マでもPhotoshopくらい扱えないとだめなのか 魔方陣色々使えそうで良いな
>>519 どうやって書いてるのかと思ったら専用のブラシがあったんですね。
本当に助かりました。ありがとうございます。
知ってみれば大したことじゃなくても 知らなければ手も足も出ないなんて良くあること
じゃあ、そのブラシはどうやって作ってるんだよ とか疑問もたないところが初心者だよねw
ブラシなんて普通の画像と大差ないじゃん 何いっちゃってるの?
ハイハイw この話題はここでおしまい
いままで真面目に描いてたのが悔しくてしょうがないんだろw そっとしといてやれよ
自分で新しいの作れない子がなにか言ってるよw
自分で話題終了を宣言しといてちょっと煽られたくらいで反応しちゃう男のひとって
上の方で顔を真っ赤にしてたやつと同じ臭いがするな 自分じゃロクな情報出さないくせにやけに他人に絡む奴
でもこのやり方で毎回同じものしか作れないとかはちょっと困る
初心者スレなのに初心者をバカにする風潮どうにかならんのかね こちとらどんな情報でもありがたいのに
プログラマが自分で用意しなきゃいけないのってどうせ仮素材くらいなんだからこの程度でいいんじゃないの? 大事なのはどういう絵が実際の画面上でどう見えるかを知っておくことだと思う プログラマ側からグラフィッカに指示を出す事だって結構あるしこんな感じって具体的に言えるだけでも大分違うと思われ
そういう形でブラシを使っちゃうならはじめからフリー素材貼り付けろと
プログラマらしく数式で求めるんだ
>>519 見る限り結構応用が利きそうだけどな
まぁ、Photoshop限定だろうが
いつもサンプルを作ってくれる519さんってプロですか?
543 :
デフォルトの名無しさん :2010/10/17(日) 17:37:57
GIMPでもできますー
IMPO
DirectX11のスレどっかにある?
DirectX12っていつでるの?
11の話もここでいいと思う 分かる範囲でなら教えるよー
10のスレも死んでるしこっちでいいだろ
それ以前に10のスレなんてあったのか
でたばっかのころはそれなりに活発だった
質問する人間は、捨てでいいからトリップつけるべきじゃないか? 最近ム板全般で、質問人を騙って話ひっかきまわす奴が目立っててな 前からID入れてくれって話はでてるんだが、運営はとりあえず入れる気ないみたいだし
何をいまさら
日本にはgamedevみたいなサイトは無いのか
dxlibとかのライブラリ限定なら活発かもね
>>554 つくってもあらされておわるでしょ。
あとジェムズのX巻にのってるから読めでおわったりとかね。
個人的にはTrueTypeFontのファイルフォーマット。
それをポリゴンで表示する為のメッシュ化アルゴリズムをしりたいな。
メンバー制のところなら1つ大きいのがあるが 紹介が無いと入れないので一般人は無理だぜ
日本人の体質かもしれんね
別に海外のコミュだって荒らされたりしてっけど、日本人がそんな話までは知らないってだけ 成功した例しか聞いたことないだろ?
BBXでいいじゃん あそこで駄目ならここでも駄目だろ
あそこもすでに終わっている。
>>561 具体的になにが駄目だったの?
あそこで答えてもらえないならみんな知らないか
くだらないこと質問して相手にしてもらえないかのどっちかじゃね?
いまレスしてる面子みても結構できる人いるよ
BBX見てきたけど加曾利杉
>>556 Windows限定でよければ、GetGlyphOutlineでフォントの輪郭線とれるよ。
TrueTypeのフォーマットまでは知る必要ない。
最近はGGO_BITMAPの方の機能ばかり有名になってしまって、
曲線データの方の解説は見つけるのが大変だけど。
そういやDirect2D/DirectWriteではアウトラインの テッセレート化したメッシュデータまで取得できたなぁ
DXSDK 2010 Octキター
なに!?つい先日Febあてたばかりなのに・・・ BBX昔はよく利用したけど今はなぁ
本当にDirectXって難しいね。君たちすごいよ。
1000個のオブジェクトをDrawIndexedPrimitiveを使って、一気に全部描画しようとしてます。 その一つ一つに対して、別々のアルファ値を持たせる場合は、 頂点デクラレーションの作成の時にアルファ値用の値を設定しといて、 描画するときになったら、一気に頂点バッファをロックして、 個別に設定するしか方法ないですよね? 当然このオブジェクトはそれぞれ別々の方向に動くので、座標も一気に変える つもりなんですが。
動かし方による ある程度規則的な動きなら書き換えずに済むかも知れない どうしても書き換えなくてはいけない時でも 1000回Lockするのではなく1回で済むような仕組みを考えるべき
>>570 ありがとうございます。
シューティングを作っているので、規則的な動きにはならないですね。
その座標は当たり判定とかの計算にも利用するつもりなので。
>1000回Lockするのではなく1回で済むような仕組みを考えるべき
5種類の弾があって、それぞれ100発ずつ撃たれている状況だとしたら、
テクスチャはそれぞれ変えなきゃならないので、
一種類ごとにテクスチャをセットして、100発まとめてlockして描画。
というのを5回繰り返すイメージですよね?
5種類の弾を1枚のテクスチャに乗せとけば切り替えなし
>>572 なるほど!そういえばそうですね。助かりました。
ありがとうございました。
毎フレームLockするなら動的頂点バッファにするのも忘れないように
>>574 D3DUSAGE_DYNAMICとD3DPOOL_DEFAULTにしておけば大丈夫ですよね?
>>574-575 動的頂点バッファにしたほうが、D3DPOOL_MANAGEDで確保した静的頂点バッファより遅かったんだが・・・
1・俺のテストコードが悪い
2・ループが速すぎて、動的頂点バッファのロック待ちよりも、MANAGEDが確保しているシステムメモリーに書き込んだ(そしてMANAGEDがいっきにVRAMにUPDATEした)ほうが速かった
どっちだ!
>>576 ちなみに静的頂点バッファっていうのは、頂点バッファの内容はいじらないってことですよね?
いじれないんだったら、それぞれのオブジェクトを好きな位置に移動するときに、
DrawIndexedPrimitiveで一気に描画することはできないですよね?
一つ一つ、DrawPrimitiveを連投する方法だったら、個々に移動行列を与えて移動できそうですけど。
>>577 >ちなみに静的頂点バッファっていうのは、頂点バッファの内容はいじらないってことですよね?
「いじらない=いじれない」のではなく「いじらないつもりなので、そのつもりでバッファ確保してね」というのが静的頂点バッファ。
MSDN読めば書いてあるが、静的はVRAM上に。動的はAGPメモリー上に配置する傾向にあるとかなんとか。
俺も詳しくは知らん。
静的だからといって書き換え不可能ってわけではない。
>>576 IDirect3DVertexBuffer9::Lockの実行するロックのタイプの指定フラグが正しくないんじゃない?
どういうLockの仕方してるのか分からんから何とも言えんが
>>578 わかりました。詳しくありがとうございます。
1回も書き換えないなら静的頂点バッファの方が速い 1回ですむならやや動的頂点バッファの方が上だがほぼ大差ない 2回以上Lockするなら動的頂点バッファの方が上になるが Lockの仕方を間違うとめちゃくちゃなパフォーマンスダウンを起こす
DirectX SDKの最新版では VisualC++2005 のサポートが打ち切られたと聞きました テキストに買ってきた書籍が少し古くて 2005 基準で書かれたものなのですが ここに書かれているソースコードが使えないということなのでしょうか それともVisualC++2010 に DirectX SDK の最新版を入れて 同じ環境とみなせるでしょうか サポートが打ち切られるというのがどういうことか分りません
システムメモリとVRAMを共用してるようなビデオチップだとどっちでも変わらなかったり
>>582 ソースコードが使えなくなるということではない
2010で動かすなら問題なく使える
とりあえず目立つところではたぶんサンプルから2005用のソリューションが消えたんじゃない?
あとは今後.libの互換性がなくなって
2005+2010Oct以降だとリンクができなくなる(かもしれない)
SDKのOct 2010なんて何処にある? MSDN探しても見当たらないぞ。
探したけどOct 2010なんてないなw
釣りだったのか?
>>584 ありがとうございます とりあえず同じ環境とみなして進めていきます
.lib の互換性がなくなるというのは文法も変わってしまうということ?
サポートの打ち切りとはどういった背景(理由)で行われたかわかりますか
何か変えなくてはいけないことがあったんだと思うのですが
M$の陰謀
>>585 DirectX SDK は3,4か月に一度更新されているようですので 今後更新されるであろう
バージョンをさしてOct 2010(以降)と言ったのだと思います
>>579 D3DLOCK_DISCARD使ってるから、使い方間違えてはいないと思うんだけどなぁ・・・
>>581 の言う通り、1ループで1回しかLockしないから誤差の範囲内なのかもしれん。
>>583 GF9600だから、動的のほうが速いのを期待したんだけどなー
>>581 そもそも1つのループで複数回ロックは論外。
>>592 D3DLOCK_NOOVERWRITEでロックして追記や部分書き換えすればそれほどコストは掛からないんだぜ
これをD3DLOCK_DISCARDでロックするとアホみたいなことになる
>>576 考えられる問題点
読み込みを伴うアクセスを行っている
全体を書き換えるのにDiscardを指定していない
Lockを複数回行っている
>>593 そもそも何度もロックを繰り返すようなプログラムを組まなければならない時点で、
処理に無駄が多すぎる。
>>594 んー、どれにも当てはまらないなぁ…。
とはいっても、さすがに俺のコードに問題があるんだろうし、ちょっと今再度計測してみるわ
環境によって違う場合もあるしテストコードをうp
ロックを繰り返さない方法って、ある程度は仕方ないと思うんだが、 どーすりゃいいんだ。
1フレーム1回のDrawPrimitiveに対し複数回のLockは無駄でしかないが 1フレーム複数回のDrawPrimitiveに対し複数回Lockは当然あり得る 複数Lockする必要が無いなんていってる奴は単純な描画しかしたことがないんじゃね?
んー、やっぱり差が見られないなぁ D3DPOOL_DEFAULT版 dev->CreateVertexBuffer( desc.Size, D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC, desc.FVF, D3DPOOL_DEFAULT &buffer, NULL ); buffer->Lock(0, 0, &to, D3DLOCK_DISCARD); ::memcpy(to, from, desc.Size); buffer->Unlock(); D3DPOOL_MANAGED版 dev->CreateVertexBuffer( desc.Size, 0, desc.FVF, D3DPOOL_MANAGED &buffer, NULL ); buffer->Lock(0, 0, &to, 0); ::memcpy(to, from, desc.Size); buffer->Unlock(); こんな感じ。 もちろんCreateVertexBufferは最初の1回だけね。 モーフィングをやろうとして色々研究してたんだけど、D3DLOCK_DISCARDを使っても早くならねーなーと思ってたとこ。 後者のほうが微妙に速い上、D3DLOCK_DISCARDしないでモーフィング差分だけ書き変えればいい(memcpyいらね)から、ますます後者が速くなるんだ
D3DPOOL_MANAGEDで作った頂点バッファは静的バッファってことでいいっすか?
MANAGEDとD3DUSAGE_DYNAMICは共存できない ・・・いや、もしかしてMANAGEDの野郎、1度でも動的な使い方したら、内部で動的として確保しなおすとかしやがるのか・・・?
下手に頂点バッファ使うくらいなら大人しくDrawXxxUP版にしておけば すべての悩みから開放されます
それは何ですか?
D3DLOCK_NOOVERWRITE は、既に使用中である動的バッファー内のデータをアプリケーションが上書きしないことを示します ロック呼び出しは古いデータへのポインターを返します。これにより、アプリケーションは 頂点バッファーまたはインデックス バッファー内の未使用領域に新しいデータを追加できます。 この古いデータへのポインターっていうところなんですが、 1000KBの頂点バッファがあったとして、200KB分しか使用してなかったとしたら、 その200KBの先頭のポインタを取得できるってことでしょうか? もしそうだとしたら、未使用領域に新しいデータを追加できるっていうのは、 この先頭ポインタから200KB分のポインタを進めたところから追加しろってことでしょうか?
それはないとおもう
思ったんですが、座標を変えなきゃいけないやつは、DrawPrimitive系を使わない方がよくないですか? 座標をいじらずに、行列とかで移動できるやつはDrawPrimitive系でいいかもしれませんが、 それ以外の直接座標をいじるやつに関しては、DrawPrimitiveUP系を使ったほうが、管理とか速度面においても、 良いきがするんです。
合ってるよ 0-199までLock 0-199までをDrawPrimitive 200-399を(使用中かもしれない0-199の中身が変わらないことを保証して)Lock 200-399までをDrawPrimitive みたいな時に使う
>>609 ありがとうございます!
ですが200-399までをDrawPrimitiveするときの、引数の指定がよく分からないです。
MSDNには、第二、第三引数は下記のように設定しろと載ってました。
StartVertex
[in] ロードする最初の頂点のインデックス。StartVertex を先頭に、正しい頂点数が頂点バッファから読み取られる。
PrimitiveCount
[in] レンダリングするプリミティブの数。プリミティブの許容最大数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバをチェックして決定される。
PrimitiveCount は、プリミティブ タイプで指定されたプリミティブの数である。ライン リストの場合、各プリミティブは 2 つの頂点を持つ。三角形リストの場合、各プリミティブは 3 つの頂点を持つ。
これのプリミティブの数は分かりますが、頂点のインデックスって言う値が良くわからないです。
インデックスって何のことですか?
>>610 頂点何個分ずらした位置から読むか
0-199で200プリミティブ(600頂点)だとしたら
200-399での先頭頂点は600、から200プリミティブ
400-599での先頭頂点は1200、から200プリミティブ
D3DDECLUSAGE_POSITIONTを使うのって邪道ですか?
>>613 邪道ではないけど、いろいろ融通が利かなくなるから結局普通にやった方がよくなりそうな
>>614 うう。そうですか。
どうにかして通常の座標変換で左上を0,0として、スクリーン座標で指定できる
方法があればいいんですが。
落ちちゃってますね。。。
781 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/13(月) 23:31:17
>
>>780 >2Dスプライトを直感的にスクリーン座標と一致させたいってことだよね?
>パースペクティブ射影(D3DXMatrixPerspectiveFovLH)じゃなくて
>正射影(D3DXMatrixOrthoOffCenterLH)で射影行列作ればいいと思うよ
>スクリーンサイズが800x600なら
>
>D3DXMatrixOrthoOffCenterLH( D3DXMATRIX *pOut, 0, 800, 600, 0, FLOAT zn, FLOAT zf);
>
>で左上(0.0)になって分かりやすいんじゃないかな
>
ありがとうございました
カメラ空間はこう、ワールド空間はこう、射影空間はこう、ビューポート空間はこう みたいな解説をしてくれてるページってないですかね?
>>608 UP系の最大の欠点は頂点ストリームが1つしか使えないこと
それでまかなえる程度の単純なスプライト描画しかしないなら十分な速度は確保できると思われ
>>623 ああ・・そういえばそうでしたね。
検討してみます。ありがとうございました。
何度も質問して申し訳ないんだが、 DrawPrimitiveUPとDrawIndexedPrimitiveUPではどちらの方が効率が良いのでしょう? DrawPrimitiveUPでもD3DPT_TRIANGLESTRIPで描画すればそんなに変わらないでしょうか?
質問するよりも、自分で試してみるといいよ。
俺が計った環境だとUPは何故か頂点数が多いにも関わらず DrawIndexedPrimitiveUPよりDrawPrimitiveUPの方が速かった
結局、DirectXのAPIはインターフェイスを提供してるだけであって 実際は、各グラボのドライバの処理による環境依存だからね その時点までの他の頂点を含む状況、今描画しようとしている頂点内容や数、 これらの組み合わせで、どれが効率良いかなんて言えない だから、これが効率的だ(自分のPCだけの話ってなら別だが)、 なんて物を求めないで、これは大多数のケースで非効率だって実装を避ければ良いだけだと思うが
最後に一つだけ。。。本当ごめん。 色々やってみたんですが、DrawPrimitive系(UP含む)では、 四角形のポリゴンを一気に描くことはできないですよね? ここで言う一気とは「一回の」DrawPrimitiveで描画という意味です。 何度やっても、思い通りの頂点と頂点がつながってくれなかったので、 最終確認したいんです。 これを可能にするにはDrawIndexedPrimitive系(UP含む)で、好きな頂点を指定してあげて 自分の思ったとおりに描画させるしかないってことでよいでしょうか?
630 :
629 :2010/10/21(木) 09:13:58
ここで言っている四角形はお互いがくっついているわけではなく、 バラバラにある一定の距離を保って、大量にあるものとします。
トライアングルリストで6頂点使えばいける
632 :
629 :2010/10/21(木) 09:56:48
方法としては、順番に6頂点ずつバッファを埋めていけば、出来るってことですか?
yes
634 :
629 :2010/10/21(木) 10:04:21
>>633 ありがとうございました。嬉しいです。
頑張ります。当分一人で頑張りますね。
VC2008でDXライブラリを使用しています PlayMusic命令でMIDIファイルが再生できません 0x4b7e2bd8 で初回の例外が発生しました: 0xC0000005: 場所 0x4b7e2bd8 を読み込み中にアクセス違反が発生しました。 というエラーで出力が埋め尽くされています…
そっちのあったのですね 素早いご指摘ありがとうございました
たまにDXライブラリの質問が来るなあ
DXライブラリは2chで聞くより本家で聞いたほうが速い希ガス
FloatMax()なんて今更誰得だよ
641 :
デフォルトの名無しさん :2010/10/22(金) 03:15:30
それだけDXライブラリがいいってことだな
DXライブラリを使う人間に、適切なスレを判断する程度の能力すらない者が多く混じっているということだろう。
DXライブラリのスレにDirectXについて質問しにいったらどうなるのっと
なんで自分でプログラミングする以前の問題として、 まともなモデリングソフトを触って研究しようとしないんだろう? どれだけ馬鹿なの?
はいはい、えらいでちゅねぇ
シューティング作ろうと思ってるんですが、 弾は動的確保にしたほうがいいですか?
>>647 一度に画面に出る最大数を決めておいて配列で用意したらいいじゃん
>>648 やっぱりそのほうがいいですか?
動的確保はやっぱり重いでしょうか?
初心者は重いかどうかなど考えなくて良い。 馬鹿の考え休むに似たりということにしかならない。 余計なことは考えずにやりたいようにどんどん作れ。
>>649 やりたきゃ好きにしろよ
あんまり意味はなさそうだけど
なんだ?
弾一発めちゃくちゃ場所とるのか?
>>649 とりあえずn発までがMAXって定義しといて、先に領域確保しといて弾ブッパするのと
1発ずつ確保してブッパするプログラム組んで、速度見てみるといいと思うの。
>>649 処理オチする位に弾出してみればいいじゃん。そこから逆算してみたら?
むかーし、セレロン600Mhz位とGPU不明でやったときでも100位は出てたぞ。
現実的に300位出ちゃうとよけるの不可能じゃね?
皆さんたくさんの意見ありがとうございました。 とりあえず好きにやってみて、処理落ちしたらまた考えます。 ありがとうございました。
「馬鹿の考え休むに似たり」 いい言葉だな
連射によるメモリーが足りなくなる場合のテストとかめんどくさそうだ
馬鹿の考え休むに似たりですね。覚えときます。
>>656 何億発打てばメモリ不足になるんだよ?
というか馬鹿?
メモリ不足より分断化の方が気になる 動的確保にしても予め確保しといたヒープ内からとかにしたい所だ
>連射によるメモリーが足りなくなる場合のテストとかめんどくさそうだ 馬鹿の考え休むに似たり >メモリ不足より分断化の方が気になる 馬鹿の考え休むに似たり
メモリフラグメンテーションは普通に起きそうだけどな
>>658 しらないけど、動的に取るならテスト項目に上がるでしょ?
「しらないけど」ってどれだけアホな発言しているんだよ
>>663 じゃ何発打てばメモリー不足になるんですか?
動的に確保したら 解放とか忘れちゃうだろ
っSTL
STLはそのつど動的に確保してるわけじゃなくて 最初にある程度大きく確保しておいてその範囲内の内はそこから確保されるので 結局配列で確保したのと一緒になる
STGの敵の弾はタスクシステムが一番だと思います。 重い仮想関数とか使わずとも多態化できますし。 嘘です。上のようなこと書くとスレがと荒れるらしいです。
STLといってもアルゴリズムが複数あって手法が異なるのに
特定のアルゴリズムの限定的な話を突然始める
>>667 みたいな馬鹿って何なの?
まあ、ぶっちゃけ今回の例だと動的確保してもメリットないよでFAだな デメリットは穴ぼこメモリもたしかに気になるけど それも極小すぎてデメリットといえるかどうかっつーとよくわからないな ガベコレ動き出したコレ!とかいうjavaみたいな環境ならデメリットありまくりだけどw まあ、でもかっちょよく(?)動的にしたいなら 「意味はないけど好きやりたいなら好きにしたらいーんじゃないですか? それであなたが気持ちよくゲームを作れるならそれもいーんじゃないですか」でFA
お前らここ何のスレか分かってる?
スレチうざいから消えろ
comインターフェースってwindowsがドライバのAPI呼んで実体作ってるんでしょ? メモリ管理とかどうなってるの?
>>673 COMはインタフェイスの実装手法であって、ドライバ云々との関連は通常のAPIと同じでしかない。
ある空間上の点が、ウィンドウ上で描画領域内に 収まっているかどうかわかる方法はありますか?
投影してみればいい
>>676 点を座標変換して射影空間内に収まってるかどうかをチェックする
D3DXMATRIXA16 matWorld,matView,matProj;//各変換行列
D3DXVECTOR3 v ;// 空間上の点
D3DXVec3TransformCoord ( &v, &v, &(matWorld*matView*matProj) ) ;//既に移動済みの点ならmatView*matProj
-1.0 <= v.x <= 1.0
-1.0 <= v.y <= 1.0
0.0 <= v.z <= 1.0
でどうだろう?
PIXで分かった希ガス
DirectXはCOMで使うのとLoadLibraryどっちが良いの?
サミータウンをやりたくて本日登録してゲームをダウンロードしたんですがDirectXのダウンロードに失敗したと出て起動出来ません… どうしたら起動出来ますか?
ここはDirectX"プログラム"の質問スレです エンドユーザーの方はご遠慮下さい
OSを含めたPCの性能がヘボ過ぎると予想
>>683 Machine name: EPSON112157501
Operating System: Windows XP Home Edition (5.1, Build 2600) Service Pack 3 (2600.xpsp_sp3_gdr.100427-1636)
Language: Japanese (Regional Setting: Japanese)
System Manufacturer: EPSON DIRECT CORP.
System Model: P4BGV-ED
BIOS: Award Modular BIOS v6.0
Processor: Intel(R) Celeron(R) CPU 2.40GHz
Memory: 1016MB RAM
Page File: 487MB used, 1131MB available
Windows Dir: C:\WINDOWS
DirectX Version: DirectX 9.0c (4.09.0000.0904)
DX Setup Parameters: Not found
DxDiag Version: 5.03.2600.5512 32bit Unicode
これがスペックです。
ここはDirectX"プログラム"の質問スレです
ネトゲ質問に行けよカス
またパチンカスか
DirectInput の仮想キーコードあるじゃない。DIK_NUMPAD8 とかの奴ね。 これに紐づいた文字列データとか無いかな。 キーコンフィグで今登録されてるキーが何かって表示したいんだけど、 自分で文字列登録していくしかないかな。
無い
692 :
デフォルトの名無しさん :2010/10/24(日) 03:00:58
ある
日本語化されてるので最新のってDirectX SDK (August 2008)ですか?
何が?
>>694 DirectX SDK 日本語
で検索して出てきたのがこれだったので
英語出来ないからこれ使おうとおもったんですが他にありますか?
>>695 ヘルプとSDKは別物ですけどそのへんわかってますか
>>696 ヘルプだけ翻訳されてるってことでしょうか?
で、よく見てみたら2009版のヘルプもあったのでそれと2009sdkをインストしてみます
DXSDKに日本語版なんて存在しません。 ドキュメントには日本語版がありますが最新の情報は基本的に英語です、慣れて下さい。
>>698 辞書片手に何とかやってみます
深夜にあほな質問してすみません 有難うございました
C#でDirectXしようと思うとXNAしかないんですかねー
ぐぐれかす
API Code Packもあるけど、自分で調べられるようでないと使えないな。
>>700 箱とマルチしたいならXNAでいいけど、そうでないならSlimDXオヌヌメ
ドキュメントやサンプルの多さが強みかな < XNA
思ったんだけどさ、ここ”初心者質問”スレだよな? ”初心者”質問してる人らに冷たすぎないか? もちろんちゃんと答えてあげてる人もいるし、ひどい質問してる人らもいる。 でも見てると初心者脱却したてのやつらが”初心者”いじめて気持ちよくなるスレに思えて来るんだが。
ふーん
そういうのはスルーしてればいいじゃまいかー
>>708 普段はスルーしてるんだけど、
このスレの存在意義とかあり方についてどうなのかなって思って
>>706 具体的にどのレスにどう答えてほしいのか言え
抽象的過ぎてさっぱりわからない
気になるんなら自分で答えればいいじゃない
にちゃんで傍観者の自治活動は無意味です。 あくまで具体的な質疑応答のみがスレを形作ります。 自分の好みのスレにしたいなら一晩中張り付いて全ての質問に対応するぐらいの気概が必要です。
そうだな・・・
初心者です!質問です。 DrawIndexedPrimitiveUPを使って描画しようとしています。 これを使って描画する場合、頂点デクラレーションを自分で定義したものを セットして使用することはできるのでしょうか? それともSetFVFしか使えないのでしょうか?
>>714 自分で定義したものを使える
ただしストリームは0番しか使えないので頂点情報は1つに纏める必要がある
>>715 ありがとうございます!
追加で質問させてください。
VERTEX v[400]//頂点バッファ
WORD iv[600]//インデックスバッファ
上記の配列にそれぞれ、値が格納されているとします。
VERTEXは頂点データの構造体です。
その状態で、下記のように実行するとします。
DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST,0,8,4,iv,D3DFMT_INDEX16,v,sizeof(VERTEX));
この場合頂点バッファとインデックスバッファの配列にデータが全部埋まっていたとしても、
上記で指定した通りに四角形が二つ(三角形が4つ)描画されるのでしょうか?
ちょっとやってみたら、上手く描画できなかったものでして^^;
補足です。 三角形が4つ「だけ」描画されると思ってていいのでしょうか? 配列に入っている他のデータは無視されるのかが聞きたいです。
>>716 その認識で合ってるよ
頂点の指定の順番が逆周りになってて裏面が表を向いてるとかってオチはない?
カリングモードをNONEにして試して見るとか
>>718 カリングモードをNONEにしても駄目でした。
でも認識は合ってるとのことですので、もう一回色んなところ見直してみます。
ありがとうございました。
720 :
デフォルトの名無しさん :2010/10/24(日) 23:03:18
D3DXMatrixRotationX(Y,Z)、D3DXMatrixRotationAxis、D3DXMatrixRotationQuaternion等の関数は、 (1)ある軸まわりにベクトルを回転した時の、回転前のベクトルr1と回転後のベクトルr2の間の関係 を表す回転変換行列E (r2 =E * r1) を生成している (座標系は基本的にWorld座標系O-xyzの一つだけ)。 (2) あるベクトルを、モデルに固定されたローカル座標系O-ξηζで成分表示した時の成分 (ξ, η,ζ)と、World座標系O-xyzで成分表示した時の成分(x,y,z)との間の関係を表す座標変換行列R (x, y, z)T = R * (ξ, η,ζ)T、 Tは転置記号で(x,y,z)T、(ξ, η,ζ)Tは列ベクトル を生成している。複数個のローカル座標系とworld座標系が存在する。 のどちらなのかわからない。 自分としては、(1)の方が理解し易い。最初、O-ξηζ座標系はworld座標系0-xyzと一致していて、 ξ、η、ζ軸の単位ベクトルi',j',k'に回転変換行列Eをかけることによってξ、η、ζ軸と O-ξηζ座標系で成分表示されたベクトルを回転させる。 が、DirectXの参考書をみると座標変換行列という言葉を使っている本もある。 (1)(2)のどちらで解釈してもいいかもしれないが(EとRの要素は一致する)、(1)(2)のどちらの立場で 話をしているか明確にしておかないと話がかみ合わないと思う。 皆さんは(1)(2)のどちらで解釈してますか? それとも、私が勘違いしてるんでしょうか?
722 :
デフォルトの名無しさん :2010/10/24(日) 23:11:55
あっ、DirectXの場合は行ベクトル=行ベクトル*転置行列ですが、 その話はおいといて
ワールド行列の中身をきちんと理解してればそんな疑問は出ないはず
PIXでpre-vertex-shaderのほうでは思ってる通りの頂点の順番じゃなくて 反転してるんだ。 post-vertex-shaderの方では思ってる通りの頂点順になってるんだ。 これってどういう原因が考えられますか? preの方は半時計まわり。 postの方は時計周り。 になってます。 カリングモードは左周りをカリングするように設定してます。 頂点データを作ったときは、時計周りに定義してるんですけどね。
725 :
デフォルトの名無しさん :2010/10/24(日) 23:28:08
>>723 すみません。で、どちらの立場なんですか?
part27の401に似てるな
釣りかw
728 :
724 :2010/10/24(日) 23:30:51
私は本気ですよ。
730 :
724 :2010/10/24(日) 23:33:20
そうでしたか。しつれいしました 。
釣りだと思われるのが嫌ならフシアナして質問すればいいと思う
732 :
デフォルトの名無しさん :2010/10/24(日) 23:36:46
それ、何のことですか?
733 :
724 :2010/10/24(日) 23:55:08
ちょっと自力で頑張ってみます。
> 401 名前:デフォルトの名無しさん[] 投稿日:2010/02/13(土) 19:14:54 > D3DXMatrixRotationX(&matWorld, cta); > pDevice->SetTransform(D3DTS_WORLD, &matWorld); > > におけるマトリックスmatWorldの解釈は次のどれが正しいでしょうか? > > (1)World座標系XYZにおいて、3Dモデル(の頂点ベクトル)をX軸まわりに > θradだけ回転させるためのベクトル回転変換行列。 > > (2)3Dモデルの各頂点座標(ξ,η,ζ)を記述しているξηζ座標系が > ワールド座標系XYZに対してX軸回りにθradだけ回転している(3Dモ > デルもX軸回りにθradだけ回転している)。matworldは3Dモデルの > 各頂点座標(ξ,η,ζ)を(X,Y,Z)座標に変換する座標変換行列。 > > (3)どちらの解釈でもいい。 > > (4)どちらの解釈も正しくない。 > > ベクトルの回転変換行列であろうと座標変換行列であろうと両者の要素の中身 > は一致するから(3)でいい気がしますが、回転、移動操作に対応した行列 > 乗算の順序が右側にかけていくか、左側にかけていくかの違いが生じるのでは > ないか? という気もします。 > 403 名前:デフォルトの名無しさん[] 投稿日:2010/02/13(土) 20:32:15 > はあ
> 433 名前:デフォルトの名無しさん[] 投稿日:2010/02/14(日) 10:09:54
>
>>415 >
> 回答ありがとう。
> directXは(行列*列ベクトル)の演算と違って(行ベクトル*行列)の演算
> だから行列を転置にしなければならない。したがって、行列の積ではかける
> 順序が逆になる、というのはあなたの指摘どおりだ。
>
> ところがベクトルを回転させる回転変換行列か、座標軸(もの指し)を
> 回転させた座標系間の座標変換行列かによっても乗算の順序は違う。
>
>
>>412 >> 414 >> 428
> わかりもしないくせに偉そうなこと言うな雑魚! ひっこんでろ
>
>
>>416 > お前も黙ってろ。
>
> (1)の解釈で納得していたんだが、(2)の解釈でないと説明できない
> 問題が発生したんで(と、その時は思ってた)。
>
> DirectXでは回転、移動の操作順ごとに行列を右側にかけていくよう
> だから(そして転置行列の積だから)、(1)の解釈でいいようだ。
>
> ただ、DirectXの関数が(1)(2)のどちらの考えにたって実装されているのか
> 確認したかったから聞いたのに
>>410 の馬鹿が仕様を調べれば、とアホな
> 回答をしているのには閉口した。そんな事しか言えないなら黙ってろや。
>
>
> わかっている人からのアドバイスには感謝するが、アホ相手するのも
> 面倒だからもう書かない。
>
> アホはまた何か書くだろが、相手しない。
>>720 (1)でも(2)でもない場合はどうやって理解しようとしてるわけ?
こういう輩は自分が聞きたい意見しか聞かないから何言っても無駄
まあ、質問に抜けがあるよね どちらですか?って聞いてもどっちでもねぇときはどうやって受けとる気なんだろねw
>>706 ほらっ、お前の嫌いな初心者イビリが始まったぞ
助けてやれや
>>739 いや、違うって
どういう脳みそしてんだよ
つまり、こういう状況だろ↓
このパンはなんのパンですか?
(1)あんパン
(2)クリームパン
(1)か(2)のどっちですか?
正解はジャムパンなのに回答が(1)か(2)に固定されてて答えようがないよw
741 :
デフォルトの名無しさん :2010/10/25(月) 09:28:37
>>736 〜
>>738 は偉そうに言ってるけど、結局わかってないんだ。
過去ログからわざわざ挙げる奴もひまと言うか、何と言うか。
ひょっとしたら、わかる人がいるかもしれないと期待したんだが。
>>720 は釣りだろ?
数学それほど詳しくはないが、そういう関数で生成できる行列って、
変換元座標系からみた変換先座標系への差分を表してる。
どっちでもあってるんじゃない?回転だけ考えれば(1)もあってるし、行列全体の動作として見たら(2)でもあってる
つか釣りだろ?
いまdxライブラリでゲーム作ってるんだけど、dxライブラリで得た経験ってDirectXじゃ無意味? 最終的にDirectXを使いたいんだったら最初からDirectX使った方が良いのかな
うん
>>744 そっか、俺の知能だとかなり厳しいががんばってみる 即レスありがとう
DirectXはでかすぎてわけわかめになるからどのみちいきなりは扱えん
>>746 う…む…?
無意味になるの前提でもdxライブラリから入るのは有りって事?
なんでもできたほうがいいから無意味じゃない
意見が分かれると子だと思うが俺は意味ないと思う それよりマクロ定義の意味とかDLL回り固めて 意味不明なメソッドやクラスの詳細を片っぱしからコメントアウトした方が早いかとおも
いきなりDirectX扱ってもなにこれわけわかんねーなんにもできねーって状態が長いからなんか作る前にくたばる 根気があるならいきなりいってもいいけど
まぁ今後3Dやらないっていうなら全く問題ない
あとで本格的にやったときに 「あぁ、あれはコレを内部でやってたのね」と思い当たる的な役立ちかたはするかもしれんが DXライブラリを事前にやっておくことで DirectXが理解しやすくなるような役立ち方はあまりしない気がする
うーん…やっぱりDirectXに挑戦した方が良いのかな、3dもやってみたいし それで駄目だったらライブラリ使う事にするよ 皆さんどうもありがとう
DXライブラリに3Dもあるよ
>>747 DXライブラリからDirectX直たたきにいこうするなら、
このライブラリのソースを読むのが一番はやいんじゃないかな?
DXライブラリでXXを行うには・・・からはいっていって、
中身の実装でDirectXの勉強とかね。
で、ソースって公開されてるの?w
マスター(笑)
>>755 うわあしらんかった
すぐ使ってみよう。今すぐ使おう
公開されてる。
主語が無い
SlimDXもC++のソースが公開されてるし勉強になるよ。 一応、薄いラッパだし直に触るのに近い。
>>755 は最後の htm を html に修正してくださいな。
なんですぐマスター(笑)したとかいってしまうん(´・ω・`)
おまいらの過剰反応がおもしろいから
UV座標のUとVって何の略でしたっけ?
XYZW使っちゃってたからUVにしただけだったような・・・
特に意味はないらしいよ
物体を移動させたら、一定ごとにガタンガタンってなるんですが。 floatで計算させたら一定ごとに誤差がでることあるんですか?
>>770 移動処理はfloatでやってるのに
座標管理をintとか整数でやってたら誤差はでるかもね
でも、なんとなくだけど
垂直同期を取らずに精度の悪いタイマーでPresentしてるせいな予感
タイマーの精度は大丈夫だと思うんですけどね。 ちなみに壁に思いっきりキーを押しっぱなしでぶつかってる時は、 ガタンガタンにならないんですよね。 移動するときだけガタンガタンってなるんですよ。
じゃあ、タイマーじゃなくて 垂直同期待ちして描画してごらんよ
うおおお!垂直同期待ちしたらスムーズに動きました! ってことは私のFPS制御がおかしいってことでしょうか?
>>774 毎フレーム、タイマーの値を吐き出してみるとか・・・
DWORD static waittime=0; static DWORD oldtime=0; float wt=1000.0f/FPS; wt=(cnt%60+1)*wt;//待つべき時間 //分解能の精度を変更(制度をあげる) timeBeginPeriod(1); waittime+=timeGetTime()-oldtime; if(waittime<wt) Sleep(wt-waittime); oldtime = timeGetTime(); if(waittime<wt){ waittime=wt; } //分解能の設定を戻す timeEndPeriod(1); ++cnt; } こんな感じなんですがダメですかね? FPSには60.0fが入っています。
>>776 毎フレーム描画のタイミングのタイマの数値をアウトプット画面にでも出して
エクセルにでも貼り付けてちゃんと正しいタイミングで機能してるか見てみたらいいんじゃね?
と、その前にSleep(0)にしてみたかったりして・・・
俺も理詰めでプログラム組めないw
16msは垂直同期に近いってだけで実際はちょっとズレてる 垂直同期を待たずにタイマーでフリップさせると 画面の更新途中で表示されてしまうのでティアリング線がでてしまう そしてズレがどんどん大きくなって1画面文に達すると まったく更新されてない画面(2フレーム前)が表示されてしまいガタッっとなってみえる
え?じゃあ皆さんは垂直同期待ちでやってて、 自分でFPS制御してないんですか?
デバッグ出力したら、16ミリ秒か17ミリ秒でした。 これをどうやって制御をあげればいいのでしょうか?
>>776 変に省略されてるので分かりにくいけど、cntが59から60になるときに破綻してない?
>>779 場合によりけりでは。
垂直同期させてゲーム進行が問題ないのであれば、それが一番綺麗で楽だと思う。
ゲームの性質上自分でFPS制御する必要があるのであれば、自前でできるだけやるしかない。
垂直同期を待つか 待たずにやるにしてもそもそもFPS制御をしない 移動量を前フレームからの経過時間から算出すれば問題ないでしょ? ターマーでやったら 60FPS以上を60に固定することはできるかもしれないけど 20FPSしかでないようなPCで動かさなきゃいけないときどうするの?
皆さんありがとうございます。 FPSで制御しようと思ったのはどんなマシンでも一定のスピードで動かしたかったからです。 FPSが低いマシンだったら、当然ガクンガクン動くことにはなるんですが、逆に60以上のマシンは 制御できると思ったので。 いくつかのフリーゲームではFPSを自分で選択して、設定できるようにしてあるのをいくつか見たことがありました。 そういうのはやっぱり自分で計算してるんですよね。 う〜ん。悩むところですが、垂直同期待ちでやることにします。 ありがとうございました。
「FPSを自分で選択して」 ってディスプレイがサポートしてるリフレッシュレート列挙して 選んだ値に強制的に変更してるだけんじゃないの?
あ、なるほど。。 そんなもんなんですかね。 結局は自分でFPS制御してる人って少ないんんですかね。。
>>785 自分が何かいてるか理解できてねえだろw
いえ、たぶん理解できてると思いますよ
そうですね。わかってないですかね。勉強しなおしますよ。
処理落ち時にコマ落ちさせないと不味いジャンルって MMO以外に何がある?
>>783 ウィンドウモードの場合は垂直同期でタイミングとろうとすると
使ってるモニタが変わるとタイミング変わるけど大丈夫?
ウィンドウモードで垂直同期なんて関係あったっけ? なんかDirectXの初期化時にテキトーに値入れるとよろしくやってくれね?
>>782 の場合だと、入力系の反応に差が出来ちゃうよね。
その辺はどう扱ってるのだろ。
そんなのゲーム内時間を採用すればすむではないかとおもってしまうのですよ。 描画は出来るときにすればいい。 日本伝統の2Dシュー見たいのだとフレームスキップはきらわれるから、 垂直同期で特定ゲーム内時間分の更新じゃないとだねだけどな。
>>792 下の設定の事だと思って話を進めるけど。
FullScreen_refreshRateInHz = 60;
PresentationInterval = D3DPRESENT_INTERVAL_ONE;
この場合フルスクリーン時は60で更新するように設定できるけど
ウィンドウモード時は、そのモニタが設定してる垂直同期になるから
"垂直同期だけ"を使用してると環境でタイミングがずれる。
そもそもウィンドウモード時に FullScreen_refreshRateInHz 設定すると
エラーでちゃうけどね。
間違っていたら指摘おねがい。
>>791 そうだとは思ったんですが、どうしてもきっちりFPS制御できそうにないものでして。。。
このゲームは大体60FPSで動きますので、モニタのリフレッシュレートが60ヘルツぐらいじゃないと
うまく遊べないかもしれません。という断りをいれとこうかと。。。
あと思ったんですが、皆さんって、移動量を計算するときに、前回の時間から現在の時間までの経過時間を元に
計算してる人が多いんですか?
私は1フレーム当たりの移動量をあらかじめ決めといて、足してるだけなんですが。。
>>796 >あと思ったんですが、皆さんって、移動量を計算するときに、前回の時間から現在の時間までの経過時間を元に
>計算してる人が多いんですか?
しねーよそんなこと
バグりまくってゲーム完成するどころじゃねぇぞ
ですよね。すいません。
描画用と入力・計算用のスレッドは別って事?
そうしとかないとマズイゲームもあるでしょ 1フレームの時間が変わったら 格ゲーのコマンド入力の難易度が変わったり スペックの低いPCでやったらすり抜けが起きたり
DXUTみると 処理用と描画用のコールバックは トータルフレーム時間と前フレームからの経過時間が受け取れるようになってるね
ダイレクトサウンド使ってるんですが、 SEとBGMで大きくわけて音量を調整したいです。 この場合プライマリバッファを2個作ったほうがいいですか?
ボリュームはセカンダリバッファごとに設定できるでしょ
そうでしたっけ すんづれいしました
>>801 内部の処理だけ回して描画しなけりゃいいじゃない
>>806 本当にありがとうございます。助かりました!
>>806 D3DPRESENT_INTERVAL_DEFAULTの挙動って、
確定じゃなかったような気がするんだが違ったかな
>D3DPRESENT_INTERVAL_DEFAULT と D3DPRESENT_INTERVAL_ONE は、ほぼ等価です >D3DPRESENT_INTERVAL_DEFAULT では、既定のシステム タイマーの分解能が使用されます。 >一方、D3DPRESENT_INTERVAL_ONE では timeBeginPeriod を呼び出し、システム タイマーの分解能を拡張します。 >これにより、垂直同期の品質が改善されますが、処理に時間が少し多くかかります。 >いずれのパラメーターの場合も、垂直同期が試行されます。
でも、問題になってるのは垂直同期の仕方じゃなくて 固定動作で垂直同期した場合、 プレイ環境によりリフレッシュレートが60fpsだったり75fpsだったりして困るでしょ?って話じゃ どうしても固定じゃないと処理が難しいって言うなら Win32APIでもうゲーム中だけ60fpsに変更しちゃえよと思ってしまうが
フルスクリーンモード →望みのリフレッシュレートになる ウィンドウモード →垂直同期なんて気にする必要ない って感じだった気がするけどそんなことない?
>>811 頑張ってWINAPIで60FPSにしようとしたんですが、
ガタン、ガタンってなってしまうんです。
私の制御に問題があるんでしょうが。
>>811 それだと、60Hzに対応してないモニタだと映らなくなったりチラついたりしないかね?
多くのウィンドウズゲームでティアリング発生が放置されているのは
結局モニタの垂直同期がバラバラだからって事だと思ってるけど。
因みに、俺の場合は高分解能パフォーマンスカウンタでFPS固定してる。
必要がないからコマ落ちは、一切みてない。
話の元は
>>770 で、ティアリングが問題だった訳で、
>>806 によりPresentがリフレッシュレートに同期し回避されますねって話では
>>815 「ガタンガタン」って表現は、本当にティアリングの事なのか?
俺は、移動量が一定じゃなくて、たまに移動が変になるって読み取ったけど。
60Hzに対応してないディスプレイとかあるの?
対応しててもプログラムから強制変更できない環境が結構あるからねえ
819 :
770 :2010/10/25(月) 23:55:53
ガタンガタンは 垂直同期待ちにしたら解消したので、ティアリングが原因かと思われます。
DXライブラリなら気にしなくて済むのにね
822 :
770 :2010/10/25(月) 23:59:42
元々のタイマー処理に穴があって、表示タイミング自体がずれていたのか ティアリング現象によるチラつきが問題だったのかは闇の中だな・・・。
ガタンガタンはわかるな 俺も綺麗にスクロールとかしたらなった気がする でもそんときは同期またずに更新するようにしたらなんか直った記憶あるんだけどな タイマでやってたときってD3DPRESENT_INTERVAL_IMMEDIATEだよね?
いや、だから垂直同期時間とタイマのズレのせいで 0と1のダブルバッファとして ズレが蓄積して1画面分に達すると 010101001010 ↑ ガタンとなる
はまったので質問。 マルチパスレンダリングで描画しようとしてるんだけど バックバッファにレンダリング済みのテクスチャの描画が 特定の状況のみできなくて困ってる 描画できない設定は以下 バックバッファのサイズが 800x450 レンダリング先テクスチャのサイズが 1280x720 描画できる設定は以下 バックバッファのサイズが 1280x720 レンダリング先テクスチャのサイズが 1280x720 レンダリングターゲットってバックバッファのサイズよりでかいと ダメなのかな?
831 :
770 :2010/10/26(火) 03:23:42
>>823-826 私にもはっきり原因がわかりません。
直ったときにやったことと言えば、
D3DPRESENT_INTERVAL_IMMEDIATEを0に変更。
FPS制御用の関数をメインループから外す。
この2点だけです。
ガタンガタンの表現が悪くて申し訳ないんですが、
縦でも横でも移動するときに発生します。
それは一定の間隔です。
通常ならスーッっと行くものが、一瞬ブルッと震える感じになります。
ただしこれは、壁にぶつかってるときはこの現象は起こりません。
その現象を具体的に説明すると、
if(x<LEFT_MAX)
x=LEFT_MAX;
上記のように上下左右に移動制限をかけてます。
このようなコードだと、左を押し続けてても、座標は変わりません。
ですが、キーは押し続けてるので移動している際のアニメーションは動きます。
この時はガタンガタンとはなりません。
壁にぶつからないときの移動の時に、ガタンガタンとなってしまうわけです。
個人的には自分でFPSを制御したいと思っています。
こんな感じです。
垂直同期の回数とフリップの回数が違うのが原因 タイマの待ち時間を 16 17 17 16 17 17 16 17 17 みたいに1秒間に確実に60回になるようにやってみな
833 :
770 :2010/10/26(火) 03:57:39
ありがとうございます やってみます
>>829-830 いや、それ複数のレンダーターゲットに同時に描画する機能の説明だから。
駄目な設定のときって、デバッグランタイムにしてデバッグメッセージ見たら、
何かメッセージ出てない?
某サイトのせいで MRTのことをマルチパスレンダリングって言ってるだとおもうけど
頂点フォーマット(頂点宣言)の組み合わせって無数に在ると思うんですけど 同じものがあればそれを使う方法って無いですかね?
は?じゃあ使えばいいだろ
この中にニートが何人かいるな。絶対。
>>837 頂点バッファ作るたびに頂点宣言オブジェクトを作るってことですか?
頂点宣言オブジェクトって何だよ。 説明してみな
JAVAとかC#のnewってなにしてたんだっけ コンストラクタとか言わないよね
C++のnewは何をしているんでしょうね?www
ですよねwww
malloc
callocでもいいんじゃよ?
ID3DXMesh->DrawSubsetって内部でDrawPrimitiveが使われているみたいなのですが、 PRIMITIVETYPEではどれを使って描画してるのですか?
MICROSFTに聞けや
顔真っ赤(笑)
ヒント 初心者スレ
知らないならレスしなきゃいいのにね。
真っ赤(笑)
公式より >The subset that is specified by AttribId will be rendered by the IDirect3DDevice9::DrawIndexedPrimitive method, >using the D3DPT_TRIANGLELIST primitive type, so an index buffer must be properly initialized. PIXでみると中で何をどう呼んでるか全部見れるよ
真っ青(怖)
無知を晒した挙句それをごまかす為に荒らしてる困ったちゃんがいると聞いて飛んできました
お礼も言えないカスは徹底的に叩くべき
真っ赤っ赤(笑)
自分が回答したわけでもないのにお礼を要求する男の人って
常識に対して反論する人って(笑)
2chではそれがデフォ 著作権者でもなくむしろ普段は著作権侵害側の癖に、 特定可能な個人が著作権侵害行為を行うと狂った様に集団で攻撃したりとかな
>>863 まあ、それぐらいで調度いいんじゃね?
みんながおおっぴらにやるようになったらそれこそ最期だと思われ
一見関係ありそうで関係ない話を始める
俺が言いたかったのはこういう初心者をバカにする発言をするなってことだ これでよくわかっただろ いつも上から目線のクズさんよ
>>866 初心者攻撃と著作権侵害の関係性がまったく分かりません
>>868 同意
このタイミングで言うからさっぱりわからないw
「これでよくわかったろ?」とかwわからねーよw
だから、そいつと俺は別人だって
そろそろ次スレいる?
900超えてからでいいんじゃね?
950くらいでも余裕
で、何か質問はないんかね?
ゲーム作りについての質問ってココで聞いてもいいの? DirectXから話それるけど。
つゲーム製作板
そんな板あったのか。失礼しました。
DirectXに関係することなら答えて貰えるかもしれないけど 設計とか全然関係ないことだと叩かれる可能性大
すごい叩く人がいるので遠慮しときますw
ローカル変数にLPDIRECTSOUNDBUFFER8型の変数を作って、 そいつを戻り値にした場合、そのポインタって消滅するんですか? それとも使えますか?
こんばんは。Direct3Dを最近ほどでもないんですが始めました。 Direct3D9よりかはDirect3D10のサンプルを見ながらやっているのですが、 Direct3D9でデバイスにSetTextureStageState関数でD3DTSS_TCI_CAMERASPACEPOSITIONのフラグを 使っているプログラムがあり、これをDirect3D10で書くにはどうしたらいいのでしょうか。 全部シェーダー側でやると思うのいですが、どのような計算をしているのかが分かりません。 よろしければ教えていただけないでしょうか。
テクスチャ座標かけるビュー行列
使えるんですね。ありがとうございます。
886 :
827 :2010/10/27(水) 01:13:13
一応、レンダリング先のテクスチャよりバックバッファが小さくても レンダリングできるようになったので報告。 原因不明、なぜかできるようになった。 たぶん、ポインタ指定ミスとかそんなショボイミスだと思う。 てか、普通にダウンサンプリングっていう技法?で存在するから できなきゃおかしいって話だった。
>>882 頂点座標をカメラ空間まで変換した座標をそのままテクスチャ座標に入れる。
頂点座標にWorld*View行列をかけるだけ。
プロジェクション行列はかけないのが、普通の座標変換とは違うとこ。
しかし、TexGenを使っているプログラムでは、間違いなくテクスチャ座標変換も同時に
使われているから、D3DTSS_TEXTURETRANSFORMFLAGSやD3DTS_TEXTUREnも要確認。
888 :
デフォルトの名無しさん :2010/10/27(水) 13:44:15
質問です。 hlslでビューポートを変更できますか? ビューポートが固定機能パイプラインってのは判ったのですが、 ではプログラマブルパイプラインではどうやるのか判らないのです…
ビューポートってデバイスに設定されるものだから関係ないんじゃないの
ビューポートって、左上が0,0のスクリーン座標なんですか?
DirectX 9
わお!ありがとうございます!
LPDIRECT3DTEXTURE9型の変数を作ってそいつを a=b; みたいに代入したあとに、 b->Release()って、リリースしたら どうなるの? aにはポインタは入ったままだけど、テクスチャの実体は消えてる状態と思っていいですか? それとも代入した時点で、内部参照カウンタが増えちゃってるんですかね?
ただのIDirect3DTexture9ポインタのtypedefなので、 自分でAddRefするかスマートポインタにブチ込むかしない限り消えちゃうよ。
消えちゃうんですね。そりゃ好都合です。 ありがとう。
>>883 >>887 ありがとうございます!!
ところでTexGenとはなんでしょうか?
すこし調べてみましたがこれといったものが引っかからなくてよく分かりません。
TexGen?
Texture Generation?
Texture Generation Plane?
行列かPLANEかなにかでしょうか?
OpenGLでは何かに(glGetTexGen?)使われていそうです。
なんでジェネレータが出てこないのか。
すいません Spriteで表示させたい2つの画像があって それぞれの画像を別々の角度で回転させらい場合 Spriteオブジェクトを2つ作らないとできませんか?
まず"Sprite"の定義を明確にして
バカ。 初心者なんだから、ID3DXSPRITEインターフェースを使った 描画に決まってるだろ。 そんぐらいわかってやれ。
そう思うならそれ前提で回答してあげればいいじゃない
荒らししかできない能無しなんだからほっとけよ
しゃあねえ答えてやるよ Spriteなんか使うな。以上。あれは邪道。
ID3DXSpritesスプライトのことを言ってるならまったく使って問題ない 使い方さえ間違えなければ下手な初心者が自分で組んだシステムよりよほど高速に動作する まぁ、ある程度理解してないと使いこなすのは地味に難しいんだけど
ID3DXSpritesって知らなくて自前でつくっちゃったんだけど割と高速なん? 100万もの粒子表現とかに使えます?
無理無理。 遅いし、自由がきかない
自作自演カッコワルイ
てか秒間1億2000万ポリも表示したら 普通に描いてもフィルレートで死ぬんじゃね?
ここでID3DXSpritesは糞って言われてるのを鵜呑みにして まともに使ったことない奴多そうだな
男は黙ってSprite
馬鹿者に日本語サイトが含まれていないのが救いだろう。
で実際に計測した人はいないの?
計測するまでもないだろ。邪道邪道。
だろ。
そもそもあくまで表現なのに、正確に一つ一つ出力しようと考える時点で能無しとしかいいようがない。
日本語でおk
シェーダーで宣言したスカラー型の定数はfloat4型のレジスタに格納されるのですか
答えずに荒らして、答えろといわれたら邪道wwwww どんなけおまえバカなんだよ消えろカス。
>>924 float4に展開されるけど
値は0〜255ではなく0.0〜1.0にマッピングされることに注意
903です。ID3DXSpritesのことです。 すいませんでした。 923さんありがとうございます。 引数が5個のdrawを使ってたみたいです。
>>926 なるほど、つまりboolを4つ使いたい場合はfloat4で格納したほうが節約になるんですね
903です。 やってみたのですが error C2660: 'ID3DXSprite::Draw' : 関数に 7 個の引数を指定できません。 のエラーが出ました。 調べたところDX9.0aでは引数7個で DX9.0b以降は引数5個で回転角度が指定できなくなってました 私が使っているのはDX11(2010_JUNE)です。 やっぱりテクスチャーを個別に回転させる場合は スプライト2個用意しないとだめなのかな?
>>929 おお、まじか申し訳ない
SetTransformで回転させたらどうだろう
先に言っとくが、いずれ詰むよ。 スプライトで出来ることは単純なことしかできないから。 普通の描画を覚えなさい。
スプライトと一口にいっても色々な実装方法があるので一概には言えない。
檸檬味のスプライト美味いからオススメ 期間限定だし
てゆうか、なんでSDKのチュートリアルもやんないの? あそこで単純な三角形を描画したよな? だったら、四角形だって余裕だろ ってならないところに希望がまったく見えない てか、これができないレベルのままゲーム作ろうってのが正直ホントすげぇと思う
また微妙に荒れそうだけど ID3DXSpriteを真面目に使ったことなかったのでちょっと試して見た GeForce 9600M GT(モバイル用チップ)にて Debugコンパイルだと妙に重いけど Releaseコンパイルならまぁ実用範囲内か? 遅いはともかく自由度が効かないという印象はなかった 頂点のローカル軸がスクリーン座標に合わせてy軸が下向きな以外は後はどうとでもなりそう (計算でひっくり返してもいいけど計算量削減のため今回は元画像を反転で対応。だれか対応策知ってたら教えてください) テクスチャ1枚だと面白くないので2枚を使ってランダムで描画した場合を想定して計測 100 スプライト( 200ポリ) :630FPS 1000 スプライト( 2000ポリ):490FPS 5000 スプライト(10000ポリ):230FPS 10000スプライト(20000ポリ):140FPS 20000スプライト(40000ポリ): 75FPS 半透明スプライトの整合性を保つために D3DXSPRITE_SORT_DEPTH_BACKTOFRONTフラグを立ててソートした場合 100 スプライト( 200ポリ) :590FPS 1000 スプライト( 2000ポリ):240FPS 5000 スプライト(10000ポリ): 50FPS 10000スプライト(20000ポリ): 25FPS 20000スプライト(40000ポリ): 14FPS
初心者が一度初心者な質問しただけでカッカすんなよ カルシウム足りてねぇよ・・・な?
938 :
936 :2010/10/28(木) 22:50:16
それぐらい考えてできるようになると、 もうスプライトなんか使わなくなってるよ。
>>940 もういいよ
勝手に一人でイライラしてろよ・・・
たぶん虎はできるんだよ。 その応用ができないだけだと思う。
>>942 したらモデリングソフトで4頂点の三角形2枚を設定するだけじゃね?
努力の方向がまちがってんねん
メタセコに金入れてXファイル出力できるようにすりゃそれで終りだろ
虎までのチュートリアルでスプライトの設計までできるようになるわけないだろう
たぶん座標変換でつまずいてるんでしょ。 表示は出来ても、理解してないから応用ができない。 つまり、自分のイメージしたとおりに描画ができないってことだろ。 まあ、そういう初心者を救ってあげるのがこのスレの役目だ。
>>943 関係ないが、金入れなくてもxファイル出力できるぞ
>>946 金入れたほうがいいと思うな
keynoteがないから階層出力できないし
スプライトをメッシュにするとかないわ〜
頭が悪いだけだろ。 どうせまたすぐ躓く。
君なりのテンプレを作ってくれたまえ。 一度見てみたいよ。
>>948 なんで?
なにか不具合ある?
俺からしたら手動でUV設定してるお前のがありえねーよ
板ポリにxファイル使うのもちょっと冗長じゃないか?
UVなんかどうでもなるが 1スプライトごとに1回DrawSubsetするの?
板ポリにXファイル使うのはありえないだろ。 それぐらい普通にやれ
>>953 パーティクルがやりたいとかそういう例の話はいまはしてないからね?
はいはい邪道邪道
次スレ立ててくる
>>955 パーティクルなんて関係ねぇーよ
普通に2Dゲーム作るのだってスプライトごとにDrawPrimitiveなんてしねーよ
>>959 別にDrawPrimitiveをやるやらないはお前がタイミング決めろよ
XファイルをMSの関数にまかせたら1枚ごとになるけど
読み込んだXファイルを自分のフォーマットに変換して
好きにすればいいだろ
悩んで成長するんだ
>>960 >読み込んだXファイルを自分のフォーマットに変換して
ができるくらならもうそれは初心者じゃない
Xファイルで読んだら簡単じゃんって言っておいてハードルを上げる矛盾
「遅いし、自由がきかない」とか言ってたのをひっくり返されて論点をずらそうとしてるだけじゃね?
DirectX11を使えばいいだろ。
>>963 なんで速度出そうとする話になってるの?
Xファイルは遅いの?
速度いらないならID3DXSpriteでいいじゃんw
Xファイルもシェーダーを使わなきゃ自由はきかないだろ。
チュートリアルで虎を表示した延長で表示できてかつ応用が利くって話だったと思うんだけど
質問で返して論点ずらしまくりだな
>>971 一番はじめはスプライトなんてゴミを使うなだし
どこも間違ってないじゃん
現時点でメリットないんだからw
仕様もよくわからんし、扱いづらいし
やってることは板ポリの表示だろ
何が魅力あるのかねwこのクラスw
この初心者ホイホイ力はすさまじいな
本当に役に立つチュートリアルのほうは手を出さないんだな
仕様もよく分かってないのに批判してるのか
>>973 細かいところでたしか罠があったな
忘れちまったけど
んで、Xファイルはやっぱり遅いから使わないの?
うん
∵ゞ(≧ε≦o)ぶっ
>>901 >>902 すいません。どうにも用語が分からなくて。片っ端から調べたつもりでした。
早速そのPDFを読んでみます。ありがとうございました。
うめ
梅
うめ
COM用のスマートポインタって実際クラスでラップするからあまり使わなかったりする・・・
>>983 そのラップするクラスの中で使えば解k(ry
梅
D
i
r
e
c
t
S
o
u
n
ko
x
yuko
yuko
∧,,,∧ ( ・∀・) 1000ならジュースでも飲むか ( ) し─J
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。