くだすれDirectX(超初心者用) part.2
1 :
デフォルトの名無しさん :
2007/03/10(土) 23:03:20
2
3 :
デフォルトの名無しさん :2007/03/10(土) 23:08:14
前スレの999に書き込んでしまったので、再度書き込みます。 DirectShowを用いたプログラムを組んでいるんですが、 この、エラーコードの一覧というのはあるんでしょうか。
>>1 乙
>>3 このエラーコードて、どの?
DirectShow全般ってことなら
ヘルプにある、「DirectShowに固有のHRESULT値」ってやつがそうじゃないの?
5 :
4 :2007/03/11(日) 02:20:49
>>4 目次でいうと、
[DirectShow]-[DirectShowリファレンス]-[定数とGUID]の下の
[エラーコードと成功コード]ってとこに書いてある。
6 :
デフォルトの名無しさん :2007/03/11(日) 13:11:16
>>4 >>5 ありがとうございました。ありました。
これで、ミスの原因がわかる と思います。
7 :
デフォルトの名無しさん :2007/03/11(日) 14:28:59
独自フォーマットの画像データを読み込んでテクスチャとして登録したいのですがどうすればいいのでしょうか? D3DXCreateTexture()で空のテクスチャを作れる所まで分かりました。 あとは、読み込んだデータをどのようにテクスチャとしてDirectXに登録するかなんですが、よろしく御願いします。
テクスチャをLockRectでロックしてデータを書き込む
ベタデータなら先頭にDDSヘッダつけてFromInMemory系で読み込む。
10 :
7 :2007/03/11(日) 15:31:54
11 :
デフォルトの名無しさん :2007/03/12(月) 01:34:08
質問です direct x 診断ツールで direct xの機能が全部利用できませんになってます ラグナロク?オンラインやろうとしたんですけど FAQみたらdirect xの問題ぽかったので 調べてみましたがよくわかりません ぐらふぃっくはIntel Graphics Media Accelerator 900(915G)です お願いします
915か・・・・・・
>>11 スレ違いじゃない。
板違いでもない。
そう、気違いだ。
14 :
デフォルトの名無しさん :2007/03/12(月) 02:12:34
問題ありなんですかね。。。
まずオンボードのチップでゲームをやろうという考え方を改めるところからだ。 今は安く買えるんだから適当なのを買いなさいよ。
16 :
デフォルトの名無しさん :2007/03/12(月) 02:43:45
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □奢ってくれる派遣先正社員は尊敬する □自分の月額金額を知らないのは当然だ □派遣先正社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ
普通にノートPCについてるもんだってラグナロクぐらいなら動くよ。 どんだけ古いPCでゲーム動かそうとしてるんだ? 最近売ってるPCならオンボードでも十分動く場合が多い。
>>11 ム板にプログラムを組まない奴が何の用だ?
>>19 そら昔のオンボードの場合で今のオンボードは大抵シェーダー2.0が動くびっくり性能。
22 :
デフォルトの名無しさん :2007/03/13(火) 00:34:28
裏切派遣って知ってる? 元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて派遣やってるバカのことw 前の会社を裏切り、結局派遣先からも騙されてる。まさに裏切派遣人生 そもそも信頼されてるなら直接契約するか正社員にするはずだが、派遣会社経由って舐められ杉 自分でも騙され裏切れられてることは薄々わかってるから派遣問題の話が出るとウッキー!って逆ギレw 自分で決めて派遣やってる癖に逆ギレしちゃって人間として本当に恥ずかしい
>>21 915GはPixelShader2.0に対応しているが?
>>23 915Gはピクセルシェーダーは2.0を搭載しているが
頂点シェーダーに関してはまったく搭載してないからな・・・
ただでさえCPUはボトルネックになりやすいのに
頂点処理をCPUエミュレートだけでやれってのが無茶な話だよ。
25 :
前スレ997 :2007/03/13(火) 11:01:03
>>前スレ998 指示に従って設定したら、その問題は解決しました。 ありがとうございます。 しかしながら、付録CDのソースをそのままビルドしてもまだエラーが出ます。 'char [〜]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 という物なのですが・・・・新しい機能? という事はこの本が古いという事なのか・・・ DirectX9とVC++.NET対応となっているのに・・・・ static charまたはconst char型の変数を変換するところでいくつもこのエラーが出ています。 もちろんヘルプも色々探しましたが、始めたばかりなのでどこも意味不明です。。 他の本でDirectXを学べばそのうち分かるのかもしれませんが、まずは真似事でも プログラムを組んでみたいので、このエラーを解決する方法があれば ご教授くださいませ。
古いよ。君が使ってるのはVC++.NETじゃなくてVC++2005だからね。 プロジェクトのプロパティを開いて構成プロパティ→全般→文字セットで マルチ バイト文字セットを使用するに変更。
27 :
前スレ997 :2007/03/13(火) 13:43:10
>>26 見事に解決いたしました! ありがとうございます。
最後に、もう一つエラーが残ってまして・・・・
ID3DXSprite::Draw' : 関数に 7 個の引数を指定できません。
という物なのですが、MSDNで見ても引数七つあったんですが・・・
これも解決策があればお教えください。
あと、警告で
ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
とあったので、メモ帳からソースファイルを開いてUnicode形式で保存したのですが、
何度やってもこの警告が出てしまいます。
警告なのでこれは無視してもかまわないのでしょうか?
>>27 なんだっけなー。 d3d9types.hの1800行目付近にある
コメント消せばおkだとおもたけど細かいトコ忘れたわ。
「d3d9types.h FOUR_CC」とかでぐぐってみたらでてくるんじゃね?
29 :
前スレ997 :2007/03/13(火) 17:11:24
>>28 それで検索したら、同じような事例が見つかり、警告はなくなりました!
そして、ID3DXSprite::Drawの引数の事ですが、調べていったところ、
どうやらMSDNの内容が日本語と英語ので異なっていたようで、
英語の方のサイトに行って、引数を正しい五つに直したところまで行ったのですが、
今度は
'ID3DXSprite::Draw' : 3 番目の引数を 'D3DXVECTOR2 *__w64 ' から 'const D3DXVECTOR3 *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というエラーが出ました。。さっきと同じようなエラーなのですが、
文字セットは確かにマルチバイト文字になっているし・・・
これさえ解決すればビルドできそうなのですが。。
Sprite関係はしょっちゅう引数や仕様が変わるうえに、日本語MSDNが
なかなか更新されないので、英語MSDNを見るのが定説なんだっけ。
もしくは使わない。
>>29 DirectXを勉強する前に学ぶべき事があるようだ。(型関係)
>>29 そのエラーが理解できないって相当まずいぞ・・・
すいません、とりあえず猿真似から覚えていこうと思っていたのですが、 この本は自分にはまだ早いくせに時代的には古いという物だったようです。 正直、やったのはC++の入門だけで、DirectXを勉強し始めてもいないので、 出直してきます。
C++の入門
生でDirectXSDK使うのと イルリッヒとかseleneとか噛ますのとどっちが楽?
仕事とかで生DirectXを使わざるを得ない状況でないなら ライブラリに手を出すほうが楽だろ思うけど、 そのへんは使うライブラリ次第かもな。
36 :
デフォルトの名無しさん :2007/03/15(木) 06:24:19
派遣プログラマ、高卒、身長163cmです この先どうしたらいいですか?
37 :
デフォルトの名無しさん :2007/03/15(木) 11:48:58
1hyde以上あるから問題ない。
39 :
デフォルトの名無しさん :2007/03/15(木) 18:01:16
回転行列をクオータニオンに変換するやり方教えて
ネットにあるDirectXのサンプル実行しても、エラーばっかで死ぬ・・・ 構文エラーとか、そういうのがずらーーーーーーーーっと。 2007年2月のSDKをインストールしただけなんだが、何かやり忘れてることある?
根本的にry
根本的にって何だよ あと、C++のコンパイラはVC++ EE使ってます
やり忘れ:ググレカス
一応DirectXの入門サイトで、「やれ」って書いてあるのはやってみたはずなんですが、やり忘れがあるみたい・・・
まずは質問の仕方から勉強だろうな。 最近の若い衆は質問の仕方が下手で困る。 いきなり何かを指さして「スミマセンこれわからないんですけど?」 と言われたって、こっちは何がわからないのかわからないんですけど^^; すまん愚痴ったorz
今までプログラミングした事は? いきなりDirectXやろうとしてるようみえるんだが
47 :
デフォルトの名無しさん :2007/03/16(金) 03:57:31
・DirectXでつまづいているのか? ・普通のプログラムのコンパイルはできるのか? ・どんなエラーがでるの?
補足すると。 ・そのサンプルはいつ作られたものなのか。 DirectX9.0は無駄に長い歴史があるので マイナーバージョンアップでも仕様変更が結構入っていて 時期によってはサッパリ違うこともある。
DirectX9で ウィンドウモードで描画していて ウィンドウサイズ変更すると 描画が引き伸ばされるんですが 回避するにはどうしたらいいですか?
50 :
デフォルトの名無しさん :2007/03/16(金) 17:27:46
ウィンドウサイズ変更できないようにしろよチンカス
>>50 ツールの描画として使ってるからウィンドウサイズ変えまくり前提なんだよチンカス
>>49 WM_SIZEでPARAMのWidthとHeightにサイズを入れて
device->Reset
52 :
デフォルトの名無しさん :2007/03/16(金) 17:36:45
なにこれ?自演?ワロスwwwwww
ツールねぇ・・・・
あー、でもそういうツール作ったときって ウィンドウの縦横比も中身の絵の縦横比に合わせて変化させるみたいな仕様にしたら地獄みたなぁ AdjustWindowRectだっけ? なんか中身にあわせてウィンドウサイズを確定する仕様にするとすげー作りにくい なんでウィンドウのサイズは自由に変更できるようにして中身の絵の縦横比の比率は デフォルトを維持したままウィンドウと中身の絵とで隙間ができた部分は 別の色で埋めるようにしたほうが綺麗にいくかも。 まあ、仕様にまで踏み込むので仕様を決めた担当者と話しあう必要が出てくるけど なにいってるかわからん?
言いたいことは分かるが、そんなの難しくないし。
>>56 難しいよー。
まず、どのメッセージ拾ってサイズ変更するのが適切か?ってのを見定めなきゃならん
んで多分変更後のウィンドウのサイズが流れてくるからそこから中身の絵のサイズを算出して
それに対して今度はウィンドウのサイズを調節してってやると結構面倒だと思われ
ウィンドウのサイズ取得→クライアントのサイズを算出→中身の絵のサイズを合わせる
→中身に合わせてクライアントのサイズを算出→クライアントからウィンドウのサイズを決定
って順にやらなきゃいけないから
中身の絵の比率を維持したままウィンドウのサイズを決定するようにすると
ちょっと面倒な計算になるよ。
固定幅の枠もあるから、単純に比率ってわけにもいかんし、メッセージごとよくわからんし。
俺はこの計算がなんかうまくいかんかった。
完璧にサポートしようとするとすげーきつい
WM_SIZINGとかWM_SIZEとかWM_EXITSIZEMOVEとか
なんかメッセージごと処理の仕方違うし結構苦戦した覚えがある。
いや普通に出来るだろ・・・ ツール作る時にウィンドウサイズ変えるたびReset()呼び出すなんてアホの子がすることだ。
>>51 のレスについてだ。
4分割画面の可変サイズウィンドウのモデルビューアーを
作った時は画面サイズや比率に関しては全く苦労しなかったぞ。
中身の絵の比率を維持したままウィンドウサイズを決定するのではなく、
変更されたウィンドウサイズに合わせて中身の絵が同じ比率になるようにすればよい。
バックバッファをVGAとか固定解像度で持ってやって、 転送時にstretchbltなり使ってやって描画領域にあわせてやるというやり方か
ごめん忘れて
俺が昔作ったときはWM_SIZEをフックしてBackBufferWidthとかを書き換えてたかなぁ。 そうしないとピクセルと1:1にならんから汚く見える
メインスレッドとは別のスレッドからCreateDeviceをやろうとしているんだけど ウインドウモードは成功、だがフルスクリーンは失敗 (CreateDeviceから永久に戻ってこない) メインスレッドでやれば両方成功するのは確認した ひょっとして別スレッドってのはタブーなのか???
>>63 バッファの大きさに関係なくSetViewportで1:1にすりゃいいだけじゃん。
それじゃ4分割ウィンドウで4つのウィンドウの大きさが別々の時とか対応できないだろ。
普通にスワップチェインで好きなサイズを割り当てればいいだけ。
>>64 CreateとResetはウィンドウ生成と同じスレッドの必要がある。
リファレンスに書かれていた希ガス。
メタセコの場合、透視図と三面図では、ウィンドウサイズに対する 可視範囲の決め方が違うわね。どうでもいいけど。
>>64 CreateDeviceのところにもResetのところにも、フォーカスウィンドウを作成したスレッドとは
別スレッドのからは駄目ってしっかり書いてあるだろう。ついでにReleaseも駄目。
デバイスはウィンドウスレッドと一緒にして 他のスレッドからは完全に隔離するようにしないとね でも同人ソフトとかで描画が別スレッドになってそうなソフトって見たことない
思考系のゲーム以外でスレッド分けを必要だと感じたことがない。
ゲーム以外では割と普通では?
D3Dの場合、対象のGPUが仮想化されてないんで スレッド分けの意義は薄い。 次期GPUで仮想化が実現されたら、スレッド化のメリットは多少ありそう。 今までみたいにステートの保存、復帰を考えなくてよくなるみたいな。
もともと今のGPUはバッファにキューつっこんでから非同期に処理されるしな。 最悪2フレームくらい描画が遅延するんだっけ?
ファイルロード系をスレッドにしたりせんの?
Resetじゃなく Presentで範囲指定すればよかった。
xファイルから読み込んだメッシュのレンダリングされている色を調節したいのですが、 詳しく説明されている本かサイトは無いでしょうか?
>>75 ファイルロードとストリームサウンドは確かに別スレッドにするな。
でもウィンドウスレッドと描画スレッドはネットワークゲームでない限り分けないな。
//ray pick test VOID RayIntersect() { DWORD m_dwNumIntersections; // Number of faces intersected // Rayの設定 D3DXVECTOR3 vecStart,vecEnd,vecDirection; vecStart=Thing[1].vecPosition; vecEnd=D3DXVECTOR3(0,-1.0f,0); vecDirection=vecEnd-vecStart; BOOL bHit; DWORD dwFace; FLOAT fBary1, fBary2, fDist; D3DXIntersect(Thing[2].pMesh, &vecStart, &vecDirection, &bHit, &dwFace, &fBary1, &fBary2, &fDist, NULL, NULL); if( bHit ) { m_dwNumIntersections = 1; MessageBox(0,"交差してます。",NULL,MB_OK); } else { m_dwNumIntersections = 0; } }
80 :
79 :2007/03/18(日) 02:41:29
地面(Thing[2])と当り判定をするためにD3DXIntersectを使っているのですが、 bHitにTRUEが帰ってきません。 何か見落としているところはあるでしょうか?
vecDirectionがおかしいと思うが。
>>36-37 今すぐ派遣をやめて履歴書を書け!
そして就職しろ
身長や学歴は今更変えられないが、職歴は努力でなんとでもなる
派遣はまったく職歴にならんぞ
学歴も努力でなんとでもなるけど・・
学歴は今更どうにもならんだろ・・・ 今から医学部受験しろとかいうのかね
平成18年度の医学部入学者のうち1.3%は25歳以上の社会人経験者(除学士編入)
86 :
デフォルトの名無しさん :2007/03/18(日) 20:12:58
25歳前後で医学部に入学すればなんとかなったといえるだろ だけど語学留学したりいい歳こいてバカ大学にいったりしたらもう死んだも同然 派遣を辞めて普通に就職するのが人生リストラには一番よい
適切な板とスレを選択できる程度の知能を持ち合わせる方が先決だろう。 まあ先天的に頭が悪いから無理だろうけど。
>>88 受信PASSが不明な件
何か全然解らんが、DDrawを初期化したからと言って、
別にGDIが高速化される訳じゃないぞ。
>>89 pはsageです。
ではハードに接続する固有のWinAPIがあるわけですね?
ハードに接続する固有のWinAPIとか処理速度が(Windowモードでも)高速化した状態とか意味不明だから。 DirectDrawを魔法か何かと勘違いしていないか? 用意されているインタフェイスを適切に使用しない限り高速化もへったくれもない。
まさにくずたれ
93 :
79 :2007/03/18(日) 23:59:33
>>81 レスありがとうございます。
vecStart=Thing[1].vecPosition;
vecEnd=D3DXVECTOR3(0,-1.0f,0);
vecDirection=vecEnd-vecStart;
なんですが、y軸方向だけ当り判定をしようとしています。
Thing[1].vecPotionから(0,-1.0f,0)の方向へレイをとばしているつもりなのですが、
これでは不適切なのでしょうか?
vecStart=Thing[1].vecPosition; vecDirection=D3DXVECTOR3(0,-1.0f,0);
>>93 それはvecPositionから(0,-1,0)の座標に向かうベクトル。
vecPositionが(-1,-1,0)だったら、X軸と平行な方向(ようするに真横)に向かうベクトル。
質問させてください。 2種類のα値を使って抜き色と半透明を同時に実現したいのですが、 SetRenderStateでαテストをONにして不要部分を抜く(ddsテクスチャのα値を使う) SetTextureStageStateで、頂点のα値(128)を使うようにする SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA) で半透明化する の方法だと、抜き色されて不透明か、半透明だけか、しか出来ません。 同時に実現するにはどうやればよいでしょうか?
>>96 テクスチャステージで頂点αとテクスチャαを乗算するようにする。
SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE)
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE)
SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE)
98 :
90 :2007/03/19(月) 10:08:14
>>91 DirectDrawに詳しいサイトを教えてください。
お願いします。神様
>>98 ちょっと道間違えて無い?
少なくとももう確かな資料をもってる人間からいって少ないよ
ヘルプも配布されてないだろうし
書籍も昔のみつけてくるしかないし
俺もDirectDraw触ってたけどさすがにもうほとんど覚えてないし使ってない
みんな似たような状態だと思われ
RGBのフォーマットを色々対応するだけで嫌になるよ
100 :
98 :2007/03/19(月) 11:46:49
>>99 3Dが主流になってきてるとはいえ、
趣味で2Dのゲーム作りたいんですよ。
ノートじゃスペックも足りないし。
どうすりゃいいんだorz
そこらに転がってるライブラリみて覚えればいいジャン
>>100 もしかしてDirectGraphicsが3D専用だと思っている?
>>98 struct TLVERTEX_UV
{
D3DXVECTOR3 pos;
float rhw;
D3DCOLOR color;
D3DXVECTOR2 uv;
};
#define TLVERTEX_UV_FVF (D3DFVF_XYZRHW| D3DFVF_DIFFUSE | D3DFVF_TEX1)
GDI使えばいいじゃない
>>94-95 あああ、ほんと根本的な計算が間違ってましたね…
ありがとうございました。
>>97 出来ました!ありがとうございます。
どうやらテクスチャステージを勘違いしていたようです。
(モデルの上に2Dで名前表示とかする為に) 3D座標を描画される2D座標に変換するにはどうすればいいですか?
D3DXVec3Projectでとりあえずいけたぽ
109 :
98 :2007/03/19(月) 17:52:58
110 :
98 :2007/03/19(月) 18:51:26
あ、スルーしてくだちい。
>>100 とりあえず
動作させる予定のPCのスペックと
これは諦める予定のPCのスペックを決めたらどうなの?
PC−9800とかPC98−NXとかサポートしてもしょうがないっしょw
Windows98とかWindowsMEのサポートも無意味だな。 どっかの調査でWindows使用者の8割くらいはXPで残りは2Kって話だった希ガス。 そもそも最近はグラボメーカーも2000/XP/VISTA用のドライバしか作ってないし。 今3Dが処理(ラスタライズすら)できないビデオカードって 一般人が入手するのは不可能な気がするんだが。
113 :
79 :2007/03/20(火) 00:21:29
>>105 で解決したと思っていたのですが、できませんでした…
vecStart.x = Thing[1].vecPosition.x;
vecStart.y = Thing[1].vecPosition.y;
vecStart.z = Thing[1].vecPosition.z;
vecDirection.x = Thing[1].vecPosition.x;
vecDirection.y = Thing[1].vecPosition.y-1.0f;
vecDirection.z = Thing[1].vecPosition.z;
上のように指定しましたが、やはり当りは帰ってきていません。
上で本当に、Startからy軸方向、負の向きにレイは伸びているのでしょうか?
全然違うだろ・・・
ワロタ
DXなんてver6.5〜7までしか使ったことないんだが。 今はver9だっけ? 3D描画がひたすら簡単になって、 2D描画がめんどくさくなったって話をチラっと聞いたのだが、 そこんとこ軽く教えてくれ。 以前は3DをLightWaveで作って、 ファイルの拡張子をxに書き換えて、 xファイルを読み込むヘッダーを自作して、 2Dと同じようにビデオメモリに貼り付ける技法以外で3D描画は難しかったと思うたが。
>>116 3D描画も2D描画も非常に簡単にできる。
DirectDraw至上主義な人には理解できないかもしれないが・・・。
今はD3DXの関数1つでXファイルの読み込みができる。
3Dと2Dで扱い方が統一されたのはデカイ
>>117 へぇ、結局Xファイルを使うこと自体は変わらんのか。
D3DX?
なんか便利そうだなぁ。
新バージョンに手ぇつけてみようかな。
勉強してみる。ありがとう。
あ、もう一つ聞いてもいい?
C++6.0でしかDXは扱ったことないのだが、
VC6.0やらVB6.0やらVB.NETやらでも扱える?
最新版のSDKはVisualStudio.NET前提なんじゃよ・・・ 今はVisualC++.NET2005の無料版もあるしVC6とか記憶から消し去ったほうがいい。 あとは別にXファイルにこだわる必要はない。 俺は自前のフォーマットに変換して使ってる。
>>120 そうなのか…
じゃ、職場のマシンでこっそり作るのは無理かw
Xファイルでなくてもいいのはちょっと嬉しいかも。
>VisualC++.NET2005の無料版
これ自宅マシンに入れて使ってみることにするよ。
ありがとう。
>>121 いやいやいや・・・Xファイル使わないでもモデル表示できるのは
初期のDirectXからずっとそうだろw
たんに自分で頂点データ、インデックスデータ、マテリアル、アニメーションを
全部フォーマット決めて管理・描画するようにすればいいだけじゃんw
無料版はWindowsのSDKが入ってないからPlatformSDKも一緒に入れれ。
VC6持っていれば、VisualStudio.NET Professional 2003に 4万弱でアップグレードできたんだけどな。 とっくにキャンペーン終わったからもう無理だが。
3Dの概念がDX上に生まれたのは7からじゃなかったか?
3からだ
127 :
79 :2007/03/21(水) 15:24:35
それはもはやデータが間違ってるかコリジョンの計算が間違ってるとしか思えん
いや、たんにvecPositionがメッシュの上にないだけだと思うが。
確かに位置座標と方向ベクトルの違いが よくわかってないっぽいから もっと別のところが間違っている可能性は大いにあるな
回転とかするときって何か行列の変換いらなかったっけ?
当然レイを逆行列で変換する必要はあるな。
D3DXMatrixInverse()。
ドット絵に背景3Dの擬似2Dやりたいんだけど3D部分だけ、もしくは特定シーンだけ解像度落として描画とかできます?
できますよ。
フルスクリーンで解像度かえると 画面パチン言うから 一番大きい解像度で作っておいて 小さい解像度の時小さく書いて拡大すれば
3Dだとパスなんで輪郭線綺麗なまま拡大されるのかと思ったらそうじゃない方法もあるのかな 返答ありがとうございました
>画面パチン言うから そのアナログ的な言い回しになぜだか和んだ
139 :
79 :2007/03/26(月) 23:56:22
VOID RayIntersect() { DWORD m_dwNumIntersections; D3DXVECTOR3 vecStart,vecEnd,vecDirection; vecStart=Thing[1].vecPosition; vecEnd=D3DXVECTOR3(0,-1,0); vecEnd+=vecStart; D3DXMATRIX matWorld; D3DXMatrixTranslation(&matWorld,Thing[2].vecPosition.x,Thing[2].vecPosition.y,Thing[2].vecPosition.z); D3DXMatrixInverse(&matWorld,NULL,&matWorld); D3DXVec3TransformCoord(&vecStart,&vecStart,&matWorld); D3DXVec3TransformCoord(&vecEnd,&vecEnd,&matWorld); vecDirection=vecEnd-vecStart; BOOL bHit=FALSE; DWORD dwFace; FLOAT fBary1, fBary2, fDist; D3DXIntersect(Thing[2].pMesh, &vecStart, &vecDirection, &bHit, &dwFace, &fBary1, &fBary2, &fDist, NULL, NULL); if(bHit) { m_dwNumIntersections = 1; MessageBox(0,"交差してます。",NULL,MB_OK); } else { m_dwNumIntersections = 0; } }
140 :
79 :2007/03/27(火) 00:01:36
色々なD3DXIntersectを使ったコードを見ながら書いてみたのですが、やはりがTRUEが帰ってこないです。 D3DXIntersectの使い方はこれであっているでしょうか?
>>140 お前のアホさは黄金聖闘士の域にまで達しているようだなっ!
確かにひどいなw 素直にD3DXMesh使ってD3DX系の関数でコリジョンとりなよ。 リファレンスの説明の日本語もろくに読んでないんだろ
アナザーディメンション! バグの迷宮に迷い込んでしまった
>>140 一応まじめに聞いてやる。
Thing[]ってのがなにかわからん。
145 :
140 :2007/03/28(水) 14:22:42
ありがとうございます・・・; リファレンスは日本語版も出ているのでしょうか。。 Thing[i]はこれです。 struct THING { LPD3DXMESH pMesh; LPD3DXFRAME pFrameRoot; LPD3DXANIMATIONCONTROLLER pAnimController; D3DMATERIAL9* pMeshMaterials; LPDIRECT3DTEXTURE9* pMeshTextures; DWORD dwNumMaterials; D3DXVECTOR3 vecPosition; D3DXMATRIX matRotation; D3DXMATRIX matWorld; FLOAT fHeading; };
146 :
デフォルトの名無しさん :2007/03/28(水) 16:21:18
2Dのゲーム作ってるのですが 背景を表示しようと思って400×400ぐらいのbmpファイルを 表示しようとしましたが どうしてもCPU使用率が100%になりFPSが4ぐらいで動作が遅くなってしまいます jpgに変えても同じでした 画像ファイルが大きすぎるのでしょうか? それとも他に方法はありますか? くだらない質問ですいませんorz
それは素材以外の問題 ソースみせろ
148 :
デフォルトの名無しさん :2007/03/28(水) 16:38:45
void CBACKShot::Init(void) { // 画像ファイルを読み込む m_Texture.Read(g_pD3DDevice, "DataForWork/back.jpg"); // 初期位置をセット m_vec2.x = 0; m_vec2.y = 0; // テクスチャの範囲を指定する m_Rect.left = 0; m_Rect.top = 0; m_Rect.right = 450; m_Rect.bottom = 450; } void CJikiShot::Move(void) { m_Texture.Read(g_pD3DDevice, "DataForWork/back.jpg"); D3DXMatrixTransformation2D(&m_Matrix, NULL, 0, NULL, NULL, 0, &m_vec2); } // 描画 // 引数、戻値なし。 void CJikiShot::Draw(void) { // 座標変換してから、スプライト描画 g_pSprite->SetTransform(&m_Matrix); g_pSprite->Draw(m_Texture, &m_Rect, NULL, NULL, 0xffffffff); } すいません今はソースがうpできない状態なので 思い出して書きました これを無限ループさせてます まだ初めて3日なのでアホなミスしてるかもしれん
すいません 下の二つのクラス名はCBACKのミスです 連投スマソ
void CJikiShot::Move(void) { m_Texture.Read(g_pD3DDevice, "DataForWork/back.jpg"); D3DXMatrixTransformation2D(&m_Matrix, NULL, 0, NULL, NULL, 0, &m_vec2); } 毎回テクスチャロードしてる予感
>>150 Initで読み込めばいいだけだったのですねorz
ありがとうございました
家に帰り次第試してみます
もしかしてMoveクラスそのものもいらないのでしょうか
何を元に作ってるのかわからんが MoveとDrawは、分けといた方がいい フレームスキップや3Dの半透明考慮したZソートに使える
>>152 単純な質問に答えていただき
ありがとうございました
そうしてみます
>>139 D3DXIntersectのドキュメントを読む限り
そのテストコードで間違いはないようだ。
しかし、無駄なコードが半分以上、
本質がぶれるので、テストをしたいなら
もっと、シンプルにすべき。
前半の変換は全部いらん。
以下のコードはHITするか?
しないならば、次の理由によると思われる。
・Thing[2]のメッシュがレイに当たらない形状をしている
VOID RayIntersect()
{
DWORD m_dwNumIntersections;
D3DVCTOR3 vecDirection = Thing[2].vecPositon - Thing[1].vecPositon;
BOOL bHit=FALSE;
DWORD dwFace;
FLOAT fBary1, fBary2, fDist;
D3DXIntersect(Thing[2].pMesh, &Thing[1].vecPositon, &vecDirection, &bHit, &dwFace, &fBary1, &fBary2, &fDist, NULL, NULL);
if(bHit) {
m_dwNumIntersections = 1;
MessageBox(0,"交差してます。",NULL,MB_OK);
}
else {
m_dwNumIntersections = 0;
}
}
>>154 ありがとうございます。
そのまま判定してみましたが、HITしませんでした。
メッシュはメタセコイヤで作った正方形の平面をxファイルにしたものです。
ネットでD3DXIntersectの頁を見ましたが、他のページで見たことしか書いてありませんでした。
Rayが短いとかそういうくだらない事じゃないよな
else{}内に、Thing[1]のy座標を0.001ずつ下げるように記述して、 当たるまで下げてみようとしましたが、 結局HITは帰ってこないままです。
>>157 明らかにMeshが怪しい。
・XFileではなく、D3DXCreateBox等でMeshを作るとどうなるか
次点として
・D3DXIntersectはエラーを返していないか、一応確認するべし
・他にD3Dはエラーを返していないか、デバッグモードで確認する
d3dx9_29.dll とかがいらない DirectXSDKのバージョンっていつごろでしたっけ?
October 2004かな?
脳味噌ぶら〜んにそこらへんまとまってたと思う。
webインストーラが全部入れてくれるから気にしないな
ほう。最近はそうなのか
164 :
140 :2007/04/01(日) 00:27:11
>>158 ありがとうございます。
言われたとおり、D3DXCreateBoxなどでメッシュを作ってみるとTRUEが帰ってきました。
xファイルからロードしたものでは、帰ってくる気配がありませんが、もう少し粘って見ます。
まずはレイを可視化してみなよ。 視覚的に衝突しているかどうか見れないとわからんだろ。
>>165 さすがに可視化くらいはしてるだろ。
まぁ164で当りが返ってきてるところを見ると、今更メッシュの形状は関係なさそうな希ガス
>>165 レイも一緒にレンダリングしていましたが、CreateBoxにあたればTRUEが帰ってきます。
ロードしたxファイルのメッシュには、あたってるように見えても全く駄目です。
>>166 メッシュの形は、平らな平面のものにしてみましたが駄目でした。
DirectX9でXファイルから データを読み込んでメッシュを描画しています。 平面クリッピングを行い、メッシュの切断面を ソリッドモデルとして表現したいのですが 良い方法はありませんか?
>>168 ステンシルバッファを使えば簡単にできる。
172 :
168 :2007/04/05(木) 12:45:08
メッシュBをメッシュAで切り取ろうと思ったのですがうまくいきません。 まずメッシュBの切断面だけ表示しようと思ったのですが 全く変化がありません。検討違いなことをやってるのでしょうか? m_pD3DDev->Clear(0,NULL,D3DCLEAR_STENCIL | D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0,0);//バッファをクリア m_pD3DDev->BeginScene(); m_pD3DDev->SetRenderState(D3DRS_STENCILENABLE,TRUE);//ステンシルバッファを有効に m_pD3DDev->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);//常に合格 m_pD3DDev->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_REPLACE); m_pD3DDev->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_REPLACE); m_pD3DDev->SetRenderState(D3DRS_STENCILREF,0x1); m_pD3DDev->SetRenderState(D3DRS_STENCILMASK,0x1); m_pD3DDev->SetRenderState(D3DRS_STENCILWRITEMASK,0x1); RenderMeshA();//メッシュAを描画 m_pD3DDev->Clear(0,NULL,D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0,0);//ステンシルバッファ以外をクリア m_pD3DDev->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL);//ステンシルが1のところを描画 RenderMeshB();//メッシュBを描画 m_pD3DDev->EndScene(); m_pD3DDev->Present(NULL,NULL,NULL,NULL);
>>172 全然違う。
メッシュBのZ値を描画
メッシュAの表面だけ描画しながらD3DRS_STENCILPASSでインクリメント
メッシュAの裏面だけ描画しながらD3DRS_STENCILPASSでデクリメント
これで断面の部分のステンシルが非ゼロになる。
ここでのメッシュAの描画はZ値を更新しないこと。
また、メッシュAがニアクリップにひっかからないように。
D3DRS_TWOSIDEDSTENCILMODEが使える環境ならメッシュAの処理は1回で
済ませることも可能。
1つ忘れてた。 メッシュAは完全に閉じた形状であること。
175 :
168 :2007/04/05(木) 19:22:21
m_pD3DDev->Clear(0,NULL,D3DCLEAR_STENCIL | D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0,0);//バッファをクリア m_pD3DDev->BeginScene(); m_pD3DDev->SetRenderState(D3DRS_STENCILENABLE,FALSE);//ステンシルバッファを無効に m_pD3DDev->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);//Zバッファ書き込み可 m_pD3DDev->SetRenderState(D3DR_CULLMODE,D3DCULL_NONE);//カリング無効 RenderMeshB();//メッシュBを描画 m_pD3DDev->SetRenderState(D3DRS_STENCILENABLE,TRUE;//ステンシルバッファを有効に m_pD3DDev->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);//Zバッファ書き込み不可 m_pD3DDev->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);//常に合格 m_pD3DDev->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_INCR);//インクリメント m_pD3DDev->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP); //そのまま m_pD3DDev->SetRenderState(D3DRS_STENCILREF,0x1); m_pD3DDev->SetRenderState(D3DRS_STENCILMASK,0x1); m_pD3DDev->SetRenderState(D3DRS_STENCILWRITEMASK,0x1);
176 :
168 :2007/04/05(木) 19:23:22
つづき m_pD3DDev->SetRenderState(D3DR_CULLMODE,D3DCULL_CCW);//表面のみ RenderMeshA();//メッシュAを描画 m_pD3DDev->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);//常に合格 m_pD3DDev->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_DECR);//デクリメント m_pD3DDev->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP); //そのまま m_pD3DDev->SetRenderState(D3DR_CULLMODE,D3DCULL_CW);//裏面のみ RenderMeshA();//メッシュAを描画 m_pD3DDev->Clear(0,NULL,D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0,0);//ステンシルバッファ以外をクリア m_pD3DDev->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);//Zバッファ書き込み可 m_pD3DDev->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL);//ステンシルが1のところを描画 m_pD3DDev->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_KEEP);//そのまま m_pD3DDev->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP); //そのまま m_pD3DDev->SetRenderState(D3DR_CULLMODE,D3DCULL_NONE);//カリング無効 RenderMeshB();//メッシュBを描画 m_pD3DDev->EndScene(); m_pD3DDev->Present(NULL,NULL,NULL,NULL); これでもうまくいきません。根本的におかしいのでしょうか?
具体的に、どううまくいかないのか。 あと、根本的な問題としてステンシルバッファを作成してあるのか? (デプスバッファとセットの物なので個別に作成するわけではないが) MASK系でわざわざ1bitしか使わないようにしているのには何の意味が? (今回は1bitでも問題ないが) 原理を理解していれば、1ステップずつ描画させていけば問題点は すぐに分かると思うが。
178 :
168 :2007/04/05(木) 21:43:16
>>177 すみませんでした。
おっしゃる通りでステンシルバッファを作成していませんでした。
CreateDevice()で、バッファを作成すれば
表示はされるようになったので、何とかなりそうです。
ありがとうございました。
>>174 で思いついたのですが、D3DXIntersectで使うメッシュは、やはり閉じたメッシュじゃなければ駄目なのでしょうか?
閉じても駄目でした。
判定を取る最中にワールド変換してるとかじゃねーの?
最近XNAを始めて、Matrixの使い方がよくわからないのですが 3Dモデルを左右反転するにはどうすればいいのでしょうか? Matrix.CreateScale(-1, 1, 1)でいけるかと思ったんですが 表示がおかしくなるだけでした
1,まず鏡を用意します。
185 :
182 :2007/04/08(日) 12:31:54
>>183 まじめに質問しているので、まじめに答えてください
>>184 馬鹿にしているんですか?カリングくらい知ってます
左右反転というが 何軸に対して反転するんだ? 表示がおかしくなるのは、それに対する考慮が 抜けてるからだろう。
>>185 どちらのレスもふざけてるってほどふざけたレスじゃないとおもうw
ttp://www.plustarnet.com/aspil/Programming/ ここのページでプログラムの内容はあまり理解せず、ゲームを作ってきた者です。
スケルトンソース使って大体思い通りのものは作れるようになったつもりです。
そして最近加算合成がしてみたいと思ったのですが、やり方がよくわかりません。
スプライトを使って加算合成する方法はないのでしょうか?
やり方はなんであれ簡単なサンプルソースのリンクなどを張っていただくと助かります。
>>188 D3DRS_ALPHABLENDENABLE, D3DRS_SRCBLEND, D3DRS_DESTBLEND
を設定するだけでできる。
設定の仕方は「ブレンドファクター121」でググれば色々例がある。
DirectX6の頃の解説だけど、画像付きでそこそこ分かりやすいと思う。
>>189 ごめんなさい、いままでSpriteを使って表示していたので、
その画像合成定義みたいなのをどこに書けばいいのかわかりません。
どこか短くてわかりやすいソース等ないでしょうか?
>>191 189のキーワードでググるという知恵もないのなら、やめた方がいいと思うよ。
>>191 最低限の段階、Direct3Dのチュートリアルは終わらせたの?
>>188 そこのサイトで勉強するのはやめとけ。
そこの管理人は自分の作ったしょぼいライブラリを使わせたいだけ。
何の勉強にもならん。dllだから中身も見れんし。
使いやすいかどうかはともかく、 ソースつきのライブラリなんて腐るほどあるしな。
そーっすね
そこ昔は全部ソース見れたような気がするけど 見れないんだ。
あまりの粗雑さにクレームが耐えないから非公開にしたんじゃね?w
test
質問です、DirectInputでマウス座標を取りたいんですけど DIMOUSESTATE2 mouseInfo; マウスデバイス->GetDeviceState( sizeof(DIMOUSESTATE2), mouseInfo ); ↑これでマウス情報を得た後にmouseInfo.XlやmouseInfo.Ylに入っている数値って 現在のマウス座標からの増減のような気がするんですけど気のせいでしょうか? もしそうなら任意のウィンドウのクライアント領域の座標(左上が(0,0))を取りたいんですけどどうやったらいいんでしょうか?
Win32APIに用意されているだろ。 何故用途に応じて使い分ける程度の脳味噌が無いんだ?
202 :
200 :2007/05/14(月) 22:39:47
>>201 GetCursorPosとScreenToClientでいけそうですね。
せっかくDirectInputを使っているのでDirectInputだけでいけないか悩んでました。
でもこれだとマウスの移動に関してはDirectInputいらないんじゃないですか?
今からやりるんでわかりませんけどクリックとホイールで使うんですかね?
正直マウスに関してはDirectInputの利点はまるでないと思う。
204 :
デフォルトの名無しさん :2007/05/15(火) 14:42:08
> でもこれだとマウスの移動に関してはDirectInputいらないんじゃないですか? いりませんよ。 ゲーム作ってますが、マウスの場合(というかパッドもだけど)DirectInput使ってません。
DirectInputの利点ってなに?
パッド使うときはDirectInput使うだろ
使ってない
Win32APIでアナログスティック2本とか使えたっけ?
209 :
デフォルトの名無しさん :2007/05/20(日) 13:47:48
DirectX SDK - April 2007でDirectX9の開発は可能ですか?
>>209 はDirectX9を開発するらしい
超がんばれ
DirectX9の開発は可能ですか? DirectX9の開発 DirectX9の開発 DirectX9の開発
213 :
デフォルトの名無しさん :2007/05/20(日) 18:02:17
DirectX SDK - April 2007でDirectX9での開発は可能ですか?
DirectX SDK - April 2007でDirectX9の関数が使えますかとかw 最新版使うとランタイムも最新版要求されるような
windowsの開発経験ありますか?
なんて面接で普通に聞かれるじゃん
>>210 はコミュニケーション能力がないと思われて就職できないよ
それに本気でそう思ったとしても出来るかどうかぐらい考えてやれよ
そうすればどんなに矛盾したミスリードをしたか理解できるから
>>215 >windowsの開発経験ありますか? なんて面接で普通に聞かれるじゃん
面接官は馬鹿だからしょうがない
>>215 単に揚げ足取りたかっただけだろうから気にするな
DirectXってGPUで計算してくれるわけだから 電卓作るときDirectXを使えばCPUをほとんど使わず 計算できるんですか?
何が計算できるのかをまず把握しろ。
>>219 行列の足し算引き算掛け算割り算
ですか?
directXとopenGLどっちが覚えるのに時間掛かりますか?
まずはSDKを入れて実際に作ってみるところから始めろ。 グダグダ聞いていても時間の無駄。
>>221 SDKを入れようと思うんだけど、
dirextX10はwindows vista専用らしいので
windows vistaこれからさきやっていって
9のままで大丈夫なのか不安で入れられません
日本語でおk
>>223 10はwindows vista専用なので
windowsXPは9からバージョンアップはされないけれど
openGLはバージョンアップするという理解で
あってますか?
グダグダ考えずにとっととプログラムを組め。
>>225 プログラムを組む前に計画を立ててからです
馬鹿の考え休むに似たり
わからないものの計画をどうやって立てるのか
計画を立てる前に、わからないといけないから 質問してるんです
案ずるより産むが易し
久しぶりに見にきたらこのgdgdな流れはなんだw directxのバージョンで悩む必要なんてねぇだろ。 それ以前にGLはスレ違い。
DirectXを使った他人のプログラム中のDrawText()をフックして、 文字情報を抜き出したいのですが、可能でしょうか? できるのでしたら方法やサンプルを教えて欲しいです。。
DLLを差し替えるんだ
235 :
233 :2007/05/22(火) 21:27:01
DLL差し替えは、プログラムからチェックされてるんで できないんです・・・。 フックに頼らない方法もあるのでしょうか?
そこまで対策されているプログラムにどうこうしようとか考えるな。 制作者の意図通り動かせよ。
リバースエンジニアリングを学ぶべきでは
DirectXを使ったプログラムを作るスレです。
超初心者用スレです。
レス返してるのも勉強中の学生としか思えないほど 低レベルな内容だもんな。。
じゃあお前が答えてあげればいいじゃないか
以上、低脳の発言でした。
245 :
デフォルトの名無しさん :2007/05/23(水) 20:52:48
DirectXを使うにはどの言語が一番いいですか?
Dが一番メジャー
現時点での、環境の充実度、学びやすさ、Web上の資料の量と質などから主観的に判断すると、 C# C++ Delphi D の順かな
C#+Managed DirectX2.0が最高・最強 MSに製作打ち切られても平気
ランタイムを配る面倒さを考えると、C++とSDK2004の組み合わせがベスト。
>>249 C#+MDXの組み合わせは、ランタイム配布関連がごちゃごちゃしすぎて
かつては鬼門とまで言われてたからね
でD3DXのDLLがややこしくなったのは確かApr 2005からじゃなかったっけ
だとするとそういう意味でのベストは、C++とSDK Feb 2005かな
Oct2004はVC6をサポートした最後のSDKだから価値があったりなかったりするんだよ。 ぶっちゃけ”VC2005EE使えよ”とは思うけど。
へえ、そーだったんだ Dec 2004からはVS2003以降専用になったわけね なら、何らかの事情でVC6しか使えない、或いは英語ヘルプを読みたくないならOct 2004 D3DX関係のランタイム配布関連で、苦労したくない或いは何らかの制限があるならDec 2005 それ以外なら最新版 になるんかな
VS2003->VS2005EEで コンパイラバグがあらかた消えた。 仕事でもないのに今だVS6なんて使ってるのはあふォ
VS2003の前にVS.netがあったことを忘れないであげてください。
D3DXがDLLになったところでSDKを更新するのをやめた。
ちなみにD3DXがDLL化される前の最終バージョンは、December 2004 2005FebからはDLL化されている。
逆にDirectXDLLパッケみたいなのができて楽になったと思うけどな
商売やってねーなら最新使えばいいじゃん 商売やってたってCDROMにつけたってたいした手間じゃない キーワード DirectX エンド ユーザー ランタイム Web インストーラ でググルととりあえず取得できる
ユーザに余計な物をインストールさせるのは滅茶苦茶手間。 ドキュメントなんて読まないし、親切にメッセージを表示させても理解できない。
セットアップ用のアプリを別途用意して入ってなきゃ強制的に DirefctXのインストーラー起動させれば流石に入れないやつはいない。
>>261 そうだよな。
別にインストールに選択項目があるわけじゃないし、
強制的に起動すればいいだけの話だし問題になるところじゃねぇよな
ユーザにしてみれば、ボコボコ色んなバージョンのDLLを入れさせられるのは迷惑以外の何ものでもない。
レジストリが肥大化するわけでもなしシステムディレクトリにDLLが 増える程度を気にする普通のユーザーはいねぇぜ。 そういうのはそういう知識がないと気にできない。 ゲームやるだけのユーザーは「ふーん最新版あるんなら入れとくか」 程度にしか思わん。
MS公式のDirectX Webインストーラは ポコポコ色んなバージョンのDLLをとりあえず全部入れる流れですが それが何か
配布するのに無駄にでかいランタイムは付けたくないな。
DirectXをbolrandでコンパイル出来る所(?)までは行ったのですが エラー:未定義の関数 'sqrtf' を呼び出した ってなるんです 僕は何をしたら良いんですか・・・
すいません。解決しました #define sqrtf sqrt そういう意味だったのか・・
DirectXのソースを手に入れたんだ。 すげえな。
( ゚д゚) ・・・ DirectXをbolrandでコンパイル出来る所(?)までは行ったのですが (つд⊂)ゴシゴシ DirectXをbolrandでコンパイル出来る所 (;゚д゚) ・・・ (つд⊂)ゴシゴシゴシ DirectXをbolrandでコンパイル _, ._ (;゚ Д゚) …!?
DirectXがbolrand?
sqrtf って float 用の sqrt じゃないのか?
bolrand _, ._ (;゚ Д゚) …!?
bolrand に一致する日本語のページ 27 件中 1 - 27 件目 (0.38 秒) もしかして: borland
>>273 日本語と英語の間にいちいちスペースを入れるのやめてください
>>276 そんな事言う奴初めて見た。
Word とかでも自動的に間隔開くのが普通だし、
それがデザインの基本だというのに。
デザインの基本がどうとかこうとかではなくスレの流れを読めってことだ
DirectXをbolrandでコンパイル の揶揄だったのか?
突っ込みどころ大杉
頭の悪い奴って、あらゆる所をとことん間違えるよな。
どうでもいいことで、スレを埋めるなよ。
さすが超初心者用のスレだ。DirectXをbolrandでコンパイルすることすらできんヤツらがこんなにいるとはw
まあ無理だな。
VC++6+Win32SDKでゲーム作ってるんですが、 パッド対応の為に、DirectXSDK(2004Oct)を入手して、 DirectInput(D8)を利用することにしました。 サンプルを流用したクラス作って、機能自体は稼働させたんですけど、 開始画面のメニュー選択などでパッド利用で選択しようとすると、 カーソルが超高速で動いてしまい、激しく使いにくいんです。 今まではGetAsyncKeyStateを使ってたので、 メニュー選択時等は最初のdownだけ拾って処理させてたんですけど、 これに似たような事できませんか?
>>285 要するに
押した瞬間だけ1になって
押しっぱなしだと0に戻る
離したときも0をキープする
変数を作って、カーソル移動する関数はそれを読めばいいわけだ
>>285 DXライブラリかLunaのソースでも見とけ。
289 :
285 :2007/05/25(金) 01:05:03
>>287-288 ありがとうございます。
>>287 やっぱりそれしかないですかね。
DirectInputの戻りでup判定とか出来る余地があるのかと
思ったんですけど。
>>288 Lunaってラッパーライブラリがあるんですね。
拾ってきたので、明日あたり覗いてみます。
>>285 パッド対応にDirectInputなんて必要ないけどな。
大抵の用途はjoyGetPosExで十分。
291 :
285 :2007/05/25(金) 11:34:21
>>290 ありがとうございます。
そんなAPIあったんですね。
今調べて初めて知りました。
こっちの方がDirectXに依存しない分、もしかすると良いかもしれないですね。
ちょっと検討してみます。
292 :
267 :2007/05/25(金) 17:45:41
borlandでしたね・・ Microsoftをミクロソフトと読んでた時期もあります ごめんなさい
お前大物になるぞ
棒ランド
>>291 振動やアナログスティックを使わないのであればWinAPIで十分。
アナログもWin32APIで十分。
297 :
285 :2007/05/25(金) 22:09:11
>>295 ,296
ありがとうございます。
教えて頂いたWin32APIで書き換えてみました。
これはこれで全く問題ないですね。
ただ、なまじDirectXのサンプルとか結構見てしまったので、
フォースフィードバックとか使ってみるのも面白い気がしてます。
皆様、親切にありがとうございました。
>>296 WinAPIで軸2つ以上取れるんだっけ?
普通に取れる。
DirectXゲームグラフィックスプログラミングVer2.0 これ読んでだいたいどういうものか解ったんですけど入門書って感じがしないです 良書教えてください!! サイトでも良いです!!
>>300 たしかに入門書としては簡単すぎるというか足りなすぎるというか
おれはemuleで見つけてるよ ただだしオススメ そのかわり英語がすらすら読めないと無理
>>301 凄く分かり易そうです有難うございます!
>>302 機能についての資料集って感じです
>>303 よく分からないけどやってみます
>>304 書かれてる内容は分かるんですけど
まだコード繋げる事さえ出来ないので戦ってもいないです
なんか手を出すもん間違ってないだろうか?
correctかどうかは分からんが本人にとってrightなことをやってるんだろう。
今DirectXで2Dのゲームを作っているんだけど フルスクリーンで実行するときとウインドウモードで実行するときの速さが違うんだけど どうして速さに違いが出るんだろう?
ちゃんと同期を取れ フルスクリーンだとフレッシュレートにあわせてFlipするが vista 以外のウィンドウモードではフレッシュレートをあわせない
実に新鮮でういういしいのぅ
そもそもどのインタフェイスを使ってフルスクリーンにしているか不明、設定も分からない、 さらにどっちが速くなったとも書いていないのに、いったい何を答えろと言うのだろう。 それと勝手に結論を出した奴は間違いなく早漏。
>>309 うん?
DirectX9からは、ウィンドウモードでも、
D3DPRESENT_INTERVAL_IMMEDIATE 以外を指定すれば
(VSYNCに合わせるかどうかは別として)同期を取ってくれるようになったんだが。
分かりにくくてすみません!
>>309 ちゃんと同期が取れているのかは分からないのですが、
一応GetTicCountで時間を取得して1秒間に60フレームになるようにはしているのですが。
>>311 遅くなるのはウインドウモードのときです。
フルスクリーンのときはグラフィックが1秒間に60ドット移動するのですが、
ウインドウモードのときは42ドットしか移動しません。
どうして移動に差が出るのかが分かりません。
すごいですね!よく僕も早漏だって分かりましたね!
それウィンドモードんとき処理落ちしてんじゃねぇの?
>>314 最初は自分でも処理落ちかと思って表示数1枚にして
やり直しても変わらなかったんですよね。
316 :
308 :2007/05/28(月) 01:46:19
曲でも聴きながらコードを見直そうと、 Windows Media Playerを起動して作業をしていた所、発見しました! Media Playerを起動しているときだけ正常に動作していたのです! ただ閉じるとまた同じように遅くなります。 なぜそのようになるのかがまだ分かりません。 同じような現象に合った方はいませんか?
WinMainの最初にでも、timeBeginPeriod(1)って書いてみな。
>>317 コンストラクタにtimeBeginPeriod(1)をデストラクタにtimeEndPeriod(1)をおいたところ見事解決しました!
このAPIでタイマーの精度を変えると起動中のソフトすべてに影響されるんですね!
こんなことも分からなかった自分が情けないです!
これですべての理由が分かりました! 本当にありがとうございました!
またそれかよ 某掲示板でも散々既出な話題だな
何もかもが釣りっぽいがなんだか憎めんのう
フルスクリーンとウインドウモード関係ないじゃん。
322 :
デフォルトの名無しさん :2007/05/30(水) 17:10:44
よくあるはなしだなw
323 :
デフォルトの名無しさん :2007/05/30(水) 18:20:37
すみません。AVIファイル(MPEG4)再生でコマ戻しに苦慮しています。 コマ送りはIVideoFrameStepが使えますが、コマ戻しに使えません。 そこで IMediaSeeking *pMdaSeek; pMdaSeek-> SetTimeFormat(&(TIME_FORMAT_FRAME)); LONGLONG pCurrent,pSTop; DispMovie.pMdaSeek->GetPositions(&pCurrent,&pSTop); LONGLONG NewPos = pCurrent + 1; hRslt = pMdaSeek->SetPositions(&NewPos,AM_SEEKING_AbsolutePositioning|AM_SEEKING_ReturnTime,NULL,AM_SEEKING_NoPositioning); if(SUCCEEDED(hRslt)) pMdaCtrl->Pause(); としましたが、8回試行毎に1回コマ戻しが効きません。(8はGOPの長さと同じ) よい方法を教えてください。
DirectShowはDirectXのカテゴリから外されました。 よってスレ違いです。
戻したいときは直前のIフレームからそこまでコマ送りしなさい。
326 :
323 :2007/05/30(水) 20:47:01
>324 つっこみありがとうございます。 >325 あなたが依頼主だったら、家に帰れるんだがなぁ。
327 :
325 :2007/05/30(水) 21:51:15
ん? 手動じゃなくて自動でやるんだよ。運用でカバーさせようとするな。
328 :
323 :2007/05/30(水) 23:00:12
直前のIフレームってどうやって探すの? さっさと教えやがれです。
テキトーに指定した時間のデータしか取得したことない 俺にはコマ送りとかコマ戻しとかさっぱりだぜ
330 :
デフォルトの名無しさん :2007/06/03(日) 02:49:50
モーションキャプチャーで取得したデータを 画像に反映するにはどうしたらいいの? (´・ω・`)
パラメータを対象データに適切に割り当てる。
DirectXはじめたばかりなんですが 座標がどうなってるのか良く分かりません 1.0fとか0.0fになってるんですが XとYで左上が0.0とか、そういう概念では無いんですか?
自分でそのように変換しているから、そういう単位になるというだけです。 自分で変換しているのに勝手にやられているような責任転嫁はやめましょう。
0.0の後ろにfをつけると、0.0fになります。それだけですthat's all.
f は float の f
>>333 自分でというかサンプルソースをいじってる段階です
>>334 なる・・・ほど
>>305 そうだったんですか、始めて知りました
ソースいじってたらウィンドウの真ん中の座標が0.0fだって事がわかったんですけど
これ、なんていう単位なんですか?
自分にレスすんなよー
>>336 単位なんて無い。
自分で真ん中が0になるようにしているだけ。
全ては自分自身で決めているんだから、他人が知るわけがない。
> ソースいじってたらウィンドウの真ん中の座標が0.0fだって事がわかったんですけど > これ、なんていう単位なんですか? 俺様ちゃんワールドやしぃ。 メートルにしようがぁ、ヤードにしようがぁ 自由だぁーーーッ!
よしもとサンサンTV
>>337 ごめんなさい。自分に全力レス余裕でした。
>>338-340 アーッ!
そういう事か、、、
やっぱ一番左上が0.0じゃないと違和感ありまくりでゲーム作れたものじゃない
何とか描き直します。質問に答えてくれて本当にありがとうございます。
>>341 いくら2Dゲームだってワールド座標も使えないで
こいついままで何やってゲーム作ってたんだろうか?
と思うのは俺だけだろうか?
・--------→ x | | | ↓ y
x y ┃ ┃ ┃ ┃ ┣━┫ ┃ ┃ ┣━┫ ┣━┫ ┃ ┃ ┣━┫ ┃ ┃ ┃ ┃ ┣━┫ ┃ ┃ あ は た ず り れ
3Dを2次元のテレビの画面に変換する 数学のジャンルってなんですか?
幾何代数だっけ? あれ違うか・・・? 高校じゃやらなかったから3D関係は全部独学なんでワカンネ。
線形代数
線形代数学に3Dを2次元のテレビ画面に変換する公式は書いてありませんでした お願いします
3D於テレビ画面変換工学です。
式が見たければ、SDKのヘルプ見れば全部書いてあるが。
もういいです、このすれで質問した自分が馬鹿でした さようなら
TV画面なんて意味不明な物に変換する公式など存在しない。
どのスレで質問しても望む答えはもらえないだろ。
354 :
デフォルトの名無しさん :2007/06/07(木) 16:23:47
アファイン変換と射影変換だな。 代数幾何じゃないか?
そもそも三角関数で円を描くことは出来るが、円を描く公式だといって数学を教えたりはしない。 応用が利かず、そのまんまの公式があると思って探し回っているのは頭が悪いとしか言いようがない。
Direct3Dをマスターするのに最低限必要な数学のジャンルは何ですか? 例えば、物体の移動とか回転等
・物体の移動とか回転 ・局所環付き空間 ・六角四片四角孔ねじれ正多面体 ・大二重斜方二十・十二面体系多面体 ・皆殺しの數學 ・ヤコポ・リカッチ ・ジーン・ガストン・ダルブー ・フィリッペ・ファン・ランスベルゲ ・シャルル=マリー・ド・ラ・コンダミーヌ
358 :
デフォルトの名無しさん :2007/06/07(木) 18:40:15
>>356 あらゆる数学・物理学に精通していないと、マスターなんてとてもとても…
360 :
デフォルトの名無しさん :2007/06/07(木) 22:31:51
>>356 マジレスすると、線形代数くらいしっていてもいいかもだけど、
なくても教科書読みながらでなんとかなる。
どっちかというと、ゲーム作るなら、3Dより、ゲームの方の知識がいるような
どうせ描画のコアの部分はメインPGが担当する場合が多いしな。 会社によっちゃライブラリ化されてるし。
会社でもない限り人の作った部品を使いたくないからね できればDirectXもつかいたくないんだけど、GDPないとつらいから OPENGLかなぁ OPENGLの長所の一つに巨大なライブラリーをダウンロードしなくても すぐに始めることが出来るからね
OpenGLの欠点はゲームを作る点に関しては面倒なとこだな。 D3DXのようなサポート関数もサウンド関係のライブラリは別途必要だし。
OpenGL ・SDKのサイズが小さい ・拡張ライブラリは別々にインストールしなければならない ・メーカー独自拡張部分はサポートが早い DirectX ・SDKのサイズが大きい(バージョンによっては配布サイズも……) ・拡張ライブラリやツールなど一括でインストールされる ・メーカー独自拡張はサポートされない
SDKのサイズ云々言っている奴はどんなナローバンドなんだろう? そんなどうでもいいことを言い回る辺り、駄目な香りがプンプン漂ってくるんだが。
ナローバンドだろうが、SDKのサイズを気にすること自体…
メーカー独自機能は勉強にはいいが、配布するソフトウェアには使えないしなぁ。
XPのDirectXはバージョン9で終わりだから 10以上の機能を使うにはVISTAを買わないといけない OpenGLはVISTAを買わなくても良い
MSDNから無料でダウンロード可能なのでVISTA購入の手間は無いけどな
そもそもDirectX10対応のビデオカードを持っている奴が少なすぎて、 現状ではターゲット環境になり得ない。 OpenGLの独自拡張は互換性がないので使い物にならない。 しかもOpenGLでパフォーマンスを出すには、ドライバがチューニングされた、 ぼったくりの高級ビデオカードが必用なので、 一般ユーザが持っているビデオカードでの性能を考えるならDirect3Dしか選択肢がない。
お前らが書くような糞プログラムでそこまで速度が必要になることはないよw
馬鹿だな。 糞プログラムだからこそ速度が必用になるんじゃないか。
>>371 どちらかといえば逆だろ。
アルゴリズムの最適化の方が優先度は高いんだし。
たかが同人なんかの為にわざわざRadeon7000買ってチェックとか何やってんだろうとは思った。
つかGeForce2MXとかで動かないとか文句言うなよって感じだったがな。
糞プログラムでGPUの性能を使い切ることはほとんどないよ。 大抵はCPU律速。
頭が悪いな。 高速なビデオカードを使えば、性能を使い切らなくたって速くなるだろ。 GPUの性能を使い切るって発言があまりにも馬鹿すぎる。
GPUの休憩時間が増えるだけの予感。
どうでもいい処理をGPUに送り続ければフル稼働するだろう。 GPUの性能を使い切りたい馬鹿にはうってつけ。
だがユーザーが皆高速なビデオカードを揃えてるわけじゃないからな。 自分で作ってそれで満足するだけならそれでいいが、 配布するような前提ならCPUは当然として特にテクセルレートや フィルレートは気にする必要あるだろ。 流石にDrawPrimitive大量にコールしてCPUが悲鳴上げるなんてプログラム組むやつは居ないだろうが・・・
DrawPrimitiveを呼ばないようにするなんて不可能だし 無駄にまとめると今度はしなくていい頂点まで計算に入ってしまって効率悪い 適度に呼べば大抵問題にはならない PCの場合、半透明処理が異常に遅いほうが気になる
380 :
デフォルトの名無しさん :2007/06/09(土) 12:02:25
PCゲーム作るとき、いまだに、シェーダーがターゲットにないというのに、 OpenGLもDirectXもねえ
じゃあ半透明は抜きで
382 :
デフォルトの名無しさん :2007/06/09(土) 12:03:58
訂正 > PCゲーム作るとき、いまだに、シェーダーがターゲットにないというのに、 PCゲーム作るとき、いまだに、シェーダー使わせてもらえないのに
383 :
デフォルトの名無しさん :2007/06/09(土) 12:07:50
半透明つか、アルファブレンドは、 ちょっと、画面覆いつくすように描画するだけで、モタモタするからな。 (うちのはミドルエンドのカードだが) CPU描画の方が速いのでは?って思うくらい(冗談だけどさ)
PCのαブレンド遅すぎるよね DrawPrimitiveがどうとか全然問題だと感じられないぐらい αブレンドが遅い
少なくともシェーダー2.0は普通に使うだろ・・・ 当然ON/OFFはつける前提だが。
>>383 うん、画面覆うと処理オチするときある
すっげ遅い
これ、速くしてくれよって思う
いままであまり叫ばれなかったのが不思議なぐらい重い
>>378 前の文脈を良く読めよ。
糞プログラムを動かす時に高速なビデオカードが必用だという話だ。
まともに組んだらどんどん糞プログラムじゃ無くなっていくだろ。
なぜほんの少し前のレスすら確認する脳味噌がないんだ?
まあ、なんも気にせんで半透明ぼこぼこ使ってたらそりゃそれだけで遅いわな 高いボード買えばちょっとは速くなるかも αブレンドは体感ほとんど変わらないぐらい遅いけどw
広領域αブレンドはメモリ帯域ベンチマークだからなあ しかし昔に比べればメモリ自身もメモリ周りも速くなってるはずだが やはり遅いんかね?
さぁ?なんたって俺のPCはRadeonの9600で時が止まってますしw
まあ、大抵、馬鹿が馬鹿やるところっつったらα物の描画でしょう
Radeon9600なら別に悪くは無いだろ。 シェーダー2.0対応だった気がするけど。
最低でもTNT128まではサポートすべき じゃないと、いざ公開した後で泣きを見るぞw
>>392 そもそもシェーダー2.0なんてものは存在しない。
シェーダーモデル2.0といえば宜しいか
>>393 そんなのサポートしてる時間のが無駄
弱小会社いた俺でもサポートしなかった
加算アルファがなんか変とかそういうレベルだろ?Riva128って
今普通に店で帰るビデオカードだとGeForcre5000番台〜とRADEON9200番台〜くらいだな。 それ以上は古すぎて秋葉の中古ショップとか行かないと買えない。 5年前のノートPCですらGeForce4程度は積んでたし。
古いビデオカード積んでる奴は、PCゲームするな! 以上!
最強のビデオカードは、PowerVRで決まり! 以上!
逆だろう。 古いビデオカード積んでるやつは初めからエロゲーしかやらん。 同人ゲームやるような奴等はマシンスペックもそれなりだよ。 TNT128なんて世代的にPentiunIIとかの時代じゃねーの? とりあえず表示できるように作ったとしてもCPUが悲鳴あげるだろ。
古PCサポートを頑張るコストってなんか無駄っぽいんだよなあ んん、、ここって超初心者用スレじゃねえか 失礼
>>400 最高のゲームはバーチャロンOMGで決まりですかw
>>403 うむ。同梱されてるしな
最近ベーマガの一ページ目に見開きで広告だしたりと
がんばってるから、これから普及すること間違いなし
画像の表示 これが一体どういう事をやってんのか全然分からない 画像を表示するだけなのに、何で、こんなややこしいのか・・ 誰か分かり易く説明しておくれ!
>>405 俺、DirectXは詳しくないから画像データ形式に関してのみ。
昔はVRAMの内容をそのまんまファイルに落とすようなこともやってた。
これならファイルの内容をVRAMにコピペするだけだから表示は超簡単だった。
しかし・・・
↓
アホ、お前のマシンじゃそれでよくても俺のマシンじゃ表示できねぇよ、馬鹿!
↓
そこで環境非依存ビットマップ DIB(DeviceIndepenedntBitmap)という考えがでてくる。
さらに・・・
↓
アホ、ネットワーク上でそんな生データのっけんな!
そのデータ落とすのにいくら通信費と時間がかかると思ってんだよ、馬鹿!
↓
で、圧縮するのが当然になる。
↓
環境非依存で圧縮されたデータ形式である gif, jpeg, png が主流となる。←いまここ。
↑
圧縮されたデータを解凍せにゃならんし、さらに解凍したデータを自分の環境に合わせた
データ形式に変換しなきゃならんのでこれはとっても表示に手間がかかる。
全然違うところが凄い。
>>406 お前にプログラムの才能はないが詐欺師の才能は十分にある。
期待しているぞ。
>>408 それはつまり、IT土方じゃなくてITコンサルをやれってことか?
D3DXはJPEG2000の読み込みには対応してますか?
なんで試さないの?
??? 対応していれば、試したいと思いますが…
??? 試せば、対応してるかどうかわかると思いますが…
対応していました ありがとうございました
>>406 ちょっと聞きたい事と違ったけど
解りやすい説明ありがとうございますw
ややこしくなってる原因はだいたいそういう事なんですね
聞きたかったことはDirectXの表示の話じゃないの? 表示にテクスチャ使うようになっただけだろ
DirectAudioでWAVの再生をしようと思ったんだけど、 DirectMusicとDirectSoundどっちを使った方がいいの? コードを見る限り、DirectMusicの方が簡単そうなんだけど、 だったらなんてDirectSoundが存在するのかわからない・・・
>>418 歴史的な理由じゃなかったっけか
気にせず簡単な方つかっとけよ
>>418 ヘルプの機能比較見てみると良いよ。
でも、DirectXのSound系の将来は・・・・
うわあああああDirectX10使えねええええええ
どうせ3DオーディオならCreative一択だしALchemy正式版も出たから問題ないだろ なんでMSがここまでオーディオ周りを退化ばっかさせてるのかは疑問だが
10年も前の仕様が現状にそぐわないから切り捨てただけ。 サウンド機能が無くなるわけではなく、今はXAudio2という次世代の APIの準備期間だよ。
グラフィックに比べるとサウンドは環境そろえてるやつが少ないからなー 5.1chの環境揃えたって普通の人は結局ヘッドホンでゲームやる事になるし。
429 :
デフォルトの名無しさん :2007/06/22(金) 20:12:15
質問です。 カメラの注視をAモデルにあわせているのですが Aモデルを中心にカメラを回転させた後、普通カメラが正面に向いている方向に モデルは進むものですが、自分の場合カメラを回転させた後、Aモデルへその回転量の計算が うまくいってないらしく、回転させたカメラの正面に進んでくれません atan2やらいろいろ試行錯誤しましたが、よろしければ正しい計算式やコードを教えてくださいm(_ _)m
>>429 何言ってんのかわかんねえ・・・。
LookAtじゃ駄目なん?
( ゚д゚) 普通カメラが正面に向いている方向にモデルは進むものですが (つд⊂)ゴシゴシ 普通カメラ _, ._ (;゚ Д゚)
432 :
デフォルトの名無しさん :2007/06/22(金) 21:37:21
>>430 自分でもわかりにくい文章と思いますw
普通はカメラが正面に向いている方向にモデルは進むと思います
自分の場合カメラを何度回転させてもモデルはカメラの正面進んでくれず
当然Atはモデルの座標を入れているので、たとえば90度回転させたら
横滑りみたいに移動してしまうんです・・・・。
>>432 馬鹿にするわけじゃないけど
どっかの入門書サイト一通りやってこないと駄目だと思う
ベクトルとか行列とか理解しなきゃなにも教えられないってのがホントのところ
ここに動くコード貼るにはでかいし
要点だけ貼っても理解できないと思う
>普通はカメラが正面に向いている方向にモデルは進むと思います まずこれが分からない これだと画面内のオブジェクトが全部カメラから遠ざかっていくってことだよな それって普通なのか????
>>429 View行列の第三列がカメラのZ軸になってるから
これをモデルの速度の単位ベクトルにすればよろし。
ただし左手座標系を使ってるとき(D3DXの関数だとLHってつく奴ね)は
Viewの段階でZ軸が反転されているから気をつけよう。
436 :
デフォルトの名無しさん :2007/06/22(金) 22:15:04
>>434 わかりにくくてすみませんTT
>>435 本当にありがとうございますm(__)m
早速ためしてみます
要は三人称視点のことね。 D3DXMatrixInverse(&matPose, NULL, &matView); で、カメラの姿勢行列求めて D3DXVec3TransformNormal(&forward, &D3DXVECTOR3(0,0,1), &matPose); で、カメラの前方向ベクトルが求まるわね。これをXZ平面に平行にしたい場合は forward.y = 0; D3DXVec3Normalize(&forward, &forward); ね。 (0,0,1) を (1,0,0) とか (-1,0,0) にすればカニ歩きベクトルね。
>>437 それは単に
>>435 の処理は回りくどくやってるだけでは?
ビュー行列はよっぽど変なことしない限り正規直交基底しか使わないんだから、
わざわざ逆行列求めたり単位ベクトルを変換したりする必要はないだろう
俺としてはビュー行列から求めるよりは、モデル位置からカメラ位置を 引く方がいいな。
441 :
429 :2007/06/23(土) 17:20:38
結局できませんでした;; 親身になって教えてくださってありがとうございます どうやら行列やベクトルの学習が足りないようですので しばらくプログラムのことは忘れて数学に取り組みますよ
誰だって最初はそんなもん
最後はどんなもんですか?
諦めたもんが最後です
線形代数なんて、授業全部さぼって他のにもかかわらず、 テスト前日に勉強しただけで満点とれたくらい簡単。
へぇ
ほぉ
>>445 中学か高校レベルだったらそんなもんでしょ
結局3Dに使う線形なんてよっぽど手の込んだことしない限りはその程度の範囲でしか使わないし
大学で7自由度アームの研究をやってた時は逆行列にイライラしまくってた
「腕には一自由度の冗長性があるのです。」 って先生が手の平を机に付けたまま肘をくいくいと動かしながら言ってた。 でも7自由度の系のヤコビアンを手計算で求める根気は俺にはない。
クォータニオンからZXY回転させた時の3軸の角度って取れないんだっけ? クォータニオンAをZ軸に720度回転させる時の回転のクォータニオンって作れないような気がするんだけど・・・。
>>451 結果的に同じ姿勢になる回転同士は、同一のクオータニオンで表される。
なんで720度の回転を表すクオータニオンは単位クオータニオンなのです。
アニメーションツールとかで回転のキーをクォータニオンで持つことは出来ないって事なのね。 てことはXファイルはどうやって360以上の回転を・・・?
>>453 ん?どう解釈してそのような結論になったんだ?
0Frame目に z0 x0 y0 の状態で60Frame目に z720 x0 y0 って状態になるとして、 回転の成分を3軸の角度じゃなくをクォータニオンで持ってたら再現できないって事かな、と。
再現できるようにキーを配置しろよ。
>>456 アニメツール側で回転を何で保持するかはツールによるだろうがそれはさておき、
例えば2回転(720度分)するアニメーションであれば、キーを次のように配置しとけば
あとはキー間をSlerpすればクオータニオンだけで完結できる
・単位クオータニオン、120度回転するクオータニオン、240度(以下同)、単位、120度、240度、単位
例えば、の話ね。
オイラー角で表すとすればこの回転によって0→720とパラメータが変化するわけだが、
>>452 でも書いたように結果的に同じ姿勢を表すクオータニオンは同一なので、
回転前と回転後のクオータニオンが同一であるのはおかしなことではない。
キーの配置なんかモデリングソフトでアニメーションの一つでも作れば分かりそうなものだが、 プログラム云々以前にそのぐらいやってみればいいのに。
そうなんか・・・俺モデラー使ったことないわ
Lightwaveで0フレームの0度から60フレームの360度の回転でキーフレームだけ出力したXファイルは再生しても見事に回らなかった。 出力のSamplingを10フレーム単位にして出力したらちゃんと回ったけど。 アニメーションソフトのようなものはキーは3軸の角度で持たないとダメって事なのね。
だからそれはキーの置き方が悪いんだって。
ワロタ ゆとりの社会進出もいよいよ深刻っぽいなw
すまん
いや、こちらこそ言い過ぎた
Lightwave上で作ってると0の次のキーに720とか入力しても普通に再生されるから気にしたことなかったんだよ・・・ Xファイルにしたときに回転がクォータニオンで出力される事を考えながらデータなんて作ってなかったし。 ようはクォータニオン化しても正しく再生されるように途中補間用のキーを置けって事でしょ。
>.461 その実験結果から「キーは3軸の角度で持たないとダメ」という結論が何故得られるのかが よく分からないんだけど・・・ その現象はキー間隔の違いに起因するものであって、これは オイラー角であろうとクオータニオンであろうと注意すべきことに変わりはないよ
>>467 まあそういうことだね。
LWとDirectXでは、回転の表し方も回転の補間方法も全く異なるから、
できるだけ細かくキーを打つか予め補間したキーを挿入してエキスポートするのがいい。
ファイルサイズとのトレードオフになるけどね・・
471 :
デフォルトの名無しさん :2007/06/25(月) 18:10:59
うぅ〜3人称視点マジわからん〜〜 誰かヒントおせぇ〜〜てぇ〜
>>471 いきなり三人称視点とか言われても、
何が分からないのか全く分からない。
カメラと操作キャラの座標別々にするだけじゃないの
474 :
471 :2007/06/25(月) 18:19:36
スレ汚し真にすまん
解決した・・・
>>437 本当にありがとう・・・
まだ内容は理解していないがコピペして俺のプログラムで通るようにしたら
うまくいった・・・
いまからなにをやっているのか解明して習得します
>>474 まあ理屈を理解するには
>>437 が分かりやすいかもしれんが、
これは
>>435 が言ってることを無駄にややこしくやっているだけ。
今回の場合は全然問題にはならないが、
特に逆行列を求める処理は他に比べてかなり重いことを一応頭に入れておく事。
カメラの視点変更にはヨーピッチロールとか使ってる(´・ω・`)
478 :
471 :2007/06/25(月) 19:08:39
パポタの移動を参考にやってました 3日くらい涙目で試行錯誤して、ベクトルの本まで買ったがその数分後に解けるとは・・・ でもカメラ視点制御ってかなり初級なんですよね・・・はぁ・・・
479 :
yd :2007/06/25(月) 19:34:31
円上に点を64個均等におきたいいですけどどうしたらよいでしょう?
for (int i = 0; i < 64; i++) 点を配置( cos( i * D3DX_PI / 32), sin( i * D3DX_PI / 32) );
479じゃないけど 「球面」上に、「出来るだけ均等に」点を配置したいのですが、どうしたらよいでしょう?
>>482 x,y,zそれぞれ-1から1まで一様乱数でふる。
そうすると各軸-1から1までの空間内に均等に散らばるはず。
ここで、中心から半径1の球の中に入っていれば、
その方向と球の交わる点を使う。
球の中に入っていなければ、入るまで繰り返す。
484 :
483 :2007/06/26(火) 17:07:33
って、乱数じゃなくてNという決められた数字に対して
なるべく均等な配置をしたいということか、すまん。
>>483 は忘れてくれ。
正多面体なら自明だと思うけど、最大で20だからなぁ。
正多面体じゃない奴で
>>482 の希望を満たすような図形ってあるんだっけ?
486 :
デフォルトの名無しさん :2007/06/26(火) 17:16:46
3dsMaxで作成したアニメーション(Bipedを利用したキャラクタアニメーション)をXファイルに出力し、 DirectXを用いて読み込みたいのですが、上手くいきません。 現在、PandaDirectXMaxExporteというプラグインを用いてXファイルを作成しています。 いろいろ調べて見たところ、Xファイル中のframe情報やMesh情報に名前が付かない (conv3dsを用いた場合は名前が付く、しかし、オプションを指定しても、アニメーション情報が正しく 入らない)ことが原因のようです。 PandaDirectXMaxExporteを使って作成したXファイルをDirectXViewerを用いて開いてもエラーとなります。 PandaDirectXMaxExporteを用いてアニメーション付きXファイルを作成し、DirectXを用いて読み込む方法 を教えてください。
>>483-484 サンクスです
点をひたすらランダムに発生させるのであれば、
たしかに言われたとおりの方法でほぼ均等に発生させることができますね・・
>>485 はい、「正確に均等に」配置するのは最大でも20が限度なのは分かっています
>>482 は「出来るだけ均等に」っていう言葉自体が少々あいまいかもしれないですね・・
>>487 量子化学の分野で使われてる Lebedev grid とかはどうなのかな?
正二十面体の各面を正三角形で分割して、 それを頂点が球面上に置かれるように膨らませた感じ? >Geodesic sphere
491 :
デフォルトの名無しさん :2007/06/26(火) 19:59:32
メタセコでモデル作って動かしてるんですが 親子関係ってどうやって関連付けてます?
・IDirect3DTexture9からカラーフォーマット(D3DFORMAT)取得するにはどうするんですか? ・D3DXCreateCubeTextureで空のキューブマップ作った後 どうやって各面にテクスチャを設定するんですか? LPDIRECT3DTEXTURE9 tex->GetSurfaceLevel LPDIRECT3DCUBETEXTURE9 cubetex->GetCubeMapSurface して、サーフェイスをCOPYするんですか?
>>492 ・IDirect3DTexture9からカラーフォーマット(D3DFORMAT)取得するにはどうするんですか?
IDirect3DTexture9::GetLevelDesc → D3DSURFACE_DESC :: Format
・D3DXCreateCubeTextureで空のキューブマップ作った後
どうやって各面にテクスチャを設定するんですか?
IDirect3DCubeTexture9::LockRect して書き込み。
これはキューブでない単なるテクスチャでも同じ。
画像ファイルからテクスチャを作ってくれるD3DXの関数も、内部では同じことをやってる。
分からないのか分かれないのか
これだけ潤沢ににキーワードを提示されても何も調べられないんだとしたら、 速攻でプログラミングから足を洗った方がいいな
毎度思うんだけど質問スレでそういう事言うなよ・・・ もっとマターリいこうぜ
限ります。
いいからさっさと答え教えろよ
もう、あれ 回答者のレスがよくわからなかったら どこがどうわからないのかしつこく聞かないと駄目なところまできてる ・具体的にいうと〜がわかりません ・いま〜という認識で止まってます ・〜と考えていたのですが、〜な回答を貰ったので混乱しています とか色々返してみれ!
>>492 の質問の仕方に対しては
>>493 が限度だろ。
手順を逐一説明してたら膨大なレス数になる
ここに限った話じゃないが、具体的な回答を求めるなら、具体的に質問を書け。
つまり「分からないところが分かりません」というヤツだな
質問に具体性が無いのに返信には具体性を求めてる、という矛盾に気付かないヤツだ
507 :
492 :2007/06/28(木) 22:08:34
まあ自演なりすましは気にせずに
質問してもい
質問してこい!
カエレ!
Managed Direct Xで2Dのグラフかこうとトライしてます で一部マスクしてかきたいなと思ってぐぐってみたらステンシル?を使うってことみたいなんですが・・・ で・・・よくわかりません どーやってつかうんでしょ? どーやってマスク設定してどーやって描画したらいいんでしょ?
あ〜やってマスク設定してこーやって描画したらいいんじゃないかな?
ステンシルバッファをロックしてバッファに直接書き込むか ステンシルバッファをレンダーターゲットにしてポリゴンを書く等。
>>514 Lockableなステンシルバッファって作れる?
D3Dだとつくれないんじゃん
517 :
514 :2007/06/30(土) 10:39:43
あ、そうか。適当に書いた。すまん。
>>512 わざわざステンシル使わなくても、Zバッファでも一応できるわね。
隠したい部分を、sz=0.0のポリゴンで先に描画しておけば、
後で描くポリゴンが隠れるわけね。
CustomVertex.Transformed[] maskVertices = new CustomVertex.Transformed[3];
maskVertices[0].Position = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
maskVertices[1].Position = new Vector4(640.0f, 0.0f, 0.0f, 1.0f);
maskVertices[2].Position = new Vector4(640.0f, 480.0f, 0.0f, 1.0f);
device.RenderState.ColorWriteEnable = 0x0;
device.VertexFormat = CustomVertex.Transformed.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, maskVertices);
device.RenderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha;
凝った形のマスクにしたかったら抜きありテクスチャ張ってね。
アルファ値を使うことをすっ飛ばしているような気が
520 :
デフォルトの名無しさん :2007/06/30(土) 15:57:30
DirectShowを用いてmpgファイルを再生しているのですが、上手くいかない点があるので教えてください。 今、IVideoWindowインタフェースを用いて、ゲームのメインウインドウの子ウインドウを作成し、そこに mpgファイルを再生しています。 mpgファイルの終わりまで再生するためにWaitForCompletionを使用しています。 上記のようにmpgの再生を行った場合、再生中のウインドウが他のウインドウに隠されたとき、 再生画面が真っ黒になってしまいます。しばらくするとゲームのメイン画面になるため、画面は 真っ黒でも再生状態になっているようです。 同じプログラムでaviファイルを再生させたときは上手くいきます。 DirectShowを用いて、mpgファイルを再生させたとき、他のウインドウに隠されても 影響のないようにするためには、どうすればよいのですか?
521 :
デフォルトの名無しさん :2007/06/30(土) 21:50:42
2chで、質問したとき、他のスレで似たような質問しても ばれないようにするためには、どうすればよいのですか?
お前には無理。
他のスレで質問しても意味ないぞ。 大体みんな似たようなスレ巡回してるからな。
まぁ、マルチは消えろってことで。
>>521 それをこのスレ聞く時点で間違ってるw
スレごとに合った内容を質問すれば良い
プログラムって一つの目的に対して一つの方法しかないって事はあんまり無いお
すまんね。他のスレはあまり見ていないんだ
くすだれスレしか見ないのか・・
くすだれ くすだれ くすだれ くすだれ くすだれ くすだれ くすだれ
くすっ
くすだれw
だれ?
暇が出来たのでゲームを作ってみようと思ったんだけど いきなり作るのは無理なのでまずは使いまわせる骨組みを組んでから 2Dでテトリスでも作ろうかと思ってます。 前提 ・DirectXについては全くといっていいほど知らない ・1年前にC++でOpenGLのオブジェクトを無制限に読み込める ウォークスルーを作成。以後触ってない ・C++はクラスが何とか使える程度の知識。継承とかは知らない ・とりあえずDirectX9で作るつもり 上の条件で ウィンドウ(全画面、ウィンドウモード切替) 描画ループ作成 音鳴らす、画像を表示する、動かす 入力系統を作る コンフィグを作る。 アニメーションを作る、衝突判定を作る という感じでゲームの骨の部分を作りたいのですが、 いい解説サイトか本があったら教えてください。 ぐぐっても8以前のサイトか3Dの部分だけ延々と語ってるサイトしかでてこない
> 継承とかは知らない
*まずは、単なる白い四角でも何でもいいから、とにかく画面に何か表示できるようにする。 プログラムが汚いとかやり方が一般的かどうか分からんとかはとりあえず今は置いとく。 表示させる手段は一つとは限らないから、ネットや書籍でそれっぽいやり方を見つけたら とりあえず何か書いてみる。 *表示した豆腐をキーボードでもマウスでも何でもいいから、とにかく動かせるようにする。 以下同文 *豆腐の他に納豆でもオムレツでも何でもいいから、同時に複数の物体を表示できるようにする。 *当たり判定つけたりオムレツに納豆をはさんだり何でもいいから、いろいろできるようにする。 ここまで出来ればプロへの山も4%は登り切ったも当然
オブジェクトってフレーム毎に更新されるのが保障されてるじゃない? フレーム毎の処理は入力取得→更新された入力を踏まえた処理→出力の流れで デバイスに関するオブジェクトもゲーム内オブジェクトも全部同じように扱えるはずじゃない? だからそれらを一括して管理できないかなぁと色々やってるうちに日が暮れて中々進めない 俺、頭悪い人間だから直接ループでswitch分岐とか使ってガリガリ書いていくとすぐ把握できなくなるしね…
チラシの裏に書いてろ
正解なんてねーよ
>>535 thx
Cではゲームは作ったことないが
キーボードで動かせるウォークスルーはある。
といってもカメラを動かすだけで当たり判定すらなかった
から大したことはしてないけど
>>541 動かす仕組みは同じだ
どのキーが押されたか判断して処理をさせる
とりあえずじゃなく移動・描画がちゃんと出来れば後は
適当に発想の組み合わせである程度のものは作れる
ID3DXConstantTable::GetSamplerIndex のパラメータには何を指定するんですか? IDirect3DDevice9::SetTextureにこのメソッドの戻り値指定すれば テクスチャがシェーダーに設定できるんでしょうか。
つい最近、DirectXを始めたものです。 言語はVB、開発環境はVS2005、OSはvista とりあえず、DirectXの入門本を購入し、3Dの箱を表示させるまではできたのですが、それを他の人のPCで動かしてもらうとエラーが出て動かないらしいのです。 エラー内容は「グローバルアセンブリキャッシュにアセンブリMicrosoft.DirectX.Direct3Dバージョン1.0.2902.0をインストールする必要があります。」というものです。 私の家のPCでは動きます。(XPとvista、XPはVB2005エクスプレスが入ってます) ちなみに、その動かない人のPCにはDirectX9.0cが入っているそうです。 私のビルド方法が悪いのでしょうか? VS2005はインストールしてから、設定などは触っていません。
エラーの通りだろ。 何の疑問点があるんだ?
DirectX 9.0cは色々バージョンあるんだよ。 2007 Aprilとか2007 Juneとか。 自分の使ってるSDKと同じバージョンの再配布パッケージを入れれば動くと思う。
547 :
デフォルトの名無しさん :2007/07/11(水) 15:59:43
>>545 >>546 そういうことだったのですね・・・。
解決いたしました。ありがとうございました。
549 :
543 :2007/07/11(水) 23:14:55
GetSamplerIndexでググっても1件しか出ないんですが これどうやって使うんですか?
550 :
543 :2007/07/11(水) 23:15:53
サンプラのハンドルなんかどこから持ってくるねん!!
D3DXHANDLEつっこめばいいじゃないの?
つかテクスチャID3DDevice9::SetTexture()して HLSL内でそれ引っ張ってくればいいだけなんじゃねぇの?
>>549 GetSamplerIndexの戻り値はSetTextureやSetSamplerStateのステージ序数に対応してんのよ。
HLSLのサンプラ定数は宣言順にレジスタが割り当てられる保障はなくて、
HLSL側のサンプラ定数とDirect3Dデバイスに渡すテクスチャ等との対応をとるためのメソッドなんだよ。
でもHLSLはサンプラ定数に任意のレジスタを指定できるから、ほとんど使う場面はねぇんだなこれが。
それで・・・どうやって使うんですか? GetConstantByNameしたのをGetSamplerIndexに渡して SetTextureじゃない?
それでいいんだよ・・・って、なんか勘違いしてそうだなぁ。 逆に聞くけど、なんでそんなにGetSamplerIndexが気になるの? つーか何がしたいの? 上にも書いたけどHLSL側でサンプラ定数のレジスタ指定できるから FXComposer的なツールを作るのでもなければ、基本的に忘れていいメソッドだぞこれ。
Win32アプリで動くDirectSoundの適当に作ったサンプルがコンソールアプリではビルド・実行はできるのですが音がなりません もしかしてコンソールではDirectSoundは使えないのでしょうか? ソースはどちらもDirectSoundの処理部分はまったく同じです。
自分でウインドウがアクティブじゃないと音が鳴らないようにしていしているだけだろ。 自らがやっていることを他のせいにするな。
558 :
549 :2007/07/15(日) 18:35:34
HLSLで設定した名前から サンプラにテクスチャを割り当てたいです。 >上にも書いたけどHLSL側でサンプラ定数のレジスタ指定できるから これでおk? sampler Environment : register(s0); 〜 IDirect3DDevice9::SetTexture(0,pTexture);
559 :
549 :2007/07/15(日) 18:36:44
>それでいいんだよ・・・って、なんか勘違いしてそうだなぁ。
って事は、
>>554 の方法も可能なんですね。
>558-559 おけーです。 まぁどちらの方法で管理するかはお好みでってことで。
9.0c以降をインストールしたいんですが ネットに繋いでないとインストールできないんでしたっけ? 今ネット環境があぼんしてるのでネットカフェでCDにでもexeを保存して 家でインストールしたいんですが。
562 :
デフォルトの名無しさん :2007/07/16(月) 18:08:01
SDK?それとも、ランタイムライブラリ? 双方とも、ネット接続なしでインストールできる配布パッケージがあります。 ランタイムライブラリの方は、web版じゃない方(サイズが小さくない方)を選んでください
そもそも既に入っているのに入れようとする馬鹿が多すぎる。 サービスパックに何が含まれているかぐらい開発者なら確認するのが当たり前だろう。
日本語だとダウンロード場所にないから困る ('A`)なにこの 糞サイト
質問です D3DERR_NOTAVAILABLEってエラーが出た場合、その環境は切り捨てるしかないんですかね DelphiのQuadrupleDってコンポーネントでやってるんで 具体的に何がまずくて出てるかは分からないんですが
SDK入れてるんならDirectXコンパネでデバッグランタイムにすると 何か情報得られるかもね。
すいません質問させてください。 二種類のXファイルを表示したいのですが、うまくいきません。 具体的には背景と、キャラクターです。 D3DXLoadMeshFromX(_T("back01.x")1のように、一種類のXファイルを表示させることはできるのですが 複数になるとわかりません。
まずはD3DXに頼るのをやめて自前で描画することから始めましょう。
【派遣ネガティブ根性チェック】 3つ以上、チェックがつけばアナタの性格はひん曲がっており、 ネガティブ負け組派遣人生を歩んでいます。 □派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □仕様とは正社員から口伝されるものだ □耳で聞いた仕様を正確に覚えていないのは自分の責任だ □昼食は必ず派遣先の社員と行くべきだ □自分の仕事で問題が発生しても解決するのは派遣の仕事ではない □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □チビは派遣先にかわいがってもらいやすいから派遣には有利だ
ManagedDirectXを用いてC#を使って書いています。 コンパイラはVS2005です。 XVIDコーデックのaviファイルを再生したいのですが、その方法が分かりませんでした。 AudioVideoPlaybackを使えば良いかと思い、 AudioVideoPlayback.Video video = new Video("hoge.avi") ; video.Play() ; と書いてみたのですが、初期化の時点でDirectXExceptionが発生してしまいます。 良い方法がありましたら、御教授ください。
571 :
デフォルトの名無しさん :2007/07/26(木) 13:58:49
DirectX End-User Runtimes をダウンロードしたのですが インストールするにはファイルの中のDXSETUPを起動させればいいんですよね? かなり根本的なことですがプログラムの一覧にも表示されず 本当にインストールしたのか?といった感じで・・・
まずはプログラムの作成と何の関係があるのかを明確にせよ。
板違い
DirectX Sample Browserの日本語化パッチありませんか?
SampleInfo.XMLを弄ったら内容変えられそうだけど日本語通らない
サンプルの日本語化って需要あるのか
ないだろう
おまいら LPDIRECT3D9 LPDIRECT3DDEVICE9 ってどこで宣言してる? サンプル通りにグローバル変数にするとファイル分割するときに困る かといってローカル変数だと関数つくったときに引数が無駄に増えて鬱陶しい
>>578 引数で渡さないとロストしたときに引っ掻ける場所がないだろ?
それを管理しようとすると死ぬぞ
素直に引数で渡せば問題にならない
580 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 00:38:42
ラッパー作って、シングルトンのクラスに持たせる。 まあ、グローバルみたいなもんだが
>>580 それだとアクセスするたびにロスト調べて
ロストしてたら復旧するかスルーする仕組みにしないとバグるな
ロスト時完全スルーの構造にすると思いもかけない関数が動かなくてびびったりびびらなかったり
結局、引数が増える以上に面倒なもん管理しなくちゃいけないことになる
ところでなんで引数が多いことをまずいとおもうわけ?
MSの関数みた?あんなのだって普通の状態だと思うぜ
必要だからあるんだしね
引数は多くてもかまわないと思う(限度はあるだろうけどw)
Windowsの場合、引数がレジスタにのるわけじゃないから、 少ないから早くなるってわけじゃないんだっけか。
583 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 07:53:42
コンテキストを引数にしたくない理由。
たらいまわしになるから。
AからB、BからC、CからDと関数を呼んでいる場合に、Dでコンテキストが必要となったとき、
A、B、C、D全部に、引数が追加。
これが、最初から全部わかっていれば、まだいいが、
小さな関数が増えるたびに、引数に追加される。
これが、どうもいや。
たぶん、
>>581 のケースでは関係ないと思う。
別に引数を減らしたいわけじゃないです。
まあ、気にしないで。
でもベクトルを引数にするならパラメタ(二次元の位置ベクトルのパラメタx,y) を指定するんじゃなくてベクトルそのものを渡したいとか まとめられそうなパラメタ(例えばprevとnow)は1つにしたい そういう意味で引数はなるべく減らしたい
>>584 そんなの気にしてたら、しまいにゃ引数全部void*になるよ
必要なものは端折らないってのが俺のやり方だけどな
実装の手間なんかこんなところで解決するもんじゃないと思うよ俺は
階層深いったって直しても10〜20箇所でしょ?知れてるじゃん
実装よりは設計の問題かな 端折るんじゃなくて必要以上に見せないって考え 渡される側に必要な情報でも、渡す側は別に知らなくてもいい情報って結構あるでしょ? それを考慮した上でも引数が多くなるなら仕方ないって諦めてるよ
でもあくまで素人の意見だからそんな事分かってるよと思われるかもしれませんね…
>>586 だったらD3DDEVICEなんてなんで隠す必要あるの?
もろインターフェースじゃん
むしろだせよ
お前テキトーいって誤魔化してネェ?
構造体なりClassなりで渡せばいいだろ。
>>589 構造体やクラスに梱包してしまうと
今度その構造体やクラス無しでは動かないもんになるのが嫌だな
でも、中身の仕様はそんな構造体やクラスは必要無いのに実装的にそんなもんが必要になってしまうのが嫌
このクラスだけ移して別のプログラムでそのまんま使えるなら使いてぇし
なるべくそのプロジェクト特有のもんを入れたくない
汎用性全くなくなるし
って感じだな
D3DMATRIXとかD3DVECTORとか使うだけでDirectXSDKが必要になるのが鬱
592 :
デフォルトの名無しさん :2007/07/30(月) 00:53:12
全然詳しくないので質問させてください。 いつも仕事中にWebばかり見てる派遣クンが 「DirectXがプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」 と言っています。 彼のDirectXプログラムが動かないのを調べるのは誰の仕事なのでしょうか?
何度も同じネタを出しても何一つとして面白くない。
最後の文が微妙に違うな 連体格の「の」が多すぎ
実は月1で発動するスクリプトなのかな?
596 :
デフォルトの名無しさん :2007/07/30(月) 05:45:25
DirectXと派遣コピペって何が関係あるの? 単なる荒らしか? 3D関係のところが、コピペされているようだが
>>590 特化することを恐れるな。
汎用的を目的に設計されたものは、どこに行っても全く使えないものになるぞ。
>>596 派遣がDirectXの仕事すると問題が多いからじゃね?
久々に以前書いたプログラムを弄っていたらトラブったので質問させてください。 DirectInputに関してなのですが、 IDirectInputDevice8::GetCapabilities() がアクセス違反例外をはきやがります。 出力されるエラーは ReportID=1 ****.exe の 0x77e3d6ee で初回の例外が発生しました : 0xC0000005: 場所 0x00000002 を読み込み中にアクセス違反が発生しました。 。 ****.exe の 0x7c812a5b で初回の例外が発生しました : 0x00000006: ハンドルが無効です。。 の3行です。 プログラムは落ちないし、戻り値もS_OKで正常、 コントローラもちゃんと効き、ゲームも動いているのですが、どうにも気味が悪いです。 呼び出し前のDIDEVCAPSのdwSize初期化も行っています。 原因分かる方、この手の問題が起こるケースやパターンが思い付く方いらっしゃいましたらお願いします。 環境 OS: WinXP Pro CPU: CoreDuo 1.83Ghz Mem: 1Gbyte VC++2003 + DirectX9.0bSDK パッドはエレコムのPSのパッドコンバータ(JC-PS202USV)
>>599 とりあえず手元にあるパッドでデバイス作ってGetCapabilities呼んでみたけど
例外は発生してなかった。
SEHはDLL内部でちゃんと捉えて後処理されてるみたいだから
別に気にしなくていいんじゃないか
601 :
デフォルトの名無しさん :2007/07/31(火) 20:48:00
かなり久しぶりにプログラミングをしようと思うんだが、 DirectX10って6からどのくらい変わった? てかSDKどこだw
>>600 レスありがとうございます。
この例外がDLL側の問題で起きているならいいのですが、
自分が書いたコード上に問題が潜んでいるのであれば、
潜在的に今後バグが発生する危険性を抱えている事になるので、その辺が気になってます。
>>602 DirectXのサンプルで使ってるやつないの?
604 :
超初心者 :2007/07/31(火) 22:20:31
学校の製作が家でできません・・・・・・。 環境:VC++6.0 なにやらDirectXSDKをダウンロードするとかどうとかちんぷんかん・・・・・・泣 誰か助けてください。 ちなみに「ディレクトリ」で[C:\mssdk\include][c:\mssdk\Lib]と学校ではこれやって<ddraw.h>したらできたのにできない・・・・・・なぜですか?
>>603 サンプルの存在を忘れてました・・・ということで、
サンプルのActionBasic.exeを実行してみたところ
ActionBasic.exe の 0x7c812a5b で初回の例外が発生しました : Microsoft C++ exception: MapException @ 0x0012ee7c。
ActionBasic.exe の 0x7c812a5b で初回の例外が発生しました : Microsoft C++ exception: MapException @ 0x0012ee80。
例外のメッセージこそ違うものの、2つの例外が発生。
どうやら例外は無視して良いみたいですね。ありがとうございました。
>>604 DirectXSDK を入れればいい
これで分からんならPCの勉強しろ…
九九が分からないのに微積を教えろって言ってるようなレベルだぞそれ…。
違うな、漢字の読み方が判らないのに朗読の仕方を教えろと言うようなもんだ。
割り算を知らないのに合同式教えろって言ってるようなもんだ
知りもしないものを説明出来る奴がいたとしたらそいつは詐欺師の才能がある。
DirectDrawって消えたのかw
612 :
yd :2007/08/01(水) 22:07:05
化石人類現る
613 :
デフォルトの名無しさん :2007/08/03(金) 00:50:58
夏厨からの質問ですorz エロゲを買ったところディスクを入れても反応しなかったので 調べたところ、グラフィックデバイスメモリが64MB以上必要だと書いてあった のでDirectX診断ツールのデバイスのメモリ合計を見ると16MBで足りてなかった のですがこれ増やす事って可能なんですか?やり方教えてください!
要求を満たす新しいグラフィックカードを買うだけ。
ここはプログラム板
つまり意訳すると・・・、 GPUのVRAMを、メインメモリ使って仮想メモリ化したものを作ろうとしているんだけど、良いアイデアない? って事かw
618 :
613 :2007/08/03(金) 03:34:18
そういうことです! どうかよろしくお願いします!
グラボの開発お疲れ様です。
>>617 は?まったく理解できない
何いってんの?
自分でプログラムを組んでいるのなら、節約して利用するだけ。 他人のプログラムなら板違い。 それ以上でもそれ以下でもない。
622 :
デフォルトの名無しさん :2007/08/03(金) 15:43:32
いた違いさらしage
デバドラ組めばいいだけだろ?
増やす方法は確かあったよなってこの板じゃ無理か
Xファイルについて質問です。 よくXファイルはフォーマットが洗練されていないということで D3DXで読み込めるものと完全には読めないものがあるとききますが、 D3DXで完全に読めるように正規化させるツールとかはないのでしょうか?
例外フォーマットを完全に捕らえられるツールってそれどこの魔法のアイテム? 読み込めないのは世の中のエクスポータが腐ってるのが多いってだけで Xファイルの不出来とはあんま関係ないよ。
Xはただのコンテナなんだから、エクスポータが拡張データを入れた場合、 D3DXに頼らず自分で読み込む必用がある。 というか、読み込み部分ぐらい自分で作れよ。
過去の遺産DirectDrawについてなんだけど、 今MFCで画像ビューアつくろうとしてて、(ウィンドウモードで) 各画像が8ビットグレー階調だったり24ビットRGBだったりするので、 bmpファイル読み込んだとき、ビット数をチェックして、 プライマリサーフェイス作成時のDDSURFACEDESC構造体で DDSURFACEDESC ddsd; ddsd.dwSize=sizeof(DDSURFACEDESC); ddsd.dwFlags=DDSD_CAPS | DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE; ddsd.ddpfPixelFormat.dwflag=DDPF_PALETTEINDEXED8←8ビットグレーの場合 ってやってCreateSurfaceってやるとプライマリサーフェイス作成時に失敗する。 もしかしてプライマリサーフェイスに任意にddpfPixelFormatを設定することはできない?
>>628 この時期そんなもん使ってるならその辺もろもろ自分でなんとかしろといいたくなる
初心者スレだから手段を間違ってるかもしらんからあえて聞くけど
DirectDrawなんてなんで使ってるの?
一応動くけど情報なんてほとんど無い状態なんだけど?
その辺の不具合を全部理解しててなお使うっていうならもう初心者じゃないので
別のスレいって叩かれてこいw
>>628 ウィンドウモードのプライマリはディスプレイと同じじゃないとダメだったような。
バックバッファに作ってから、Lockしてピクセルを手動で変換がいいんではないか?
正直忘れた。
そんなんならDIB使え。
>>628 MFCで画像ビューワ程度ならGDIで作ったほうがいいよ〜
DirectX 10で作ったプログラムを9で動かすのは簡単でしょうか? 逆に9で作ったものを10で動かす場合に注意すべきと事かありますか?
まずは簡単の定義を明確に示せ。
ブルワーカーくらいの簡単さでお願いします。
>>634 やり方は簡単でも続けるのが難しいところは変わらんなw
636 :
デフォルトの名無しさん :2007/08/11(土) 13:30:16
すみません質問です。 ウインドウモードで三角ポリゴンを20枚を画面に表示してるんですが、 IDirect3DDevice9::Presentが25msも掛かります。 ちなみにPresentationIntervalはD3DPRESENT_INTERVAL_IMMEDIATEにして、 垂直帰線間隔を待たないようにしています。 どうしてこんなに遅いのか原因がまったく分かりません。
あれじゃね。 MatrixG200つかってるとか。
リファレンスラスタライザとか?
>>636 まあせめて環境書いてもらわないと何とも言えないんだけど、
D3DPRESENT_INTERVAL_IMMEDIATEってすぐに戻るとは限らないよ。
Direct3D 9世代だと、画面のフリップは最大3回までしかキューイングできないことになってるので、
既に3回分キューされてると1回フリップされるまで待たされる。
まあそこまで高度な話じゃなくてしょぼいミスとかヘンテコハードの可能性の方が高い気がするけどナー
640 :
636 :2007/08/11(土) 14:37:57
一応デバイスはHALで頂点処理もハードウェア処理で動いてます。 ですがものすごく重いです、FPSは40前後しか出ません。 アプリケーションウィザードの急須はちゃんと表示されてD3DPRESENT_INTERVAL_ONEで FPSもちゃんと60出てました。 すみません肝心な環境を書いていませんでした。 PCは2002年に購入したノートです。 CPU Intel PentiumIII Mobile 1000MHz メモリ512MB グラフィックはオンボードの ATI Rage Mobility-M6C VRAM 8MB 画面 1024*768 (16bit) (60Hz) DirectX9.0c 2日間何度も見直したのですが原因が突き止められず悩んでいる状態です。
そりゃあんたのソースがどっかおかしいだけだろ・・・
テクスチャを何枚も使っててVRAMが足りてないとか。
>>640 三角ポリゴンを20枚ってのが常識的なサイズと常識的な実装なら
その環境でも60FPSぐらいは出るはずかな。
どこかヘマしてるような気はする。
2日悩んで分からなかったってことは多分3日悩んでも4日悩んでも
あんまり変わらんかもね。
かといって掲示板にエスパー期待する方がもっと確率低いけど。
2日バイトしてバイト代を使って誰かにデバッグしてもらうとかどうなん?
最近Q&Aサイトとかでポイントをやりとりできるところあるじゃん。
VRAMオーバーしてないと思うんですけど。 ウインドウサイズは640*480で、使用しているテクスチャは256*256が3枚だけです。 それと深度バッファーをバックバッファー以外にテクスチャと同じサイズと枚数で作成して持っています。 最初は(今でも)自分のソースを疑ったんですが、IDirect3DDevice9::Presentだけをコメントアウトして 5ms間隔にしたらちゃんと200FPSでていました。 深度バッファの切り替えをヘルプをみながら初めて組んだのでこのあたりが疑わしいのですが、 たったポリゴン20枚で遅くなるとも考えられないので。
グダグダ言わずにとっとと再現性のあるソースを出せよ。
ソース出せばとっくに解決してるかもしれない程度の話なのに、 なぜそこまでソースを出し渋るのか。
説明が抽象的すぎるんで、答える方も
>>641 みたいな抽象的なことしか言えない。
問題が再現する最低限のコード(ミニマムコード)を提示してみては?
すみません、今日は疲れたのでもう休みます。 できれば明後日にでも問題箇所のコード載せますので、そのときはよろしくお願いします。 皆さんアドバイスありがとうございました。
こんな時間に疲れたとか言っちゃえる奴はもう来なくて良いよ。
>>648 お前みたいな奴はプログラム向いてないと思うよ。
そんな糞コードアップしたって誰もみねーよ馬鹿!
651 :
デフォルトの名無しさん :2007/08/11(土) 22:49:36
653 :
デフォルトの名無しさん :2007/08/12(日) 16:23:45
>>652 なるほど
答える方も超初心者用なのでお互い様ってことだな
質問する方も答える側が超初心者であることを心するべきと
あれ?今日ソースうpしてくれるんでないんか?
655 :
デフォルトの名無しさん :2007/08/12(日) 18:00:22
ほっとけや ソースでないから、こちらが損するわけじゃねえ
DirectXをダウンロードできません!! どうすればいいれしょうか???
できません、というからには何かやってみたと思うんだけど、それを説明してみ?
>>656 googleにDirectXって入れて検索してみろ
腕を大きく振りかぶり、数字の2を描くように、だぁぁぃれぇぇくぅぅぅとぉぉぉ!えっっっっっくっっすぅぅぅぅ!!!ってやってみたんですが ロードできませんでした(´・ω・`)
最後にコマネチみたいなポーズがいるんじゃね?
30人以上の眼前でやらないとダメなんじゃなかったっけ?
俺はニコニコ動画にアップしないと駄目って聞いたけど
ありがとう。 今日アルタ前でやってみる。
できました
665 :
デフォルトの名無しさん :2007/08/13(月) 22:50:04
DirectXって、 音楽ファイルの要所要所にマークをつけて、再生しながら、 プログラムの特定ポイントとそのマーク間で同期をとる。 なんてことできますか?
XAudio
DirectX云々以前に、プログラムを作るのは自分だということを忘れている奴が多すぎる。
プログラムを作るのは派遣クンです
既存のAPIを使わず、自分でそういうのを作れるんでしょうか? 音鳴らすのも、関数にファイルセットするだけとかじゃなくて、 もうちょっと低レベルなとこまで弄れるということですか? Javaしかやったことない上、プログラマじゃなくてミュージシャンなので、 お手柔らかにお願いします。
いじれる Java でもそれくらいはいじれる
MIDIで数値入力した方がイメージに近いんじゃないの?
DirectX9のC++の関数やフラグのリファレンスをWebから見れるサイトありませんか?
こんな基本的なことが、
>>1 とかMSのページから探してもどうしても見つからない…。
DX8とかC#のサンプルは見つけたんだけど。
674 :
デフォルトの名無しさん :2007/08/15(水) 02:01:55
次に、
>>672 は、「日本語のドキュメントをくれ」という
それは流石にないだろ・・・
DirectX9のC++の関数やフラグ
PerfKit 5.0 Installer for 32-bit Windows XP/2000 (Version 5.00.0803.1415) をインストール中にフリーズするけどおまいら大丈夫?
AudioVideoPlaybackってアルファチャンネルの設定は出来るでしょうか? 出来ない場合、どのクラスを使って実現するのが早いでしょうか? 使ってるのはDirectX9です。
それMDXじゃないの? このスレってManagedの話もOKなんだっけ?
確かにスレタイにもテンプレにも言語指定ないな 初心者であれば言語は問わない、ってことなのかな
だから専用のスレがあるんだから誘導すればいいだけだろ。 いったい何を言ってるんだ?
684 :
679 :2007/08/15(水) 18:46:05
ありがとうございました。そちらで質問します。
じゃあ、C++のDirectXだって専用スレがあるのに、 MDXは誘導して何でC++は誘導しないんだ?
ウゼェ
Managedは誘導してUnmanagedは誘導しないのなら、
スレタイか
>>1 あたりにC/C++限定なりの旨を書いておくべきでは?
現在ダウンロードセンターから落とせるSDKを一通り確認してみたのですが d3drm.hは存在するものの、d3drm.lib が見当たらず静的リンクが不能な状態です。 このlibファイルが存在するSDKというのは、どうすれば入手できるでしょうか?
DirectX8世代の前のライブラリだよねそれ。 そもそもなんでそれ使うの?
中古書籍でCD付きの物を探す Cマガジンを全号買ってる友人にCDを借りる
>Cマガジンを全号買ってる友人 こんな友人いたら国宝級だな
Cマガあの薄さであの値段だしな
過去形にしろよ
DDCOLORKEY型が宣言できないんだけど何で?
DDCOLORKEYがどこで定義されているかくらいは確認した上で聞いているんだよな?
もしやDirectX8? SetColorKeyも使えないみたいだし・・・
DD、で始まってるんだから少なくともDirectX7以前だろ
699 :
デフォルトの名無しさん :2007/08/16(木) 10:55:08
DirectDraw(笑)
Direct泥汚
701 :
695 :2007/08/16(木) 16:13:54
そのDirectDrawなんですが、 bmpファイル(24ビットフルカラー) を透過させて、かつアルファブレンドで半透明に表示したくて いろいろと調べて回ったわけです。 ですが、スプライトに透過色を与える方法が見つかりません。 なのでDirectDrawならできるんじゃないかと思ったのですが、 あれば、スプライトに透過色を指定する方法を教えてください。 お願いします。
カラーキーでパンチスルーなら出来るが半透明表示は 自分で1ピクセルずつ計算して描くしかありません。 それがDirectDrawのお力です。
DirectDraw全盛の頃は、アルファブレンドが出来ることをウリにした ライブラリが結構あったよな ソース覗いてみたらピクセルフォーマット毎に全分岐を書き下したりしてて よくやるなあと思ったわ
yanesdk2ndでも見とけばOK
705 :
695 :2007/08/16(木) 18:58:12
思い切って参考書買ったらテクスチャが原因だった; 色指定もできるし、透明度も変えれるしマンセーだ。 D3DXCreateTextureFromFileEx
>>705 >>701 とは別の人?DirectDrawなら出来るとか言ってたのに
D3D使ってるなら初めからそう書くべきだと思うが
struct THING { D3DXVECTOR3 vecPosition; }; D3DMATRIX matWorld; で、 D3DXMatrixTranslation(&matWorld,Thing[2].vecPosition.x,Thing[2].vecPosition.y,Thing[2].vecPosition.z); が error C2664: 'D3DXMatrixTranslation' : 1 番目の引数を 'D3DMATRIX *' から 'D3DXMATRIX *' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 と返されてしまうのですが、(&matWorld,Thing[2].vecPosition.x,Thing[2].vecPosition.y,Thing[2].vecPosition.z)ではいけないのでしょうか?
いけません
D3DXMATRIXを使えばいいんじゃないの
いけません
キャラクターの移動とかって、ゲームループにそのまま書くと環境によって歩く速度変わりますよね? ああいうのってどうやって固定させるんですか?
移動速度とは移動回数と移動距離を掛け算したものである つまり、時間あたりの移動回数と移動距離を固定すればよい
メインループとゲームのアップデートを切り分けるべき 例えばゲームを60FPSとするなら1秒間に60回だけメインループから アップデート関数を呼ぶという感じに作る
712の方法じゃある程度以上の大きさのゲーム作るの無理だから
問題は大きさじゃないね
問題は何の大きさを言っているかだね
いかなる大きさも問題じゃないよ
DrawPrimitiveをDrawIndexedPrimitiveに変えて同じものを描画したら フレームレートが半分くらいになった…こういうものなの?Indexedの方が速いのかと思ってた。
描画するポリゴンが少ない場合はそうなるかもね
頂点1万、インデックス2万個ぐらいなんだけど少ないかな? オンボのRadeon X1200だと30fpsぐらいしか出ない。
その程度でAPI変えてFPSが1/2ってのはおかしくないか?
SkinnedMeshのIndexedって設定とは違うんだっけ? これだとIndexのが微妙に速いんだけど?
Meshは使ってないです。 やはりおかしいのかね…。調べてみます。
そもそも、Indexだと何故速いのかを理解してないんじゃないか? GPUの頂点キャッシュは16頂点分くらいしかないから、その間に 頂点の再利用をしなかったら意味がないよ。
PS3なんて頂点キャッシュの数は・・・(ry 涙も出ない。
直接バックバッファに書き込むのと、 D3DFMT_A16B16G16R16Fで作成したテクスチャに書き込んでから、 テクスチャをバックバッファに書く(この時間は含まない)のでは、 やはり、直接バックバッファに書き込む方が速いですか? また、どれくらい違いが出るのでしょうか?
何故自分で試さないのでしょうか?
前者の方が断然速い。
常にそうとも限らんけどな まあ自分で試せばいいことだ
733 :
729 :2007/08/20(月) 11:06:24
バックバッファと同じサイズのテクスチャを用意し適当なポリゴンをたくさん描画してみたところ、 テクスチャへの描画の方がかなり遅いことが分かりました。 ども。
734 :
727 :2007/08/21(火) 01:18:38
あー、やはりダメだ速くなんないや。 DrawIndexedPrimitive( D3DPT_TRIANGLESTRIP, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount ); 最初常にMinIndexが0、NumVerticesが全頂点数になってて効率最悪だったので 実際使われているMinIndex、NumVerticesをストリップごとに求めてみたけど速度変わらず。 Indexedは頂点バッファの省メモリ化のためにやるもんで、スピードは犠牲になるってことか。
STRIPだとIndexにしても、あまり意味ないよ。 TRIANGLELISTでこそ意味がある。 短いSTRIPをたくさん描画するよりも、TRIANGLELISTで一発で 描画する方が速い場合に意味がある。 (面積0のポリゴンでSTRIPを繋いだ方が多くの場合で速いが)
勉強で3Dの格闘ゲームもどきを作成しています。 対戦直前にXファイルの3Dキャラクター2体ロードし、対戦終了後も同様してに、 また対戦を行っていると、みるみるうちにメモリが使われていきます。 おそらく何かが開放されておらず、Xファイルを重複で読み込んでいるせいだと思うのですが アプリ終了時の様にメッシュ等を「pMesh->Release();」で開放するとエラーが起こります。 結局それから何も解決できず混乱してしまい、もしかするとDirectX側で 何か方法があるのではと思ったのですが…DirectX以前の問題ですかね? 全ては書ききれないのでとりあえずメッシュ関係は以下の通り宣言しています。 DWORD numMesh; // XFile内部のメッシュの数 LPD3DXMESH pMesh; // メッシュオブジェクトへのポインタ D3DMATERIAL9 *pMaterial; // マテリア記憶用配列へのポインタ LPDIRECT3DTEXTURE9 *pTexture; // テクスチャ記憶用配列へのポインタ
>>734 SkinnedMeshのサンプル起動してみてnon-indexedとかindexedとかちょっと動かしてみてよ
>>734 プロファイラ使ってみれば分かると思うけど
DrawPrimitive系統の関数の呼び出しは重いんで、
できるだけ呼び出し回数を減らしたほうがいいよ。
360ならストリップリストもDrawIndexedPrimitiveでいけるのだがねぇ…
>>736 です。
どうやら生成の仕方に問題があったようで、
Googleさんの力をお借りして解決しました。
740 :
デフォルトの名無しさん :2007/08/22(水) 12:11:30
Xファイルのサンプルなど知りませんか?
DirectXSDKに付いてるだろう
C:\Program Files\Microsoft DirectX SDK (June 2007)\Samples\Media\*\*.x 好きなの使え
コピペだかマルチだかw Xファイルを読み込むサンプルじゃなくて、Xファイルそのもののサンプルのことだったのね・・・ そりゃ確かに板違いかもな
DirectXてのは基本的にCOMで公開されているわけですよね? VC#からCOMの参照を追加しようとしてもそれらしい名前が見つからないんです。 Managedのほうはみつかるんですけど。
タイプライブラリがないからでしょ すべてのCOMコンポーネントにタイプライブラリがあるわけじゃない
DLL呼ぶしかないの?
DX8のVB用があるでしょw
748 :
デフォルトの名無しさん :2007/08/22(水) 22:47:38
IDirect3DDevice9::Resetを呼ぶ前に 取得したものをReleaseするって聞いたんだが SpriteとかFontとかはOnLostDeviceじゃだめ? Releaseして作り直し? IDirect3DDevice9::ResetがD3DERR_INVALIDCALLを返すんだが。
テクスチャとかその他のリソースが残ってるかどうか調べろや
SpriteとFontしか使ってない
ふぉんとかなー
審議中
そもそもReset()に渡す引数がおかしい可能性もあるけどな。 そうでないなら「SpriteとFontしか使ってない」と勝手に本人が思ってるだけで 実はGet()系メソッドでなにかしら取得してるといかいうオチだろう。
考えられるな
755 :
748 :2007/08/23(木) 20:49:18
Resetの引数はあってると思う。 IDirect3DDevice9を使ってるのは スプライトとフォントの作成以外では、 SetRenderState Reset Release TestCooperativeLevel Clear BeginScene EndScene Present SetViewport くらいだぜ
Resetのパラメータはこんなかんじ。 ZeroMemory(m_pD3DPP,sizeof(D3DPRESENT_PARAMETERS)); m_pD3DPP->hDeviceWindow = hWnd; m_pD3DPP->SwapEffect = D3DSWAPEFFECT_COPY; m_pD3DPP->BackBufferCount = 1; m_pD3DPP->BackBufferWidth = 800; m_pD3DPP->BackBufferHeight = 600; m_pD3DPP->EnableAutoDepthStencil = false; m_pD3DPP->FullScreen_RefreshRateInHz = 0; m_pD3DPP->Windowed = false; m_pD3DPP->PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; m_pD3DPP->FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
ミスった m_pD3DPP->FullScreen_RefreshRateInHz = 0; は無視してくれ
つーかDirectXのデバッグレベル上げてデバッグ実行すれば詳細なログが出るだろ・・・ そっちを出せや。
そんなものがあるのか トンクス
Xファイルから読み込むんじゃなくて、自分で頂点データを与えてmeshを作成するサンプルありませんか? ぐぐったけど見つからない。
それ以前にチュートリアルはやったのか?
IDirect3DDevice9::Clearを BeginRender〜EndRenderの外側でやるのはなぜ?
765 :
デフォルトの名無しさん :2007/08/27(月) 22:17:16
ごくごく基礎的な質問かも知れんけど ->releaseっていうのはどういう風にやればいいんだろうか class A{ LPD3DXFONT m_pFont; public: HRESULT Create( .. ); void SetFont( LPD3DXFONT pFont ){ m_pFont = pFont; } LPD3DXFONT GetFont(){ return m_pFont ); .. } ; 例えば上のようなクラスを作って main() { A a1, a2; a1->Create();フォントを作成 a2->SetFont( a1->GetFont ); } こうやって同じフォントを二つのオブジェクトで使った場合、 リリースは二回やらなきゃいけなくなるの?
766 :
デフォルトの名無しさん :2007/08/27(月) 22:18:04
a2->SetFont( a1->GetFont() ); だった
アホか
768 :
デフォルトの名無しさん :2007/08/27(月) 22:22:17
当然一回ですよね すんません(;^ω^)
危険な匂いがするぜ
超初心者版だからなぁ。 普通に考えたら特に不思議な質問じゃないが。 > ->releaseっていうのはどういう風にやればいいんだろうか releaseが何をしているのかを理解すれば自ずと答えが出てくる。 調べれば沢山あるし、この程度は自分で解決できるようにするのが まず第一歩だ。
終わった話を後からのこのこやってきて、語り出す馬鹿ってなんとかならいのかね。
>>761 チュートリアル?サンプルじゃなくて?
よければどこにあるか教えてください
>>772 お前さ、ヘルプぐらい読めよ。
最低限のことすらやらないで出来ない出来ないと騒いでるんじゃねえよ。
アホも大概にしろよ。
774 :
デフォルトの名無しさん :2007/08/29(水) 01:25:13
Direct3Dを使ってフルスクリーン表示のプログラムを作りたいです。 が、GUIをつかったvisualプログラミングができません。 int main(void) のコマンドラインのCUIプログラムなら、C++できます。 Visual C++ のコンソールアプリをつくるという方法で、 DirectXを利用したプログラムは走るのでしょうか? 教えて君ですみません。
>>773 なんだお前?
ちなみにヘルプ探したけどないぞ
>>774 コンソールアプリでもウインドウを作ればいくらでも動く。
なんで聞く前に試さない?
>>775 チュートリアルに3角形を表示するサンプルがあるのさ
それってのは万物を表示する基本なのさ
お前はそれをすっとばしてるからなんもかんもわからないのさ
>>775 ヘルプという限定された中の、たったその程度のものすら探す能力がないのなら、
もうプログラムなんてやめろよ。
779 :
デフォルトの名無しさん :2007/08/29(水) 10:22:41
DirectX9のSDK入れてますが、そっから、DirectX8とか7の関数って使えるんですか?
>>779 DirectX9にはDirectX7も8も含まれていないので、それらを使うことはできません。
互換関数は使えるけどね。
781 :
デフォルトの名無しさん :2007/08/29(水) 10:55:29
_, ._ ( ゚ Д゚)
最新のSDKからヘッダファイルが消えたからムリッポ
えっ? DirectXで、以前のVerが使えなくなるなんてありえるのか? そんな劇的な仕様変更が何時の間に。
784 :
デフォルトの名無しさん :2007/08/29(水) 14:43:01
まあ名前違うだけでどうみても以前と同じ関数たくさんあるしな
>>783 SDKから消えているだけで実行においては問題ないだろ・・・
SDKとランタイムは関係ないな。
できるだけエロイDirectXSDKありますか?
788 :
デフォルトの名無しさん :2007/08/30(木) 01:22:12
どっちみち古い関数使ってもコンパイルできないってことだな
ん? SDKのバージョンあってるならDirectX3でもコンパイルできるし、実行もできるぞ
790 :
デフォルトの名無しさん :2007/08/30(木) 02:43:12
DX9SDKでDX3の関数使ってもコンパイルできないんでは?
ヘッダはあるけどライブラリはないね。 まぁ、コンパイルはできそうだな。リンクは駄目だがw
リンクできないライブラリに、意味はあるんでしょうか
もうリリースしてもいいよね?
つまりDX8で開発したい場合は最新のSDKをDLしても開発できないということなのですね SDKのバージョンが合っているかどうかはどうやって調べたら良いのでしょうか?
795 :
デフォルトの名無しさん :2007/08/30(木) 15:10:53
DX9がダウンロードできない 要求したダウンロード ファイルは利用できません。 このダウンロード ファイルにアクセスしようとしたときに、引き続きこのメッセージが表示される場合、 ダウンロードセンターのホーム ページにある [ダウンロードの検索] にアクセスしてみてください。
どこかからの直リンでダウンロードしようとしたとか?
ダウンロードしたURLすら書かない意思疎通能力のない人間が何をやっても無駄。
メッシュのサンプルみつかんねええええ。 VBとC#のはあったんだがC++のどっかにないかなあ。
>>794 普通はターゲットのバージョンのSDKをインストールするだろ・・・
SDKは自分でインストールしないと入らないんだぞ?
>>799 すみません・・Microsoftのサイトに行っても10か9か何も書いてない物しか見つからなかったので・・・
>>800 だから、旧バージョンなんかで開発するなとそういうことだw
色々苦労するぜ
ヘルプもみつかんねーし
不具合は永久に直らないし
802 :
デフォルトの名無しさん :2007/08/31(金) 09:39:42
マイクロソフトのダウンロードリンクってわかりにくいよね 名前もほんとにこれであってんのか?っていうのでリンクはってるし
試しにダウンロードまでしてみたけど、あっという間にたどり着いた。 調べたり探したりする能力が無いくせに、何でも他人のせいにする奴は、 結局何をやってもダメということだろう。
>調べたり探したりする能力が無いくせに、何でも他人のせいにする奴は、 まぁ、そういはいうがな、誰でも通る道だぞ。 ……幼稚園の頃に。
CLSIDも知らんのか
DirectXっていうがあればゲームつくれるって聞いたんですけど、 どこで打ってるんですか?
>>806 ぐぐればDLできるけど
ただの道具だよ。紙と鉛筆があればゲームを作れるって言ってるようなもんだよ
紙と鉛筆があれば小説が作れるって感じかな ただ紙と鉛筆を用意できても、小説を書き上げるには大変な労力がかかる 売れる小説を書くのはさらに大変
釣りにマジレス乙wwww
DrawPrimitiveupの中身のソースとかってないんですかね? テクスチャ貼り付けるときにどう処理されてるのか知りたいんです!
>>810 大雑把に言うと、DrawPrimitiveUPの中身はビデオカードのドライバに
指示を出すだけだぞ。
812 :
デフォルトの名無しさん :2007/09/01(土) 20:34:37
リファレンスラスタライザは?
三角形にどのようにして補完されて貼られるかって話なら ゲームプログラミングのための3Dグラフィクス数学とかに詳しく書いてあるよ あれは読みやすい
7のリファレンスラスタライザはソース公開されているけど 最近のは知らないな。
>814 うp
そのソースがどんなライセンスだか知らないけど、第三者が勝手にうpしていいものなのかね フリーだからといって再頒布可能だとは限らないし
817 :
デフォルトの名無しさん :2007/09/01(土) 22:40:19
>>816 でもお前が反対することでもないな。
権利持っていない奴が文句をいうのはおかしいと思う。
反対してるわけでもなく文句を言ってるわけでもなくただの確認だろう
うん?別に俺は何にも反対してないし文句も言ってないぞ?
821 :
デフォルトの名無しさん :2007/09/02(日) 03:13:29
「画面のプロパティ」→「設定」→「詳細設定」→「Direct3D」のとこで テクスチャ設定とミニマップ詳細レベルのとこが 毎回ハイパフォーマンスにしても再起動すると高画質になってます どうしたらいいのでしょうか?
>>811 まじですかー!
勘違いしてた!そしてソースは公開されてないんですかねやっぱり・・・
テクスチャをはれるのはわかったんですがどういうアルゴリズムではられてるのかが分からい!
ソース見れば分かるだろって思ってたからびっくりです
>>822 ソースがあるとかないとかじゃなくて仕組みわかれよw
グラボに命令だすだけで実際に貼る処理はグラボの中だろw
ソース公開してる適当なレンダラーの中身でも除けばいいじゃない
ワールド座標で管理しているモデルを、スクリーン座標で指示した位置に 移動させたいのですが、ワールド座標(0.0.0)にあるモデルをスクリーン座標(100.50)の 位置に移動させたいとき、どうやって移動先のワールド座標を求めればいいのでしょうか? (移動後のワールド空間での奥位置は移動前と同じとします) モデルをスクリーン座標に変換して目的位置にxy座標を変えただけだと、 スクリーン座標での奥位置が元居た位置のままなので、当たり前ですがワールド座標に 戻したときに移動前の奥位置になってしまいます。
>>826 >移動後のワールド空間での奥位置は移動前と同じとします
の意味が分からん。
ワールド空間での奥位置ってことは、ワールド空間でのz座標ってことか?
ビュー空間がワールド空間のz軸と平行のときは、それでは絶対に動かせないが。
828 :
822 :2007/09/03(月) 13:48:19
グラボの内部で処理か・・・ SetTextureでテクスチャ読み込んで,DrawPrimitiveUPに指示だすでいいんかな? 正方形のテクスチャ用意して,形の崩れた四角形にテクスチャ貼り付けるときに画像が伸びたり縮んだりするのはどう処理してるんですか? 長さの比にたいしてテクスチャのドットデータを間隔あけて読み込んだり多く読み込んだりするんですかね?
だいたいそんな感じ
830 :
デフォルトの名無しさん :2007/09/04(火) 01:51:32
「画面のプロパティ」→「設定」→「詳細設定」→「Direct3D」のとこで テクスチャ設定とミニマップ詳細レベルのとこが 毎回ハイパフォーマンスにしても再起動すると高画質になってます どうしたらいいのでしょうか? スルーしないでください
832 :
デフォルトの名無しさん :2007/09/04(火) 04:52:13
まずは、ここが何の板なのか確認するんだ。 そしてそれはビデオカードのドライバの問題だから、DirectXの話ですらない。
>>827 > ビュー空間がワールド空間のz軸と平行のときは、それでは絶対に動かせないが。
言われて納得。どう説明したものだろう^^;
以下ダメな例
// pObjPosをスクリーン座標pMoveの位置に移動した値をpOutに入れる。
void SetPos( D3DXVECTOR3 *pOut, D3DXVECTOR3 *pObjPos, D3DXVECTOR2 *pMove ){
// view_portとかの宣言・取得は省いてます。
D3DXVec3Project( &screen_pos, pObjPos, &view_port, &projection, &view_mat, &world );
screen_pos.x = pMove->x;
screen_pos.y = pMove->y;
screen_pox.z = pObjPos->z; // これが問題
D3DXVec3Unproject( pOut, &screen_pos, &view_port, &projection, &view, &world );
}
これだと、奥位置が元のオブジェクトから変更されていないのでカメラからオブジェクトの
距離が変化しない移動になってしまいます。
これをちゃんとカメラからの距離が変化するような移動にしたいのですが、どうやればいいのでしょう?
と、考えながら書き直しているうちに、何かD3DXPlaneIntersectLineを使ったマウスでのポリゴン選択の
やり方で出来るような気がしてきました。
(今まで出来なかったので諦めていたのだけど原因がわかったかも。しかも凄いアホな原因^^;)
後で試してきます。
お手数掛けました。
835 :
834 :2007/09/05(水) 06:16:37
D3DXPlaneIntersectLineを使ったやり方で無事できました。 今までうまくいかなかった原因は、何をトチ狂ったのかプレーンを 毎度毎度カメラに対して垂直になるように作っていた事でした^^;
836 :
822 :2007/09/05(水) 12:47:54
837 :
613 :2007/09/06(木) 20:46:23
FVFから頂点データのサイズを計算する方法教えて
D3DXGetFVFVertexSize
839 :
613 :2007/09/06(木) 20:51:33
これだけのためにD3DXは使いたくないです(´;ω;`)
じゃぁ自分で計算しろ
841 :
613 :2007/09/06(木) 21:08:22
そこをなんとか・・
842 :
デフォルトの名無しさん :2007/09/06(木) 21:52:59
>>839 むしろ今の時代D3DX使わないって選択が間違ってるw
なんで超初心者のくせにD3DXを使わないで頑張ってるの?
無駄な努力じゃない?
843 :
613 :2007/09/06(木) 22:02:45
どなたか分かる人いませんか?
その程度が何で自分で計算できないの?
845 :
613 :2007/09/06(木) 22:12:17
その程度のことも回答できないんですか><??
秋だな・・・
>>843 FVFを使う場合のデータの配置順とサイズはヘルプに載ってたはず
固定機能パイプの頃の話だから最新のには載ってないかもな
OS割れ厨でなければDX8の日本語ヘルプはMSのサイトから
ダウソできるはず。MDSNライブラリのオンラインヘルプなら
割れ厨でも読めるはず
調べるのが嫌なら素直にD3DX使っとけ
>>847 アンカーミスっててよく分からん事になってるぞ
849 :
613 :2007/09/06(木) 22:30:56
自己解決しました^^
釣りなら釣りと
852 :
デフォルトの名無しさん :2007/09/07(金) 10:50:20
DirectX 9 SDK のサンプルにある、StillCapについて教えてください。 USB接続のWebカメラで静止画撮影300万画素というものを使っているのですが、 StillCapをそのまま動かすと640×480の30万画素までのものしかキャプチャできません。 ソースコードをざっとみて、メディアタイプを設定しているところがあるのですが、 VIDEOINFOHEADERの解像度の設定は無視されるとAPIのドキュメントにあります。 静止画のキャプチャで解像度の設定をするのは、どのタイミングで どういったAPIを使うとできるようになるのでしょうか? どなたかご存知の方がいらっしゃいましたらなにかヒントや参考となるURLでもいいので教えてください。 よろしくお願いします。
>>852 少しは自分でも考えような。
リプレイがずれるのはD3DXの算術系関数の環境によるSIMD命令の違いが原因。
FVF頂点のサイズ知るとか、Xファイル読み込むとか、画像読み込むとかにはまったく関係ねぇ。
まさか画像の読み込みも自前でバイナリ解析して読むのか?
それこそ画像の読み込みなんてD3DX使うまでもないだろ。。。
浮動小数点時代になってからリプレイ関連は各企業あんまりやってないところ多いけどな どこも意固地にやりたいことをただやるだけじゃなくて その環境でできることを精一杯やってるんだぜ まあ、馬鹿な企画が無理いって環境に合わないもんを長い時間かけて作ることもあるけどw
ケツイのことか
858 :
853 :2007/09/08(土) 11:08:47
>>855 おっしゃる通り、静止画が必要なだけなら他にもいろいろとあると思うのですが、
すでにある16台のUSB接続のWebカメラを利用したモニターアプリに
静止画同時撮影機能を搭載したいのです。手始めにStillCapサンプルを
調べてみて、解像度設定のところで躓いてしまった次第なのです。
動画が取れているので、そこから切り出す方法で静止画がとれることは
とれるのですが、それだと動画の解像度までしか撮影できないので、
なんとかカメラが持つ静止画の解像度いっぱいの精度でとれないものかと。
ttp://kilala.mydns.jp/def/vbtips/006/ ここのサイトを参考にして、VB2005で、ジョイスティックを振動させたいのですが
うまくいきません。
アナログ、ボタン情報は取れるのですが、
振動をさせてもぴくりともorz
ここのサイトの方と使ってるUSBパッドの種類が違うのでダメなのでしょうか?
使っているものは、USBコンバータでPS2のコントローラーです。
ソースはここのをまんま利用してUSBの部分だけ削除してやってみました。
そもそもそのサイトのサンプルで振動するの? FFB関係は付属の専用ドライバをインストールしないと機能しないけど、 ちゃんとドライバインストールしたの?
861 :
853 :2007/09/08(土) 12:07:46
>>859 そのサイトのことは分らないけど、DirectX9SDKのサンプルのFFConstだとちゃんとプルプルしますよ。
うちのはエレコムのUSB接続PS2コントローラーですけど。
862 :
859 :2007/09/08(土) 18:08:01
>>861 FFConstをCで試してみて動いたのでそれを参考に改造したら振動しました。
右だけしか動かなかったけどorz
一つきになってるのが、ボタンが押された情報を取得してる前処理の
以下の部分で例外はきまくってJSDevice.Acquire()を呼び出しまくるようになったのが心配です。
'データをポーリング
Try
JSDevice.Poll()
Catch ex As InputException
'再取得して再度データを取得
If (TypeOf (ex) Is NotAcquiredException Or TypeOf (ex) Is InputLostException) Then
Try
JSDevice.Acquire()
Catch ex2 As InputException
Exit Sub
End Try
End If
End Try
右と左にモーターがある場合は別々に制御しないとダメなはずだぞ
864 :
デフォルトの名無しさん :2007/09/09(日) 15:37:51
>>854 D3DXの話なのに、なんで、FVF頂点のサイズやXファイルの話になるのかわからん。
>>864 これらの関数がD3DXの関数ではないなら俺も意味がわからなかったんだが。
>D3DXGetFVFVertexSize
>D3DXLoadMeshFromX
866 :
853 :2007/09/10(月) 15:27:04
この週末をぶつしてグーグルで調べまくって、いろいろと試行錯誤し、結局は自己解決しました。 同じところで躓いている人も多いみたいなので、参考のためここにも簡単に説明します。 1.CaptureGraphBuilder2のFindPinでPIN_CATEGORY_STILLのIPinを取得する。 2.CaptureGraphBuilder2のFindInterfaceでIAMStreamConfigを取得する。 3.ステップ1のIPinでEnumMediaTypesを実行し、目的の解像度のところで ステップ2のIAMStreamConfig::SetFormatでメディアタイプを設定する。 ステップ3はRenderStreamの前でも後ろでも大丈夫のようです。 以上。
867 :
デフォルトの名無しさん :2007/09/10(月) 16:40:15
>>866 乙
DirectShow周りは、情報少なくて、大変ですよね
俺もUSBカメラをいじったり、多少やったことあったんだけど、答えられなかった。
>この週末をぶつして
質問です。 DirectX SDKの Tutrial6 Meshesのサンプルをビルドしてみたのですが、 プロジェクト設定の「ランタイムライブラリ」のところを「マルチスレッド」となっているのを 「マルチスレッドDLL」にしてビルドしたところ、ビルド自体はできますが、 実行しようとすると 「MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールしなおすとこの問題は解決される場合があります」 というダイアログが表示され、実行に失敗してしまいます。 これはどういう理由からこうなるのでしょう。 「マルチスレッドDLL」でも実行できるようにする方法はありませんでしょうか。
>>869 manifestが設定されてないとか。
"manifest MSVCR80.dll"でぐぐってみたら?
>>870 「リンカ」->「マニフェストファイル」->「マニフェストの生成」を「はい」に、
「マニフェストツール」->「入力と出力」->「埋め込みマニフェスト」を「はい」に設定することで実行できるようになりました。
ありがとうございます!
マニフェスト関係は疎いので、勉強してみます。なんだかややこしそうだなぁ・・・。
VB2005で、環境マップを実現したいのですがうまくいきません サーフェイスをテキスチャに取り込んで、そのテキスチャをメッシュに張るでいいのですか? 具体的に載っている本か、サイトがあったら教えてください。
何がどううまくいかないのか程度のことを説明するのも面倒くさいのなら、 プログラムなどやめてしまえ。
874 :
872 :2007/09/14(金) 17:08:57
説明不足ですいません。最初に、サーフェイス、ビューポートを記憶しておいて メッシュimMeshを描画、このメッシュのテキスチャにレンダリング画面のテキスチャを 割り当てたいのですが、うまくいかずorz ' 初期化 rTex1 = New Texture(D3DDevice, 512, 512, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default) dSur1 = D3DDevice.CreateDepthStencilSurface(512, 512, DepthFormat.D16, MultiSampleType.None, 0, False) rSur1 = rTex1.GetSurfaceLevel(0)
' レンダリング部 D3DDevice.BeginScene() oldtSur = D3DDevice.GetRenderTarget(0) olddSur = D3DDevice.DepthStencilSurface oldView = D3DDevice.Viewport D3DDevice.Viewport = View D3DDevice.SetRenderTarget(0, rSur1) D3DDevice.DepthStencilSurface = dSur1 D3DDevice.Clear(ClearFlags.Target Or ClearFlags.ZBuffer, System.Drawing.Color.Black, 1.0F, 0) mat.Translate(0, 0, 0) D3DDevice.Transform.World = mat D3DDevice.SetTexture(0, nothing) imMesh.DrawSubset(0) ' 2回目レンダリング D3DDevice.SetRenderTarget(0, oldtSur) D3DDevice.DepthStencilSurface = olddSur D3DDevice.Viewport = oldView D3DDevice.Clear(ClearFlags.Target Or ClearFlags.ZBuffer, System.Drawing.Color.Black, 1.0F, 0) D3DDevice.SetTexture(0, rTex1)←ここにレンダリングした画面のテキスチャを張りたい imMesh.DrawSubset(0) '描画終了 D3DDevice.EndScene()
すみません、DirectX9.0cが欲しいのですが、家族のPCが割れ?というやつらしく、認証通りません。 自分のPCの無線が絶縁状態で如何ともしがたく、慣れない部屋のPCで数時間調べ腰が痛くなってきました>< 誘導でかまいません、よろしく願いいたします。
とりあえず通報した
とりあえず自己解決。 腰痛い。
釣り。。。なのか?
DirectX9.0cって、本にだいたいついてるよなw
そもそもSDKじゃないだろ
SDKじゃないならその辺のエロゲにすらついてるな
XPならそもそも入れる必要性すらない
初歩的な話で申し訳ありません。 DirectX SDKの中に入っている GraphEdit を起動して、 そこへ画像や動画をドラッグ&ドロップすると、自動的にGraph生成され Play Graph で表示できますが、 動画ファイルではあまり気がつかなかったのですが、 BMP/JPEG等の静止画をロードした場合、表示される画像にローパスフィルタがかかったように 画像が全体にややボケて表示されるようです。 例 白黒白黒... と1ラインずつ縦に並んでいるシマシマの画像が、灰色ベタ塗りつぶしのような 表示になります。 このフィルタ?を解除する事はできるのでしょうか? DirectShowでBMP/AVIファイルをロードするプログラムを 作成していて、自分で作成したプログラムでも同じようにボケた表示になってしまいます。
GraphEdit等で、どんなフィルタが入ってるか調べてみたら?
887 :
885 :2007/09/16(日) 13:12:49
>>886 GraphEditで確認しているのですが、現状、BMPファイルをロードすると
Generate Still Video→Color Space Converter→Video Renderer
となります。Generate Still Videoの出力は、BMPファイルが24bitカラーの場合RGB24で
Color Space ConverterでRGB32に変換され、Video Rendererでそのまま表示されている
だけのようです。
この中にフィルタが入っているのでしょうか?
Windows Media Playerを起動し、同じ白黒白黒... と1ラインずつ縦に並んでいる
シマシマの画像をドラッグ&ドロップしてみると、同じように
ローパスフィルタがかかったように画像が全体にややボケて表示されるようです。
>>887 Video Rendererで例えばDirect3DとかDirectDrawが使われてて、
そいつの拡大縮小フィルタがバイリニアフィルタだとそうなると思う。
その場合、少なくとも自分でVideo Renderer相当の奴を書けば解決。
既存のVideo Rendererの設定に拡縮フィルタの設定があるのかどうかしらんけど
設定一発で解決できる可能性は案外低いんじゃないかと思う。
889 :
デフォルトの名無しさん :2007/09/18(火) 23:17:19
ウィンドウの範囲を指定して描画する方法はありますか? たとえば、1つのウィンドウの半分だけに3Dの画面を表示して、 片方半分は文字入力用のテキストエディタのようにするような。
希望する範囲を指定してPresentに渡す それか、子ウィンドウを2つ作ってその中に描画。 3Dに限らず一般的に多いのはこっち。 似たようなことをしてるソフトを見つけてSpyでのぞいてみるといいよ
でもたぶん 何日かしたらループするんだぜ?
Direct3D10以降での描画はVertexBuffer必須って本当ですか? 普通の配列から直接描画関数(DrawPrimiteveUP)を呼ぶような事はもうできないのでしょうか。 ちょろっとした小さい描画をするときにまたいちいちVertexBuffer作るのもめんどいんですが・・・。
それどころか、固定機能が廃止されたから ちょろっとした小さい描画をするときにまたいちいちシェーダを作らなきゃいけないらしいよ
それどころか、DirectX11ではついに固定機能デバイスが廃止されるから、 ちょろっとした小さい描画をするときにまたいちいちプログラマブルデバイスを作らなきゃいけないらしいよ
VertexBufferは無くてもいいんじゃないっけ? シェーダーは必須だけど。
>>893 お前浅くしか使ってねぇから固定機能のがよくみえんだよ
ちょろっと描画なら絶対シェーダのが楽だ
質問です。 DirectXではOpenGLみたいに #define VERNUM 1000 float vertex[3*VERNUM]; float texcoord[2*VERNUM]; float normal[3*VERNUM]; と、頂点データの種類ごとに別々の配列に取られた頂点データでそのまま描画する事はできないのでしょうか? 今はやり方がわからないので、無理やりインターリーブになおしてやっていますが、これだと余計な処理が入るので・・・。
VertexBufferを使えば出来る。
>>897 その余計な処理戸やらで遅くなって困っているのか?
余計な処理と同じ事をするファンクションが標準で用意されていたら、
絶対そんなことを気にしないだろ?
いちいち余計なことを考えるな、馬鹿の考え休みに似たりなんだよ。
>>897 VertexBufferを3つ作ってそれぞれにデータ配列を突っ込んだ上で
VertexDeclarationでデータのマッピングを定義すればできる。
とりあえずVertexDeclarationでぐぐって出てくるところ全部眺めてみ。
901 :
900 :2007/09/22(土) 19:05:13
VertexDeclarationでぐぐるとXNA関係が引っかかりまくるので ぐぐるならIDirect3DVertexDeclaration9の方がいいや。スマソ。
壊れてんじゃないの
905 :
903 :2007/09/27(木) 17:05:16
"DirectX SDK - June 2007"なら問題なく解凍実行できました お騒がせしました
今までOpenGLをやり込んで、DirectXに手を出そうと思っているのですがすんなりいけますか? 一応、C++の知識はあります。 OpenGLと比べてどのような違いがありますか?
そういったことを自分で調べられない、しようともしない人間には無理です。 残念でした。
はいはいw
>>907 こんな答え方しか出来ないんだったら超初心者用なんて銘打つなよ
答える方も超初心者だから仕方ない
今のDirectXはシェーダー使えないと話にならないな OpenGLもcgとか使えたっけ
というかお前ら気に入らないんだったら、せめて書き込むな。気に入らない時点でお前らの居るべきところじゃない。
>906 難易度で言ったらD3Dの方がGLより全てにおいて楽 そのかわりGLはD3Dより多くのことができる,、と一応補足しておく
915 :
デフォルトの名無しさん :2007/09/29(土) 15:27:50
ねーよwwww
D3DとGL逆じゃね?
>>914 そうなのか?
仕事でOpenGLしか使ってないけれど、DirectXのほうが難しくて機能が多いイメージがあったのだが。
ちょっとDirectXもやってみるか。
結論から言うと「隣の芝」
速度もクオリティもGLのがいい気がする・・・ でも、俺はDirectX使ってる GL、日本じゃ情報少ないし
GLはゲームに向かないし・・・。 結局サウンドや入力にDirectSoundやDirectInput使うこと考えたら 描画だけGLっていうのはやっぱ微妙だよ。
GLでゲームなんてそもそも カーマックがこだわってただけで 主流ではなかったはず。
GLは主にCAD用途だと思ってた
923 :
デフォルトの名無しさん :2007/09/30(日) 16:08:37
DirectXをインストールしようと思ったのですが、インストールすると 「内部システムエラーが発生しました」 というのが出るのですが・・・ どうしたらいいのでしょうか?
924 :
デフォルトの名無しさん :2007/09/30(日) 16:13:25
修理に出す
>>909 超初心者なんだから、初心者を超えている。即ち初級者なんだからそれでいいだろ。
926 :
デフォルトの名無しさん :2007/10/04(木) 17:43:47
OpenGLが主流(明らかにアドバンテージがあった)のは10年前ぐらいだよね 今はその規格の安定性の有用さを生かせない分野では用なし nVidiaやATiの方言が実装されてるのはOpenGLだけだから遊ぶにはいいかもね 特にこれからのDirectXは差をますます許さない方向へ向かっているので それとよく引き合いに出されるDirectSoundとDirectInputだけど >DirectSound DirectPlayと並んでDirectX二大癌 扱いにくさと機能の弱さで他の選択肢より有利な点がない >DirectInput 特殊なジョイパッドや三個以上接続する場合などレアなケースでしか有利な点がない その上、普通に記述するよりソースが冗長になる 普通のジョイパッドを使うならいらない DirectXを使う理由はライセンスに問題が発生しないから それ以外に万人を納得させられる理由はない
つチラシの裏
今って描画DirectXでサウンドOpenALというのが普通らしいね
>ライセンスに問題が発生しないから フリーや同人にとってはコレが全てだと思うが・・・。 あとは情報の多さも利点だろ。 DirectSoundが癌なんじゃなくろくに対応されてないドライバが癌なだけ。 ハードウェアにやらせないでソフトウェアで処理するように指定して これといったバグに遭遇したことはない。
フリーや同人でライセンス気にしてる奴いるの?
下手なことをするとフリーだろうが同人だろうが2chで晒し挙げられるぞ
DirectXで文字を書いたときにMS UI Gothicを使ったとします MS UI Gothicは等間隔なフォントではありませんよね? その場合の文字、または文字列のドット数をしらべるにはどうしたら良いのでしょう 言語はHSPかActiveBasicのどちらかを使用しようと思っています
フォントの幅の取得はDirectXとは無関係なんだから、こじつけてこのスレで質問するのはやめろ。
DirerctGraphicsを使用して2D画像を出力させたいんですが・・・ 2000*2000とかなら正常に読み込まれるんですが 3000*3000とかで巨大なBMPを読み込ませるとなぜか、「自動で縮小」されて出力されてます・・・ ミップマップも1にしてるのに・・・なぜでしょう・・・ ご教授願いますm(_ _)m // スプライトに表示するテクスチャの初期化 // 黒抜き(固定) hr = D3DXCreateTextureFromFileEx( g_pD3DDevice, name, ImageInfo.Width,ImageInfo.Height,1,0, D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT, D3DX_DEFAULT,D3DCOLOR_ARGB(255,0,0,0),NULL,NULL,&Texture); if (FAILED(hr)){ MessageBoxA(hWindow,"テクスチャの初期化に失敗しました!","DXGraphicsInit No4",MB_OK); return 1; }
CapsViewer で MaxTextureWidth,MaxTextureHeight を確認しる
>>937 m(_ _)mありがとうございます
僕のでは2048*2048が限界のようでした・・・
さらに調べるとこれはビデオカードの問題なのでどうしようもないことも判明しました・・・
しかし本当にこのスレはネ申が多く在籍してるな・・・
本当に助かりました><
>DirerctGraphics
ディラークト グラフィックス
ダイレルクトゥ グラフィックス
座標変換済み頂点を4個指定してテクスチャを自由変形させるとき、各頂点のrhwはどうやって算出すれば良いですか?
算出も何も置きたい座標にセットしろよ。
>>942 地平線を求めて、各頂点の地平線からの距離を求めれば、
それが rhw になるわよ。
えっへん
946 :
デフォルトの名無しさん :2007/10/16(火) 23:28:12
DirectGraphicsで2Dのマップエディタ作成してるんですが これって自動でクリッピングされてますよね? DirectDraw使ってたころは自分でクリッピング書いてましたが DirectGraphicsになってからは自動で行われるんでしょうか・・・ 教えてくださいm(_ _)m
変換済み頂点で描画している場合、クリッピングが必要あるかどうかは 「ビデオカードによる」ってのが本当なんだけど、実際には気にしなくていいよ。 たぶんID3DXSprite使ってそうだけど、その場合もクリッピングは不要。
948 :
デフォルトの名無しさん :2007/10/17(水) 00:58:08
>>947 お返事ありがとうございますm(_ _)m
スプライトに2D貼り付けて出してるだけの2DRPGを作成してるのです
3Dは一切使ってませんが・・・巨大なマップ用意するとどういうわけか
重くなるような気が・・・・
「気が」ではどうにもならん、測定しる 巨大っていうのも程度による、明らかに画面外だと判り切ってる部分は描かない方がいい まさかとは思うが、リファレンスラスタライザが使われてるってオチは無いか?
REFではないです・・・ どうみても重くなっているので制御かけますm(_ _)m
いくらなんでも画面の何倍もあるような広大なマップを 正直に描画してたら重くなるぞ。 Draw1回ですむならいいけど、チップとして大量に描画してるんだろ?
952 :
デフォルトの名無しさん :2007/10/17(水) 01:45:40
>>951 そうですね
1024*768画面でチップの大きさは50*50でそのマップが幅50*1200 高50*1200です
これが下地で、さらにチップをペタペタ700こくらい貼り付けてます
>>952 ロード時にテクスチャを1枚にまとめるか
DrawPrimitiveUpでも使ってクリップしながら描画したらどうだ?
>DirectGraphics
また小男たちの重箱の隅つつきかね?
956 :
あ :2007/10/17(水) 18:54:50
というDirectGraphicsの描画は自動でクリッピングされると 思っておりました・・・
こうやって間違った用語の使い方をしているのに、 いつまで経っても気がつかなくて本当にいいのだろうか?
いつまで経っても、って何だよ 一人の人間がずっと気づかないんではなく 気づかない人間がたくさんいるってだけだろ
別にいいだろ。Xが抜けていても普通、通じる。おまえにだって通じている。 通じているのに通じないふりして悦に入ってるやつはかっこわりーぞカス
指摘されなきゃ一生そのままかも知れないが、そいつの人生だ好きにさせろ。
>>960 xがないってだけで人生論まで飛び出たかw
死ねよヘボw
なんかいちいちくだらん事に絡むアホがいるな
問題ないと思うけど、 ウィンドウだしてプロシージャ書ければ あとは行列とかベクトルとか画像処理とか
>>964 有り難うございます。
一応、現在大学2年生で数学の知識はあります。
とりあえず、DirectXを始めてみます。
何かやろうとするときに、いちいち誰かの許しを請おうとするのはやっぱり病気なんだろうな
アニメーションさせてると、何フレームかに1回ぐらいの割合で 描画更新中の画面が見えてしまう(画面下半分ぐらいが更新間に合わないのか、 そこから絵がズレている)のは何がおかしいのか、思い当たる人はいますか?
ヒント:VSync
加えて 「ティアリング」もな
じゃ俺はフリッカ
「そこから絵がズレている」という現象をさす用語としてはティアリングが正解だな 最近はあまり見ないがBBXでも何回か見た記憶が
DirectXSDKについてくるサンプルのDwarf.xなんかをDirectX Viewerで見てると、角の部分の法線が ↑ ←┌ と二本出てるんですが、これは1頂点に法線が二本あるんでしょうか? それとも頂点がふたつあるんでしょうか?
頂点が二つ
974 :
デフォルトの名無しさん :2007/10/27(土) 00:41:15
>>967 原因は、モニターのVSYNC(垂直同期)のため。
画面が全部書き換わる前に、人間の目に見えてしまう現象。
詳しい原理的なものは、うのみにせずググってみてほしい。
一人称視点の洋ゲーなどでは、VSYNCを取らないものが多く、
気にしていない開発者や、ユーザーも多い。(というか、外人は気にならないのか?)
(とはいえ、オプションで切り替えられるものもあるけど)
和製のスクロールが激しい2Dゲームなどでは、VSYNCを取らないと、気になることが多い。
また、コンシューマでは、2D、3D関係なく、VSYNCを取るのが当たり前のようだ。
この問題の解決策は、VSYNC同期をとること。
VSYNCの同期の取り方は、環境依存だが可能なので、ググってみてほしい。
ただし、同期をとった場合、VSYNC以上のFPSで表示できないという欠点がある。
また、モニタにより、対応する周波数が違うので、注意。
一般的に(和製ゲームで)よくつかわれるのは、60Hz(つまり、60FPSで描画)だと思う。
液晶モニタや、CRTディスプレイでも、60Hzや、70Hzあたりは対応しているようだ。
976 :
デフォルトの名無しさん :2007/10/27(土) 13:39:09
ここで、聞くのが適当かわからないのですが・・・
前に、この手のスレで、
「3Dで角度(angle)なんか使わない(データとして持たない)」
「全部、ベクトルでやる」
というような議論を読んだのですが、
実際に、ベクトルで角度的なことをやっている、
ソースや、解説されている書籍、webサイトなどをご存じの方はいらっしゃいませんでしょうか?
前に↓「ゲームプログラミングのための3Dグラフィックス数学」を期待して買ったんですけど、
http://www.amazon.co.jp/dp/4939007375 その辺のことが、ぜんぜん書かれてなくてがっかり・・・
不適切なら、適切なスレに誘導して下さい。
ソース公開されてるやつだとLunaが3軸の直行ベクトルで回転を保持していたが。 クォータニオンに比べると相互変換が高速なのが利点なのかねぇ。
978 :
976 :2007/10/27(土) 13:50:46
もう少し、具体的な話を書きます。 アクションゲームなどでは、 例えば、 ・キャラクターの向いている方向を、一定角度変える とか ・2つの角度の(近いほうの)差をただしく得る ・角度を制限する などといった実戦的なことです。 頭が固いせいか、ベクトルで持っていたら、いちいち角度にもどして計算が面倒だな、とか。 ベクトルで持っていて、角度を変える場合、 ・回転行列を用意して、 ・トランスフォーム ・新しいベクトルゲット とか、考えて、妙に面倒だな、などと思ってしまうのですが。 前に、知り合いの3Dプログラマに聞いたら、適材適所で、 ロール、ピッチ、ヨーで角度を持つこともある、って普通に言われちゃったんですけど。 いま時は、どうなんでしょうか?
979 :
976 :2007/10/27(土) 13:51:18
>>976 全部ベクトルとして持つというと、それは姿勢を表す直交行列のことでしょう。
>・キャラクターの向いている方向を、一定角度変える
回転行列をかけます。
>・2つの角度の(近いほうの)差をただしく得る
2つの行列の正面方向を表すベクトルを1つの平面に射影して、それに対してatanで求めます。
ていうか、これは3Dの場合は角度で計算するのは相当に困難なはずです。
・角度を制限する
具体的にどういう条件で制限するのか説明してもらえないと分からないです。
>2つの行列の正面方向を表すベクトルを1つの平面に射影して、それに対してatanで求めます。 訂正 2つの行列の正面方向を表すベクトル2つが作る平面上で、2次元問題に落としてatanで求めます。 射影したらどれかの軸の情報が失われて全然違う値に。。。
全部行列って意味をなさないと思うな どこを作ってるかにもよるけど 例えば、キャラに「3回転する」ってアクションがあったとして この「3回転」ってパラはキャラが持つしかない んでモデルの持ってる行列はインスタンス情報であって 描画するときに実行中のアクションとパラを見て参照すればいいだけだ 姿勢行列なんてもつことないと思うけどな 例えばマリオを100体描画してもロードするモデルは1体で もってるパラは姿勢行列じゃないと思うんだよね 3次元座標と進行方向のベクトル、速度ベクトル等、その他パラ・・・ って感じで姿勢行列なんてもっても今どういう状態なのかわかりずらい こんなの必要になんのって描画のときだけじゃねーの?違う? ウンコなライブラリでたまにロードしたモデルとインスタンスが 1対1になって各ローカルの行列全部メモリにもってるもんがあるけど全く意味ないと思う
tiny
>>982 例えばバウンディングボックスで
当たり判定をする場合どうする?
三次元の物なんだから、位置と姿勢の情報がなきゃ
何もできんだろ
それを毎フレーム作るのか、保持し更新するのか
行列で持つのか、四元数で持つのか、三角関数で持つのか
それは自由だが
>>982 実際に操作するコントローラー相当のものが
必要な行列データとモデルへの参照を持ってればいいだけだと思うが。
まぁそれぞれ一長一短だしいいんでね。
Tiny.xの全フレーム行列で保持しているモーションフォーマットだけは理解しかねるが・・・。
>>982 姿勢ってそれボーン行列のこと言ってる?
その前にインスタンスのワールド変換行列はどこへ?
ボーン入りXファイル読み込んでスキンメッシュアニメーションしてるんですが、 各ボーンの向きと長さを取得する方法ってありませんか? 現状、子ボーンのオフセット行列が子ボーンの根っこの位置を持ってるので、 その差を使って計算してるのですが、先端にひとつ余計にボーンをつけなきゃならないのと、メッシュが分割されたときうまく子ボーンのオフセット行列が取れない問題があってうまくいってません。 それともXファイルになった時点で向きと長さの情報って失われてますか?
必用なら拡張情報としてテンプレートを追加してXに入れるしかない。
989 :
987 :2007/10/28(日) 00:54:36
>>988 なるほど…確かに拡張として仕込んだほうが読み書きさえ出来ればあとはスマートになりそうです。
ありがとうございました。
Xファイルを3つ並べて XXXってやったら 25歳以上かどうかの質問がでてきました。 僕の頭は感染しているんでしょうか?
991 :
デフォルトの名無しさん :2007/10/28(日) 13:53:45
法線が違うなら24個で正常。
994 :
992 :2007/10/29(月) 00:11:32
レスありがとうです。 Epsilons.Normal(や、その他)の値を大きくして実行すればいいと思ったんですけど 24のままです。 どうやったら8コにまとめられるんでしょうか…
一度D3DXを使わず直接頂点指定をしてボックスを表示してみろ。 たったそれだけで状況が理解できるから。
法線や色の異なる頂点を1個に結合したら、法線や色も1個になってしまうよ? それは意図した結果?
つまり球を8頂点で近似するということになる
998 :
992 :2007/10/29(月) 01:08:43
みなさんお付き合いありがとうございます。
>>995 プリミティブを描画するのにそれぞれ頂点が必要になるっていうことですか?
でもIndexedだと8コで問題ないですよね?違う話ならすいません。
>>996 メッシュを法線方向に膨らませて裏面のみ黒く描画することで輪郭描画、というやつをやりたいのですが、
頂点がそれぞれ別方向に膨らんでしまいスキマができてしまうのに悩んでいるのです。
なので、法線も色もひとつでOKです。
自分のイメージではWeld関数で同じ位置にある頂点をひとまとめにして、
法線を再計算した後膨らませれば素敵かと思ったのですが。
けど確かに頂点まとめるとテクスチャ座標とかには困りそうですね…
>>997 メッシュ生成関数でつくれということでしょうか?
いじりたいのは立方体に限らないので…
>>998 その場合引き伸ばしように別途専用の頂点データを仕込んでおくほうが一般的だねぇ。
ステンシルシャドウとか2.5Dモーションブラーの場合でも仕込み用の頂点入れるし。
ちなみに法線が3Dツール上で同一なら出力される頂点は8個になる。
24個出来るということは法線、頂点色、テクスチャUVのどれかが同一ではないということになる。
補足 Indexedだから24個。 インデックスを使わないなら3x2x6で36頂点になる。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。