【C++】 DirectX初心者質問スレ Part26 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part25 【C】
http://pc12.2ch.net/test/read.cgi/tech/1251208220/
>1乙です さっそく質問ですが、 ポリゴン1にテクスチャ1とテクスチャ2を重ねて貼って、 ポリゴン2にはテクスチャ1だけを貼りたい場合、どうすればいいんでしょうか? 頂点デクラレーションとか頂点ストリームとかできるだけ使いまわしてやりたいのですが ポリゴン2にはテクスチャ2の変わりに全体が白あるいは透明のテクスチャを貼るなどすればできそうですが、 他に簡単な方法ありますか?
DirectInputでのマウスの動きを読み取るのは実装できたのですが それでFPSゲームのようにカメラを中心に視点を回転させたいのですが どのようにすればよいのでしょうか? よろしくお願いします
>>2 テクスチャ2を使用するパターンと使用しないパターンの
ピクセルシェーダプログラムを記述して、techniqueで切り替えればよい。
>>3 確か2つか3つほど前のスレに同じ話題があった。
探せないならぐぐったほうが早いだろう。
前スレの998の繰り返しになりますが、 DirectInputでジョイスティックの軸入力の分解能とか取得できますか?
>4 できました ありがとうございました テクニックで切り替えられるということを知らなかったです
前スレでリストボックスを実装しようとしていたものです とりあえずためしにビルドしてみたんですが、DXUTmisc.hの109行目のアサーションに引っかかりました TYPE& GetAt( int nIndex ) const { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; } こういうのが出た場合、どこを調べればいいんでしょうか?
Pシェーダーで普通にテクスチャを貼ったように テクスチャを貼るにはどうすればいいの? もしかして普通はテクスチャは複数より一枚だけなの?
>>8 お前、学校で国語をもう一度勉強しなおせ。
お前のPCのディスプレイが他のヤツの目の前にあるわけでもないのに
その説明で質問の意図が伝わるわけ無いだろ。
プログラマブルシェーダーでテクスチャ貼るれてるのに
貼り方が分からんってどういうことだ。
テクスチャは複数より一枚だけってなんだ。日本語になっとらん。
なにあんた きもちわるい
確かに日本語にはなっていない。 しかしこれ以上まともな質問文を書けるかなると 最近の若い子にはそれも難しいのかもしれない。
日本語がまともに書けない人間がプログラムをまともに書けるかというと、 やっぱり無理というものだろう。
自分の頭をまともに操れないひと それを頭が不自由な人と呼びます 最近はめっきり殖えましたね
ここって脳とか精神のスレだっけ?
x めっきり o めっぽう
滅法界
・何がしたいのか ・現状どうなっているのか ・それに対する自分の意見 ・自分の環境は何なのか(OS,CPU,GPU) ・DirectXのランタイムをDebugRuntimeにして実行してエラーがあるのかどうか、あるならそのエラーは何なのか。 ・可能ならサンプルをアップローダーに。 このくらいは質問するなら情報として欲しいわ。
CPUってそんな影響する?
ちょっとかまって欲しかっただけなんだ ごめん
D3DPOOL_MANAGEDで確保した頂点バッファって 速度気にしないなら頻繁に書き換えても支障はないですよね?
お前らDX11使えよ!話がレガシーすぎる。
11の解説してるサイトなんて1箇所しかしらねぇ
そんなことより忘れられそうなDX10の話してやれよ まあメリットがわかんねえけど
DirectX11で9,10,11対応のハードが使えるんだからDirectX10使う意味がねえ
25の言ってることは正しいが、きっと伝えたい事とは別なんだろうな
テッサレータでよりリアルな乳揺れを表現できるとなれば移行するしかないだろ
もうOpenGLでいいや
29 :
7 :2009/10/26(月) 02:05:08
リストボックス実装しようとしてエラー出しまくってたけど、 結局、リストボックスの機能だけを実装するのは諦めて DXサンプルの方を本体にして自分で作ったやつをそこに移しました 初期化とかウィンドウの作成とかDXUTの内部でやってて見えない所が多すぎて 正直これでいいのかとは思うけど、とりあえず望む画面はできました
ソース公開してるのに・・・
シェーダーをスキンメッシュに実装するのって やっぱり各ブロックに適応するようにすればいいの? それとももっと簡単な方法があったりするの?
>シェーダーをスキンメッシュに実装 意味不明、プログラムの前に日本語を勉強してこい。 >各ブロック ブロックの定義が不明。
やっぱりザギンでシーメですかね?
何この状況
国語の先生がいるくさいです
36 :
デフォルトの名無しさん :2009/10/26(月) 20:48:28
>31 各ブロックじゃなくて、各頂点のボックスに入れて実装する。 たぶんこれが一番簡単かな。 シェーダをボックスごとに対応させると高速化されてお勧め。
DX11が本格的に流行るのはいつ頃に何だろ・・・ でも流行る頃には最初といろいろ仕様が変わってるんだろうなあ・・・
第一要因はWindows7の普及速度。
現時点で、DirectX11が使えるPCは1.52%、Windows7のみ。
10/28からはWindows UpdateによってVistaでDX11が使用可能になるので、計20.14%。
ただ、Vistaのシェアはもう落ち始めているので、XPユーザーの7への移行がどれだけ早く進むかが鍵になる。
Vistaのシェアがピークを超えて初めて減少へ : [特集]Windows 7 - Computerworld.jp
ttp://www.computerworld.jp/topics/win7/163870.html ttp://www.computerworld.jp/images/_main/200910/1638702.jpg 第二要因はハードの普及。
AMDはほぼ全レンジでDX11を展開しつつあるが、NVIDIAは来年3月までにハイエンド〜ミドル、
そこから下はDX10.1でお茶を濁しただけでDX11対応予定は未定。
グラフィックチップ最大シェアを占めるIntelのDX11対応予定は、Larrabeeを除いて全く不明。
以上から、個人的にはDX11の本格利用は早くとも2011年以降で、それまではDirectX9で引っ張るんじゃないかと思う。
もしかしたら、移行期間の落としどころとしてDX11のDX10モードでの使用が流行る可能性も無いとはいえないがかなり微妙だな。
少なくともネイティヴDX10が闇から闇へ葬られるのは確定だろう。
多分初歩の初歩過ぎてどこにも書いてないんだけど 3DにおけるX,Y,Zはfloatで設定するようなのですが これがどういうことなのかまったくわかりません どの初心者サイトもfloatで頂点を座標を記入していて どうやってその数値を導き出したのか解説がありません 2Dの座標の場合はピクセル座標を入力すれば 思ったような図形がでわかりやすいのですが 2Dのように、ピクセルのX,Y座標を入力して点を描くには どうすればいいでしょうか?
ん? いまいち意味がわからないんだが それは3Dにおける(0,0,0)はどこなのかってこと? それともある座標に配置するのに必要な行列はどうやって用意するのかってこと?
画面左から10ピクセル上から10ピクセルの場所に点を打ちたいです みたいな話じゃないのか
D3DXVECTOR3 A(x,y,z) か?
44 :
40 :2009/10/27(火) 01:49:17
>>41 >>42 >>43 そうなんです
うまく説明できないのですが
ローカル座標に対してワールド座標変換などいろいろ使って
画面に図形を表示すると思うのですが、
(x,y)の位置に点を打つにはその座標変換にどのように値を入れればいいのかが
よくわからないんです。すべてfloatの値で入力するようになっていて
そのfloatの値が意味するものが何かがわからないので、どうすればいいかわからないのです
最終的にやりたいのは、囲碁の盤面のように、長方形のマスを並べて格子状を描きたいだけです
なんか完全な初心者くさいけど int a; みたいに float x,y,z; D3DXVECTOR3 point(x,y,z): っていう または D3DXMATRIX matWorld; D3DXMatrixTranslation(&matWorld,x,y,z); か・・・ うーん・・・よくわかんねえ 少なくとも何も表示されてない ウィンドウを表示するくらいはできてないとなんとも・・・
3D空間の長さの単位は特に決まってるくて自分で決めるもの 長さ1をタバコ1個分としてもいいし東京ドーム1個分としてもいい
47 :
40 :2009/10/27(火) 02:05:13
>>46 なるほど、ローカル座標はとくにこだわらなくていいということですよね?
ローカル座標のプリミティブをどれぐらいの大きさにするかは
あとの座標変換で処理すると・・・
でも、そこで問題なのが
2Dのピクセル座標の場合は、回転行列や平行移動行列を使って
直線を任意の位置に回転させたり移動させたりするのはできるけど
3Dの場合は座標がfloatで入力しないといけないのですが
平行移動行列にどういう値をいれれば任意の位置に移動できるかがわかりません
例えば、1.0fにすると画面の端まで直線が伸びる
ということは1.0fの頂点がビューポートの最大値のピクセル座標の点という風に自動で計算されているということですよね?
0.5fだと画面の半分の位置。ビューポートは4:3のアスペクト比なので座標変換しないと
0.5fの4辺の長さを持つ長方形は正方形で表示されないですよね?
>47 割合で座標を指定すると考えればいいよ X=0.5,y=0.5の場所に表示を画面(640,480)に対して行えば(320,240)になるってこと そのために小数点で細かく指定できたほうがいいよねっていう
50 :
40 :2009/10/27(火) 02:25:42
>>48 なるほど、割合ですか
平行移動行列も割合で入力するということですね
あと、ワールド座標の(0,0,0)は画面の中心になるというのも混乱してた理由でした
(ワールド座標変換したら左上が原点になると思ってた)
もう少しいろいろやってみます
ありがとうございます
51 :
40 :2009/10/27(火) 02:42:39
>>49 まさにこういうのを探していました。
参考にさせていただきます
ありがとうございました
ある頂点が画面のどこに表示されるかなんて予測できないよなあ。 視点の手前にあればきっと画面のどっかに表示されるだろレベル。 綿密に計算すればできるけど。
その頂点座標がわかってれば簡単に出るだろ
54 :
デフォルトの名無しさん :2009/10/27(火) 03:07:05
>>52 ( ´・ω・)つ D3DXVec3Project
ageちゃったスマソ(´・ω・`)
56 :
40 :2009/10/27(火) 06:06:12
dx=ディスプレイのX座標、width=ディスプレイの幅 float x=-1f + dx/ width/2; これでできました
そもそもきちんと理解して使っているのなら、 特定のZ位置で、スクリーン座標と座標体系を一致させたカメラぐらい、 簡単に作れるんだが。
int image1 = LoadGraph("char.png"); int image2 = LoadGraph("back.png"); if(Buf[KEY_INPUT_Z] == 1) { DrawGraph( 0 , 60 , image1 , FALSE ) ; } if(Buf[KEY_INPUT_X] == 1) { DrawGraph( 0 , 60 , image2 , FALSE ) ; } これを実行して キーを押すと 数秒間、画面が真っ暗になって もどって 右下に「ディスプレイ ドライバの応答停止と回復」って出るんですけど パソコンの問題でDirectXとは関係ないですか? OSはVistaです
そもそも LoadGraphとかDrawGraphとかの独自関数の中身なんてしったこっちゃないんだけど 毎ループ画像読み込みしてるから死んでるとか
DXライブラリとかそんな感じの関数だったなゲ製作該当スレあるんじゃない
初期化し忘れがあるとそういう状態によくなる
まずライブラリの作者に聞け馬鹿。 ってこったなぁ。
たまにDXライブラリの質問が来るよな。 DirectX=DXって勘違いするのかな。
DirectXの質問ではないのですが、ゲームを作る場合3Dオブジェクトやテクスチャ作成の必要がありますが、 皆さんはどういうソフトを使ってますか? お勧めのものがあったら教えてください
スレチ
ゲーム製作技術板にそんな内容のスレがあった希ガス
D3DX: ID3DXEffect::GetParameterElement: Root handle has no elements Direct3D9: (ERROR) :Stream 0 size is too small エラーの意味がよくわかりません ひとつめのファイルを読み込んだときは正常に動作するけど、 ふたつめのファイルを読み込むと、初期化失敗してるのか上記のエラーがでます Root handleってなんですか
68 :
67 :2009/11/01(日) 22:38:30
エラーの意味はよくわからないけど、とりあえずエラーは出ないようにできました ただ、大したことしてないのにCPU使用率が思ったよりいってて不安なんですが、 (Core2DuoE8400でCPU使用率5〜15%、メモリ22MB使用) DirectXで作るとこんなものなんでしょうか? フレームとかを作って秒間60回以上は描画しないようにしたら下がるでしょうか?
>>68 お前の作ったプログラムの内容も分からないのに、
「大したことをしていない」という情報だけで「こんなもの」と聞かれたって、
それで他人に説明したつもりなのか?
いったいどれだけ脳みそが腐っているんだ?
70 :
67 :2009/11/01(日) 23:11:35
>68 すいません、説明不足でした ファイルの情報をもとに数十個の四角ポリゴンをテクスチャをつけて描画しています ユーザ側の入力がなければ画面は変化しません できれば、67の質問の方にも答えてもらえると助かります
DirectXに四角ポリゴンなど無い
CPU100% 使って処理し続けているなら 100% 使う 使っていないなら使わない
"DirectXで作るとこんなもの"じゃなくて "67の技術力がこんなものしか作れない程度"だろ
>数十個 いくつなのか分からない >テクスチャ 解像度も枚数も分からない >エラーの意味はよくわからないけど、とりあえずエラーは出ないようにできました 何を直したのかも分からない 自ら情報を出さずに勝手に考えてくれるだろうと怠ける人間は、 プログラムを組むのには向かない
言葉の意味はわからんが、とにかくすごい自信だ。
なんでおまえらは変な奴が来たら全力で相手をするかな。
ポストエフェクトをかけようと思って テクスチャをRenderTargetに据えてレンダリングしてるんだけど、 RADEON、Intelオンボードでは正常に表示されるのに、 GeForceだけ表示がおかしくなる。 同じようなことになったことある人っていない?
そのGeForceの型番は?
DXUTのsimplesampleがノートン2010のファイルインサイトという機能に引っかかり実行を停止されます これってこのプログラムを使ってる人がそんな多くないから、とりあえず引っ掛けておくかとかそういう意味であってます?
質問する場所が違うだろ。 ここは個別ソフトのサポート場所じゃない。 サポセンにでも聞けよ。
>>78 GeForce 9800GT と、
GeForce GT 220 。
RADEON HD 4850、
Intel GMA X4500
だと問題なかった。
DirectX9を使用。
XP、Vista、7、x86/x64と比べてるけどOSの差は見られない。
>>81 ソースうp
前にインデックスバッファを途中から読もうとしたら
GeFoとIntelは想定通りに動いたのに
Radeは先頭からしか読めなかったとかはあった
こういうのは大抵バグがあってラデでたまたま動いてるだけ
アルファブレンド使うならSrcBlendとDestBlendだけじゃなくてBlendOpも明示的に指定しようね。 デフォルト値がADDだから、恐らく今回の問題とは関係ないだろうけど。
>>84 ,85
どもども。
色々試してみた結果、どうもポストエフェクトをかける前の段階、
DPOOL_DEFAULTで確保したRenderTargetのテクスチャに正しく書き込めていないor読み出せていないことが分かった。
DPOOL_DEFAULTで確保したテクスチャって画像のデータを取り出す方法ありますか?
フレームバッファはGDI経由で取れるんだけどなぁ。
87 :
デフォルトの名無しさん :2009/11/05(木) 00:10:00
ふーん
>>86 GetRenerTargetDataとか
DXGetErrorString DxGetErrirDescription
ありがとうございました
>>89 DirectX Error LookupっていうツールがSDKに入ってるよ。
エラーコード入れたら詳細を教えてくれる。
Direct3D9: (ERROR) : [0] ADDRESS 終了するとこんな感じのエラーが続くんですが、メモリリークというやつでしょうか? 与えられた数値からポリゴンの頂点情報の作成を行う関数があり、 その関数を二度目に使用する行をコメントアウトすると発生しなくなるので、そこが原因だと思われます 頂点バッファを毎回Release→Createするようにしてみましたが変わりません 頂点情報を書き換える場合、何か別に開放しなければいけないものがあるんでしょうか?
94 :
93 :2009/11/05(木) 22:02:57
問題の関数は、最初は初期化のときに呼び出して(このときは問題ない)、 次からはメッセージループ中に呼び出しています 頂点情報を書き換えてポリゴンを移動させているのですが、 pd3dDevice->CreateVertexBufferもしくは D3DXCreateTextureFromFileをその関数内で行うと アプリケーションの終了時に必ず上記のようなエラーが出てしまいます LPDIRECT3DTEXTURE9およびLPDIRECT3DVERTEXBUFFER9を デストラクタから呼び出した関数で全てリリースしているのは確認しているのですが、 その後にエラーが起きてしまいます 分かる方いたら教えてください
説明100行書くよりも10行のコードを見た方が早い、 問題と思われる部分を貼り付けてみれ
質問があります。 DirectX9環境で、 pD3DDevice->CreateTexture(1024,1024,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&pTexture,NULL); で作成したテクスチャーをSetTexture → DrawPrimitiveUpで描画したいのですが上手く表示できません。 Spriteを使って表示させた場合は上手く表示できるのでテクスチャの作成に問題はないと思うのですが、 表示方法の問題でしょうか? Spriteでは正常に表示でき、DX8上の同様なコードではうまく動きましたが、 DX9上でSetTextureでは表示出来ないのです。 D3DPOOL_MANAGEDが臭いのですが、動的にテクスチャーを変化させるため、 D3DPOOL_MANAGEDを使わなくてはならないのです。 何かおかしいところがあったら教えてください。m(__)m
↓表示周りのルーチン #define D3DFVF_VERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1) typedef struct _D3DVERTEX_ { float x,y,z; float rhw; DWORD color; D3DXVECTOR2 tx; }D3DVERTEX; void drawtexture(int n,int x,int y,int a) pD3DDevice->SetFVF(D3DFVF_VERTEX); pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); pD3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE); pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_CURRENT); pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE); pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
なんで毎度毎度まともにソースを出さずに、断片的な情報しか出さないんだろう?
pD3DDevice->BeginScene(); pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0x00,0x00,0x00),1.0,0); D3DVERTEX pV[4]; // 座標設定 float w = (float)800/(float)1024; float h = (float)600/(float)1024; pV[0].x = (float)x; pV[0].y = (float)y; pV[0].z = (float)0; pV[0].rhw = 1.0f; pV[0].color = D3DCOLOR_ARGB(a&0x0FF,0,0,0); pV[0].tx = D3DXVECTOR2(0.0f,0.0f); pV[1].x = (float)(x+800); pV[1].y = (float)y; pV[1].z = (float)0; pV[1].rhw = 1.0f; pV[1].color = D3DCOLOR_ARGB(a&0x0FF,0,0,0); pV[1].tx = D3DXVECTOR2(w,0.0f);
100 :
93 :2009/11/05(木) 22:33:29
TranslateMessage(&msg); DispatchMessage(&msg); }else { m_draw->Move(pd3dDevice, 1, L"Data\\maru.png", 300 + mx, 300 - my, 200, 200); m_draw->Draw(); } } return( int ) msg.wParam; } 以上がメインのcppファイルの問題部分を削ったものです 4行目をコメントアウトするとエラーは消えます 以下が描画クラスの関数です HRESULT MyDraw::Move(LPDIRECT3DDEVICE9 pd3dDevice, int id, WCHAR* str,int m_x, int m_y, int width, int hight) { pD3DDevice->CreateVertexBuffer( 4*sizeof(VERTEX_POS),D3DUSAGE_WRITEONLY,0,D3DPOOL_MANAGED, &m_pV_POS[id], NULL ); MY_VERTEX_POS* v0; m_pV_POS[id + 110]->Lock( 0, 0, (void**)&v0, 0 ); v0[0].p = D3DXVECTOR3((float)(m_x - 400), (float)(m_y - 300 + hight), 0.0f ); v0[1].p = D3DXVECTOR3((float)(m_x - 400 + width), (float)(m_y - 300 + hight), 0.0f ); v0[2].p = D3DXVECTOR3((float)(m_x - 400), (float)(m_y - 300), 0.0f ); v0[3].p = D3DXVECTOR3((float)(m_x - 400 + width), (float)(m_y - 300), 0.0f ); m_pV_POS[id]->Unlock(); D3DXCreateTextureFromFile(pD3DDevice, str, &m_pTexture[id + 110]); return S_OK; } 頂点の作成、テクスチャの読み込みは、どちらか片方をコメントアウトしてもエラーは消えません 両方ともコメントアウトするとエラーは消えます 頂点、テクスチャ、どちらのオブジェクトもデストラクタから呼び出した関数でReleaseしています
pV[2].x = (float)(x+800); pV[2].y = (float)(y+600); pV[2].z = (float)0; pV[2].rhw = 1.0f; pV[2].color = D3DCOLOR_ARGB(a&0x0FF,0,0,0); pV[2].tx = D3DXVECTOR2(w,h); pV[3].x = (float)x; pV[3].y = (float)(y+600); pV[3].z = (float)0; pV[3].rhw = 1.0f; pV[3].color = D3DCOLOR_ARGB(a,0,0,0); pV[3].tx = D3DXVECTOR2(0.0f,h); //表示 pD3DDevice->SetTexture(0,pTexture0[n]); pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pV,sizeof(D3DFVF_VERTEX)); pD3DDevice->EndScene();
テキストファイルでくれ。
103 :
96 :2009/11/05(木) 22:45:50
>>100 メモリリーク。デストラクタで開放してるって言うけど、
同じポインタに何度も上書きして、昔使ってたリソースを行方不明にしてるんじゃないの?
つまりデストラクタでは、最後に作成したリソースしか開放できてないんじゃないの?
毎フレーム、リソースを作成する必要もないし。
105 :
93 :2009/11/05(木) 22:56:54
>104 ありがとうございます 開放できてなかったんですね 頂点バッファ作成ととテクスチャ読み込みの前の両方に、開放処理を入れたら解決しました
> pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pV,sizeof(D3DFVF_VERTEX)); 最後の引数おかしくね?
某板で使ってたコテ出してしまったorz
108 :
96 :2009/11/05(木) 23:41:21
>>106 ご回答ありがとうございます。
色々いじってみても表示されません(T^T)
D3DFVF_VERTEXと一致させないといけないのではないのでしょうか?
この場合には、値をどうすればいいのでしょうか。
sizeof(D3DVERTEX) 頂点配列の要素の間隔だから、(余計なことを考えないなら)一頂点辺りのバイト数になって、単純にこうなる。
110 :
96 :2009/11/06(金) 00:00:08
ありがとうございます。 なぜか動かないようです。 今日は遅いので、また明日実験してみます。
m_pV_POS[id + 110]->Lock( 0, 0, (void**)&v0, 0 ); ・ ・ ・ m_pV_POS[id]->Unlock(); これがあやしいぞ
112 :
93 :2009/11/06(金) 02:12:18
>111 それは自分の質問したやつで、もう解決済みです 同時にソース貼ったからややこしいですが 配列の数字がおかしいのは、いろいろいじってる途中だったのがが残ってしまってました
114 :
96 :2009/11/06(金) 14:28:20
今朝、ソースを吟味して再度やってみたら表示出来ました。
>>106 >>109 さん、ありがとうございます。
質問です、2Dゲームを作るためのスプライトがありますけど ここを見たところ評判があまりよろしくないようなので別の方法でやろうと思っているのですが、 スプライト以外で2Dゲームを作る場合は板ポリゴンを作成して、そこにSetTexture関数で画像を張り付けるというのが 主流なんでしょうか?
俺はそんな感じだけど機能に不満が無ければ既にあるものを使えばいい
実際D3DXのスプライトもXNAのスプライトもそうしてるんだろ。
そもそもの考え方がおかしい。 >スプライト以外で2Dゲームを作る場合は板ポリゴンを作成して 全く逆。 3Dデバイスを経由する場合は、板ポリゴンを作成してスプライトを実装しているのであって、排他な物ではない。
マウスの状態取得にDirectInputを利用するメリットは何かあるんでしょうか? GetCursorPos()とかWM_LBUTTONDOWNなんかのメッセージとかを使うよりも 場合によって良いことがあるなら教えてください
単純に移動量を受け取りたい場合以外は利用価値無し。
ありがとうございました
クラス設計ってどうしてますか? メインwindowsを生成するクラス、direct3d関連のクラス、ゲーム関連のクラスって分けたほうがいいですか?
DirectX関係ないし好きにすればいいと思うよ 設計は口で言われて動こうなるものじゃないし 「あーしとけば良かった…」という失敗を何度か繰り返して身につくものだ
とりあえずハードに依存する部分は完全に切り離すように心がければいい希ガス
抽象的なゲームキャラのクラスに仮想関数で一般化した描画関数を設けるのは、最初はきれいな設計だと思っても いつもあとになって使い物にならなくなっちゃう。
既に作ってあるテクスチャのサイズを変えたり画像を変えたい場合、 一回開放してからまたCreateTextureする以外に方法があるでしょうか?
サイズやフォーマットが違ったら作り直すしかないんじゃね? 上記が一緒ならロックして色情報だけ書き換えるということはできるが
わかりました どうもありがとうございます
シェーダ2.0が使えないグラボって、どのくらい昔の世代になるの?
GeForce4の時代が1.x系の最後
サンクス 7年前の型か じゃあ自作のをネット公開しようと思ったときでも、 シェーダ2.0で書く分には環境の違いはあんま気にしなくても大丈夫ってことかな
今つかってるノートPCのVaio-TypeTに乗ってるINTELチップですら シェーダーモデル4.0対応の時代なんだぜ。
FlashのActionScript?というのを使えば、 3DはDirectX、2DはFlashというように同時に使うことができるんでしょうか。
速度を求めないなら何でも好きに使えばいい。
HLSLについての簡単な質問なんですが、こちらで聞いてもよろしいでしょうか。
おk
聞かないのかよ!
すいません。それでは質問させていただきます。 ピクセルシェーダで深度DEPTHを出力する際に、その値は頂点シェーダで変換された座標の z/wということになるんでしょうか。 Direct3D 9 の環境なんですが、固定パイプラインで描画した場合はきれいに表示される一方で、シェーダを使って描画しようと すると、微妙に前後関係がおかしくなったところが出てきてしまいます。
深度を書き込むところはz/wで良い 実際に影を書き込むところでZ値の誤差を考慮に入れてないとか
おっしゃるとおり、誤差を意識していませんでした。 もう少し試行錯誤してみます。ありがとうございました。
つかピクセルシェーダーでDEPTHの出力すると重くなるぞ。 特定の演出で自分で出力とかするのでなければ出力しない方がいい。 ピクセルシェーダーで出力しなけりゃデバイスが標準の方法で勝手にやってくれる。
便乗してピクセルシェーダー関連で質問させてください。 もしかして変換済みメッシュ(D3DFVF_XYZRHW)はPSスルーしますか?
VSはスルーだけどPSは通る
>>145 おお、助かります。
サンプルらしいサンプルが無かったのでどうなのかわからずですた。
何でPS通ってくれないのかもうちょっと調べます。
ありがとうございます。
そもそもちゃんとPSセットしてるのか?
148 :
デフォルトの名無しさん :2009/11/10(火) 17:40:13
C#でDirectXやろうと思ってSDKインストールしたけど (SDK ルート)\Samples\Managedなんて見当たらないし 日本語版のhelpもダウンロードしてなにやらインストールしたようだが まるでどこにも関連付けされてないようだ・・・・ なにもわからん DirectX 9.0 for Managed Codeって別にダウンロードしなきゃならんの?
>>148 MDXはもうやってない。
サンプルのmanagedは2007あたりのSDKからついてない。
ライブラリそのものは1.1系がまだついてるが。
MS純正はDirectX系はXNAと、10以降はWindowsAPICodePackでやるしかないかも。
MSにこだわらなけりゃSlimDXあたりがよさげ
要するに今は時期が悪い
152 :
148 :2009/11/10(火) 18:32:09
orz・・・
代替があるんだからorzしなくてもいいんじゃないか。
つーか、VC++使うべき
D3D9にはTextureShaderというものがあって HLSLでテクスチャフィルが出来るのだが、 HLSLをコンパイルした結果、SIMDに最適化したコードが生成されるのなら プチGPGPUとして使えるのでは?と考えているのだが、 誰か試してくんない?言っとくけど俺は面倒だから嫌だから。
>>155 なんでそんな意味のないことを思い付くの?
質問よろしいでしょうか? N 円の借金がある.年利 a % の利息が付くとして,毎年 b 円返済したなら 何年で返済できるか計算するプログラムを作成せよ. (N, a, b はキーボードから入力する) ただし,無限ループに陥らないように工夫すること. また,利息は返済前にかかるとせよ.なお,利子による端数(1円未満の 利子)は切り捨てること. という問題をしているのですが、 #include <stdio.h> int main(void){ int n, a, b; int i, judge; judge=0; i=1; printf("あなたの借金と、その年利、毎年の返済金を入力してください。\n"); printf("借金N円:"); scanf("%d",&n); printf("年利a%:"); scanf("%d",&a); printf("返済金b円:"); scanf("%d",&b);
気が狂ってんのかこいつ。
159 :
157 :2009/11/10(火) 21:12:45
do{ n = n*( 1 + a/100); i=i+1; if(n < n*( 1 + a/100)-b){ printf("残高が前年度より高くなっています。\n"); judge=1; break; } }while(n>b); if(judge==0){ printf("借金を返済するまでにかかる年数は%d年である。\n",i); break; } if(judge==1){ printf("このままでは借金は返せないので、終了します。\n"); break; } return(0); } と打ち込むと、if文の中の"break"が定義されていない演算子だとか、 (34) : error C3872: '0x3000': この文字を識別子で使用することはできません (38) : error C3872: '0x3000': この文字を識別子で使用することはできません などが出ます。だれかアドバイス宜しくお願いします。
スレチ
DirectX SDKは入れましたか?
162 :
157 :2009/11/10(火) 21:16:09
すいません。間違って書き込みました。 無視してください
スキンメッシュにアニメーションをさせたら一応動くんだけど 一定時間たつとアニメーションのスピードがものすごく速くなるんだけど これってそういうもんなの?
んなことない
165 :
デフォルトの名無しさん :2009/11/11(水) 19:13:11
DirectX9SDKについているmesh viewerでメッシュの表示がおかしくなります。 ですがmesh optionで32ビットインデックスにチェックすると正常に表示、アニメーションされます。 ちなみにXファイルはxsiでエクスポートしたものです。 頂点数が12個の単純なデータで、Xファイルのinndex値も問題ありません。
問題を起こすXファイルをアップできないか?
167 :
デフォルトの名無しさん :2009/11/11(水) 19:50:08
>166 すみません、自己解決しました。 全てのボーンにキーを設定したら正常に動きました。
LPD3DX○○って参照されたらaddrefとかしないといけないんですか?
169 :
デフォルトの名無しさん :2009/11/12(木) 02:53:45
170 :
デフォルトの名無しさん :2009/11/12(木) 07:31:38
そんなもんねーよ(笑)
>>169 ちょっと前まではいくつかDLできるとこあったけど軒並み死んでるね
今、正規の方法で入手するにはDirectX7関連の書籍についてくるCDくらいしかないんじゃ?
200Mくらいのアップローダ出してくれたら上げてもいいけど
axfc
バッファの画像データからテクスチャを作成したい場合、どうすればいいんでしょうか? テクスチャを作ってLockRectしてピクセルごとに書き込むとかしかないんでしょうか
DirectInputで振動させたいからと
ttp://princess-tiara.biz/directx/?chapter=16 ここのサンプルを少し修正してビルドしてみたんだけど、どうやっても振動しない。
振動対応のジョイスティックなのは間違いないので正常であれば振動するはずなんですが。
詳しい人、何が間違ってる可能性あるとかアドバイスくれませんか。
ジョイスティックのボタン入力などは正常に動きました。
またXInputはXBOX360コントローラーじゃないので使ってないんですが、そっち使った方が良いでしょうか?
>>163 advancetimeに10000とかやるとなる
なんでかは知らないけど
>>173 D3DX使ってもいいなら
D3DXCreateTextureFromFileInMemoryとか
177 :
173 :2009/11/12(木) 18:39:43
>176 ありがとうございました やっぱりこういう便利な関数がそろってるんですね d3dx9.libとd3dx9tex.hを含めるだけですか
DirectSoundを使ってみようと思って調べたら、wavファイルしか使えない様子ですが、 ゲームではwav形式のファイルを使うのが普通なんでしょうか?
内部で自分で wav に展開してから再生する
180 :
169 :2009/11/12(木) 20:56:14
とりあえず別アプローチしてみる ありがとね
>>179 ということは、どうやっても再生できないものは再生できない?
wavにデコードしてからバッファに書き込めばよい。
183 :
178 :2009/11/12(木) 23:02:59
どうも とりあえずwavで再生できるようにすれば、 他の形式での再生はそれほど苦労しないということでいいんでしょうか?
まったく違う
DirectSoundは生波形データしか再生できない。 wavは生波形データと、長さやサンプリング周波数などの情報ヘッダで構成されている。 なのでmp3だろうがoggだろうが、wavにデコードしてDSoundで再生しているわけである。 いっぺんにデコードするか、少しずつ読み込みながらデコードするかはまた別の話。
186 :
通りすがり :2009/11/13(金) 01:04:19
D3DXのフォントは遅いと聞いたのですが、皆さんはどのようにテキストを描画しているのでしょうか。 やり方とか教えてください。
directx9でテクスチャを板ポリに貼って表示しているのですがぼやけてしまいます。 D3DX_FILTER_NONEにしています
CreateDIBSectionで作ったDCにGDIでテキスト書いて テクスチャーから作ったサーフェスをLockRecして1ドットずつ転送してる。 (なぜかStretchBltなどがうまくいかない) このときに抜き色とかアンチエイリアス処理をしたりしてる。
189 :
178 :2009/11/13(金) 02:24:08
>185
どうも いっぺんにデコードするとやはりメモリ食いますよね
>186
ttp://marupeke296.com/DXG_Font.html 自分はここを参考にして作りました
GetGlyphOutline()で文字のデータを取得して、
LockRectしてピクセルごとに書き込んでテクスチャとして貼り付けてます
実際に書き込むサイズの整数倍で読み込まないと少しおかしくなるけど、
そこさえ気をつければ特に不満はないです
>>187 D3DXフォントは使ったこと無いけど、レンダリング前に
SetSamplerStateでD3DSAMP_MAGFILTER、D3DSAMP_MINFILTERを
D3DTEXF_POINTにしてみたら?
>>190 >>191 レスありがとうございます。
自己解決しました。
effect::Begin()
の後にSetSamplerStateで設定したら期待した表示になりました。
0.5fのズレの話が出てて気になったので質問です クライアント座標などはドットの座標で(0,0)-(0,0)としても点が表示されるけど、 DirectXの座標は頂点の座標で、(0,0)-(0,0)では何も表示されない、ということでいいんでしょうか?
従来のGDIのRECTとかでも(0,0)-(0,0)は面積ゼロだと思うが
>185 便乗質問だけど 少しずつ読み込んで再生する場合と、まとめて読み込んだ場合なら 前者の方がメモリが少なくなってお得…なんだろうか? デコードさえしちまえば wavの時と扱うのはそんな変わらない気がするんだけどどうなんだろう?
お得です
>>196 バッファが長い
利点 - 処理落ちしてもある程度までなら安定して再生できる。
欠点 - 使用メモリが多い。デコードから再生までにラグが大きい。
短い
利点 - 使用メモリが少ない。デコードから再生までのラグが小さい。
欠点 - 処理落ち時に安定性にかける。
間違っててもシラネ。
>197-198 なるほど。理解できた。ありがとう。 ストリーミングに対応させる為に頑張るか。 音1つだけでもややこしいなorz もう少し簡単な仕様にならんの…マイクロソフト。 公式のサンプルとかライブラリ使うのがベストなんだろな。
SEはオンメモリー、BGMだけストリーミングで十分
太陽系の動きをシミュレートしようと思ったんですが 太陽の周りを回る星の情報を表示したいんですがその情報ウィンドウを 視点をどんなに動かしても同じ向きになるようにしたいのですが どうすればいいんでしょうか? いまのところ算出した角度に回すことで常に同じ向きにしていますが これでいいんでしょうか?
>>201 どういう計算をしてるかわからんけどビルボードとはそういうものだ
>200 なるほど、それなら簡単に実装できる。 別の問題なんだけど 再生していない空きバッファをRELEASEして使うようにしてるから どのバッファにどの音源が使われてるか解らないし、任意の音を個別に停止出来ないようになってしまった。 どうすれば良いんだろうか。やり方間違ってる?
何がどのバッファだか識別できるデータを付けろよ
クオータニオンをシェーダーに渡して回転させるって一般的??
実際ゲーム作ることになったらBGM再生はクロスフェード必要になること 多いから最低2つはストリーミングできるようにしたほうがいいぜ 人間3人が愉快に会話してくれるとセリフをオンメモリってわけにはいかないから これもストリーミングになる・・・すると・・・あれ?声が?遅れて?くるよ? っていういっこく堂状態、ストリーミングの初っ端の準備が結構効いてくる これがハードによっておせぇおせぇ んで色々対応してると泥臭いもんになっていくわけよ 死んだ!ああ、死んだ!とも!
BBX無料鯖やめてほしい検索しても見れない
>>208 なにいってるのかわからない
BBXに検索機能ついてんだろ
3Dで一本のラインを表示したいのですが カメラを動かすと4角形の各辺のどれかになるような感じで動いてしまいます トランスフォームが悪いのでしょうが、具体的に何故かわかりません hr = m_pd3dLine->DrawTransform(vVer3D, m_dwList3D, mat, color);で描画しています、何故でしょうか、よろしくお願いします
その1行で何を判断しろと
matにはプロジェクションのマトリックスを入れました カメラがある角度を越えた瞬間に線が入れ替わります、なぜですか?
なにいってるのかさっぱりわからん
212じゃないけど カメラアングルを変えたときにスムーズに変化しないで ピョコピョコ飛ぶっていう話じゃないかと
普通にDrawPrimitiveでD3DPT_LINELISTを指定して書けばいいのでは? 太さは指定できんが
な、なんだってー そんなのがあるんですか、知りませんでした、やってみますかなり時間費やしたのに
全然意味がわからん、説明してるページ全然ないし、全然線なんか出ないんだけど? struct CUSTOMVERTEX { float x,y,z; }; CUSTOMVERTEX Vertices[] = { {-5.0, -5.0, 0.0}, { 0.0, 5.0, 0.0}, { 5.0, -5.0, 0.0}, {10.0, 5.0, 0.0}, {15.0, -5.0, 0.0}, {20.0, 5.0, 0.0} }; pd3dDevice->DrawPrimitive( D3DPT_LINELIST, 0, 6 );
カタカナで検索したら一杯出てきたわ、すまん
これがゆとりか…
できたwすごすぎワロタwサンクスw
線の描画で太さを指定できないってのがネックだよね? OpenGLではできるのに・・・ みんなどうしてるの?
D3DXVECTOR3 endpoints[2] = { ... }; // 線分の端点 float half_line_width = ...; // 線の太さの半分の値 D3DXMATRIX world_view_projection_viewport_matrix = ...; D3DXVECTOR4 v1, v2; D3DXVec3Transform( &v1, &endpoints[0], &world_view_projection_viewport_matrix ); D3DXVec3Transform( &v2, &endpoints[1], &world_view_projection_viewport_matrix ); if( v1.z >= 0 || v2.z >= 0 ) { // 近平面のみクリッピング if( v1.z < 0 || v2.z < 0 ) { float t = -v1.z / (v2.z - v1.z); D3DXVec4Lerp( v1.z < 0 ? &v1 : &v2, &v1, &v2, t ); } v1 /= v1.w; v2 /= v2.w; // 三角形リストで幅のある線分を構築 D3DXVECTOR2 temp; temp.x = v2.x - v1.x; temp.y = v2.y - v1.y; D3DXVec2Normalize( &temp, &temp ); temp *= half_line_width; vertices[0] = D3DXVECTOR4( v1.x - temp.y, v1.y + temp.x, v1.z, 1 ); vertices[1] = D3DXVECTOR4( v1.x + temp.y, v1.y - temp.x, v1.z, 1 ); vertices[2] = D3DXVECTOR4( v2.x - temp.y, v2.y + temp.x, v2.z, 1 ); vertices[3] = D3DXVECTOR4( v2.x + temp.y, v2.y - temp.x, v2.z, 1 ); vertices[4] = vertices[2]; vertices[5] = vertices[1]; num_triangles += 2; } 使う機会なんてあるんだろうか
>208-209 あぁ、googleとかで検索結果から行くとinfoだから見れないってことじゃね? リファラ送らないブラウザお勧め
プロジェクション行列を_11=2/640, _22=2/480に設定して 画面いっぱいに板ポリを表示させると微妙に歪みます。どうしたらよいでしょうか?
DirectX 始めたばかりです。 VC++ で「デバッグ開始」または「デバッグなしで開始」で動かすと、何もエラーが出ないで普通に動きます。 しかし、 Debug フォルダや Release フォルダにできた .exe ファイルを開くと、 Visual Studio Just-In-Time デバッガが、 「名前.exe [数] でハンドルされていない Win32 の例外が発生しました。」 と言ってきます。 自力で調べた結果、 D3DXCreateTextureFromFile(GetDirectManager()->GetDevice(), filename, &m_pTexture) の行でエラーが起きていることがわかりました。 ここで、 GetDirectManager()->GetDevice() は LPDIRECT3DDEVICE9 型を返す、 m_pTexture のデータ型は LPDIRECT3DTEXTURE9 です。 「デバッグ開始」などで動かしたときは、 m_pTexture はちゃんとメモリ確保されているみたいですが、 .exe から動かしたときは、 NULL のままになっています。 どうすればいいのでしょうか? …と書こうとしたら、気付きました。 画像ファイルのパスが違うんですねw 自己解決しました。 こんなことに1時間もかけるなんてw
>>226 exeをDebug、Releaseフォルダからテクスチャのあるフォルダに移動しなされ
>自己解決しました。 (って言ってるのにしつこい人たちね!)
答えられる質問がきたから嬉しかったんだよ、たぶん
開発環境と実行環境でファイル構成が違う人は DXUTFindDXSDKMediaFileCch の中身みて参考にするとよろし
前にDirectSound関連で質問した者です ストリーミング再生をしようとMSDNやらを読んでやってみたのですが、 wavファイルの波形データの二度目以降の読み取り方がよく分かりません wavファイルへのHMMIOハンドルと一時バッファアドレスをmmioReadに渡しても-1が返ってきます チャンク検索を行った場所から移動すると読み取り位置の情報が失われている感じです どうすれば読み取り位置の情報も渡すことができるのでしょうか?
これから始めようと思うのですがお勧めの書籍はありますか? amazonで検索かけると結構沢山出てくるので選びきれません…… 主に2Dゲームを作ろうと思ってます。
本屋で実際に見て決めなさいな。 他人にとっていい本が自分にとっていいとは限らないんだし。 俺は2Dゲーム程度ならSDK付属のサンプルで十分だと思うが それじゃわかんねぇって人も居るだろう。
>>233 データチャンクに降りたとき位置を記録しておく
ciSubChunk.ckid = mmioFOURCC('d','a','t','a');
mmioDescend(m_hMio, &ciSubChunk, &ciParChunk, MMIO_FINDCHUNK);
long lDataOfs = mmioSeek(m_hMio, 0, SEEK_CUR);
再度先頭から演奏したいとき
mmioSeek(m_hMio, lDataOfs, SEEK_SET);
>236 すいません、オフセットとかの問題ではなかったみたいです ストリーミングを行うクラスを作ろうとしていて、そのクラスから 再生カーソルの進行で出されるシグナルを受け取るスレッドを(thisポインタを渡して)スタートさせ、 シグナルが来たらデータ読み取りとバッファ書き換えを行おうとしているのですが、 クラスメンバのHMMIOハンドルとかLPDIRECTSOUNDBUFFER8とかを、 スレッドから呼び出したメンバ関数で使おうとすると失敗するんです ReleaseもDeleteもしてないし、音楽のループ再生も続いてるからバッファも失われてないと思うんですが
>>237 ダイレクトサウンドオブジェクトを作成したスレッドと
シグナルを処理するスレッドが異なるため、ということが考えられる
シグナルを処理するスレッドからinvokeかメッセージを飛ばして
オブジェクトを作成したスレッドで処理を行ってみては
質問です。Direct3D9 を使い、Windows ターゲットのアプリを作っています。 IDirect3DDevice9::CreateTexture を用いて、あるサイズのテクスチャを作成したとします。 LockRect でバッファへのポインタおよびピッチを取得できますが、 このピッチが、テクスチャの幅×深度(1ピクセルあたりのバイト数) に等しくないことはありえるのでしょうか? ただし、テクスチャは必ず 2^n 単位の大きさで作成しているとします。 また、Voodoo などの 256×256 しか対応していない古いグラボは考えないこととします。 つまり、m×n のテクスチャに、全ピクセルがリニアに繋がったビットマップをコピーするとして、 memcpy(p_texture, p_bmp, 全ピクセル); のように1行でコピーすることは出来ず、 for (int y = 0; y < height; y++){ memcpy(p_texture + pitch * y, p_bmp + width * depth * y, 1行分のピクセル); } のように1行単位でコピーするしかないのでしょうか。 ・等しいことが保証されている ・保証はされてないけど等しくない環境なんてぶっちゃけ存在しない ・等しくないことが普通に存在する という感じでお答えいただけるとありがたいです。 実際にやりたいのは、ファイルに圧縮された画像をテクスチャに直に展開することです。 ところが、仕様上、画像の解凍が行単位では行えません。 そのため、一時バッファに展開してから行単位でコピーすることになり、二度手間になってしまっています。
今無くても将来的には出てくるかもかもしれないので保証しかねる。
>>239 検証してないが、テクスチャの横幅がGPUのメモリアクセス粒度より細かい場合は
不一致になるんじゃないか?
バス幅512bitのDDR2なら、2048bit単位でアライメントされててもおかしくないかと。
作れるのかどうか知らないけど 1ピクセル1バイトの 2x2のテクスチャ とかどうなんだろ
保証されていないからわざわざpitchがあるんだろ。 どれだけ頭が悪いんだよ。
初心者スレですしまぁまぁ
pitchが期待通りなら、二度手間じゃないように処理すればよいし、 期待と違うなら、違う処理を行うなりアプリケーションを終了させるなりすればよい。 条件比較すら省略したプログラムを書きたいというのなら別だろうが。
DXT圧縮されたテクスチャは幅×高さじゃなく、ブロックごとのサイズ×ブロック数 だったかね。
DirectX9にてシェーダーの使い方を勉強しています。 サンプルのfxファイルにてVertexShader = compile vs_3_0 VS(); というような記述があり、この部分でHLSLをコンパイルする時に シェーダーをバージョンいくつ用にコンパイルするか指定するのだと思いますが これ関して質問させてください。 自分のHLSLの記述にて古いシェーダーバージョンで間に合う範囲の事しか 書いていない場合、対応ハードを増やすために、可能な限り古い バージョン(1_0?)でコンパイルすべきですか? それとも最近のバージョンでコンパイルすことは、何らかのメリット(最適化)などが 在り得るのですか?
新しいグラボは新しいバージョンにすると速くなる……らしい。 でも1_0はさすがにもう無視していいレベルじゃないかな。
249 :
237 :2009/11/15(日) 23:35:39
>238 ありがとうございます メッセージを飛ばす、というのはSendMessageでメッセージループに送るということでしょうか? とりあえずシングルスレッドに戻して解決(?)しました 制御方法をもうちょっと勉強してからまたチャレンジします
らしいとかソースも自己検証もないような情報を垂れ流す馬鹿って、 どれだけ頭が悪いの?
サウンドのストリームやるなら素直にXAudio2を使うべき。 DirectSoundでやるなら先にマルチスレッドのデザインパターンを一通り学んでからじゃないと怖いだろ。
252 :
237 :2009/11/16(月) 00:54:33
>251 サンプルが色々あったのでDirectSoundでやってみました XAudio2も勉強してみたいのですが、詳しい情報がMSDNくらいしかなかったので… 今からMSDN読みながらXAudio2でも作ってみます こっちのが圧縮音源も扱えるみたいで便利そうですね
XAudio2の情報量の少なさは確かに。 今時DirectMusicで講座している所も多いし、仕方ないと思えば仕方ないな。 DirectInputで質問だけど、 DIPROP_DEADZONEの設定していても軸の値が指定範囲内でも変動されるのは仕様? 「軸がデッド ゾーン内にあるとき、その軸は範囲の中心にあるものとして報告されます。」 って書いてるから明らかにおかしいと思ってる。 範囲の中心にあるものなら範囲の中心である0が返されると思ってるけど間違い?
範囲の中心でゼロを返す
253だけど実装方法が間違ってたわorz RANGEが1000にしていたから500で半分まで認識させないって思っていた。 DEAD_ZONEの記述は10000までで別だったんだなorz XAudio2、資料探したけど本当にMSDNくらいしかないのな。 今のところ、XInput使うメリットってある?XBOX360コントローラーでFFBさせるくらい?
256 :
247 :2009/11/16(月) 17:27:49
>>248 レスありがとうございます。
取り合えず問題がないうちは2_0を使い続けてみようかと思います。
XAudio2の簡単さは別に講座とかいらないと思うんだが・・・ SDKに入ってるサンプル見てみろってWAVのストリーム再生なんて 数時間もあれば出来るくらい簡単になってるから。
DirectXを勉強しはじめたのですが、サンプルなどをみているとWM_PAINTが来たときに描画するものがほとんどでした
case WM_PAINT: Render();みたいに
WM_PAINTは無効領域が発生したときに発行されるものとききましたが
どこも無効領域なんて発生していなさそうなのにWM_PAINTが来て描画されています
これはDirectXがWM_PAINTを発行してるということでしょうか?
私が参考にしてるサイトはこれです
ttp://www36.atwiki.jp/directx/pages/22.html
WM_PAINTで書くようにしてあるサイトなんて見るな
ではどうすればいいんですか!どこに書くんすか!
spy++でウィンドウが処理したメッセージでも見てください。
>>260 なにファビョってんのよ。
サンプルなんて、DX_SDK\Samples\C++\Direct3Dの中に腐るほどあるだろ?
DXUTを解読しながらになるけどな。
は?
質問に答えてください。
>>265 何を言ってるんだ。質問には回答は出てるんだぞ。
>いいサンプルがない
→DirectX SDKのサンプルを読め
>コードのどこでレンダリングすればいい?
→サンプルのソースコードに書いてある
具体的に書いてください。 あと、ふざけんな。
そういうのいいから。
それはこっちのセリフだ!
こんなとこでリロードしてる暇あったらサンプル見て無い頭を働かせろ
わからないなら黙ってればいいのに。
プログラムに向いてない人間の見本のようなやつだな
質問に答えてから言ってくださいね。
>>258 ここの住人は
258がゲーム等を作ると仮定して話してる
んで、メインループにはPeekMessage使えよと。
質問に対する答えはわかりませんとねw
まずは質問の仕方を質問してくれ。
fusianasanしたら教えてやる
>>258 BeginPaint呼んでないから無効領域がクリアされず残ったままなのでいつまでもWM_PAINTが来るってことじゃね
BeginPaintしたら困ったことになるかもしれんよ
case WM_PAINT: Render(); ValidateRect( hWnd, NULL ); return 0; DirectX のヘルプより
自己解決しました。 ありがとうございました。
久しぶりにこの板で噴いたw
これはひどい
全然自己解決じゃねぇだろwww
これを「タコ解決」と言うw
,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ| |i i| }! }} //| |l、{ j} /,,ィ//| i|:!ヾ、_ノ/ u {:}//ヘ |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ ノ ' / ノ:::::`ー-、___/:::::// ヽ } _/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ
各種インターフェースの参照カウントの数を知る方法ありますか?
こんな重要な値なのに不思議なことに直接調べる方法がない m_cRefは通常private AddRefすれば+1された数値が戻るので、これを手がかりにするしかない
単純に言えば、3つの外積ベクトルは、おおよそ0度か180度のどちらかになるから、 それぞれの内積を計算して、正なら同じ向き負なら違う向きとすればいい。
つかDirectXと関係ないじゃん。スレチ。
インターフェイスの参照カウント値が必要になったことなんてないけどな・・・。
ATLのCComPtrを使っている人と使っていない人の違いとか。
>>292 ちゃんとDirectXで作っておりますが、言葉が抜けてました。失礼しました orz
>>291 そうなんですね。ありがとうございます。感謝!
>>293 質問を勝手に自分の理解できる範囲の問題に解釈し直すのはいくない
>>288 その戻り値を当てにするのは
推奨されないってさ。
参照カウントを得る方法はないと
しといた方がいいな。
特にマルチスレッド環境だと、戻ってきた参照カウントなんて全く信用できんしな。
D3DXCreateTextureFromFileExを2回行っても参照カウントが1のままだったよ なんで? もちろんIDirectTextureをメンバ変数にコピーした
至極当たり前だと思うんだが、どういう動作を期待してるんだ?
二つのテクスチャオブジェクトのアドレスが違うなら、別々のテクスチャオブジェクトってことだ。 もし同じオブジェクトを返す設計だったら、参照カウントは2になっていただろうね。
>>300 あれ、ごめんなさい。俺勘違いしてるかも、、、
インターフェイスポインタを取得しても自動で参照カウンタは増えないってことなのでしょうか?
本来はコピーしたら明示的にAddRefするということ?
(コップを用意して、蛇口から水を注ぐ)という関数を2回呼び出します コップAを用意します コップAに水を注ぎます コップBを用意します コップBに水を注ぎます コップAの使用回数は1です コップBの使用回数は1です
そもそも コピーと参照の違いを理解してないのでは?
>>302 は日本語も怪しそうだ。
そもそもコピーなんてしてないだろ。
すみません。キャラクターの法線がx0 y-1 z0なんだけど、 yは+1じゃないとおかしい? 計算の順番逆なのかな。それともこれで合ってる?
キャラクタにとっての「真上」のことか? 普通は正にとらない?
正にとるのが普通なんですね。 てことは三角形は頂点を右回り順に繋がないと、法線がひっくり返るのかな。 ありがとうございました。
質問なんですが ゼノギアスの最初の部分で画面が揺らぐんですが あれってどうやったらできますかね? シェーダーってテクスチャを変換したりするものだと認識してたけど 画面を歪ませるなんて可能なのかなあ?
>>309 レンダリングターゲットをエフェクト用のテクスチャに変更して
効果をかけてから画面に出力
312 :
309 :2009/11/20(金) 12:07:11
あーやっぱりそういう方向ですか・・・ まあしかたがない コツコツやってみます
なにが仕方ないんだ・・・ シェーダーでやるのが今時の主流なのに。
直接フレームバッファを操作する方法があると思ったとか? DirectX11とかでスワップ前のレンダリングサーフェイスを 直接変更できるとかそういうのないの?
>>314 フレームバッファを直接いじったら色々と面倒だからこそ、
長いDirectXの歴史で便利な仕組みを色々用意してきたわけで。
必要がないだろ。 よほど単純なアプリで作らない限りテクスチャへのレンダリングを介さないなんてないんだから。
317 :
デフォルトの名無しさん :2009/11/21(土) 07:04:00
XAudio2を使っていて、同じSEをガガガガ〜と連続で鳴らしたいのですが、 IXAudio2SourceVoice::SubmitSourceBuffer()を連続で呼んでも 前の音の再生が終わるまで、次のキューが再生されないみたいなので、 どなたか、前の音が再生中でも次の音を再生させる方法をご存知無いでしょうか? StopしてFlushSourceBuffersではなく、止めないで連続で鳴らしたいのです
バッファを複数作れ
319 :
317 :2009/11/21(土) 16:44:35
ソースボイスを複数作れってことで宜しいのでしょうか? wavのフォーマットが混在してるので、 WAVEFORMATEXの値ごとに複数CreateSourceVoiceするのも非効率かなと思ったのですが… ご回答ありがとうございます。
>>319 Stopかけてバッファ開放して、新しいバッファを割り当ててまた再生を再開するだけで十分じゃね?
321 :
317 :2009/11/21(土) 19:44:50
それだと、前の音が停止してしまうので、前の音を流したまま追加で再生したいのですが…
すみません。DirectX9で D3DXIntersect()でレイを飛ばし当たり判定をしようとしています。 しかし、描画に使うものと同じメッシュ(LPD3DXMESH)なのに位置が違うらしく 正常なポリゴンに当たってくれません。 何やら取得後に知らない間に座標変換を受けているらしいとわかったのですが・・ どこあたりにその変換行列が存在するのでしょうか・・? 大まかでも良いので教えて下さると助かります orz
323 :
322 :2009/11/21(土) 20:41:07
あ・・単にプロジェクションやビュー行列の事なのかな・・ 自己解決できるかもしれません。失礼しました;
>>321 ああ、そういうことね。やってみたらすぐに分かるけど、
簡単に音割れを起こしてだめになるよ。
だから前の音は止めてから次の音を出すべき。これでも違和感はないよ。
音割れはボリュームを抑えるだけで解決する話だが、 いったい何を言っているんだろう?
326 :
322 :2009/11/22(日) 10:36:57
うーん・・解決できない・・ D3DXIntersect()にセットしたメッシュの座標を 何万倍に拡大しようが回転しようが全く変化が起きない・・orz いったい内部で何が起きているんだ・・(´・ω・`)
327 :
322 :2009/11/22(日) 10:59:55
あ、やっぱり自己解決できるかもしれません。失礼しました;
328 :
322 :2009/11/22(日) 12:10:24
>>327 酷い偽者だ。こんな人間が生きているだなんて信じられない(´・ω・`)
329 :
322 :2009/11/22(日) 12:56:36
330 :
322 :2009/11/22(日) 13:08:06
楽しくなってきた。しかしこんな人間が生きているだなんて信じられない(´・ω・`)
>何やら取得後に知らない間に座標変換を受けているらしいとわかったのですが・・ どうしてそう思ったんだ?
使ったことないからうろ覚えだけど D3DXIntersectはメッシュのローカル座標系で計算するから メッシュの位置とか大きさは関係ないはず レイの始点座標をワールド座標で指定するのではなく メッシュからの相対位置で指定しないといけないのでは?
質問スレなんだから、独り言じゃなくて質問しようぜ。
>>331 同じメッシュ(LPD3DXMESH)をDrawSubset()してレイを飛ばしているのに
描画結果とレイが当たる位置に約5倍のスケール差が有るから でした。
>>332 相対位置とな・・やってみます。ありがとうございます(´・ω・`)
こういうのはソースが無いと間違いを指摘しにくい >322の情報だけで答えが得られるはずがない marupekeの方にも質問してるみたいだけど 質問の仕方が下手糞すぎる
とりあえずD3DXIntersectを使わず、自分でレイと交差するか判定するコードを書けばいいだけの話。 D3DXにべったり頼るから、何が起きているかも分からなくなるんだよ。
D3DXにべったり頼りまくってますが何か? 特にFont周りは便利すぎる。当分は自作する必要性は感じないな。 Texture読み込みまわりは近々自作する予定。
“自作する必要性は感じない”のに、“近々自作する予定”なのか
>>338 D3DXの別の部分の話をしてるんだから扱いが別になっても不思議じゃないだろ?
それで揚げ足取ったつもりかね。
ちなみにTexture読み込みを切り替えるのは、PNG以外の形式をサポートさせるため。
他の部分としてはEffect周りだな。これも全く置き換える予定なし。
自分は338ではないけど Fontに関しては自作しないってことね
>>340 だね。工夫すれば品質をさらに向上させたり回転させたり半透明にしたりできるし。
ただグリフの上下で色を変えたりはできないから、
そこまでやりたくなれば自作するしかないかなぁ……。
>>336 こいつD3DXが絡むと、いつも沸いて出てくるが
自分が最もD3DXに依存してるってわからんかね。
誰もそこまでD3DXを意識してないよ。
フォントこそ自作するべき部分だろ・・・1日もかからんのだし。 コリジョンのがよっぽど面倒くさいわ。 目で見て分かりづらいからとかくデバッグが面倒くさい。 という感じで人それぞれなので自分の好きにすればいいし、 ありもののライブラリを使うという選択肢は初心者にはベターだと思う。
頼った結果、頼ることすら他人を頼る。 そして頼ることすらさらに頼る。
DirectXの初心者スレだしいんじゃないの
DXSDKに含まれるD3DXを使った上での質問なのに、 使う奴が悪い的な回答は、的外れ以外の何者でもない。 本当に何を考えているんだか・・
使うのが悪いんじゃなくて、内容を理解しないのが悪いんだろ。
>ちなみにTexture読み込みを切り替えるのは、PNG以外の形式をサポートさせるため。 このPNG以外の形式もサポートしているのを知っているのか、疑問になる発言が気になって仕方がない。
テクスチャはDDSが鉄板だと思うがね。
さしあたりは2Dテクスチャしか使わない。 可逆ではかさばる。 PNGでは展開が重い。 ということなので独自形式から展開するしかないな、という結論。
非圧縮ではかさばる、非可逆はダメ。 の間違い。
PNGで重いって、いったいどれだけ大量の画像を一挙に読み込むつもりなんだろう?
何というか、もういろんな意味でダメダメ臭がするんだが
枚数は大したことないが、大きさがでかい。(1024四方とか2048四方とか) そして不定枚数読み込むので現状すべての画像を先に読み込むことはせず、そのつど読み込んでる。 で、0.1〜0.3秒かかるんだけど、これをできるだけ削ろうとしている。
PNGの読み込みは思いと感じても ミップマップのCPU生成は軽いと感じるんですね。
>>355 んん……?
ひょっとして、ミップマップってGPUが作ってくれたりはしないの?
>>356 当たり前だろ・・・。
読み込みの時に処理してんだからCPUだ。
でないと別スレッドで処理したときに死ぬだろ。
GPUに作らせることもできるが、D3DXにやらせたらCPUだな。
ふーむ。ということは、 なおさら独自形式ロード+GPUによるミップマップ作成と、 DDSロードとで読み込み時間を比較してあげないといけないな。
独自形式とDDSの違いがわからん。 圧縮しないでミップマップもキューブマップも仕込むならまんまDDSじゃん。
そもそも速度を気にするならスレッドわけて非同期読みにしなさいよ。 あぁでもGPUでミップマップ作るならスレッド分けられないか。 圧縮の解凍やテクスチャへの展開は確かにCPUの問題だが、 ファイル読み込みにおいてはメモリにHDDのアクセスが一番問題。 どんだけCPUで最適化してもスワップ中とかシークの都合でいくらでも遅延する。
圧縮はする。圧縮してもギガ超えるからな。 ただPNGでは展開がやや重くて不満だ。 読み込み用スレッドはすでに分けてある。 だから今回の問題はクリティカルというほどのことではない。 だが、読み込み方法を変更することで動作が改善できるならする、ということ。 >ファイル読み込みにおいてはメモリにHDDのアクセスが一番問題。 だな。であるからこそ、大きなテクスチャのロードは小さく圧縮され、 それほどでもないファイルは展開が高速であることが望ましい。
DDSのDXT3かDXT5あたり使えばいいんじゃね?
2D用途だとDXTnは画質の劣化が許せないケースがよくある。 大量のパターンを持つ2D格闘ゲームなんじゃねーの。
頂点宣言でブレンドインデックスをD3DDECLTYPE_UBYTE4に設定した場合、 頂点シェーダーではfloat4型で受け取るんでしょうか? DWORD型で0x01020304とした場合は{1.0f,2.0f,3.0f,4.0f}が入っているんですか? オフセットは合っているのですがインデックスがうまく受け取れません・・・
366 :
デフォルトの名無しさん :2009/11/23(月) 07:41:16
>>365 BLENDINDICES(n)セマンティックは頂点シェーダ側ではuintで受け取るんじゃなかったかな
無圧縮と圧縮の速度比較で馬鹿がよくやるミス。 ディスクキャッシュにデータが入っていることを考慮しないで、 無圧縮の方が高速だと思い込む。
つかその辺の処理はzlibで固めてCPUで展開が定番なんじゃねーの
>zlibで固めて さて問題。 PNGの圧縮は何を使っているでしょう?
展開は比較的軽いは軽いけど やっぱランレングスが一番ちょっぱやなんだよね 最近、ムービーがでかすぎてロード時のテクスチャサイズ意識したとこないわ
ムービーのテクスチャへのレンダリング、めんどくさくてまだ実装してないな……。
確かにPNGはzlibだが、 PNGじゃキューブマップもミップマップも入らないだろって話。 つか読み込み時間気にするほど大量にデータ読んでるのに なんでVRAMの事は気にしないんだ?
>>367 ありがとう
自己解決しました。float4でOKでした。
DWORDでなくBYTE[4]もOKでした
>>373 キューブマップはまだ扱ってない。
ミップマップはGPUから生成できるならそうしようか、という考え。
VRAMのことを気にしなくていいのは、同時に使用するテクスチャの量は知れてるから。
せいぜい50〜100MBくらいかな。
俺なんかシステムメモリにも同じもんおいてあるぜ さらに2度描きようのテクスチャとかもリアルタイムでボコボコ作るし いらないけどほったらかしにしてある描き込み用テクスチャも 面倒だから放置だわw 上から文句言われるのはロード時間だけだしね
>俺なんかシステムメモリにも同じもんおいてあるぜ 突然、流れと関係ない自分話をする奴って、 やっぱり脳に何らかの障害があるんだろうね。
関係あるだろw
背景用のスカイドームとかスカイボックス、地面って、でかいメッシュで良いんですか? 環境シェーダーみたいなのないんでしょうか。 スレ違いだったらすみません
>>378 システムメモリの容量に関する話は全く出ていないんだが、頭は大丈夫か?
シェーダーで描くにしてもポリゴンが無きゃ書き様がないだろう。 あとはまぁほしけりゃ自分で作れ。そのためのシェーダーだ。
>>380 なんでキレ易いの?
育ち悪いの?
死ぬの?
ああ、死ぬよ
私の為に喧嘩はやめてっ!! やるなら、どっちかの民族が滅亡するまでやって!!
漢民族vs朝鮮民族 ファイッ!!
空気読まずにあんまり関係なさそうな質問何だけど Xファイルの読み込みから表示までってクラス化したほうがいいのかなあ? あとオブジェクトを透明にしたら描画の順番で透けて見えるかどうかが変わっちゃうんだけど やっぱりこれは順番を気をつけるしかないの?
>>386 自分でクラス作るくらないら独自フォーマットにしてしまった方が早いと思わなくもない
アニメーション管理とかを別にするなら別にクラス化してもいいんじゃね?
>>386 一旦テクスチャにレンダリングしてからビルボードとして画面に出すのが定石
その定石が書いてあるサイトを教えてください
>>389 のオッズ
実は高度な技法の一端を書いている天才:10000.00倍
適当にそれっぽい単語でそれっぽいことを書いてる馬鹿:1.001倍
>>391 平面の方程式は、a * x + b * y + c * z + d = 0
うち、xとyを指定してzを求めたい。
z = -( a * x + b * y + d ) / c
これだけでしょ。ここに違いが無いというなら、
平面を間違えて作ってるんじゃないの?
BeginSceneとEndSceneは、Presentの前に1度呼ぶのと描画のたびに呼ぶのではどちらがいいのでしょうか? //1度だけ呼ぶ例 BeginScene(); Draw1(); //DrawPrimitiveなどの描画メソッド Draw2(); // EndScene(); Present(); //描画のたびに呼ぶ例 Draw1(); //BeginScene,EndSceneを包括する描画メソッド Dwar2(); // Present();
>>394 Multiple non-nested IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene pairs between calls to present are legal, but having more than one pair may incur a performance hit.
ありがとうございます。 ちゃんと記載されてるんですね。
>>393 計算式を思いつく範囲であれこれいじってみたけど、間違えてはないみたいです。
今は書いて頂いた式でやってみています。
斜面の法線方向も間違えてはいないみたいですし・・
平面=キャラのxz座標?ではないですよね・・。
計算式以外を片っ端からチェックしてみようかと思います。
ありがとうございました。
法線の求め方は、頂点2-1ベクトルと頂点3-1ベクトルの外積 で間違えてないはずなのに よく見ると法線のx方向だけが真逆になってる・・何処を間違えているんだろう。 全体のx座標がひっくり返ってるんだろうか。うーん・・。
DirectXと関係ないから。
>>398 1.自分が扱っている座標系が右手系なのか左手系なのか、理解していないのではないか。
2.ベクトルの外積がどういう計算なのか理解していないのではないか。
つまり外積すれば法線が求まる、というだけで理解しているのではないか。
>>400 ありがとうございます。
モデル作成が右手系で確認したのですが大丈夫でした。
そして、半分やけになって関連処理コードを全部消して書き直したら正常に処理・・orz
しかし確かに右手系と左手系でどっち方向が+なのか言えと言われたらすぐに言えないですし、
外積も2ベクトルに垂直なベクトルがどっちか方向に出る という認識しか無いし、勉強不足でした。
今後内積も合わせて注意して行きたく思います。ありがとうございました。
DirectX9でエフェクトとシェーダを使っているのですが PNG画像を板ポリに貼り付けての描画がうまく行きません。 透明付きのPNGファイルなのに、透明になりません。 passの中のステート設定は、これで大丈夫でしょうか? pass { PixelShader = compile ps_2_0 PS_Sample(); ZEnable = false; AlphaBlendEnable = true; }
その設定自体も大丈夫ではないし それだけで判断はできない。
404 :
402 :2009/11/25(水) 17:49:28
>>403 レスありがとうございます。
エフェクトファイルを全部書きます。ちなみにPOSITIONTで2D描画するので頂点シェーダは記述していません。
texture g_TextureDiffuse;
sampler SamplerDiffuse = sampler_state
{
Texture = <g_TextureDiffuse>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Point;
};
struct VS_TO_PS
{
float4 Position : POSITION;
float2 Tex : TEXCOORD;
float4 Color : COLOR;
};
float4 PS_Sample( VS_TO_PS In ) : COLOR
{
return tex2D( SamplerDiffuse, In.Tex );
}
technique Technique_Sample
{
pass
{
PixelShader = compile ps_2_0 PS_Sample();
ZEnable = false;
AlphaBlendEnable = true;
}
}
ヒント: BlendOp, SrcBlend, DestBlend
まあ、後テクスチャが不透明の可能性があるから、 こうしてみてよ。 float4 PS_Sample( VS_TO_PS In ) : COLOR { return 0.5f.xxxx; }
407 :
402 :2009/11/25(水) 18:12:50
>>405 ありがとうございます。その設定を調べて見ます。
>>406 それで実行するとくすんだ黄色みたいにポリゴンが塗りつぶされるんですが
「.xxxx」ってどういう意味なんですか?
0.5f.xxxx = float4(0.5f,0.5f,0.5f,0.5f)
409 :
402 :2009/11/25(水) 18:52:34
>>408 なるほど。ありがとうございます。
ところで
>>406 ではどうやったって灰色が出力されるだけかと思います。
実際試したら灰色でした。(さっき「くすんだ黄色」と言ったけれど
背景との兼ね合いでの目の錯覚でした。)
これでテクスチャの何が分かるというのですか?
アルファ値も入ってるだろう
411 :
402 :2009/11/25(水) 18:57:54
>>410 テクスチャじゃなくてポリゴンが透けるかどうかをテストできるって事ですか?
>>409 半透明にならない理由が
レンダリングステートにあるのか
テクスチャにあるのか切り分け出来る
>「くすんだ黄色」と言ったけれど
>背景との兼ね合いでの目の錯覚でした。
これは背景と合成された結果、くすんだ黄色になったのか?
それとも、灰色を見間違っただけか?
前者なら、レンダーステートは何かしら作用していると判断していいのでは?
初心者はとかくデバッグが出来ないからなぁ
414 :
402 :2009/11/25(水) 19:15:50
>>412 なるほど・・・いかなる単純な透明であれ、ステートが関係するものなんですね。
アルファ値を含む単純な出力なら、ステートとか関係なく半透明になるかと思いました。
↓こんな感じで実験したら
float4 col;
col.r = 0.9f;
col.g = 0.3f;
col.b = 0.3f;
col.a = 0.1f;
return col;
a が全然作用しないと分かりました。つまりステートの設定ができていなという事なんですね。
よくわかりました。ありがとうございます。
後は
>>405 について研究して見ます。
ステートに関係しないと困るだろう。 アルファ値に半透明度ではなく意味のある数値を含めて描画したい場合とかどうにもならんくなる。
>>405 のデフォルト値は
BlendOp = ADD
SrcBlend = ONE
DestBlend = ZERO
だから、AlphaBlendEnableをtrueにしただけじゃソースが素通りで何もブレンドされないね。
417 :
402 :2009/11/25(水) 20:06:01
>>415 なるほど…
>>416 それ書くとクリエイトエフェクトファイルした時点でエラーが発生します!
例えば
pass
{
PixelShader = compile ps_2_0 PS_Sample();
ZEnable = false;
AlphaBlendEnable = true;
BlendOp = ADD;
}
が通りません。試しにBlendOp = ADD;をピクセルシェーダー内に移動してもダメでした。
どこが間違っているのでしょうか?デフォルト設定なら通るはずなのですが・・。
418 :
402 :2009/11/25(水) 20:07:29
>>417 BlendOp = D3DBLENDOP_ADD ;
にしても1にしてもだめです。
DirectXのサンプルについてくるソースなんかを参考にして書き方を覚えるべき。 チュートリアルが一通り使い方を学べるようになっている。
ゲームをする時にDirectXの初期化に失敗しました と出るのですが これの解決策を教えてください
メーカーに聞けよ!糞が
422 :
402 :2009/11/25(水) 21:53:01
どなたかエフェクトファイルとシェーダーを使いつつ 透明部分を含む板ポリを描画するようなサンプルをご存知の方いらしたら教えてください。 (SDKのHELP、Web、本など媒体は問いません。) テクスチャの表示自体は古いテーマなので、シェーダやエフェクトと絡めて 説明されている資料が今のところ見当たりません・・・。
いやシェーダーやエフェクトにはそんなに関連しないけどな・・・半透明って・・・。 既存のライブラリで半透明描画してるやつとかのソース覗くのが早いんでない。
426 :
402 :2009/11/25(水) 23:11:14
>>423-425 ご助言ありがとうございます。
今、シェーダーをデバッグモードにして、その後元に戻してから
BlendOp = 1;をpass内に書いたら、エラーで落ちずに済みました。
何が何だか分からんのですが、ともかくこれで前に進めます。
427 :
402 :2009/11/25(水) 23:25:28
DestBlend = 2; にしてみたところ ようやくできました。 皆様ありがとうございました。
2ってD3DBLEND_ONEか? アルファ付きPNGで半透明合成したいときにDestBlend=ONEは絶対間違ってる気がするが・・・
普通はこうだべ? D3DRS_BLENDOP = D3DBLENDOP_ADD; D3DRS_SRCBLEND = D3DBLEND_SRCALPHA; D3DRS_DESTBLEND = D3DBLEND_INVSRCALPHA; 加算合成したいならまあONEでいいおね
430 :
402 :2009/11/26(木) 00:03:10
>>428 確かに2= D3DBLEND_ONEです。
私がやりたいのは画像の一部が透明の描画であって
「半透明合成」とは多分違うと思います。
>>430 半透明部を含む画像を描画することを半透明合成というんだが、
こいつは何を言ってるんだろうか……?
432 :
402 :2009/11/26(木) 00:06:21
>>429 おお!
今まで重なった部分が明るかったのですが
その設定でやったら解決しました。
ありがとうございます。
Intel GMA 950でシェーダーを使ってメッシュを レンダリングがうまくいかないんだが、何かコツある? ・固定シェーダー+POSITION_RHW ・固定シェーダー+POSITION ・HLSLシェーダー+POSITION_RHW は描画が確認できるんだが、 ・HLSLシェーダー+POSITION の確認が取れない。
>>433 うちもシェーダーで悩んだのだが、HLSLの症状は逆だな。
ヒントになるかわからないが、バーテックス定義はてっきり
SetVertexDeclaration()
をしないとダメだと思い込んでたが、これコメントアウトして
SetFVF()
にしたら表示された。
この似たような機能の2つの関数はちょっとなんだこれ
>>433 外しているかもしれないが、
GMA 950は頂点シェーダのハードウェア処理には対応していなくて、
デバイス作成時にソフトウェア頂点処理のフラグを指定しないと駄目だった気がする。
ゲームとかの水面の揺らぎってスキンメッシュ?ポリゴンを動かしてんの?それともPシェーダー? あんまりシェーダー使わないからわからないけどPシェーダーでできんのかなあ?
t-podってサイト理解しづらくないですか?数式が難しいとかじゃなくて
>>439 あれ?なんかに書いてあった気がしたけど気だけか
今度から気をつけるよ
441 :
402 :2009/11/26(木) 11:44:01
>>434 ピンポイントなHELPをありがとうございます!
想像以上に複雑でしたが、お蔭で理解できました。
マップを作ってるんですが、広いマップの時はマップを分割して自分のいる場所周辺だけ読み込むのが普通ですか? それともすべて配列に入れてしまったほうがいいんでしょうか?
周辺だけだろう でかさによる
実際にどのぐらいになるのか容量を明確にしろよ。
>>402 宜しければわかりやすくまとめてここに書いてもらってよいですか?
マップを作る勉強なんですが、周辺だけ読み込むとした場合、 周辺と現在マップを入れた9マップを0〜8の9配列に読みこんで作ろうと思うんですが、 常に配列番号4を中心としてマップをずらして配列を再作成すると3〜5マップを、マップ切り替わりの度に読み込むことになりますよね? このやり方でがんばってもいいんでしょうか?現在位置とマップの高さ座標を再作成される配列を通して計算するところが複雑になりすぎて不安なんです。
がんばってもいい
448 :
402 :2009/11/26(木) 16:19:23
>>445 透明付きPNG画像を単純に描画する時は次のように設定するとうまく行きます。
----------------------------------------------------
AlphaBlendEnable = true;//アルファブレンドを有効にします
BlendOp = 1;//ブレンドの方法に加算合成を指定
DestBlend = 6;//ブレンドする時、背景のRGBAに(1-As, 1-As, 1-As, 1-As)を乗算
SrcBlend = 5;//ブレンドする時画像のRGBAに(As, As, As, As)を乗算
--------------------------------------------------
ここでは「As」というのは画像の透明情報です。つまり画像のピクセルのRGBAにおけるAの値です。
そして後に紹介する公式との兼ね合いで(1-As, 1-As, 1-As, 1-As)等のかっこの中の1は
背景、あるいは画像の色をそのまま残すという意味になり、0だと、対応するARGBが0
になります。例(0,0,0,0)真っ暗 (1,1,1,1)変化なし
透明情報が透明か不透明かの2段階しかないPNG画像において「1-As」は
透明なピクセルでは0,不透明なピクセルではでは1になります。
加算合成(BlendOp = 1)においてブレンド後に出力される色の公式は
「 画像のピクセル色 * SrcBlend + 背景のピクセル色 * DestBlend」になります。
この式を上記の設定のコメントと一緒に見て解釈すれば
なぜこれでうまく行くのか分かると思います。
>>448 頼むからHLSLのステートに即値を設定するのはやめてくれ。
450 :
402 :2009/11/26(木) 17:23:50
>>449 AlphaBlendEnable = true;
BlendOp = ADD ;
DestBlend = INVSRCALPHA;
SrcBlend = SRCALPHA;
これで出来るんですね。
気がつきませんでした。
D3DBLENDOP_ADD みたいに
プレフィックスまでいれてエラーが出たので
ああ、そりゃHLSLにD3Dで定義された定数は使えないか
直接数字入れるしかね〜のかと思ってあきらめていましたいました。
アドバイスサンクス。
だからSDKサンプルとドキュメントは熟読しろって言ってるだろ。全て書いてる。
DXUTで一通りゲーム作ったのはいいんですが、ゲーム終了時に Error: The Direct3D device has a non-zero reference count, meaning some objects were not released. というエラーが出ます。どこかで解放してないみたいなんですが、 それを追う方法って何かありますか?
453 :
402 :2009/11/26(木) 18:58:14
>>451 それが理想的だとはしょっちゅう思うんだが、結局なんか無理・・・
初心者ほどHELPの内容が必要なのに、初心者ほどHELPを読むための
知識や技量が全然足りない。
>>402 ありがとう。参考になります。
シェーダーにステートが設定できるなんて最近知ったよ。。。(書いてあるサイトが少ない)
>>454 シェーダーじゃなくてエフェクトファイルな。
エフェクトのインターフェイスが中でStateBlock作って描画毎にステートいじってる。
>>452 大胆にソースを削る。
例えば、初期化と終了のみにしたらどうか?
+スカイボックスだけにしたらどうか?
+フィールドだけにしたらどうか?とか
457 :
452 :2009/11/26(木) 23:41:41
>>456 地道にやるしかないようですね。
もう少し詳細なエラー報告が出ればいいんですけどねぇ
ありがとうございました。
ゲームをする時にDirectXの初期化に失敗しました と出るのですが これの解決策を教えてください
最新のパソコンを買ってきてください
461 :
デフォルトの名無しさん :2009/11/28(土) 00:12:21
よくわかんねーんだけど directx使うメリットってなんなの? VC++じゃいけないの? 教えろ糞共
知ってるが お前の態度が 気に入らない
463 :
デフォルトの名無しさん :2009/11/28(土) 00:16:02
死ね
ポリゴンとポリゴンの重なってるところがギザギザになるのって 位置を変える以外に解決法ある?
Zバイアス使え リックディアスじゃないぞ
466 :
デフォルトの名無しさん :2009/11/28(土) 00:48:13
よくわからないのですが directx使う利点についてお教え願いたいです ご親切な方宜しくお願いします
知ってるが お前の態度が 気に入らない
>>465 そうかわかった
バイアスとバイアランならよく間違えるがな
469 :
デフォルトの名無しさん :2009/11/28(土) 00:54:54
じゃあなんて聞けばいーの?
お前の態度が
471 :
デフォルトの名無しさん :2009/11/28(土) 01:54:15
知ってるが お前の態度が 気に入らない
472 :
デフォルトの名無しさん :2009/11/28(土) 01:55:21
知ってるが お前の態度が 気に入らない
473 :
デフォルトの名無しさん :2009/11/28(土) 01:57:15
知ってるが お前の態度が 気に入らない
474 :
デフォルトの名無しさん :2009/11/28(土) 02:11:21
知ってるが お前の態度が 気に入らない
知ってるが お前の態度が 気に入らない
476 :
デフォルトの名無しさん :2009/11/28(土) 02:44:07
知ってるが お前の態度が 気に入らない
477 :
デフォルトの名無しさん :2009/11/28(土) 02:58:07
知ってるが お前の態度が 気に入らない
478 :
デフォルトの名無しさん :2009/11/28(土) 03:13:14
知ってるが お前の態度が 気に入らない
知ってるが お前の態度が 気に入らない
知ってるが お前の態度が 気に入らない
知ってるが お前の態度が 気に入らない
知ってるが お前の熊度が 気に入らない
483 :
デフォルトの名無しさん :2009/11/28(土) 04:50:01
知ってるが お前の熊度が 気に入らない
知ってるが お前の熊度が 気に入らない
キレちゃったの?(笑)
directx使わないでゲーム作ってみればいい
作ってみた。 printfとscanfとちょっとした配列やifとかfor文といった基本的なことだけでも コマンドプロンプトでゲームつくれるぞ。文章だけでも立派なゲームだ。
そもそもDirectXとVCを比較対象にすること自体が阿呆としか言いようがない。 肉と包丁を比べるような物。 肉使うメリットってなんなの? 包丁じゃいけないの? 意味が分からん。
>>487 それで満足できるんならそれでいいんじゃないの
誰も文句言わんよ
俺の一つ上の世代は文字しかないゲームを何十時間も遊んだんだし
directXに限らずDXLIBでもOPENGLでもいいがある種のゲーム製作を簡単にする。 具体的にどんな機能かというと「超早いタイマー」 普通のウィンドウズのアプリケーションは マウスがクリックされたら〜〜しろ、キーボードから入力されたら〜〜しろ そうじゃないなら休んでろ、みたいな感じ。 「ユーザーの入力等がないなら何もしないプログラム」 こういうのをイベントドリブン型プログラムという。 だが普通のゲームは違う。 マリオなら、マリオを操作しなくても、敵のクリボーやノコノは歩いてくるしぶつかったらマリオは死ぬ。 ドラクエなら、勇者を操作しなくても町の人々はうろちょろ歩き続けるし、いろいろな処理をしてる。 「ユーザーの入力がなくてもリアルタイムで何らかの処理をしなければならない」 厳密にはリアルタイムじゃなくものっそい小さい秒で細かい処理をしてるだけだが。 こんな風に、普通のウィンドウズアプリケーションとは動作がぜんぜん違うから 同じようには作りづらい。そこでDirectXなどがあればこういう 「リアルタイム処理」がしやすくなる。まぁグラフィックス表示機能とかもあるけどそれはオマケ。
>>490 それは違う。
DXLIBは知らないが、DirectX(DDraw/D3D/D2D)、OPENGLは単なるライブラリだ。
フレームワークではない。
従ってそのようなリアルタイムプログラムを作成するには
それに適した構造のプログラムを自分で書かなければならない。
普通のプログラム BGM再生したいとき なんか「いんすたんす」とかいう意味不明なものを作成して「初期化」だのなんだのごちゃごちゃやらなくてめんどくせーー!! ダイレクトXとかなら PlayMusic("C:\Windows\test.mid"); これだけで音楽流れる!素敵!最高!ラクチン! どうだ?Directxのありがたさがわかったか!
>>491 DXLIBもリアルタイム処理(?)に特化したような構造だがただのライブラリに過ぎん
フレームワーク=dllがいっぱい集まったもの
>>494 ちげーよ。フレームワークというのは、アプリケーションを実装する基盤のことだ。
例えばC標準ライブラリはライブラリだが、
int main(int argc, char** argv)
{
}
の仕組みとmain関数の外側はフレームワークということだ。
>>466 VC++を使ってグラフィックを表示させるには大まかに分けて
GDIとDirectXを使う方法がある。
GDIはウインドウやアイコン等、一般的なアプリケーションでも
多用されている昔からある方法。
DirectXはゲームなどの高速描画に耐えられるように後から
追加された方法。特に本格的な3DCGをやりたいなら必須。
あれ、ちょっと待てよ、OPENGLがあるか・・・
とりあえず
>>490 がDirectXアプリケーションを書いたことが無い知ったかってのは判る
GLのがD3Dより面倒がちょっと多い 代わりに出来ることがちょっと多い
OpenGLはDirectXより習得が簡単!
それが真実なら今みたいに衰退してない
>>500 いい加減なことを言う前に、具体的に何が面倒で何が多いのかを明確にしろ。
Directplayのサービスプロバイダーの設定について質問です。 pDP8AddressHost->BuildFromURLA( "x-directplay:/provider=%7BEBFE7BA0-628D-11D2-AE0F-006097B01411%7D;hostname=129.0.0.1;port=2345" ); というようにBuildFromURLA最後の部分でポート番号2345を指定してホストを作成しています。 しかしながら、このやり方だと2345番ポートが何らかのケースで使えなかった場合にエラーが生じてしまいます。 (モデムの問題やソケットの開放不具合でこのケースが結構ある) そこで、 pDP8AddressHost->BuildFromURLA( "x-directplay:/provider=%7BEBFE7BA0-628D-11D2-AE0F-006097B01411%7D;hostname=129.0.0.1" ); というようにすると、2345番ポートが利用不可能な場合でも正常にHost関数が 実行でき、ホストになれるのですが、今度はポート番号が分からないので外部から 接続できません。 ポート番号を明示的に指定しなかった場合はどのようにして使われているポート番号を 取得するのでしょうか?
>>504 DirectPlay自体がレガシー扱いになって非推奨になってるからなぁ。
不満点があるなら使うなとしかいいようが。
>>504 エラー起きたら投げて別のポート試させればいいじゃん
Xaudio2解説のいい書籍とかない? やっぱりサンプルから勉強するっきゃないのかなあ・・・
MSDN
ISDN
ADSL
ICBM
ISBN
つまらん! お前らの話はツマラン!!!
Direct3D9でフルスクリーンモードで描画している際、 自分自身のスクリーンのキャプチャを高速に行うにはどのように実装すればいいでしょうか? sf = device->GetBackBuffer(0, 0); HDC srcdc = sf.GetDC(); ::BitBlt(dstdc, 0, 0, gameView.Width, gameView.Height, srcdc, 0, 0, SRCCOPY); //後略 といった形でメインメモリに転送してるのですが、 BitBltの部分でFullHDの場合で0.3秒くらいかかってしまいます。
515 :
514 :2009/12/01(火) 18:20:23
情報が抜けてました。 フルスクリーンモードの描画をキャプチャするのは、キャプチャ画像をファイルとして書き出すためではなく、 描画をGDIに切り替える際の描画キャッシュとして使いたいためです。 フルスクリーンで描画中に一時的に device->SetDialogBoxMode(TRUE); を実行してメニューを表示したりダイアログを表示したりしています。
サーフェイスをロックしてそのメモリをコピーすればいいよ。 一番いいのはダイアログを使わない事だけど。
サーフェスのLockはめちゃくちゃ遅いよ。 シングルコアだとそこまで遅くはないんだが、マルチコアだと致命的な遅さ。 GetDC等も内部的にLockするので駄目。 GetRenderTargetDataが速い。
有料な同人ソフト以上のモノを作るなら、GDIでがんばるより DXUTを使うかDXUTみたいなのを自作するほうが質も速度も断然いいのでは。
>>516 ちょっと事情があって、Lock使うのは避けたい……。
>>517 なるほど。確かにビデオカード→システムメモリはボトルネックになりかねないし
画面の描画自体と競合もしてしまうので、
それを避けるためにGetRenderTargetData()でさっさとシステムメモリに転送かけたほうがよさそうです。
この線で試してみることにします。
初歩的な質問ですみません DrawPrimitiveとDrawSubsetを見かけるんですが、これってどんな違いが?
>>520 DrawSubmitは内部でDrawPrimitiveIndexだっけ?を使用している
>>517 描画前のバックバッファをシステムメモリのサーフェイスにコピーしてロックしたほうが速いだろ?
GetRenderTargetDataなんて鈍足の代表だろ。
>>522 バックバッファをシステムメモリに転送するのがGetRenderTargetDataなんだが。
GetFrontBufferDataと間違えてない?
GetRenderTargetDataってAA使うと使えなくね?
>>521 そうなんですね。ありがとうございました。
すみません 「ポリゴンの半透明化」と「テクスチャの抜き色」の実装が上手く行かず困っています。 (背後のオブジェクトが表示されない現象など) レンダリングステートや描画順序を正しく理解していない所為だと思うのですが ここを詳しく解説して下さっているサイト様などをご存知の方はいらっしゃらないでしょうか?
Zバッファを確認しろ 出来なければいっそ切れ
>>517 FullHDでも0.1秒以内にメニューが表示できる状態になることを確認しました。
どうもありがとうございます。
しかし、表示方式を切り替えた瞬間にちらつくのは、なおらんのかなー。
デュアルディスプレイのもう一方のほうもちらついてるからなぁ。
>>527 Zバッファの問題だったんですね。
やっと欲しい情報が見つかり始めました。感謝。
表示方式切り替える時というのは双方なのか、片側なのか。 多分ウィンドウの描画メッセージとうまくかみ合ってないだけな気がする。
531 :
デフォルトの名無しさん :2009/12/02(水) 19:24:40
すいません初心者です。 バトル画面のプログラム教えて欲しいのです><。 if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能 ch.walking_flag=1; //歩くフラグを立てる。 if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら ch.muki=3; //上向きフラグを立てる else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら ch.muki=1; //左向きフラグを立てる else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら ch.muki=0; //下向きフラグを立てる else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら ch.muki=2; //右向きフラグを立てる else //何のボタンも押されてなかったら ch.walking_flag=0; //歩かないフラグを立てる if(ch.walking_flag==1) //もし歩くなら if(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら ch.walking_flag=0; //歩かないフラグを立てる。 if(ch.walking_flag==1) if(GetRand(4)==0) { printfDx("敵");} } 敵の部分を同変えればいいかわかりません。 おねがいします。
DXライブラリ(笑)
スレチ
534 :
デフォルトの名無しさん :2009/12/02(水) 19:57:09
すみません
535 :
デフォルトの名無しさん :2009/12/02(水) 20:04:32
他当たってきますorz 荒らしてすみません。
DXライブラリのスレッドは別にあるが、それよりゲーム製作の根本的な所なのでゲ製作板質問スレか DXライブラリ本家にでも行って尋ねるといい あと、質問の意図が全く分からんのでもっと考えろ
いままでDirectsound使ってたんだけどそろそろXaudio2にしようとおもったんだが あれってDirectsoundとは完全に別で今までのソース使えなくて全部最初から作ることになるの?
当たり前だろ。 わざわざ書き直すメリットも大して無いから、そのままDirectSound使ってろよ。
シェーダを使ってポイントスプライトを描画したのですが カメラからの距離によって大きさが変わらず困っています SetRenderStateを使った方法ではできるのですが POINTSCALEENABLE = TRUE; POINTSCALE_A = 0.0f; POINTSCALE_B = 0.0f; POINTSCALE_C = 1.0f; シェーダでは、この設定だけではできないのでしょうか グラボの性能は大丈夫のはずです
テクスチャのUV値についての質問です。 たとえば、256*256のテクスチャから200*200の矩形を使いたい場合、 右下のUV値には u = v = 200.0f / 256.0f とすればいいのでしょうか? 精度のせいで、画像がボケたり、ゴミが付いたりしないのでしょうか?
フィルターをかける場合は隣のドットの色が混じることはある その場合は画像の方に一工夫が必要だ
>540 半ピクセル分ずらすよろし 左上もな
544 :
デフォルトの名無しさん :2009/12/04(金) 22:03:55
DirectX逆引き大全500の極意 みたいなリファレンスに使えるオヌヌメ本ってありまするか? これ絶版のようで・・・アマゾンだと中古で1万とかするんですよね・・・ 目的はゲーム製作で、浅く広くdirectxを扱ってるのがいいのですが
やたら絶賛されてるけど逆引きってそこまでいい本かねぇ・・・。 たいした量ないんだしSDK付属のリファレンス全体を軽く読んでから そこらへんのウェブサイト巡れば個人レベルなら困ることは無いと思うけど。
まあそれは個人の判断だろうが 悪い本ではないと思うよ ただ通らない奴あるからなあ…
547 :
デフォルトの名無しさん :2009/12/04(金) 22:17:22
通らない奴=コンパイルが通らない奴って意味ですか?
そうだよ まあちょっと直せば動くけど ただ簡単な応用まで書いてあるから 別になくてもわかるけど・・・ってのもある カメラのクレーン移動とか
そんなことやってる暇ないだろ
すまん誤爆した
551 :
デフォルトの名無しさん :2009/12/04(金) 23:33:06
クレーン移動とかやってる暇ないだろって どんな状況だよ とほんわかした
554 :
デフォルトの名無しさん :2009/12/05(土) 00:51:22
なあジオメトリシェーダって、 インデックスバッファをGPUで加工出来る機能だと思っていいの?
555 :
デフォルトの名無しさん :2009/12/05(土) 00:55:49
>>552 さっそくチェックしてみます!ありがとうございまする^^
>>553 まじっすか!?
首を長くして待とうとおもいます^^
ありがとうございました!
>>553 ほほー。絶版になってて以前諦めた本がリニューアルされてるのか。
書店に出るようなら眺めてみるかなぁ。
どうやらジオメトリシェーダって DrawPrimitiveでいうプリミティブを1枚づつ受け取って、 Indexedじゃないプリミティブ配列を返すという感じだね。 確かにインデックスバッファは用済みみたい、サンクスコ
質問です。 XAudio2というのは、DirectX9.0に含まれているのでしょうか?
無い
あら・・・9.0対応していないならゲーム作りにはちょっと使えないですね・・・ (まだXPを切り捨てられないので) ありがとうございました。
>>562 うそつけ!
>>563 最近のDirectX Redistの中に入ってるよ。
2009年のもの(2つあるけど好きなほう)落としてごらん。
>>563 念のためにいっておくが、XP sp2以降での動作は確認取れてるよ。
XP無印はまだ試してないので分からないけど。
個人的な確認が何の意味あるの。
>>564 何が嘘なんだよ?
DirectX9.0の時点であったのはDirectX Audioまでであって、
XAudio2は存在していない。
お前の場合、嘘というより無知なんだから、
自覚して反省したら今後は黙ってろ。
>>566 DirectXのコンポーネントがインストールできるかは
OSのバージョンとSPだけで決まって機種依存はないんだから、
手元で実際に試してみて確認が取れれば十分じゃん。
>>567 それは実情に合ってない詭弁というものだ。
確かにXAudio2はDirectX9.0に入っていなかったかもしれないが、
今はXPにインストールできるし、Direct3D9と組み合わせて動かすことだってできる。
詭弁でも何でも無いだろ。 DirectX9.0の機能じゃないし、Direct3D9と連携させる話なんて全く出ていない。 勝手に話を別の方向に持って行って頓珍漢なことを言っているのが分からないのか?
DirectXのバージョンは無関係。 ランタイムがあればWindowsXPでも動く。 ただそれだけ。
>>570 確かに561の最初の質問の時点ではDirectX9.0と組み合わせるかどうかは言及してないが、
563を読めば実際には組み合わせたいのだという意図は読み取れるだろう。
そしてDirectX9以降はXBox360系の機能を除いては3D系しか更新されてない。
従って通常はDirect3D9と組み合わせたいのだと考えても差し支えないはず。
で、571が簡潔な答えじゃないかと。
お前が判断する問題ではない
「D3DXにスプライトなど無い」の人かしら
それはちょっと怪しいな 本のデキが悪くて売れないからなのか? たった500円ぽっちで地雷踏みたくないからちょっと様子見にするわ
内容的には大全の増補改訂版だから、地雷って事は無いと思うけどな。 大全自体を地雷扱いしてるなら話は別だが。
初版を買う奴はいないだろ。技術書で。
技術書なんて、再販される頃にゃ陳腐化して使い物にならないぜ 数が出なくて初版で絶版だったり、そこまですら売れずに 初版が本屋で年単位で埃被ってる状況すら珍しくないのに
へー ド田舎じゃそうなんだろうな
konozama
>>581 芸能人の本は本当にあんなに売れてるのか?
数学勉強し始めてプログラミングが中断してしまった まぁ遠回りしたほうがいいよね
大全ってなんだか初心者向けな気がする あるポリゴンの三点をとって面の傾きを知るとか面の上のある点の座標を求めるとか 三点とる以外はただのベクトルの応用だろ あとは間違いがあるサンプルとか・・・ ただXaudio2の話が載ってたら欲しいかなあ
気がする、じゃなくて明確に初心者がターゲットだろ あとはコピペグラマとかサンプルプログラマとかの発想力ゼロの奴等もか
>>569 >>572 どうもありがとうございます。
といっても、XPまでなんですね。微妙なところ・・・。流石に2kは対象外としてもいいかなぁ?
意図をくみ取ってくださってありがとうございました。
もちろん、DX10〜が使えない環境で使えるかという意味合いでした。今後はもう少し具体的に書くようにしますね。
>>586 初心者向け?
おまえにぴったりじゃないか!
>>588 ちゃんと使ったことないのに無理してまとめんなよって感じの記事だな・・・
>>589 2000はサポート外。ドキュメントに明記されてるよ。
CPUもSSE載ってないと初期化ではじかれる。
どちらかと言えばそっちの要件の方がきついかもね。
>>589 まあ、アレゲなバックポート対応のライブラリをインストールしたら2kでも使えるみたいだけどね。
でも到底サポートといえるレベルじゃ……。
>>591 MSDNでは記述が確認できないんだが、どこに書いてあるんだろうか?
ただし、SDKのヘッダファイルに対応OSが書かれてるのは確認している。
XAudio2周辺では、XACT3D3ライブラリのみが2k対応みたいだな。
(なぜかXAudio2本体には書いてないんだけど……)
つーかおめーらDirectXでなにやってんの?
オナニー
>>591 自分の作ってるゲーム(?)を2kサポート外にしようかなぁって意味だろ・・・
DirectSoundとかDirectInputでは、あるウィンドウハンドルにたいして協調レベルの設定というのをやらないと使えませんよね? それが嫌だったので、デスクトップのウィンドウハンドルについてDSBCAPS_GLOBALFOCUSとかDISCL_BACKGROUNDフラグを指定して 使おうと思うんですが、PCの動きが悪くなったり、他のソフトが動かなくなるとかの実害はあるんでしょうか? ウィンドウが非アクティブな時はメッセージ処理で音を止めたり、入力を中断すれば特に問題はないんでしょうか?
>>597 なんでそれくらい、自分で動かしながら物を考えない?
そういう使い方をするなら、DirectInputよりグローバルフックのほうがふさわしい。
? いや、手元で動いてはいるんですけど、それで全体の動作に悪影響が無いかが気になったんで・・・・
色々やってみるしかねぇ アクティブ切り替えたり他のアプリ起動してみたりして
どうしようもないな・・・・・・・・・・・・・
いまさら2k対応したところで何のメリットも得られないけどな。 悩む意味がわからない。
また、エロゲPGが煽ってるのか? お前等、金にならないOSのサポートはやめろといってるだろ そんなにサポートしたいならまずはMacで動かしてやれよw
そんなものなのか。 うちはWin98までサポートしてしまってるけど、もうやめるか。
俺が7年前に初めて触ったPCですらXPだったってのに、 98なんて歴史の中の存在だよ
やりたいっていってるのに、拒否しようとしてるのは知らないからなのか、親切心からなのか。
他にもっと優先的にやることがあるだろって話だよ。 日本のPCゲーの開発者、つーかエロゲとか同人だけど、 そいつらは低スペックで動くようにする事にやたらこだわるからな。
新しいOSも買えない貧乏人は相手にしなくていい
アリスソフトのやり方がリファレンスだとか
アリスなんてまさにエロゲじゃねえかw まぁでも趣味でやれればいいなら好きにすりゃいいけどなー。 将来PGで飯を食いたいとか妄言を言わなきゃ別に何でもいい。
XPで動いて、2kで動かない。という状況がまずないからな
>>612 MS自身では最近は2kで動かないように作るほうが普通になってる。
オレは本音を言うならXPすら捨てたい。
DirectX10楽そうだからな。
どうせならX10より11じゃねえの?
初心者的にはサンプルが大量にあるから9nが楽 シニア的にはもう作ってるから9のが楽
よほど商業で最先端をウリにしたものを作るのでない限り、 趣味ゲーや同人ゲーを作る上ではDirectX9で十分だしな。 というか、XPのパイを切り捨てられるほど超最先端なゲームなんて、このスレにくるようなやつがつくるか?
いまでもRPGツクール2000でゲームつくる人が多くいる時代だぜ 高性能なPS3やx-box360よりもDSや携帯電話ゲームの方が多く遊ばれている時代だぜ
まずDx9やめてDx10使うと何が良いの?
>>616 逆じゃね?商業だとXPの切り捨ては無理だが、
趣味なら簡単に切り捨てて楽したり新しい技術で遊んだりできる
(前略) この度はご注文戴き、誠にありがとうございます。 (中略) 【商品】 「DirectX9必携」 1冊 2,800円 送料 当社負担 特別割引 -600円 合計 2,200円 (中略) 【商品発送時期】 12月20日前後になります。 (後略) 定価3300円の筈だが、再販制度と取次を回避するとここまで安く出来るものなのか? かなりびっくりした。 あと、Gmailだと届かないっぽいから気をつけろ。
>>614 API的にはそうなんだが、GeForceが未だに対応してないってお前空気読め>NVIDIA
って状態。
移行はどう推移していくのかねえ。 DX9→DX11(DX10モード)→DX11か、 DX9→DX11か。
DirectX11をNVIDIAがいつまで経ってもサポートしようとしないのは、 今後主流になっていくGPGPUについて、MSの力を借りずNVIDIA流で押し通したいっていう 政治的なものが感じられてくる。 Dx9のときは、HLSLという形でCgの成果をMSに提供してていい感じだったんだが。 一方、ATI(AMD)は純粋にGPUとして進化させていくという方式だから、DirectX対応も素直。
いや、今必死こいて対応チップ作ってるだろ。 それを言ったらDirectX10のときにNVIDIAに半年遅れをとったATiはどうなるのよ。
この板もいい加減ID出して欲しいぜ
>>628 あのころは開発資金が枯渇してて、にっちもさっちも行かなくなってたからなー。
AMDに買収されて、建て直しが行われたわけで。
今からすれば正解だったな。
おっと。そろそろスレ違いか。
シェーダプログラムで質問です。 DirectX9でのシェーダでの描画の第一歩ということで影を描画しようとして地面(板ポリ)とその上に立方体を描画して 深度z/wをテクスチャに書いて表示させたのですがオブジェクトの部分が真っ白になってしまいます。 0.5*z/wなどとして表示させてみるとどうやらzとwに同じ値が入っているようなのですが・・・ (0.2*zというような表示をすると一応視点から遠いほど白くなっている) 頂点シェーダではPos×WVPを出力、ピクセルシェーダではz/wを出力しているだけで、必要な行列は送っています。
>>632 射影変換のznearとzfarの値はどうなってる?
635 :
632 :2009/12/09(水) 21:19:57
>>633 レスありがとうございます
ご指摘通りD3DXMatrixPerspectiveFovLHのnearとfarの値を変えると表示されました。
中身をよく把握せずにコピペしていたので躓きました・・・
zfarに比べてznearが小さすぎると射影変換後のzとwはほとんど同じ値になっちゃうからね
637 :
デフォルトの名無しさん :2009/12/09(水) 23:42:21
DirectX9を使えばどの程度のレベルのグラフィック・物理表現が可能ですか? PS3レベルとかできます?
PCスペックに制限がないなら PS3にできてDirectXにできないことなんて無い
>>637 4Gamer.netでも見てDirectX9対応のどんなPCゲームがあるか写真を眺めてみればよい
>D3DXMatrixPerspectiveFovLH かつてどうしてもZ-Bufferが機能しないので頭抱えてた 原因はnearに0.0fを指定してた 気が付くのに丸二日 ○<\_
質問いいでしょうか レンダーターゲットにテクスチャを指定した上で、アンチエイリアシングをかけたいのですが方法が見当たりません。 CreateOffscreenPlainSurface などにも、アンチエイリアシングに関する引数が見当たらないようなのですが、 どのようにすれば実現できますでしょうか?
>>641 一旦普通に描画してから半分のサイズに縮小転送すれば
アンチエイリアスになるが、そういう意味ではないのか?
>>641 サンプリングの方法を変えてやればいい。
HLSLならSamplerのオプション、
固定シェーダーならSetSamplerState()
>>641 DirectX9の場合はマルチサンプルのサーフェイスにレンダリングしてからStretchRectでテクスチャに転送。
>>620 ノースブレインに直接、注文のメールした時の返信?
どれも間違い
ゲームとかでテクスチャに描いてある目が瞬きするってあるけど あれどうやってんの? テクスチャ二つ作って交互にメッシュに貼り付けてんの?
具体的に何のゲームのどのシーンなのかを明確にしろ
テクスチャを二枚作るんじゃない 1枚のテクスチャに両方描いてUVをずらしてるんだ
>>650 ちゃんとゲームとかって言ってるだろ
俺は
>>649 じゃないけど、質問に不備がないのは分かる
お前の読解力がないだけ、そんなだから仕事ないよだよ
そもそも二枚って、途中の状態がなければ不自然きわまりないだろ。 アホか。
ゲームを特定しないとテクスチャだけでやっているのか、 モデル自体を変形させているのか分からない。
だったら両方答えろよ
>>653 不気味の谷を越えるには何枚必要なんですか?
プログラム云々以前にモデラーで確認すべき話だろ
>>651 そうかその手があったか
でテクスチャって256×256とか云々って聞いたけど
2の乗数にした方が良いのか?
モデラーに一致するデータはありません。
質問に答えられないなら書き込まなくていいです^^ 邪魔なだけなので^^
>>653 それはお前の主観にすぎない
それとも、たかだか有限枚で自然な動きが表現できるとでも?
だったら2枚でやってろ。
何このスレ
ていうか、ゲームとかだと2枚だしね
これはスプライト厨が大暴れしている気がする
具体的に何のゲームのどのシーンなのかを明確にしろ
二枚かどうかも実際にゲームを明確にしないと検証できないだろ。 とっととどのゲームなのか明示しろよ。
前提条件を明確に出来ない馬鹿や、なあなあで済まそうとする怠け者は、 プログラムを組むのは諦めた方がいい。 向いていない。
>>665 ゲームのテイストによりけり。
コミカルなものなら2コマアニメーションでも問題無い。
>>669 「テクスチャ二枚ってなんのゲーム」が前提条件ですかそうですか
>>658 >2の乗数にした方が良いのか?
できるだけ多くのビデオカードをサポートしたかったらそうした方が良いです。
お世話になっています。>641です。
>>645 さんの方法をやってみたのですが、
http://msdn.microsoft.com/ja-jp/library/cc324248.aspx >次のいずれかの場合、IDirect3DDevice9::StretchRect は失敗する。
>(略)
>転送元サーフェイスがマルチサンプリングされている場合 (MultiSampleType != D3DMULTISAMPLE_NONE で作成した場合)。
とあり、できそうにありません。
やはり他の方がおっしゃるとおり、シェーダ使うなりしないとDirectX9では無理なのでしょうか・・・
>>676 641の質問なんだが、テクスチャへの描画でアンチエイリアシングをしたい、というだけでは
アンチエイリアシングという用語に複数の意味があって不明瞭なんだ。
要するに縞状ノイズが載らないように滑らかに縮小かけたいってことなの?
お前ら上級者様(笑)はただ俺の質問に答えてりゃいいんだよ どうせ仕事もしてないんだろ?w スプラッシュしてろよカステラめ
>>678 なるほど、もう少し詳しく書いてみます。
まず「ゲーム画面のスクリーンショットをとりたい」のです。
通常のウインドウへの描画の場合、バックバッファ生成時に
D3DPRESENT_PARAMETERSの
MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
などとしておくことで、アンチエイリアシングのかかった綺麗な描画が行えますよね。
しかし、テクスチャのサーフェイスはMultiSampleTypeを設定することができません。
どうすれば通常のウインドウへの描画同様、綺麗なアンチエイリアシングがかかった描画を、テクスチャに対して行えますでしょうか?
>>680 んじゃ、一旦バックバッファに描画してからテクスチャのSurfaceに転送かけたら?
はぁ・・・?
>>676 英語のオリジナルのドキュメント見ておけ
>>683 ありがとうございました。
日本語のドキュメントに翻訳ミスがあったわけですね…ピキピキ
英語版のドキュメントにやり方が普通に書いてありました
できました!
アンチエイリアスに関しては、 間違った情報が混ざっているにせよ、 皆それなりにやるべき方向は指し示している。 これでわからなけりゃ、己の能力不足ってことで 諦めるんだな。
>>676 深度およびステンシルの制限
深度およびステンシルの制限
深度およびステンシルの制限
深度およびステンシルの制限
>>686 脳なしが
676の一文は、その項目の中に含まれてねーよ
もし含まれているとすると、
・拡大も縮小もできない。
・拡大または縮小のどちらかが行われ、どちらかのサーフェイスが DXTn 圧縮フォーマットである場合。
の両方が含まれていることになり「何二度説明してんだ?馬鹿が」という話になる
>>685 何きどってんの?
分からないなら分からないと言えよww
結局本人自力で解決してるし、このスレほんと意味ねーなw
Using StretchRect to downsample a Multisample Rendertarget You can use StretchRect to copy from one rendertarget to another. If the source rendertarget is multisampled, this results in downsampling the source rendertarget. For instance you could:
複数の違う回答があったら全部ググルなり自分で試してみればいいだけの話
>>684 日本語ヘルプが間違っているわけではない。
情報が古いだけ。
英語のヘルプでも、古いものは
IDirect3DDevice9::StretchRect will fail for any of the following:
If pSourceSurface and pDestSurface are the same.
If stretching or shrinking is involved and either surface has a DXTn compressed format.
If the source surface is multisampled (created with MultiSampleType != D3DMULTISAMPLE_NONE).
If the destination surface is an off-screen plain surface but the source is not. If the destination surface is an off-screen plain surface and stretching is involved.
と書いてあって、日本語ヘルプはこれを訳したもの。
途中から制限が緩くなった。
へー。641じゃないけどためになったわ。
ぺー。
pDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE); pDevice->DrawPrimitiveUP(D3DPT_LINELIST, 1, ColorPoint, sizeof(COLOR_POINT)); このようにして色つきの線を引いているのですが ライトの設定をオフにしないと色がつかなくなってしまい ライトオンで色つきの線を引きたいのですがどうすればよいのでしょうか?
線を描く時だけライトオフにすればいいんじゃないかなあ。
>>696 ありがとうございます
無事できました
こんな単純なことに気づかないとは
>>697 質問で求めていることと違うような。
ライトのON・OFFに関わらず線の色を出したいんじゃないの?
その場合、D3DRS_EMISSIVEMATERIALSOURCEをD3DMCS_COLOR1にして
それ以外のD3DRS_XXXSOURCEをD3DMCS_MATERIALあたりにしとくのが
一番ベターな気がするが。
細かいな 本人が納得してるんだからいいじゃないか
(多分)HLSLで波打った水面を描画してみたいのですが、解説している書籍やサイトはありませんでしょうか。 水面の表現はどれも似たようなものなので基本的な作りは同じかと思いますが、 基本的どころがそれの足がかりになるようなものが無く困っています。 サンプルだけだと理解せずに流用しそうなので、何らかの説明があったほうが望ましいです。 (XP-DX9-C++)
ソースとHLSLをそのままコピペできるレベルでなくていいなら、 昔のDirectXSDKやnVidiaとかATIの旧サイトとか たくさんあったような気が、
ビルボードにテクスチャを貼り付けて表示させるようなことをしていたのですが、 そのテクスチャ(10枚ほど)を表示させるのにどれだけ時間がかかるかを計測してみました。 timeGetTime() - dwLastTime というかたちでミリ秒単位で計測すると、16ミリ秒もかかっていて、これだけでFPS60ほどという計算に・・・ テクスチャ表示だけでこれだけかかるということは、プログラムに問題があるのでしょうか?
垂直同期は切れよ
D3DPRESENT_PARAMETERS::PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
毎回仕組みをわかって無い奴が時間計測して狂言吐いて 会社追い出されるのは馬鹿みたいだけど結構パターンなので注意な
もうそれいいから
ごちゃごちゃいわずに黙って注文しろ
で、それのDX11バージョンはまだかね
いまさらDirectX9の本なんて出すな
たしかに。
需要があるから出してるんだろw
たしかに。
需要あったのかよ・・・。 Web上にアホほど情報あるのにググれない人用なのかねぇ。
xaudio載ってますか
少なくとも、旧版がこのスレでもしばしば取り上げられて
Amazonやヤフオクでプレミア価格で取引される程度には需要があるだろ。
>>587 のタイプが少なくないという事だ。
何で絶版になったのかは知らんが。
>>719 XAudioなんてそれこそサンプルとリファレンス見れば十分だろw
別に単純に、いままで培われてきたノウハウが1冊にまとまってるだけでも価値あるだろ。 買いたい奴だけ買えばいい品物に、なぜわざわざつっかかるよ
著者必死なだ
スレ違い
えっ
>>722 DirectX9時代のノウハウを1冊で事足りるくらい詰め込んでるあるのか?
それならGPUGems以上の巨大な本になってるはずだが・・・。
バカか、いいから失せろ
質問させて下さい。 VC++2005、Win32API、DirectXを使ってアプリを作っているのですが XPでは思った通りの動作をするのにVistaだと描画が非常に重く もっさりした感じになってしまいます。 どうしたらVistaや7に対応したアプリを作れますか?
非常に重いつってるから3フレ遅延どころの話じゃなさそうだが。
とりあえずドライバを更新
エスパー回答期待するよりも地道に調べたほうがいい
>>730 ありがとうございます。
Aeroを無効にしようとしたのですが
ドライバが対応していませんでした。
FPSはXPで60だったのですが
Vistaでは30もいかなかったです。
>>731 はい、XPに比べてVistaだとFPSが半分もいかない感じです。
>>732 対象ドライバ更新をしようとしたところ
互換性のあるドライバが見つかりませんでしたとでて更新できませんでした。
>>733 指摘を受けて思ったよりも問題の箇所があったので
もう一度自分で調べてみようと思います。
予想以上に問題がある箇所が多かったので
開発環境をVistaに移して少しずつ調べていこうと思います。
お騒がせしました。
またvsync厨か 重いといいつつ空いてる時間が相当ありそうだな
つーかVISTAだからってフレームレートが半減って明らかにおかしいだろ。 遅延って反応がもっさりするだけでFPS自体は変わらないはずだぞ。
ウインドウモードなのか、フルスクリーンなのかすら書いてないなんて・・・
FPSじゃなくてレイテンシも見なきゃいけなくなるのか…めんどいなこれ。
3フレあればその差は誰でも体感できるものになるが 実際のところ、それが問題となるゲームは少ないだろう
は?
>>729 VistaとXPは全く同じハードウェア?
>>739 格闘とかは問題になるだろ。
RPGとかTPS程度なら別にって感じだけど。
vsyncを気にしてプログラムするのは時代遅れだよ。
むしろフレームのキューイングが有効なら「fpsは」向上するはずだろ・・・
>>730 もXPから有効になってた挙動なのでツッコミ入れたいところだが
今の流れとは関係ない話なんじゃないの?
746 :
デフォルトの名無しさん :2009/12/14(月) 23:28:31
あ
>>742 気にする奴等って格闘とシューティングやってるやつだけだな
アクションは若干気になるかもしれないがやってりゃすぐ慣れる
30や60の3フレームなら気になるかも知らんが120以上の3フレームってどうなんだろう
は?いまどき120以上って無いでしょ?ありもしない3フレームの話をして何になるの? 倍速TVなどと勘違いしてるのかな
サムスンが120Hzのモニター出してるけどな。
120Hz対応のモニタはあるよ。 NVIDIAが3D眼鏡で60fps維持したくてサムチョンとかに作らせた。 まだ3機種しか出てなかったと思う。
>>742 いやいや…3フレームはRPGでもでかいから。
原因が3フレーム差と分からなくてもどことなくもっさり感を覚えるもんだよ
>>752 RPGでもっさりしてたところで大してゲームにゃ関係ないだろう
120サムスンって液晶かよw 話になりませんなwww
それ以前にチョンの話なんかするなよwww
自分でDirectXのプログラムを組むようになって、最近やっとサンプルを応用して自分でコード書けるようになってきました。 しかし・・・どうもノートPCから変な音が聞こえます。 ウィンドウを閉じて実行を終了するときに、CPU(定かではありませんが・・・)のあたりから 「シュンシュンシュイーン」 みたいな小さな音がして終了。 いままでこんな音はなったことが無いんですが、どうもPCには良くない気がして・・・ プログラムで開放のし忘れなどがあると異常音が出ることってあるのでしょうか?
(⌒⌒) ∧_∧ ( ブッ ) (・ω・`) ノノ〜′ (⊃⌒*⌒⊂) /_ノωヽ_)
負荷かけ過ぎて電源周りが寿命とかCPUファンがヘタってきてるとか暖かいので虫が住んでるとか
単にPCの寿命 (の前触れ) かなんかなんじゃないか
762 :
デフォルトの名無しさん :2009/12/15(火) 21:23:13
dxlibというすごいライブラリがあるそうです。 入手場所を教えて下さい。
ググレカス
うちのグラボは負荷を掛けるとキーンって音するね。
アラレちゃん入ってんじゃね?
アラレちゃんもいいけどやっぱりドラゴンボールだよね
もう餓鬼は発言するな。
日曜の朝にドラゴンボール放送してんな
知るかよ
鎌田 茂雄って何者? DirectX9の本以外、全部宗教なんだけど。
宗教の方の鎌田茂雄は8年前に死んでる
活動凍結って意味で?
D3DXMatrixRotationYを使うと(0,0,0)を中心にぐるぐる廻るんですけど。 例えばネギのモデルで根っこを中心にして廻すにはどうすればいいの?
>>775 移動してから回転するのと、回転してから移動するのとは、値が同じでも結果が違う。
今は移動してから回転してるからそうなるんだよ m9(・∀・)ビシッ!!
根っこを(0,0,0)に移動してから回転させた後、元の位置に戻す。
普通は根っこを原点にモデルつくるんじゃね
まずネギのモデルってなによ?
あれだろ
そーいえばロボットのゲームとかでarm.xとかbody.xとかって体を分割してるようだけど あれって一つ一つ調整するなりソフト使って動きのモーション付けてんのかな それともオリジナルの形式使ってんのかなあ
>>781 ゲーム中の扱いによって変わると思うけど、一般的には一つのファイルで管理されてるんじゃないかな。
アニメーション以外にもロードを速くしたいとか特殊なマテリアルを埋め込みたいとかゲーム独自の仕様に合わせ易いからということで、最終的には独自フォーマットを使うことが多いと思う。
なにが言いたいのか解らん メッシュが複数でもボーン構造は一つだろ
784 :
263 :2009/12/16(水) 21:33:37
>>781 ケースバイケースだと思うけど、ゲームグラフィックスとか
CGWorldとか読めば多少話載ってるんでは。
ちと古いけどパンピートロットの記事ではゲーム内での
パーツの差し替えの仕組みとかの話あったような。
LightWaveの日本の代理店にあるDirextxの書き出しサンプルが
パーツ別のロボットの歩行アニメーションだけど、製品の
ディスクには同じシーンデータがサンプルで入ってる。
みんなってゲーム作るとき、フォームとか描画とか更新とかを統合した フレームワーク的なもの作ってるの?
当たり前だろ 一から全部自分でやるなんてアホ
意味が判らない
次の質問者どぞ
( ゚д゚)ポカーン
(;゚д゚)ゴクリ…
>>787 勉強のため自作しようとしたら、
破綻して放置。早数ヶ月。
こうならないためになんかフレームワーク使ったほうがいいかも。
自分のおつむの程度に合わせて無理しないのが長続きの秘訣だな
それはいえてる。 自分の出来ることからやっていくのがなんだかんだで一番いい。 いきなり背伸びしても途中で脳がはじけ飛ぶだけだ。
マジキチレベルのソースを見るのも多少は勉強にはなるけどな。 ただ、読めるだけで習得できたと勘違いするのが偶にいる。 ソースは俺
Direct3Dに関して言えば、 メッシュ数個を描画出来る程度の「まな板」を作っておくと非常に便利。 できれば画面や設定ファイルで細かくいじれるようになっているとよりいいだろう。 ある程度思ったとおりに動くようになると、今度は主だった一通りの環境で動くようにする必要が出てくる。 そういう時にそういったツールが役に立つ。環境依存の不具合の原因を探るためのね。
August2009のD3D11ってD3DXMATRIXとかないけど、自前で実装しろってことかな? D3D10のときにあったチュートリアルサンプルもがないから、D3DXがいらない人向けに まずは出したバージョンかな。
XNA Math Library
>>797 d3dx9.hをincludeすりゃ使える
下記サイトを参考にしているのですが、テクスチャについてわかりにくかったので質問します。
テクスチャを画像ファイルから作るまではわかったのですが、ポリゴンにはりつけるという概念がわかりません
処理としては、D3DXCreateTextureFromFileExから返ったポインタをSetTextureの引数にいれることで貼り付けができるんでしょうけど
どこのポリゴンにはりつけるのか?という記述が私には見分けがつきませんでした。
貼り付け先のポリゴンが自明の場合には選択する必要がないということでしょうか?
参考サイト
http://marupeke296.com/DXGSmp_No3_CreateTexture.html
強引に連れて行ってもしょぼーんな結果になるからなぁ それとも2回目以降だと意外とはまったみたいな展開あるん?
>>798 なるほど。分かれたヘルプのDirectX Documentation for C++側に記載されてた。
ありがと。
>>797 D3DX10math.hでもいいかな。
804 :
デフォルトの名無しさん :2009/12/20(日) 06:44:34
これからDirectXのバージョンはなにで開発するのが一番いいの?
バーカ^^
>>805 対応PCが多い、技術情報が多い⇒DirectX9
最新技術が使える⇒DirectX11
最新技術(笑)
>>802 すみません
わからないです
テクスチャの張り付け先のポリゴンを指定するような関数はないんですかね
>>808 携帯性が重視される時代に最新技術ねえ・・・
高性能パソコンはますます売れなくなる
>>810 テクスチャに頂点を指定するのではなく
頂点一つ一つにテクスチャの座標を設定するんだよ
もしかしてそういうこと聞いてるんじゃないんじゃね? テクスチャの張り付け先のポリゴンを指定するって発想じゃなくて これから表示するポリゴンのテクスチャを指定するって考えるんだよ
>>812 頂点とテクスチャの関連付けはどこでおこなわれているのですか?
パイプラインに食わせるって感覚がライブラリ作ってる奴等の脳みそにこびりついてるから いつまでもこんな兄貴な仕様なんだよなw
816 :
デフォルトの名無しさん :2009/12/20(日) 14:19:49
>>815 くわせるというのはSetTextureをポリゴン描画の寸前にもってくるということですか?
>>814 頂点情報にuvってあるじゃん?
その座標情報を使って
「現在、設定されているテクスチャを使って」描画する
つまり、Primitive関数(モデルを描画する関数)の直前にシステムに設定されたテクスチャが
勝手に使われるのであってポリゴンとテクスチャを関連付けるような仕組みはないw
>>814 >800のリンク先のソースコードの
太字のところを見れば分かるはず
みなさんありがとうございました ようやく理解できました!! それにしてもなんかすごい仕様ですねww
なんで公式のチュートリアルをやらずに変なサイトを見に行くんだろう?
SDK付属ヘルプやMSDNの解説レベルの文章ですら読み解けない、 絶望的な低脳が多いという事だろう
ああいうヘルプは3D系の知識前提だしな。
携帯性が重視されているのは当然だが だからといって技術的に何も勉強しなくてもいいわけじゃないな。
携帯性って訳されるとなんか違和感あるな。 汎用性とか使い回し易さ?
すみません 単体で「正常再生されるモーション付きXファイル」2個を -------------------------------------------------------- AnimTicksPerSecond fps { 4800; } AnimationSet Motion1 { 〜1セット目のモーション情報〜 } AnimTicksPerSecond fps { 4800; } AnimationSet Motion2 { 〜2セット目のモーション情報〜 } -------------------------------------------------------- こう連結しました。 これを再生しようと -------------------------------------------------------- m_pAnimController->SetTrackPosition(1, 0); m_pAnimController->AdvanceTime(0.02, NULL); -------------------------------------------------------- こうして再生しているのですが、 SetTrackPositionの第一引数、トラック番号をいくつに変えても 「2セット目のモーション」が再生されてしまいます。 (1セット目と2セット目を入れ替えると、やはり2セット目側だけが再生されます) これは、私がXファイルの作り方が間違えているのでしょうか? それともプログラム側が間違っているのでしょうか? 大まかで良いのでご指摘頂けると助かります。 orz
>>821 そこ笑うところか?
いわゆるImmediate Mode(死語)的な設計では極普通の仕様だと思うが
僕の頭が悪いんじゃなくて仕様がおかしいんだw って言いたいんだろ。
>>821 がOpenGLの仕様を知ったら笑い死ぬだろうな
836 :
828 :2009/12/21(月) 20:10:27
何やら私の勘違いが有るようなのと片方は自己解決できそうなので 一旦質問を締め切らせて頂きます。失礼しました。
837 :
デフォルトの名無しさん :2009/12/21(月) 23:03:11
わかりました。
今DirectX10とcpp、fxファイルを使って作っているんですが 現在ウィンドウで表示している画面をテクスチャー(ID3D10Texture2D)に保存するにはどうしたらいいですか? 現状は、ID3D10RenderTargetView.GetResource(ID3D10Resource *)関数を使って ID3D10Resourceに入れることはできたんですがその後テクスチャーに変更(変換)することができません 環境はDirectX10、OSはWindows7です。よろしくお願いします
Present前のバッファをコピーするだけだろ。
840 :
デフォルトの名無しさん :2009/12/22(火) 19:45:08
WinGの質問ってこのスレでしていいの?
ダメです
D3D10_MAPPED_TEXTURE2D map; device->Map(0,D3D10_MAP_READ,0,&map); ... // DirectX9のLock/Unlock内でやるのと同じように手動でコピー ... device->Unmap(0);
ああdeviceって変数名のつけ方が悪いが許してくれ。 ID3D10Texture2D* device
Bio100%の質問ってこのスレでしていいの?
S3 MeTaLの質問ってこのスレでしていいの?
Xファイルで Material { フェイスカラー パワー スペキュラ 自己発光 } ってあるけどフェイスカラーっていったい何? Diffuse?Ambient?いじってみたらDiffuseと同じような機能してるけど 詳細が分からないので知ってる人お願いします
ディフューズで合ってる
850 :
デフォルトの名無しさん :2009/12/23(水) 07:52:42
レスにエロスが足りてない
>>842 やってみたのですがどうしてもID3D10Resourceのデータにアクセスできません
ID3D10Resource.GetPrivateData関数を使えばいいのかとも思いましたがGUIDがわかりませんでした
他にもID3D10Device.CopyResource関数も使ってみたのですがテクスチャーは黒いままでした
引数はID3D10Texture2D、ID3D10Resourceを指定しました(mapが使えなかったため)
マルチサンプルなら ResolveSubresource でダウンサンプリング。 コピーは、そのまんま CopySubresourceRegion 。 システムメモリに移したければ、CopyResourceで転送。 とりあえずエラー値もちゃんとチェックして頭使って考えろボケ。
DirectX必携届いた。 本の厚みは前作の半分以下、項目数は418に削減、索引も無し。 文字を小さくした上で本文も圧縮してギチギチに詰め込んでる。 XAudioについては全く言及無し。
人柱乙
>>853 CopyResourceでちゃんとできるということで粘ったらできました、ありがとうございます
確認のためにテクスチャを表示させていたのですがそこでミスをしてました
他の方法も試してみます
>>842 無事テクスチャにすることができました、ありがとうございます
>>856 目次はあんまり変わってないように見えるんですが、逆引き持ってる人がこっちも買うメリットってありそうですか?
>>858 ありそうでなさそうでありそうでなさそう
前作から削られた項目と追加された項目があるので、追加された分に魅力を感じるなら買ってもいいんじゃない。 後は2008用のサンプルが用意されてる事くらいか。 でも、前作のでも2005用を変換すればいいだけなのであんまり訴求しないな。
なんつーか、作者は宣伝が過ぎるな。
862 :
デフォルトの名無しさん :2009/12/25(金) 09:01:02
古本屋で
ふーん
同じのをDiretX11でたのむ
DiretX11
867 :
858 :2009/12/25(金) 11:27:48
>>859 ,860
レス、ありがとうございます。
逆引きから追加された項目も少ないようなので今回は見送ろうと思います。
DirectX11対応だったらなあ。
じゃぁ逆引きをそのままDirectX11に置き換えたやつ作るか
DirectX11\(^o^)/オワタ やっぱ9だよな〜
DirectX9の初期化って3秒ぐらいかかるのが普通でしょうか。 あと、初期化中にウィンドウに画像を表示しておく方法って何かないでしょうか。
>DirectX9の初期化って3秒ぐらいかかるのが普通でしょうか。 かからねえよ。 >あと、初期化中にウィンドウに画像を表示しておく方法って何かないでしょうか。 表示したければすればいいだろ。 ただしDirectXの範疇じゃないからスレ違いだ。
画像全部読み込む前に一枚読んで表示でもさせとけよ
>>871 > かからねえよ。
CreateDeviceに1.5秒ぐらい、Direct3DCreate9に0.5秒ぐらいかかってるようなんですけど、これって異常なんでしょうか
> 表示したければすればいいだろ。
> ただしDirectXの範疇じゃないからスレ違いだ。
DirectXの初期化に関する話題はスレチですかそうですか
>>873 開発環境もソースコードも提示されてないので分からないけど遅い気がする。
SDK付属のサンプルでも同じくらい時間かかるの?
>あと、初期化中にウィンドウに画像を表示しておく方法って何かないでしょうか。
そもそも何でウィンドウ表示したいの?
>>871 も言っている通りDirectXとは関係なく、ウィンドウモードなら普通にウィンドウを生成しておけばいいだけでしょ。
>>873 スレ違いだと納得したなら二度と来るな。
DirectXの初期化中に何か描画しようとするなら、DirectX以外の描画方法が必要になるからそれはスレ違い。 ここまで説明しないと理解できないのか。
>>873 最近ム板は変なのが住み着いてるから、感情的になるな
でも、DirectXの初期化中に画面に何かを表示したいなら、それはDirectXの範囲外だ
DDBかDIBあたりで描画しておけばいいんじゃないかな?
>>877 GDIとかで描画しても問題ないんですか?終了時に一瞬チラッと見えてしまってるようなんですが
>>878 問題ない
そのへんの細かな点は自分で何とかしてくれ
>>879 そうか。とりあえずそこらへん調べてみる
いろいろ調べた結果ちゃんと表示できるようになりました。ありがとうございました。
質問です。
http://fx.104ban.com/up/src/up11126.jpg 3次元座標上にDrawPrimitiveUPを使ってテクスチャを描画したのですが、3Dモデルを表示する処理を加えたところ中央のテクスチャが画像のような網掛けになってしまいました。
前後の処理の大まかな流れは
FVF適用→モデル用レンダリングステートの設定モデルの描画→テクスチャ用レンダリングステートの設定→
テクスチャ描画(移動、回転の設定→SetTexture→DrawPrimitiveUP)
です。
今のところSetTextureには問題はなく、モデル描画時のDrawSubsetを除いたところ正しく描画されましたが、なぜそうなるのか分かりません。
よろしくお願いします。
斜めの奴を先に描いて、床を後から描いてるからだろ
いえ、確認したのですがモデル(床)の描画の後にテクスチャ(網掛け)を描画してます。
DrawPrimitiveUpする前のFVFの設定は?
// 構造体 struct VERTEX3D { // 頂点座標 D3DXVECTOR3 position; // ディフューズ色 D3DCOLOR color; // テクスチャ座標 FLOAT U, V; }; // FVF(ワールド空間) #define D3DFVF_VERTEX3D (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) 上のように宣言してます
>>886 いやさっきの説明だとDrawPrimitiveUPの前にFVF設定してないだろって話。
888 :
887 :2009/12/26(土) 01:21:47
あぁ勘違いしてた。 とりあえず描画の不具合はPIX使おうよ。 一瞬で原因分かるから。
889 :
882 :2009/12/26(土) 22:01:19
ありがとうございます。 なるほど、PIXの存在をすっかり忘れていました。まずは試してみようと思います。
890 :
882 :2009/12/26(土) 23:17:54
お陰様で解決しました。モデル描画後にSetFVFをもう一度行ったところ正しく表示されました。 モデル描画時に適用したつもりのFVFの設定がリセットされていたみたいです。 ありがとうございました。
>>890 というか、DrawPrimitive系を呼び出す前にはかならずSetFVFかけとかないと危ないんじゃない?
特にいろんなメッシュを描画したいときは。
すみません。 ポイントスプライトはエフェクト表現に使って比較的、平気なものでしょうか? ハードウェア機能と書かれており、グラボが無い場合の挙動や負荷が気になるのですが・・。
グラボがなければそもそも何も表示できないんだが、 いったい何を言っているんだ?
>>893 そうなんですね。では訂正させて頂いて、
RADEONやGeForce系をつんでないPCの場合、挙動は最低限保障されると思って良いものでしょうか?
>RADEONやGeForce系をつんでないPC と >挙動は最低限保障 の定義を明確にしろ。
エミュで試せ
最近はグラボ積んでなくてもマザボでRADEHD4000くらい賄えるものもあるよ とりあえず自分のPCのグラボぶち抜けばいいんじゃね
私の表現も色々マズかったですが、やけに気が立ってる方がいらっしゃいますね
>>896 そうですね。こんな事自分でテストできるようになれば一々聞かなくて済みますね。
今後の為にも方法を調べてみようかと思います。ありがとうございました。
グラボ抜かなくてもグラボのドライバ削除するだけでいいんじゃね
>>892 ハードウェア・アクセラレーションが使用できない場合はソフトウェアでエミュレートすることができるので動作に問題はありませんよ。
ただし、その場合はCPUに大きな負荷がかかるので処理落ちする可能性はありますが。
最近のPCであればオンボードでもかなり高性能だと思いますけど、実際にテストしてみないと分からないですね。
とりあえずDirect3Dを初期化するときにハードウェア・アクセラレーションを使用しないようにできるのでそれで試してみたらどうでしょうか?
ぶっちゃけ
>>893 がズバリ正解なんだけどね。
REFはSDK入れないと使えないし。
>ハードウェア・アクセラレーションが使用できない場合はソフトウェアでエミュレートすることができるので動作に問題はありませんよ。 REFがなんだか理解できていない奴がこういう勘違いを平気でするし。
今やREFデバイスに存在価値はあるのだろうか
REF試してみたが、Core i7でも秒間1回描画することすら無理なんだが……。 これはあくまでデバッグ用だろ?
905 :
900 :2009/12/28(月) 12:56:55
すみません、書き方が悪かったです。 REFは描画はできてもまともな速度で動作しませんね・・・
REFは、自分のプログラムが悪いのか、グラボのドライバのバグなのかを見極める時にとても役に立つぞ オンボ関係はまだまだグラボバグが多い・・・
REFで挙動を調べても、異常値を入れても正常に動いてしまうので、 結局一通りの環境で動かさないと見極めなどつかない。
つかないな。
909 :
デフォルトの名無しさん :2009/12/28(月) 15:47:56
D3DDEVTYPE_HALとD3DCREATE_MIXED_VERTEXPROCESSING を組み合わせれば、ほとんどのPCで動く? つかこれだと何fpsぐらいでるの?? 今PC使えないから検証求む
独立した質問だろ。
912 :
892 :2009/12/28(月) 15:58:36
>>912 そんなお世辞はいらないぞ
回答者が調子にのるからな
ホントに変なのが住み着いてるんだな、このスレ 昔質問の仕方が悪くて叩かれたやつの逆恨みか?
まあ実際REFがどうであるかなんて、 どうでもいいことだし、クソの役にも立たないし こいつらのアドバイスは無駄でしかない
>>909 >つかこれだと何fpsぐらいでるの??
何を処理するかもマシンのスペックも不明なのに答えられるわけがないだろ。
いい加減にしろよ。
たしかに無駄なアドバイスが多いな
まあ頭の無いゴミに何言っても無駄ですけどね
最近は回答される方々の中には怒りっぽい方がいるようですね。 スレッドが荒れますから平静を保つよう心がけましょう。
昔、ここでたくさん受けた恩は忘れていない 荒れてても初心者がきたら回答者としてがんばるさ
今ゲーム用のウインドウとかシステムとかのスケルトンを作ってるんだけど、 モデルの描画はメインスレッド、モデルの更新は別スレッド、っていう 作りって大丈夫だと思う? ゲ製は初心者なんで教えてくれ m(_ _)m ------------------------------------------------------------- プログラム メインループ → 描画(できる限り) 別スレッド → 更新(できる限り、現在のフレームの値?で更新) -------------------------------------------------------------
922 :
921 :2009/12/29(火) 20:25:41
こういうのがマズイっていうのがあったら アドバイスをくだされ
Frapsのように、他のDirect3Dプログラムに描画したりキャプチャしたりといったことは、どうやって実現しているのでしょうか? バックバッファをの内容を書き換えたり取得するのだと思いますが、他のプログラムに大してそんなことできるのですか?
同人げーおもすれーな 個人で手軽に優良ゲーつくれりゃいいのにな。 むしろ面白いゲームを勝手に作ってくれるプログラムあればいいのに
おもしろい同人ゲーkwsk パクリゲー抜きで
927 :
デフォルトの名無しさん :2009/12/30(水) 00:10:02
c++はカオス
>>926 924じゃないけど、紹介したら宣伝だって叩かれると思うよ。
>>921 >現在のフレームの値?
じゃなくて前回更新した時間との差分でやれ
931 :
921 :2009/12/30(水) 15:11:41
現在のフレーム = (現在の時間 - 開始時間) ÷ 1フレームあたりの時間[ms] で求めようと思ってるんだけど・・・ マルチスレッドは問題nothing?
描画なんて全力でまわせばよくね?
933 :
921 :2009/12/30(水) 17:02:29
うん。描画は回せるだけ回そうと思ってる。 問題は更新ロジックなんだわさ
そんな事もろロクに考えられないバカがスレッドとかウケルんですけど
>>934 これだから厨房は・・・
こんなのばかりだから困る
あ、もしかして厨房でない?
もしかして自分は頭いいと思ってるの?
>ろロク 文字すら'ろ'ロクに打てないバカが煽りとかウケるんですけど
938 :
921 :2009/12/30(水) 17:22:21
え、俺・・・?
作り込む前に簡単なテストでもすれば解決 ここで問題ないって言われてもテストするでしょ?
テストするでしょ?って言ってんだろ!
マルチスレッドで更新、描画を行うときって、 更新のときロックした方がいいのかな?
ロックした方がいいに決ってる
画面の描画ってメインスレッドがやるものじゃないの?
メインスレッドは同期を取るだけでいいのよ
Direct3D9をつかっている既存の自作ゲームがあるのですが、 それにエディットボックスやチェックボックスなどのGUI要素を追加したいのですが、 Direct3D9に対応したGUIライブラリにはどんなものがありますか? まっさきに思いついたのはDXUTですけど、これってそもそもアプリケーション全体を DXUTフレームワークで作っていないといけないんですよね?
ゲーム製作難易度的に何からはじめればいいかな。 とりあえず今の俺はrandom関数を利用して的がランダムにグーチョキパーを出すジャンケンゲームくらいならなんとか作れるレベル。
自己解決したお(´・ω・`)
>>946 DirectXを使ってジャンケンゲームを作るなら、このスレにいてもいいけど
DirectXを使えばジャンケンゲームが作れるようになったばかりの俺でも 超すごいグリグリ3Dのかっこいい伽羅が動き回る派手なアクションゲームつくれます?
キャラクターの格好は、プログラムの問題ではないからスレ違い。
>>945 俺が試したところ、
一応DXUTは無改造(終了時の後処理のHWNDまわりで何かあった気がするが)で
導入可能だった。かなり昔の記憶だが。
DXUTCoreとDXUTOptionalをプロジェクトとして追加するんだが、
特に難しい点もないし、試してみるよろし。
953 :
デフォルトの名無しさん :2009/12/31(木) 23:35:48
ゲームを作るとき、 LPDIRECT3DDEVICE9をどこに配置してる? グローバル変数というのが妥当なのだろうかなぁ しかしながらそれだと入れ子になったクラス (タイトル画面クラス、ゲームプレイクラス等) にいちいちポインタを渡さないといけない これをどうにかするにはどういった方法をつかえばよいのでしょう?
>>953 D3DDevice9は、物理デバイスの有無といったC++の外の概念に
影響されるので、確かに扱いづらい。
D3DDevice9はadapterOrdinalという番号を一意に持つので、
これで管理するのが最も自然と思う。
D3DDevice9のポインタは、グローバル変数の配列に保存され、
D3DResourceを保持するオブジェクトは、adapterOrdinalも同時に持ち、
それでD3DDevice9にアクセスする寸法。
955 :
954 :2010/01/01(金) 00:15:43
ごめん、ちょっとピントの外れたレスだった 無視してくらさい
DXUT使えば解決
てかヘッダーで外部参照じゃだめなん? まぁ、根本的な話をすると タイトル画面クラス、ゲームプレイクラスみたいなゲーム本体部分が ハード依存部分(D3DDevice9)に直接アクセスするような設計がおかしい ハード・ゲーム・データはそれぞれ独立して設計しないと 再利用性皆無の糞コードが出来上がるだけだぞ
だめ
なぜだめなのか書かないと
960 :
デフォルトの名無しさん :2010/01/01(金) 11:55:56
>>957 なるほど
きちんと分けないといけないのですか
ということは描画部分クラス、サウンドデバイスクラス、
入力受付クラスなんかを設計して、
ゲーム部分からはそのメソッドからアクセスという形がいいということでしょうか
ということは・・・staticメンバにD3DDevice9をprivate
というのがいいのでしょうか?
>ヘッダーで外部参照
これはexternあたりの話でしょうか?(この辺は勉強不足です)
それとあけおめでございます^^
962 :
sage :2010/01/01(金) 15:02:02
>961 俺も知りたいですおヾ(・ω・o)
963 :
962 :2010/01/01(金) 15:05:12
E-mail欄でしたOTL
D3DXQUATERNIONとD3DXVECTOR4の違いって何ですか? クォータニオンは4Dベクトルですって書かれているものもあるのですが…
4つの数値をまとめたのが4次元ベクトル。 そのベクトルの間に特定の演算を組み込んだのがクォータニオン。
>>965 >>966 ありがとうございます。
複素数と2次元ベクトルの関係みたいなものなのですね
クォータニオンと4次元ベクトルの内積の違いについても実験してみようと思います。
>>967 アドバイスというかなんと言うか。
クォータニオンの各成分の意味は謎なので考えないほうがいいらしい。
らしいなw
数の成分なんて一定じゃない 170cmとか200km/hとか単位によって意味は変わる Direct3Dにおけるクォータニオンは3次元座標に応用したもの
で 加算、減算があるように、ベクトル内積、クォータニオン内積と計算方法として存在する 単に「内積」だとどっちか分からないから名前がついてる ベクトルもクォータニオンも(Direct3Dの次元では)同じ意味。
972 :
デフォルトの名無しさん :2010/01/04(月) 20:42:38
ようするにDirect3Dでは俺定規で測れ、ってこった
スレ違いでしたらすみません。 HLSLで「モデルの頂点色(Diffuse)」を指定するには コードに何と記述すれば良いのでしょうか? 実数を当てて色や透明度の出力は成功しております。
なにが聞きたいのかイマイチ解らん 実数の部分を変数にして プログラム側からその変数に値を送れば良いだけのはずだが
>>974 これは・・私が勘違いしている事間違いなしですね。
HLSL、いまいち掴めないですが・・色々情報漁って再勉強してみます。 ありがとうございました。
すみません。モーションをミックスする時の D3DXTRACK_DESCのSpeedメンバは何を意味しているんでしょうか? MSDNでは「速度の値。トラックの間隔をスケーリングするための乗数に似ている。」とあるのですがよくわからず、 ググっても情報がなく、何か意味ありげな数値をセットしてる所も有るみたいなのですが・・
DirectXは知らんが。 0〜100のローカル時間で定義されているアニメーショントラックをscale=1で、 ワールド時間1500の位置で再生すると1500〜1600の区間で再生されるだろう。 scale=2で再生すると1500〜1700の区間で再生されるだろう。 つまりそう言う事。 scale=nだと再生スピードがn倍される(か1/n倍される)
ポリゴン数増やすのとボーンを増やすのってどっちが計算量かかりますか?
物によるんだから自分で計算量を出してみれば一発だろ。 いったい何を聞きたいのか意味不明。
ボーン増やしてもリミット超えなければ計算量はほとんど変わらず一定。 ポリゴン増やせばほぼリニアに負荷が増える。 だからどうしたって感じ?
982 :
953 :2010/01/07(木) 22:59:14
名前: 953 E-mail: sage 内容: LPDIRECT3DDEVICE9をどこに配置すればよいのかということで、 一応今の段階での答えが見つかったので報告です 一つしかインスタンスを作れない、 シングルトンという形で配置することにしました MyDrawEngine.hはこんなかんじです class MyDrawEngine { public: static MyDrawEngine* Instance(); static void Create(HWND); static void Destory(); LPDIRECT3DDEVICE9 GetpDevice(); private: MyDrawEngine(HWND); ~MyDrawEngine(); static MyDrawEngine* mInstance; LPDIRECT3D9 pD3d; LPDIRECT3DDEVICE9 pDevice; }; おそらくもっと良い方法はあると思います もしその情報を知っている方がいたら、 今後のためにも、ぜひ教えていただきたいです
C++をまず普通に使えるようになろう
>>982 引数で渡すのが一番安全
仮にロストしてたらどうする気?
【建前】
プログラムの作法としてグローバル変数・関数っては使わないのがデフォ
その代わりとしてすべて引数で渡すのが基本
ヘッダも必要最小限のみインクルードするのが基本
【実際】
開発現場によってコロコロ変わるからその場にあわせてうまくやりゃいーんじゃねーの?
多分、グローバルなんかにおいて悦に逝ってるレベルからするにプログラムを完全に勘違いしてるレベル
まあ、別にいいけど
恥かしいから控えめに発言しとけ
985 :
953 :2010/01/08(金) 02:00:47
>>984 『ゲームプログラマになる前に覚えておきたい技術』
という本で紹介されていた方法なのですが、
グローバル変数はシングルトンクラスの形で置かれるのが望ましい
というように書かれてあって挑戦してみました
>>仮にロストしてたら
というのはどういうことでしょう?
単純にNULLポインタでのアクセスの危険性ということでしょうか?
>>グローバルなんかにおいて
シングルトンはグローバルに配置云々は関係ないような気がするのですが、
どういう意味でしょうか?
素人が飛びついて失敗する典型ですね
>>985 >というのはどういうことでしょう?
3DDeviceのポインタは勝手に無効になるそれはNULLとかそういう話じゃなくて
無効になるデバイスロストでググレ
3DDeviceのポインタに限らずインスタンスってそういう可能性あるよね?
グローバルで抱えるってことはそういう可能性をまったく考慮してないってこと
>>985 その本に「言語まで説明するのめんどくせぇーからスタティックにしておくよ」的なつぶやき書いてなかったっけ?
staticやグローバル変数が使えるC++で シングルトンを使う意味はあまりないような気がするけど
constと同じだろ
>>987 それは関係無いと思うが
誰かが管理すればいいだけの話で
だから 設計に悩んで先に進めないような初心者ならDXUT使えって 何も無いところに壁を作って挫折するくらいなら
993 :
953 :2010/01/08(金) 20:54:25
>>987 ありがとうございます
デバイスロスト時の処理も注意して書いていきます
>>988 いくつか筆者の意見が書かれていたとおもいますが、
どの位置のことをおっしゃっているのかはちょっとわかりませんOTL
>>992 それもいいのかもしれません
しかしもうすこしがんばってみます
ありがとうございました
アレアレ? だれかさんのつたない実装に直撃? 怒っちゃった?
>>953 の自己満クソ設計は別にどうでもいいが
>>987 は間違っている
デバイスロスト時の挙動と記憶クラスがどうであるかは
別に関係無いでしょ
引数で渡すのが一番安全の意味が分からない。。。
>3DDeviceのポインタに限らずインスタンスってそういう可能性あるよね? これってどういう可能性? 何、ある日突然確保してるヒープが開放されんの? いや〜、怖い世の中じゃのうw
1000 :
デフォルトの名無しさん :2010/01/09(土) 16:32:21
1000 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。