【C++】 DirectX初心者質問スレ Part25 【C】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/08/25(火) 22:50:20これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part24 【C】
http://pc12.2ch.net/test/read.cgi/tech/1245675989/
0002デフォルトの名無しさん
2009/08/25(火) 22:51:49またお願いします。
SetRenderTarget()で2枚分のテクスチャにDrawSubset()で描画して
2枚のテクスチャをプログラマブルシェーダでミックスして表示させようとしたのですが
背景色が表示されるだけで肝心のDrawSubset()で描画したメッシュが表示されません。
どうすればいいんでしょうか?
0003デフォルトの名無しさん
2009/08/25(火) 23:59:15初心者スレつってもちゃんとした説明くらいしてくれねぇと困る。
というわけでPIXで何が書かれてないか確認しろ。
0004デフォルトの名無しさん
2009/08/26(水) 00:02:00Gamefest 2008で口頭のアナウンスがあっただけで正式発表はまだないぞ。
したがってDirectX 11がVistaで動作しうるかについては確度は高いが確定情報ではない。
0005デフォルトの名無しさん
2009/08/26(水) 00:36:33すいませんでした。
dev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
dev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
dev->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
dev->SetRenderState( D3DRS_ZENABLE, TRUE );
for (int i = 0,n = 2;i < n;i++) {
dev->CreateTexture(SCREEN_WIDTH,SCREEN_HEIGHT,1,D3DUSAGE_RENDERTARGET,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&EffectTexture[i],NULL);
dev->CreateDepthStencilSurface(SCREEN_WIDTH,SCREEN_HEIGHT,D3DFMT_D16,D3DMULTISAMPLE_NONE,0,TRUE,&DepthStencil[i],NULL);
}
dev->GetRenderTarget(0, &stTarget);
dev->GetDepthStencilSurface(&stDepthStencil);
dev->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(8,8,8),1.0f,0);
dev->BeginScene();
0006デフォルトの名無しさん
2009/08/26(水) 00:38:21EffectTexture[0]->GetSurfaceLevel(0, &surface0);
dev->SetRenderTarget(0, surface0);
surface0->Release();
dev->SetDepthStencilSurface(DepthStencil[0]);
dev->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DXCOLOR(1,1,1,1), 1, 0 );
D3DXMATRIX m;
D3DXMatrixIdentity(&m);
dev->SetTransform(D3DTS_WORLD, &m);
dev->SetTexture(0,Texture);
mesh->DrawSubset(0);
LPDIRECT3DSURFACE9 surface1;
EffectTexture[1]->GetSurfaceLevel(0, &surface1);
dev->SetRenderTarget(0, surface1);
surface1->Release();
dev->SetDepthStencilSurface(DepthStencil[1]);
dev->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DXCOLOR(1,1,1,1), 1, 0 );
dev->SetRenderTarget(0,stTarget);
dev->SetDepthStencilSurface(stDepthStencil);
effectShader->SetFloat("Alpha",0.5f);
effectShader->SetTechnique("Mix");
effectShader->SetTexture("Tex0", EffectTexture[0]);
effectShader->SetTexture("Tex1", EffectTexture[1]);
// 矩形を描画(省略
dev->EndScene();
dev->Present( NULL, NULL, NULL, NULL );
0007デフォルトの名無しさん
2009/08/26(水) 00:39:58よろしくお願いします。
0008デフォルトの名無しさん
2009/08/26(水) 01:30:420009デフォルトの名無しさん
2009/08/26(水) 01:32:14surface1->Release();
かなー。
0010デフォルトの名無しさん
2009/08/26(水) 01:33:100011デフォルトの名無しさん
2009/08/26(水) 02:47:49すいません。
effectShader->Begin(NULL,0);
effectShader->BeginPass(0);
// dev->CreateVertexBuffer(4 * sizeof(VERTEX),0,D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE2(1),D3DPOOL_MANAGED,&VertexBuffer,NULL);
LPDIRECT3DVERTEXBUFFER9 vertextBuffer = VertexBuffer;
dev->SetStreamSource(0,vertextBuffer,0,sizeof(VERTEX));
dev->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE2(1));
VERTEX* pVertex;
vertextBuffer->Lock(0,4 * sizeof(VERTEX),(void**)&pVertex,0));
pVertex[0].fX = 0; pVertex[0].fY = 0;
pVertex[1].fX = SCREEN_WIDTH; pVertex[1].fY = SCREEN_HEIGHT;
pVertex[2].fX = 0; pVertex[2].fY = 0;
pVertex[3].fX = 1; pVertex[3].fY = 1;
0012デフォルトの名無しさん
2009/08/26(水) 02:48:58pVertex[1].fTU0 = pVertex[1].fTU1 = 1; pVertex[1].fTV0 = pVertex[1].fTV1 = 0;
pVertex[2].fTU0 = pVertex[2].fTU1 = 0; pVertex[2].fTV0 = pVertex[2].fTV1 = 1;
pVertex[3].fTU0 = pVertex[3].fTU1 = 1; pVertex[3].fTV0 = pVertex[3].fTV1 = 1;
for (int i = 0;i < 4;i++) {
pVertex[i].fZ = 0;
pVertex[i].rhw = 1;
pVertex[i].diffuse = D3DXCOLOR(1,1,1,1);
}
vertextBuffer->Unlock();
dev->SetRenderState(D3DRS_ZENABLE, FALSE);
dev->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
dev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
dev->SetRenderState(D3DRS_ZENABLE, TRUE);
dev->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
effectShader->EndPass();
effectShader->End();
0013デフォルトの名無しさん
2009/08/26(水) 02:54:11>>11-12が矩形を描画する処理です
>>9
どうすればいいですか?
>>10
メッシュの極一部が異常に拡大されて一色のみ表示されているかのような状態でテクスチャに書き込まれている気がします
あるいはテクスチャに書き込まれてさえいないかも知れません
どちらも自信はありませんが
0014デフォルトの名無しさん
2009/08/26(水) 08:56:560015デフォルトの名無しさん
2009/08/26(水) 10:23:09あれって法線ベクトルをいくつかに分類して
それぞれに色を割り当てれば良いんですか?
0016デフォルトの名無しさん
2009/08/26(水) 10:28:45テクスチャでライトの強度を変調しろ。
0017デフォルトの名無しさん
2009/08/26(水) 16:13:52マリオブラザーズのようなゲームで敵を描画するとき ステージごとに敵の配列を用意して
///
Sprite->Begin( NULL );
関数( 敵情報の配列 );
g_pSprite->End();
///
関数に 位置座標・どの画像を使うか の変数等が入った構造体の配列を渡して、
関数内でfor文により要素全てを描画するという形で、一応描画はされるのですが
要素の二つ目以降がキーボードのキーを押したりマウスカーソルを動かすと描画されない時があり
点滅しているような状態になってしまいます。
ちなみにマウスカーソルに関するプログラムは一切書いていません。
イマイチ原因がわからないので何かアドバイス頂けませんか? 初心者なので根本的に可笑しいとかならば
それを指摘してくださると助かります。
0018デフォルトの名無しさん
2009/08/26(水) 16:34:090019デフォルトの名無しさん
2009/08/26(水) 16:37:520020デフォルトの名無しさん
2009/08/26(水) 16:56:27根本的におかしいのは
「たった3行の疑似コードで原因が分かるわけないだろう」
ってこと
その僅か3行で指摘できるのは、SpriteのBeginを呼んでいるのに
Endはg_pSpriteのを呼んでいる点くらいだ。
0021デフォルトの名無しさん
2009/08/26(水) 18:22:37原因それでした!
ばっちり直りました
ありがとうございます
0022デフォルトの名無しさん
2009/08/26(水) 19:22:04すいませんでした
PIXで調べてみたらテクスチャ自体には描き込まれていたようで
矩形描画の処理に問題があったみたいです
ありがとうございました
002317
2009/08/26(水) 20:57:58すみません、17のと少し違いますが左の引数が敵の座標とかが入った構造体の配列で
右の引数が描画する敵の数です。
VOID Draw(Enemy ene[] , int enenum){
for (int i=0; i<enenum; i++){
switch (ene[i].type){ /*どの敵かの変数です*/
case 0: /*敵1*/
ene[i]に使う画像とか設定
break;
case 1: /*敵2*/
ene[i]に使う画像とか設定
break;
}
g_pSprite->Draw( ・・・ ); /*ene[i]を描画*/
}
}
これを g_pSprite->Beginと g_pSprite->Endの間に呼び出すという具合ですが・・・
なぜかキーを押したりすると描画されない時があります。
>>20
g_pSpriteが正しく Spriteの方はただの記述ミスでした。
002417
2009/08/26(水) 21:02:400025デフォルトの名無しさん
2009/08/26(水) 22:47:40音量調整をするにはどうすればいいですか?
0026デフォルトの名無しさん
2009/08/26(水) 23:02:42002725
2009/08/26(水) 23:07:34プログラム実行中に上下ボタンなどで音量調整するには、どうすればいいですか?
0028デフォルトの名無しさん
2009/08/26(水) 23:27:10002917
2009/08/26(水) 23:50:450030デフォルトの名無しさん
2009/08/27(木) 00:14:27初心者をいびるために来ているクズは死ねばいいのに。
誰も概論などききたかねーよ。コピペすりゃ動くコードを張れと行ってんだくうきよめ
0031デフォルトの名無しさん
2009/08/27(木) 00:26:28何が原因だったの?
0032デフォルトの名無しさん
2009/08/27(木) 00:59:59関数に渡す構造体変数を宣言するときに static を付けるのを忘れてました・・・
0033デフォルトの名無しさん
2009/08/27(木) 01:41:50われわれは質問者のママではない。
ろくなヒントも環境も説明もなしでエスパー発揮して
やさしく答えてくれるのを期待するならママに聞くべき。
0034デフォルトの名無しさん
2009/08/27(木) 07:02:35staticを付けなければ動かない時点で、設計ミスだろう
0035デフォルトの名無しさん
2009/08/27(木) 10:16:153点測量とベクトルを用いてどの面にいてどのぐらいの高さかを調べようと思ったのですが
この方法だと穴の開いたポリゴンの当たり判定をとれません
穴の部分を識別するなんかいい方法ないですかね?
0036デフォルトの名無しさん
2009/08/27(木) 10:38:00シミュレーションのような厳密な計算をするんでなければ、
通常当たり判定はポリゴン自体でなく、それを内接するいくつかの点をチェックすれば十分だ。
0037デフォルトの名無しさん
2009/08/27(木) 11:25:34003835
2009/08/27(木) 11:26:12もしかしてレイを使う奴?
0039デフォルトの名無しさん
2009/08/27(木) 11:34:550040デフォルトの名無しさん
2009/08/27(木) 11:50:000041デフォルトの名無しさん
2009/08/27(木) 12:02:34これには異論はないよな?
それをふまえて穴の開いたポリゴンって何?
ドーナッツポリゴンのこと言ってんの?
0042デフォルトの名無しさん
2009/08/27(木) 12:03:540043デフォルトの名無しさん
2009/08/27(木) 12:06:010044デフォルトの名無しさん
2009/08/27(木) 12:17:39if( ドーナッツに該当するポリゴンの当たり判定 && !穴に該当するポリゴンの当たり判定 )
return ドーナッツに該当するポリゴンとの距離;
0045デフォルトの名無しさん
2009/08/27(木) 12:23:280046デフォルトの名無しさん
2009/08/27(木) 12:29:34穴もポリゴンだろ
穴を凸ポリゴンとしてレイとの接触判定すればいい
ま、実際聞きたいことは別だろうし
スレ荒らしはここまでにするわ
ではでは
0047デフォルトの名無しさん
2009/08/27(木) 13:46:41ビルドが成功したプログラムをデバッグしてみると、FLOATに値を代入するところでエラーが発生しました(代入に関しては問題は無いと思ってください)
何も変更せずにもう一度デバッグしてみると、今度は問題なく動作しました。
エスパーさんがいたら、この原因を当ててください。お願いします。
0048デフォルトの名無しさん
2009/08/27(木) 13:53:480049デフォルトの名無しさん
2009/08/27(木) 15:10:12いや動きはしますよ、なぜかキー入力をしたりすると描画処理が飛ばされるんです。
0050デフォルトの名無しさん
2009/08/27(木) 16:28:05無印探してるんだけどもう配布されてないの?
0051デフォルトの名無しさん
2009/08/27(木) 16:41:330052デフォルトの名無しさん
2009/08/27(木) 16:49:550053デフォルトの名無しさん
2009/08/27(木) 19:14:35本とに初心者なんで変な質問ですみません。
0054デフォルトの名無しさん
2009/08/27(木) 19:16:460055デフォルトの名無しさん
2009/08/27(木) 19:38:31半透明の四角形は表示できたのですが
それを使って画面全体をフェードアウトするために
画面全体に四角形を描画して徐々に透明度を下げてくと
画面がチラついてしまいます。どうすればいいのでしょうか。
透明にする処理を付けくわえたソースです
HRESULT creatRect(int x,int y,int w,int h)
{
g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE); //アルファブレンディングの有効化
g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); //SRCの設定
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);//DESTの設定
CUSTOMVERTEX vertices[] =
{
{ x, y, 0.0f, 0.0f, D3DCOLOR_ARGB(RectAlpha,RectRGB[0][0],RectRGB[0][1],RectRGB[0][2]), }, // x, y, z, rhw, color
{ x+w, y, 0.0f, 0.0f, D3DCOLOR_ARGB(RectAlpha,RectRGB[1][0],RectRGB[1][1],RectRGB[1][2]), },
{ x, y+h, 0.0f, 0.0f,D3DCOLOR_ARGB(RectAlpha,RectRGB[2][0],RectRGB[2][1],RectRGB[2][2]) , },
{ x+w, y+h, 0.0f, 0.0f, D3DCOLOR_ARGB(RectAlpha,RectRGB[3][0],RectRGB[3][1],RectRGB[3][2]), },
};
if(g_pVB!=NULL)RELEASE(g_pVB);
if( FAILED( g_pD3DDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
return S_OK;
}
0056デフォルトの名無しさん
2009/08/27(木) 21:25:31ソースの概要は
LPDIRECT3DTEXTURE9 pTextureScreen; // 描画先テクスチャ
LPDIRECT3DSURFACE9 pSurfaceScreen; // 描画先テクスチャ用サーフェイス
d3dDevice->CreateTexture(128 , 128 , 1 , D3DUSAGE_RENDERTARGET,
BackDesc.Format, D3DPOOL_DEFAULT, &pTextureScreen, NULL);
pTextureScreen->GetSurfaceLevel(0, &pSurfaceScreen);
/* Zバッファも設定とかしてるがあまり関係無さそうなので関連処理略 */
/* テクスチャへ描画してメインのサーフェイルへ貼る処理も略 */
// サーフェイスの開放
if(pSurfaceScreen != NULL)
{
hr = pSurfaceScreen->Release();
pSurfaceScreen = NULL;
}
// テクスチャの開放
if(pTextureScreen != NULL)
{
hr = pTextureScreen->Release();
pTextureScreen = NULL;
}
このテクスチャとサーフェイスの開放処理時に、最初に実行した方の開放が
失敗します(S_OKでなくS_FAILが返る)
順番を入れ替えても最初の方が失敗します。
そして実行後デバッグ出力でおそらくここと思われるサイズのVRAM未開放領域の
スタックトレースとかの文がずらずらと表示されます。
開放の仕方や条件があるのでしょうか?
どなたか教えてくださいよろしくお願いします。
005756
2009/08/27(木) 21:59:36現状ここで詰んでます。よろしくお願いします。
0058デフォルトの名無しさん
2009/08/27(木) 22:12:25if(pSurfaceScreen != NULL)
if(pTextureScreen != NULL)
が全くの無意味。
005956
2009/08/28(金) 00:10:59箇所を直したら開放漏れが無くなりました。
if(pSurfaceScreen != NULL)
は実際は別関数になっており、アプリケーションの構造上何度も呼ばれる可能性があるのでこうなってます。
0060デフォルトの名無しさん
2009/08/28(金) 02:01:43いつでも使える方法ではないが、
オレはゲームエンジン本体側とスクリプト側で、すべてのリソースのハンドルを保持して
必要なタイミングで全部開放するようなコードを2重に用意しているぞ。
2重になってるのは保険のためと、スクリプト側で使いまわすが
本体側からはその意図が掴めない場合があるためだな。
0061デフォルトの名無しさん
2009/08/28(金) 02:36:46リファレンスカウンタ、もしくは参照カウンタ
ってググってみ
0062デフォルトの名無しさん
2009/08/28(金) 22:37:40このクラスを配列で表示するとみんな同じ動きになるんだ。
どうやって乱数にすればいい?
0063デフォルトの名無しさん
2009/08/28(金) 22:40:420064デフォルトの名無しさん
2009/08/29(土) 00:41:230065デフォルトの名無しさん
2009/08/29(土) 01:43:16dmusici.hその他、DirectMusic関連のファイルを
November2008に移すだけで使えるの?
何か問題が出る?
0066デフォルトの名無しさん
2009/08/29(土) 02:38:44多分、乱数値が全部いっしょのもんしかとってこれてないんだろ
0067デフォルトの名無しさん
2009/08/29(土) 03:11:55古いSDKからヘッダ持ってくればビルド可能だから問題は特にないが
DirectMusic自体MSから切られてる動かなくてもいちいち人に聞くなよって程度。
0068デフォルトの名無しさん
2009/08/29(土) 05:35:42自分が使っているDirectX SDKのバージョンと配布者が使っているバージョンが違うと
こういうことは起こる?
0069デフォルトの名無しさん
2009/08/29(土) 06:57:520070デフォルトの名無しさん
2009/08/29(土) 07:29:29申し訳なかった
サンプルはDirectX SDKのではなく個人のもの(○×さんのサイトの)
シェーダ編 「多分必須!頂点変換の基本」のサンプル なんだが
コンパイルは成功するが画面が立ち上がらない
自分が使ってるSDKは2007 August
0071デフォルトの名無しさん
2009/08/29(土) 07:43:270072デフォルトの名無しさん
2009/08/29(土) 08:01:06そうだなw
悪かった 本人さんに尋ねます
0073デフォルトの名無しさん
2009/08/29(土) 16:41:22・D3DFMT_D24S8 で作ったステンシルバッファに好きな値を書き込むにはどうしたらいいのでしょうか?
具体的には、D3DFMT_D24S8 で作った、例えば 4*4 の深度ステンシルバッファがあります。(実際はもっと大きいです)
このステンシルバッファに、
0x00 0x01 0x02 0x03
0x10 0x11 0x12 0x13
0x20 0x21 0x22 0x23
0x30 0x31 0x32 0x33
という感じに、自由に値を書き込みたいです。
D3DFMT_D24S8 はロックできず、調べても、D3DRS_STENCILREF で特定の値を書き込むまでしかできませんでした。
同じくロックできないレンダーターゲットの場合は GetRenderTargetData があったのですが、こちらは見つかりませんでした…。
ステンシルバッファの使い方は情報が多いのですが、作り方が…。
よろしくお願いします。
0074デフォルトの名無しさん
2009/08/29(土) 17:16:54CPUから直接値を書き込むという発想が間違っている。
DrawPrimitiveでポリゴンを書け。
007573
2009/08/29(土) 17:35:08CPU から直で描く必要はないのですが、DrawPrimitive でポリゴンを描いたとしても、
ステンシルバッファに書き込まれる値は、D3DSTENCILOP で指定できる
「0 にする」 「1 加算する」 「特定の値(固定)にする」 などだけではなのでしょうか?
例えば色情報などを書き込めるなら、テクスチャに描画→DrawPrimitive で好きな値にできるのですが…。
0076デフォルトの名無しさん
2009/08/29(土) 18:51:120〜255までの整数しか書き込めねえ。
007773
2009/08/29(土) 19:36:38色情報と言うのは、DrawPrimitive で出力される情報の例として書いただけです。
自由に指定できる値なら何でもいいです。
例えばテクスチャを作成し、ロックして好きな値を書き込み、
D3DFVF_XYZRHW なりを利用して DrawPrimitive で描画します。
例えば結果の R値(赤) なりアルファ値なりをステンシルバッファに出力できれば、つまり好きな値を書き込めるという意味です。
単に、ステンシルバッファに好きな値を書き込みたいだけなんです…。
0078デフォルトの名無しさん
2009/08/29(土) 19:43:22Youシェーダに手を出しちゃいなYO!
0079デフォルトの名無しさん
2009/08/29(土) 19:43:46そもそも何をしたいのかが明確じゃないから話がまとまらない。
ステンシルに自由に書きたいってのは手段であって目的ではないだろ。
0080デフォルトの名無しさん
2009/08/29(土) 19:47:491ピクセルサイズのポリゴンで1ピクセルずつ固定値で描画すればいいがな。
008173
2009/08/29(土) 19:56:23おっしゃる通りでした。すみません。
普通にテクスチャに書き込んで、シェーダでごにょごにょ処理すれば上手くいきました。
やりたかったのは、マスク+αです。例えば、ステンシル値が 0 なら描画しない、255 なら描画する、に加えて
128 なら半透明その他色々な効果も持たせて描画したかったのです。
基本がマスクなのでステンシル、という考えから抜け出せていなかったようです。
解決です、ありがとうございました。
後学としてお聞きしたいのですが、元の質問のように、
ステンシルバッファに好きな値を書き込むのはできないのでしょうか?
>>80 さんの指摘のように、半ば無理やり書き込むしかないのでしょうか。
単に興味としての質問で、目的は特にないです。
0082デフォルトの名無しさん
2009/08/29(土) 19:57:320083デフォルトの名無しさん
2009/08/29(土) 21:26:26というか、ピクセルシェーダで複数のテクスチャを与えて、
そのうちひとつをマスクとして使うようにしたらステンシルバッファいらなくね?
ただしこの場合、テクスチャが複数あってもテクセルはひとつなので、
基本的にテクスチャとマスクの形を合わせないといけないんだけど。
なので、オレは逆にステンシルバッファの方を使ったことがない。
0084デフォルトの名無しさん
2009/08/29(土) 23:17:04DrawPrimitiveの結果、ピクセル書き込みの成否によって
バッファの値を変化させるのが、ステンシルバッファの肝であって
これは、ピクセルシェーダで代替は出来ないだろう。
Zテストの結果等に左右される訳だから。
0085デフォルトの名無しさん
2009/08/30(日) 00:57:35ピクセルシェーダーの処理自体がカットされるから
たいへん高速に処理される。
0086名無しさん@そうだ選挙に行こう
2009/08/30(日) 07:24:57親子関係考慮する必要ないよな?
0087名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:23:42処理を軽くできないかなあと思って挑戦したいんだが・・・
0088名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:49:110089名無しさん@そうだ選挙に行こう
2009/08/30(日) 18:49:13という風潮があるのでゲンナリする
そして気にかけてやってもガキ相手で不毛なのでゲーム制作を辞めたくなる
0090名無しさん@そうだ選挙に行こう
2009/08/30(日) 18:57:13商業じゃないんだったら、気に入らないのでやらない、でいいじゃないか。
0091名無しさん@そうだ選挙に行こう
2009/08/30(日) 19:11:550092名無しさん@そうだ選挙に行こう
2009/08/30(日) 19:41:51ゆとりのガキも乞食のくせして同じこと主張するよw
0093デフォルトの名無しさん
2009/08/30(日) 21:52:110094デフォルトの名無しさん
2009/08/30(日) 21:56:440095デフォルトの名無しさん
2009/08/30(日) 22:44:44ジオメトリインスタンシングとか未対応のハード用に
ライブラリもシェーダーも全部用意するのかって話。
0096デフォルトの名無しさん
2009/08/30(日) 22:45:27それってどうしてユーザーに選択させるの?
頂点シェーダのほうはハードにあるなし関係なくエミュっちまうからわかんねーぞ
0097デフォルトの名無しさん
2009/08/30(日) 22:47:14やんなきゃいいじゃん
普通にそれっぽいテクスチャで描画
フィルタだったらかけなきゃいい
0098デフォルトの名無しさん
2009/08/30(日) 22:51:070099デフォルトの名無しさん
2009/08/30(日) 22:58:17だけどそんな分かりきった結論に何の意味があるの?
0100デフォルトの名無しさん
2009/08/30(日) 23:04:54やることによってモデルが10000個60FPSで出るけど
それをしないことによってハイエンドPCですら処理落ちするようになる。
ていうかそもそもジオメトリインスタンスが何かわかってねぇだろ。
0101デフォルトの名無しさん
2009/08/30(日) 23:32:03エフェクト自体を切っちゃえばいいじゃんってこと
0102デフォルトの名無しさん
2009/08/31(月) 00:14:100103デフォルトの名無しさん
2009/08/31(月) 00:16:40従来のAPI+エフェクトを表す列挙値のやり方と相性が悪すぎる。
みんなどうやって管理してるの?
0104デフォルトの名無しさん
2009/08/31(月) 00:48:000105デフォルトの名無しさん
2009/08/31(月) 01:12:16は?やるかやらないかの話だけだろ?
他に問題があるなら言えよ
こんな簡単なこともできないなんてアフォじゃねーの?
止めて普通に描画(もしくは消す)もできない程度のアフォが俺に意見たれてんじゃねーよ
0106デフォルトの名無しさん
2009/08/31(月) 02:08:520107デフォルトの名無しさん
2009/08/31(月) 08:21:27Meshの法線って単位ベクトルにしといたほうがいいよな?
デフォだと単位ベクトルじゃないんだが一般的には単位ベクトルにすべきか?
0108デフォルトの名無しさん
2009/08/31(月) 08:50:20単位ベクトルかどうかは吐き出すツールしだいだろ
0109デフォルトの名無しさん
2009/08/31(月) 09:10:34そうなんだがなんで単位ベクトルじゃないんだ?
単にこちら側でNormalizeすれば済む話だけど
ツール側が単位ベクトルで吐き出さない理由って何があるんだ?
0110デフォルトの名無しさん
2009/08/31(月) 14:26:260111デフォルトの名無しさん
2009/08/31(月) 17:19:50どうせ拡大縮小したらNormalizeせざるをえないわけで、やっとけやっとけ
0112デフォルトの名無しさん
2009/08/31(月) 19:26:27MSDNのドキュメントに0x88890008が返ってくることは明記されていませんが、WASAPIのAUDCLNT_E_UNSUPPORTED_FORMATに相当するそうです。
0x88890008が返ってくるのはPlay()初回のみです。プロセスを再起動すると、やはり同じエラーが返ったりDS_OKが返ったりします。
88890008でググると、Relatek製サウンドカードで発生するようで、開発PCもRelatekです(ドライバは最新)。
今はとりあえず2回Play()して握りつぶしていますが、原因や根本的対策があれば教えてください
0113デフォルトの名無しさん
2009/08/31(月) 19:34:55とりあえず、DirectSoundの初期化で使いもしないフラグを指定していないか調べる。
0114デフォルトの名無しさん
2009/08/31(月) 19:36:57MetasequoiaがどうしてるかとかPIXで監視しようかとしたらみれねーし
0115デフォルトの名無しさん
2009/08/31(月) 19:53:01正規化で精度が失われるからじゃねーの
何にしても気にするとこじゃないよ
0116デフォルトの名無しさん
2009/08/31(月) 21:05:15レスありがとうございました。
DSBCAPS_CTRLVOLUME等全部消して22.05kHz/8bitでも発生してしまいました。
お手上げです。
0117デフォルトの名無しさん
2009/08/31(月) 21:23:32まずOSを書け。Vista以降と以前でハードウェアの取り扱いがまったく違うぞ。
それからRealtek以外にサウンドデバイスが無いかどうかも書くこと。
複数あるならBIOSの設定が必要な場合がある。
0118デフォルトの名無しさん
2009/08/31(月) 21:28:28http://www.computing.net/answers/hardware/bad-directsound-driver-error/22225.html
ここに、Windowsを再インストールするかセーフモードでサウンド関係のデバイスを全部削除して、
再起動してWindowsにデバイスを再認識させてドライバを入れなおすと直ると報告があるな。
0119デフォルトの名無しさん
2009/09/01(火) 00:35:30そうでした。すみません。Windows Vista Home Edition SP1 x86とDirectX9(August 2007 SDK)です。
今思い出しましたが、MediaPlayerClassic+ffdshowで、起動直後に音声ファイルが無音再生されることがありました。これも再生しなおすと直ります。
出力先は、スピーカー・イアホンと、HDMIの2種類あります。どちらもRealtekです。あとMIDIデバイスですがMIDI Yokeが入っています。
BIOSにそんな設定があるとは知りませんでした。調べてみます。
>>118
Response 3ですね。貴重な情報ありがとうございます。
HDDバックアップして試してみます。
# 5年前から発生していたのか…
0120デフォルトの名無しさん
2009/09/01(火) 09:24:33D3DXMATRIXA16とD3DXMATRIXって混同して問題になったりしないの?
0121デフォルトの名無しさん
2009/09/01(火) 09:28:140122デフォルトの名無しさん
2009/09/01(火) 10:04:26その程度の認識しかない
0123デフォルトの名無しさん
2009/09/01(火) 10:14:310124デフォルトの名無しさん
2009/09/01(火) 12:25:520125デフォルトの名無しさん
2009/09/01(火) 22:00:32始点と方向じゃね?
0126デフォルトの名無しさん
2009/09/02(水) 19:30:50DeferredShadingてなんでカメラ空間の法線を書き出しているんですか?
ワールド空間の法線じゃだめなんですか?
また半透明はなぜだめで、透明は大丈夫なんですか?
0127デフォルトの名無しさん
2009/09/02(水) 19:40:52>>なんでカメラ空間の法線を書き出しているんですか?
質問がおかしいです。
ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。
>>また半透明はなぜだめで、透明は大丈夫なんですか?
質問がおかしいです。
透明って100%透明てこと?なら見えないよね。
0128408
2009/09/02(水) 19:54:41解説へのポインターを教えてください。
0129デフォルトの名無しさん
2009/09/02(水) 21:10:00解説ならDeferredShadingでググって出てくる先で十分だ。
例えば、2つの光源+1つの球があるシーンを描画することを考えてみる。
今まで通りの方法だと、
やっぱ面倒くせえ、次の人続きよろしく
0130デフォルトの名無しさん
2009/09/02(水) 21:41:190131デフォルトの名無しさん
2009/09/02(水) 22:58:39DirectXでのモデルの各頂点の座標は同じ形であれば小さければ小さいほど処理が早いんでしょうか?
使うモデルと背景の縮尺はいくらでも変えれると思いますが、ポリゴンの形が計算の丸め誤差などで崩れてしまわない程度に
一番小さなスケールでやったほうがいいんでしょうか?
またマップを作成する場合、物凄い広大なマップのデータを作ったとして、原点から遠く離れた場所の描画(ビュー変換など)ほど
処理が重くなったりするんでしょうか?
もしそうであれば広大なマップではある程度原点から離れた場所にカメラが行くたびに、
マップ自体を原点へ戻すような処理をすべきなんでしょうか?
0132デフォルトの名無しさん
2009/09/02(水) 23:12:090133デフォルトの名無しさん
2009/09/02(水) 23:32:00好きなようにデータをサーフェイスに格納して好きなように使えばいい。
単にモデルのレンダリング時にシェーディングしなけりゃなんでも全部Deferred Renderingだ。
半透明が出来ない理由はやってみれば馬鹿でもすぐわかる。
0134デフォルトの名無しさん
2009/09/02(水) 23:42:32別にDirectX11対応のビデオカードじゃなくても動かすことができるらしいな
これからは11の時代だぜひゃっほー
0135デフォルトの名無しさん
2009/09/03(木) 00:22:56動くか動かないかを自力で判定しないといけないんじゃ。
0136デフォルトの名無しさん
2009/09/03(木) 00:24:400137デフォルトの名無しさん
2009/09/03(木) 00:28:21わからんよな。
ウロチョロしてんなよって感じ。
0138デフォルトの名無しさん
2009/09/03(木) 04:01:39浮動小数点数 は、原点( 0.0000000 )から遠ざかると、精度が落ちてゆく。
重さより精度の問題。
同じく、あまり小さくしすぎると、アンダーフロー(桁落ち?)がおきる。
適度なスケールを使うのがよいと思う。
0139126
2009/09/03(木) 05:44:52>ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。
言っている意味がよくわからないです。
テクスチャはただのバッファでは?空間はなんでもいいはずです。
gamewatchでKILLZONE2の記事を見ると、カメラ空間の法線を書き出しています。
自分はワールド座標とワールド空間の法線を書き出しあとでシェーディングしています。
ポイントライトには座標も必要だから。
でも、座標を書き出さないでライティングできているのはカメラ空間の法線が何かキーを
握っているのではと思うのですが、よくわかりません。
カメラ空間なら奥行きの法線はいらないのはわかるのですが、どうやってポイントライト
でライティングできるのか謎です。
0140デフォルトの名無しさん
2009/09/03(木) 07:44:54とりあえず座標計算上(バーテックスシェーダ)では関係ない。138の言ってるように浮動小数点の精度が変わるだけ。
CPUと違ってGPUでは浮動小数点数の精度がぎりぎりまで削られてるのであまり信用しないように。
2Dテクスチャの大きさはこの時点ではまったく関係ない(この時点ではただのUV値に過ぎない)
ただし、テクセル計算(ピクセルシェーダ)では画面に占めるメッシュ描画の大きさで負荷が変わる。
0141デフォルトの名無しさん
2009/09/03(木) 08:49:03>>ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。
>言っている意味がよくわからないです。
>テクスチャはただのバッファでは?空間はなんでもいいはずです。
ワールド空間はXYZの3軸、一方2Dテクスチャ座標はXYの2軸。
ワールド座標の法線を書き込むというが、そのままじゃ軸が一個多いのはわかるだろ。
3Dから2Dへなんらかの射影変換が必要になる。
だからワールド空間座標をそのまま書き込めばいいという考えはおかしいと書いた。
>でも、座標を書き出さないでライティングできているのはカメラ空間の法線が何かキーを
>握っているのではと思うのですが、よくわかりません。
実際のところはわからないが、動的ライティングはカメラ空間(Proj座標系)ではやっていないんじゃないか?
Proj座標系ではいろいろ不都合があるし、http://game.watch.impress.co.jp/img/gmw/docs/125/909/kil17_s.gif
のスライドの図はView座標系のものだ。
0142デフォルトの名無しさん
2009/09/03(木) 09:02:57ピクセルの位置からワールド座標が逆算できるだろ。
0143デフォルトの名無しさん
2009/09/03(木) 09:14:34x' = x / w
y' = y / w
z' = z / w
x'y'z'から、どうやってwを得るんだ?
別途wバッファがあるなら別だが。
0144デフォルトの名無しさん
2009/09/03(木) 09:39:35プロジェクション行列の逆行列をピクセルごとに(ry
0145デフォルトの名無しさん
2009/09/03(木) 17:07:51意味わかんね
適当なこと書くなよ
0146126
2009/09/03(木) 20:54:55>ワールド空間はXYZの3軸、一方2Dテクスチャ座標はXYの2軸。
>ワールド座標の法線を書き込むというが、そのままじゃ軸が一個多いのはわかるだろ。
何を言っているかホントによくわからないんですが。
2Dテクスチャには普通に射影変換して書き込みますよ。
その2Dのテクスチャの座標に何を書き込むかが問題なのではないですか?
ワールド空間の座標かカメラ空間の座標か。
ワールド空間の法線かカメラ空間の法線か。
実際自分は、ワールド空間の座標、法線を2Dテクスチャに格納し、
ポイントライティング、ディレクショナルライティングはできています。
でもわからないのは、なぜKILLZONE2は座標を書き込まずカメラ空間(View空間)
の法線だけでライティングできているのか?そこなんです。
ちなみに、Proj空間、射影座標系でライティングしているとは一言も言っていません。
カメラ空間(View空間、カメラ座標系)
です。
本当にDeferredShadingというか、座標系のことわかって言ってるんですか?
0147デフォルトの名無しさん
2009/09/03(木) 21:36:42ビュー空間なのは >>132 の言うように法線データの圧縮ができるから
ワールド座標を描かなくてもいい理由とかも、Game Programming Gems 6 の 5.7 を読むといいよ
0148デフォルトの名無しさん
2009/09/03(木) 21:50:35全然わかっていないのは君だよ。
KILLZONE2の法線を収めたバッファ、あれは奥行きがあるだろ?
奥行きがあるってことは、透視変換された結果だ。
3Dであるカメラ空間(View座標系)から透視変換されて、
2Dである(実際は3Dだが)射影空間(Proj座標系)になって
その上で、テクスチャに落とされているんだ。
>Proj空間、射影座標系でライティングしているとは一言も言っていません。
>カメラ空間(View空間、カメラ座標系) です。
だから、これらは全部認識が誤ってるんだよ。
0149148
2009/09/03(木) 21:56:05勘違いしていたのは、俺だったかも。
すまんすまん。
0150デフォルトの名無しさん
2009/09/03(木) 22:33:47法線データの圧縮が出来るのは
ベクトルの長さが1であるからであって
ビュー空間云々は関係ないと思うが
0151147
2009/09/03(木) 23:40:15そう思うだろうけど、実はz=±√(1-x^2-y^2) だから z の正負がわからない
ビュー空間なら zが[0 - 1] に限定される
0152131
2009/09/04(金) 01:26:49>>140
回答ありがとうございます。
精度の問題ですか、とあるFPSの現象を思い出しました。
(スナイパーライフルで遠距離の人間の顔を見ると目玉が顔のポリゴンを飛び出して
見えてゾンビみたいになってしまってる)
あまり原点から距離が離れてしまうところに細かい構造のオブジェクトを描かない方が良いということですね。
その辺りの調整可能な作りにすることにします。
0153デフォルトの名無しさん
2009/09/04(金) 01:28:39それにカメラの逆行列をかけてWで割ればワールド座標に戻る。
0154デフォルトの名無しさん
2009/09/04(金) 01:53:33それは全く別の問題。
普通に作る分にはfloatの精度なんて、あんまり気にしなくていいよ。
0155デフォルトの名無しさん
2009/09/04(金) 02:17:28検算したら、確かにビュー座標に逆変換出来た。
射影空間では、wは不定(ビューのz)だから変換は出来ないけど
ビュー以前なら、w=1だから変換出来るんだな。目から鱗。
0156デフォルトの名無しさん
2009/09/04(金) 02:38:07もし可能であればご教授ください。
0157126
2009/09/04(金) 04:51:12>150
なるほど!ありがとうございます!!
自分も目から鱗です
0158デフォルトの名無しさん
2009/09/04(金) 14:48:22ピクセルシェーダで
void psShadowDiffuseForFloor(
float4 Color : COLOR0
,float4 DepthFromCamera : TEXCOORD0
,out float4 outColor : COLOR0
,out float outDepth : DEPTH0
)
こんな感じで、カラーと深度値を同時に出力すると、どうにも画面が乱れてしまいます。
どちらか一方だけであれば問題がおきないのですが、カラーと深度値は同時にoutしてはダメなのでしょうか?
色々ぐぐって、同時に使っている例を探そうとしてみたのですが、1つも見つからないので、やってはいけない方法なのかと心配になりまして
0159デフォルトの名無しさん
2009/09/04(金) 15:10:35やろうと思えば出来なくはないが、というレベル。
普通は代わりに、IDirect3DDevice9::ProcessVerticesを使う。
もっと言えば、こんなメソッド使うより自前でやった方が
いろいろと楽。
0160158
2009/09/04(金) 15:27:32どうも原因は別にあったようです。
0161デフォルトの名無しさん
2009/09/04(金) 15:40:20深度バッファシャドウで、サイトなどでよく
o.Pos = mul(Pos, mWVP); //float4
o.Depth = outPos; //float4
と頂点シェーダでPOSをテクスチャとしてもっておき、ピクセルシェーダで
in.Depth.z / in.Depth.w;
として深度値としているのを見かけます。
一方、マイクロソフトのサンプルでは
o.Pos = mul(Pos, mWVP); //float4
o.Depth = outPos.zw; //float2
と頂点シェーダでPOSのzwをテクスチャとしてもっておき、ピクセルシェーダで
in.Depth.x / in.Depth.y;
としているようです。
そこで両方試したところ、結果が異なっているようです。
何故異なるのか、どちらが正しいのかがよくわかりません。
どなたか分かるかたいらっしゃいますでしょうか。
よろしくお願いします。
0162デフォルトの名無しさん
2009/09/04(金) 15:59:58両方とも同じ
結果が異なるとしたら別の要因
0163158
2009/09/04(金) 16:09:47別の要因ですか・・・。
デバッグDLLでも再現するので何かしら「ちゃんとミス」っぽいですね。
また質問をまとめなおします。
0164158
2009/09/04(金) 16:14:36うまくいくパターンと、いかないパターンがあるのですが
プログラム的には同じ結果を引き起こすつもりなのに、なぜ差が生まれるのかがわかりません。相談にのっていただけると幸いです。
■うまくいかないパターン
■Depthがfloat4である。最後の深度計算がDepth.z / Depth.wである
void vs(
float4 Pos : POSITION
,float3 Normal : NORMAL0
,out float4 outPos : POSITION
,out float4 outColor : COLOR0
,out float4 outDepth : TEXCOORD0
)
{
float3 L = vLightDir.xyz;
outPos = mul(Pos, mWVP);
outDepth = outPos;
outColor = max(0, dot(Normal, L)) + vLightDir.w;
outColor.w = 1;
}
void ps(
float4 Color : COLOR0
,float4 Depth : TEXCOORD0
,out float4 outColor : COLOR0
,out float outDepth : DEPTH
)
{
outColor = Color;
outDepth = (Depth.z + 0.01f) / Depth.w;
}
0165158
2009/09/04(金) 16:15:21■Depthがfloat2である。DepthにはPos.zwが入る。最後の深度計算がDepth.x / Depth.yである
void vs(
float4 Pos : POSITION
,float3 Normal : NORMAL0
,out float4 outPos : POSITION
,out float4 outColor : COLOR0
,out float2 outDepth : TEXCOORD0
)
{
float3 L = vLightDir.xyz;
outPos = mul(Pos, mWVP);
outDepth.xy = outPos.zw;
outColor = max(0, dot(Normal, L)) + vLightDir.w;
outColor.w = 1;
}
void ps(
float4 Color : COLOR0
,float2 Depth : TEXCOORD0
,out float4 outColor : COLOR0
,out float outDepth : DEPTH
)
{
outColor = Color;
outDepth = (Depth.x + 0.01f) / Depth.y;
}
0166デフォルトの名無しさん
2009/09/04(金) 16:18:45固定値としてoutColor = 1;
とした場合もうまくいきます。
具体的にどう「うまくいかない」のかと言いますと、
何も条件がかわっていない描画を続けているのに、(バイアスをかけず、カラーのみを出力するピクセルシェーダで描画している)他オブジェクトとの前後関係がチラチラと変化します。
挙動的には「メモリーリークなどでどこか壊したのでは?」というような内容です。
Debug.DLLで動かしてみましたが、現象はかわりませんでした。
また、特にエラーなども出力されませんでした。
以上です。
何か「お前こんなことすれば当たり前じゃん」といった部分があれば、ご指摘いただけると幸いです。
0167158
2009/09/04(金) 16:28:16Depthがfloat4である場合に、下記のような挙動が見られました。
成功
(1)Depth.x と Depth.y に、それぞれPos.z、Pos.wをいれて、ピクセルシェーダで割り算をする。
(2)Depth.y と Depth.z に、それぞれPos.z、Pos.wをいれて、ピクセルシェーダで割り算をする。
(3)Depth.x と Depth.w に、それぞれPos.z、Pos.wをいれて、ピクセルシェーダで割り算をする。
(4)Depth.y と Depth.w に、それぞれPos.z、Pos.wをいれて、ピクセルシェーダで割り算をする。
ダメ
(5)Depth.z と Depth.w に、それぞれPos.z、Pos.wをいれて、ピクセルシェーダで割り算をする。
どうしても、zとwを使った時だけ異常になるようです。
(とはいうものの、他の成功例も「成功したように見える」だけで、実際狂っている可能性はありますが)
0168158
2009/09/04(金) 16:52:51まず、>>167は、Depthの「値を入れていない要素」については0を代入していました。
(5)のパターンであっても、Depth.x と Depth.y にPos.zの値を入れておくと、正常に動作するようです。
最初、割り算の子の部分を Depth.zにしていなかったのかと思って再確認しましたが、間違い無く
z / w になっていました。
TEXCOORDは、それぞれの要素xyzw が個別に補間されるものだと思っていたのですが…。
0169158
2009/09/04(金) 17:31:42(5)の場合ですが、
outColor = Color;
outColor.y *= Depth.x;
outDepth = (Depth.z + 0.01) / Depth.w;
と、ほぼ無意味でもいい(完全に無意味だと、コンパイラが省略してしまうのでダメ)のでDepth.xを参照すると、正常化することがわかりました。
コンパイラの吐いたアセンブラ風シェーダのほうを読んでみましたが、
Depth.xに参照したからといって、特にDepth計算まわりの挙動が変わっていることはありませんでした。
(コンパイラのバグというのを期待?していたのですが)
何なんだろうこれ・・・
0170158
2009/09/04(金) 17:51:16TEXCOORD0
を使っていることのようです。
TEXCOORD1
に変えると、さまざまな不具合が解消されます。
確かに今描画しようとしているものには、UVが存在します。
ですが今回のシェーダでの描画では必要ない(ライトの陰影だけ書きだしたい)ので、頂点シェーダの引数としても受け取っていません。
このあたりが何か悪さをするのでしょうか?
試しに無意味でもと思って
, float2 Tex : TEXCOORD0
を頂点シェーダの引数に加えた(使わない)ところ、また少し違った「おかしな現象」が置きました。
意味がわからない・・・
0172デフォルトの名無しさん
2009/09/05(土) 11:42:55環境の不具合か自分のミスか切り分けるしかなさそうだね。
俺の場合、こういうときはハードの不具合と思いがちだったけど、
実際は自分のミスだったことが多かった気がする。
0173デフォルトの名無しさん
2009/09/05(土) 23:58:33アドバイスありがとうございます。
REFでも結果同じですね。
どうも色々いじった感じですと、TEXCOORD0のZとWに不具合がある気がします。
元のメッシュがUVを使っている場合、DrawSubsetの段階でfloat2なテクスチャ座標を使うとFVFなどで内部的に宣言されるわけですよね。
この時に頂点シェーダ>ピクセルシェーダ間でTEXCOORD0のZやWを使ってしまって良いものなのでしょうか。
今改めて考えてみると、頂点データの流し込みの時点では存在しないTEXCOORD1などを、
頂点シェーダ>ピクセルシェーダ時に新設してるのは合法なのでしょうか?
(今更合法でないといわれても困ってしまいますがw)
0174デフォルトの名無しさん
2009/09/06(日) 00:01:47月曜日にもう一度再現含めて試してみます。
0175デフォルトの名無しさん
2009/09/06(日) 02:03:43頂点はいい具合に動くんですが光源計算がうまく行きません。
法線も頂点と同様に行列かける以外違いってあるんですか?
0176デフォルトの名無しさん
2009/09/06(日) 02:12:460177デフォルトの名無しさん
2009/09/06(日) 03:56:20合法って・・別に法律に触れたりしないぞ・・・。
まぁ実際問題普通に頂点シェーダーで作ったデータをピクセルシェーダーに送るので
CPU→VSとVS→PSはまったく関係ないとおもっとけ。
0178175
2009/09/06(日) 07:17:22変換する行列に平行移動の成分があったらダメとか
Xファイルの法線は特別とかそういうのはないですよね?
0179デフォルトの名無しさん
2009/09/06(日) 09:09:52>合法って・・別に法律に触れたりしないぞ・・・。
お前の馬鹿さ加減に爆笑した
コーヒー返せ
0180デフォルトの名無しさん
2009/09/06(日) 09:35:12スキンメッシュ変換しおわった後に正規化だよ?
0181175
2009/09/06(日) 09:50:39//●頂点の変換と出力
float4 pos;
pos = mul(In.Position, BoneMat[ In.Bone[0] ]) * In.Weight[0] / 100.0f;
pos += mul(In.Position, BoneMat[ In.Bone[1] ]) * In.Weight[1] / 100.0f;
pos += mul(In.Position, BoneMat[ In.Bone[2] ]) * In.Weight[2] / 100.0f;
pos = mul(pos, WVPMat);
Out.Position = pos;
//●Diffuseの出力
float3 nor;
nor = mul(In.Normal.xyz, (float3x3)BoneMat[ In.Bone[0] ]) * In.Weight[0] / 100.0f;
nor += mul(In.Normal.xyz, (float3x3)BoneMat[ In.Bone[1] ]) * In.Weight[1] / 100.0f;
nor += mul(In.Normal.xyz, (float3x3)BoneMat[ In.Bone[2] ]) * In.Weight[2] / 100.0f;
//頂点法線のワールド変換
float3 vec =mul(normalize(nor), (float3x3)WMat);
//頂点法線と光の逆ベクトルとの内積を求める
float d = dot(vec, lightdirection.xyz);
//内積の結果と光の色を乗算する
Out.Diffuse.rgb = saturate(d * lightcolor.rgb + lightambient.rgb);
Out.Diffuse.a = 1.0f;
//●UVの出力
Out.TextureCoord0 = In.TextureCoord0;
Out.TextureToon = In.TextureCoord0;
return Out;
0182175
2009/09/06(日) 09:52:46アニメーション自体は正常に動作しており、
またメッシュの法線は正規化されております
0183デフォルトの名無しさん
2009/09/06(日) 10:51:130184デフォルトの名無しさん
2009/09/06(日) 12:27:35法線の変換なら駄目だろ、3x3の回転行列にしてみ
0186デフォルトの名無しさん
2009/09/06(日) 12:32:26シェーダー変数のライトディレクションはワールドの値だよね?
後は、ライトディレクションの向きは反対じゃないよね?
(内積取れる方向って意味)
0187デフォルトの名無しさん
2009/09/06(日) 12:34:00シェーダー定数に100倍したウエイト値を入れてるの?
0188デフォルトの名無しさん
2009/09/06(日) 12:36:100189デフォルトの名無しさん
2009/09/06(日) 12:38:39なんかキモイ処理に見えたw
0190デフォルトの名無しさん
2009/09/06(日) 12:49:25頂点はワールドに変換しなきゃいけないのに
ライトだけローカルにもってきてるお前のがレアじゃね?
0191デフォルトの名無しさん
2009/09/06(日) 13:24:00まあ頂点ライティングでそれを使うのはレアだとは思う
0192デフォルトの名無しさん
2009/09/06(日) 13:32:08それとは別に法線は法線でワールドにもってきてるわw俺のソースw
0193175
2009/09/06(日) 13:46:17あ すいませんコメントが間違ってました
ここがマイナスでもプラスでもライティングは失敗します
>>187
言われてみれば最初から100で割っておけば余計な手間が省けますね
>>188
やってみたらうまくいきました
ワールド空間座標に縮小はないんですがなんでだったんだろう…。
0194デフォルトの名無しさん
2009/09/06(日) 13:47:42あるんだろ多分
そんなのロードされるモデル次第じゃね?
0195デフォルトの名無しさん
2009/09/06(日) 13:59:47えっ・・・
0196デフォルトの名無しさん
2009/09/06(日) 14:02:240197デフォルトの名無しさん
2009/09/06(日) 14:15:18・固定小数点と三角関数テーブルで高速化、という10年前の知識を紹介してる5年前の本を読んだ
0198デフォルトの名無しさん
2009/09/06(日) 14:26:040199デフォルトの名無しさん
2009/09/06(日) 14:53:27そもそもそれなら乗算除算じゃなくてビットシフトしろっていう。
0200デフォルトの名無しさん
2009/09/06(日) 15:05:340201158
2009/09/07(月) 13:28:13問題の出た環境で再度、REFとそうでない状況でテストしてみたところ、
・REFでは正しく描画される
・REFでないとおかしくなる
のを確認しました。
もうこうなってくると、ドライバが悪いんだ!と思い、最新版にしてみましたが状況は変わりませんでした。
現象が起こる環境は
Intel(R) G33/G31 Express Chipset Family
です。
GF9600などでは再現しませんでした。
オンボだしなぁ…。
TEXCOORDは1を使うようにするかぁ…。
というのが今の結論です。
何かツッコミどころがあればご意見いただけると幸いです。
0202デフォルトの名無しさん
2009/09/07(月) 22:11:50ゲームの場合、文字列を描画するにはどういった方法が用いられるのでしょうか?
動的テクスチャの方法でしょうか?それとももっといい方法があるのでしょうか?
0203デフォルトの名無しさん
2009/09/07(月) 22:25:04ないよ
やることわかってんじゃん
さっさとやれ
0204デフォルトの名無しさん
2009/09/07(月) 22:35:390205デフォルトの名無しさん
2009/09/07(月) 22:47:29そこでDirectWriteですよ。
0206デフォルトの名無しさん
2009/09/08(火) 00:35:250207デフォルトの名無しさん
2009/09/09(水) 09:42:28負のカラーとはなんですか?
0208デフォルトの名無しさん
2009/09/09(水) 09:54:32なんでヘルプ読まないの?
This function returns the negative color value by subtracting 1.0 from the color components of the D3DXCOLOR structure, as shown in the following example.
pOut->r = 1.0f - pC->r;
0209デフォルトの名無しさん
2009/09/09(水) 14:12:29ショッキングな演出か
0210デフォルトの名無しさん
2009/09/09(水) 15:18:02頂点フォーマットをD3DFVF_XYZにして正射影でスクリーンに写して完全に表示を2Dにしたいのですが、
どうもサイズの調整がうまくいかなく読み込む画像自体のサイズとスクリーンに表示されるサイズが一致しません。
調整の仕方は画像の縦幅をスクリーン座標→ワールド座標へ変換した値でポリゴンの頂点を決めてやっています。
が、これだと変に画像が歪んで小さくなっちゃいます。
D3DFVF_XYZRHWは使いたくないので悩んでいます、どうすればいいでしょうか?
0211デフォルトの名無しさん
2009/09/09(水) 15:22:54おお! オレもちょうど同じ疑問に行き当たってる。
もっとも、2D画像に関してはスクリーン座標を使う形で対処できてはいるが。
まだZ値の管理をぜんぜんやってないんだな。(だから描画順で完全制御してる)
0212デフォルトの名無しさん
2009/09/09(水) 15:37:030213デフォルトの名無しさん
2009/09/09(水) 16:02:07WorldMatrix * ViewMatrix * ProjMatrix * ViewportMatrix = WVPV
スクリーン座標系の表示したい座標 = X = [ x, y, z, 1 ] ※zはviewportのzmin, zmaxの中間値
ワールド座標系の表示したい座標 = X' = [ x', y', z', 1 ]
X * WVPV^-1 = X'
このX'使ってる?
0214213
2009/09/09(水) 16:06:37これの結果と自前の結果、比較すればいいんじゃねーの
0215デフォルトの名無しさん
2009/09/09(水) 16:30:31馬鹿でも分かるように説明してよ
0216デフォルトの名無しさん
2009/09/09(水) 21:31:17ProjectionMatrixは正射影行列
WorldMatrixはキャラクターの座標で
World*View*Projectionでうつらなかったっけ
0217デフォルトの名無しさん
2009/09/09(水) 21:51:21RECT rect;
SetRect(&rect,0,0,640,480);
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
SetRect(&rect,0,0,rect.right-rect.left,rect.bottom-rect.top);
で640,480にならないのですが
どうしてですか?
0218デフォルトの名無しさん
2009/09/09(水) 22:04:570219デフォルトの名無しさん
2009/09/09(水) 22:06:04あたりまえじゃねーか。自分の書いたコードをよく見てみろ。
0220デフォルトの名無しさん
2009/09/09(水) 22:59:26なぜ?
0221デフォルトの名無しさん
2009/09/09(水) 23:01:510222デフォルトの名無しさん
2009/09/09(水) 23:07:09Windows7ってタイトルバーとかウィンドウの枠が無くなるんだっけ?
0223デフォルトの名無しさん
2009/09/09(水) 23:09:400224デフォルトの名無しさん
2009/09/09(水) 23:21:49同じにしたら作れた
0225デフォルトの名無しさん
2009/09/10(木) 07:25:47http://www.microsoft.com/downloads/details.aspx?FamilyID=b66e14b8-8505-4b17-bf80-edb2df5abad4&DisplayLang=en
Download details: DirectX Redist (August 2009)
http://www.microsoft.com/downloads/details.aspx?FamilyID=04ac064b-00d1-474e-b7b1-442d8712d553&DisplayLang=en
0226デフォルトの名無しさん
2009/09/10(木) 07:55:200227デフォルトの名無しさん
2009/09/10(木) 08:55:110228デフォルトの名無しさん
2009/09/10(木) 09:12:260229デフォルトの名無しさん
2009/09/10(木) 10:03:100230デフォルトの名無しさん
2009/09/10(木) 10:20:15Win7だとDX11用サンプルもある程度動くんだろう。
0231デフォルトの名無しさん
2009/09/10(木) 14:01:29いまいち要領を得ないので、本を一冊買ってそれで勉強しようと思うんですが、
おすすめの良書とかないでしょうか?
0232デフォルトの名無しさん
2009/09/10(木) 14:04:55てにはいらんと思うけど
0233デフォルトの名無しさん
2009/09/10(木) 14:47:57fx2.0のコードがコンパイル通らなくなったんだよね
今回の入れるか迷う
0234デフォルトの名無しさん
2009/09/10(木) 16:32:38付属のHelpを地道に覚えるのお勧め
遠いようで近道だったり
他にwebや参考書を使う場合でも、あくまでHelpのここが
分からないけどどういうことなのかな?っ手感じで
調べる時に使うのがいいと思う
そうするとHelpを中心としたDirectX脳内マップが出来上がります
0235233
2009/09/10(木) 16:49:49杞憂だったみたい
0236デフォルトの名無しさん
2009/09/10(木) 21:12:07絶版のようですね・・・
>>234
Helpですか。わかりました、ヘルプ覚える所からまた始めてみようと思います。
0237デフォルトの名無しさん
2009/09/11(金) 00:46:08日本語のHELPください><
0238デフォルトの名無しさん
2009/09/11(金) 03:34:15オンライン(こっちのが内容が2008年と新しい)
http://msdn.microsoft.com/ja-jp/library/cc411364.aspx
オフライン(2004年のは多分ここ)
http://www.microsoft.com/downloads/details.aspx?FamilyId=4B9B1752-6F6C-440E-816C-35D247570AE4&displaylang=ja
日本語だと分かりづらい事もあるから、そういう場合は同じ箇所の英語のHELPを探したり
逆に英語主体で読んでて分からなかったら日本語を見てみたりとかも有効かと
あと時々、全体を見渡してどの項にどういう事が書いてあるのかつかんで置くといいよ。
あと、サンプルブラウザから適当なサンプル探して解析するのが重要だよ。
勿論ここでも質問汁!
0239デフォルトの名無しさん
2009/09/11(金) 04:08:23何をやりたいかが明確なら他に参考書も挙げやすいかも
0240デフォルトの名無しさん
2009/09/11(金) 09:24:330241デフォルトの名無しさん
2009/09/11(金) 13:51:36つくってたんですが、http://lacc.biz/cpp/cpp11.htmこのページの
{
int joypad_state=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(((joypad_state& PAD_INPUT_A) !=0)&&(f_player_gun_flag==FALSE))
{
f_player_gun_flag=TRUE;
*p_player_gun_position_x= player_position_x ;
*p_player_gun_position_y= player_position_y ;
}
if(f_player_gun_flag==TRUE) *p_player_gun_position_y-=GUN_SPEED;
if(*p_player_gun_position_y<1) f_player_gun_flag=FALSE;
return f_player_gun_flag;
}
弾を飛ばすって関数、(ちなみにサイトのコピペです)
A を押すと弾が出るように記述されてると思うんですけど、コンパイル成功して
動かして、A押しても弾がでないです。
というかA以外にB,Cとかにしても動きませんでした。
実験で、プレイヤーは→←↑↓で上下左右に動かすのには成功してるので、
弾を撃つコマンドをAではなく、↑に設定してみると、弾がでました。
解決方法を教えてください。
0242デフォルトの名無しさん
2009/09/11(金) 14:08:11デバッガで止めて様子を見る。
0243デフォルトの名無しさん
2009/09/11(金) 14:10:450244デフォルトの名無しさん
2009/09/11(金) 15:14:20>PAD_INPUT_A // A(1)ボタンチェックマスク(Zキー)
まずはZキーを押してみる
0245デフォルトの名無しさん
2009/09/11(金) 15:43:30Z押したら出ました・・・
Aって書いてあっても。
対応キーが違うなんて、なんという罠。
とにかくありがとうございました!
0246デフォルトの名無しさん
2009/09/11(金) 16:04:10JOY PADのAボタンという意味で、
キーボードのAキーという意味ではない
0247デフォルトの名無しさん
2009/09/11(金) 16:45:17(DxtoryのFPSや録画ステータスが表示されているように、DirectX描画に割り込み描画する方法が知りたいです)
0248デフォルトの名無しさん
2009/09/11(金) 17:19:06それが自分の書いたアプリかそうでないかで話は全然変わってくる。
0250デフォルトの名無しさん
2009/09/11(金) 20:38:550251デフォルトの名無しさん
2009/09/11(金) 21:00:51俺もやりたい
0252デフォルトの名無しさん
2009/09/11(金) 21:16:19フック使うんじゃねーの
0253デフォルトの名無しさん
2009/09/11(金) 21:26:06三角ボタンの隣のソリューション設定で、
debugからreleaseに切り替えたら、
debugで3Dオブジェクトが描画されてたのに、
releaseでされなくなった
こんなのこってあるんのだろうか・・・
#ifdef _DEBUG
とかはつかっていないんだがOTL
0254デフォルトの名無しさん
2009/09/11(金) 22:00:41しろカス
0255デフォルトの名無しさん
2009/09/11(金) 22:01:010256デフォルトの名無しさん
2009/09/11(金) 22:16:13ありまくるに決まってるだろがw
0257デフォルトの名無しさん
2009/09/11(金) 22:18:22まあ大抵は変数の初期化忘れなわけだが。
0258デフォルトの名無しさん
2009/09/11(金) 22:22:34そうなのか初心者でdebugとreleaseの違いが
パスくらいしか思い浮かばなくてOTL
たとえばどんなときに起こるでしょう?
0259デフォルトの名無しさん
2009/09/11(金) 22:23:44なるほど!
急いでチェックしてみまする
0260デフォルトの名無しさん
2009/09/11(金) 22:31:200261デフォルトの名無しさん
2009/09/11(金) 22:46:40本当にありがとう!
まさに変数の初期化忘れだった!
リリースもーどだと、
変数は初期化しないと何が入っているかわからない
こんな初歩的なことを忘れていた
レス付けてくれた方、ありがとう
0262デフォルトの名無しさん
2009/09/11(金) 23:59:47シフトJISとUnicodeは普通にCライブラリがありますが、UTF-8はそういうのあるんでしょうか?
0263デフォルトの名無しさん
2009/09/12(土) 00:04:32なぜその質問をここで聞くの? もっとしかるべきサイトやスレがあるでしょっ!
UTF-8とUTF16は同じ文字セットでエンコード方式が違うだけだから機械的に変換できるのよ。
計算の仕方は調べてね。
って、アンタに言ったんじゃないわよ! さっさと行きなさいよ!
0264デフォルトの名無しさん
2009/09/12(土) 06:59:580265デフォルトの名無しさん
2009/09/12(土) 17:31:23普通に読み込むと全部同時によみこむよなあ
パーツだけ別に読み込んで操作って出来ないのかなあ?
0266デフォルトの名無しさん
2009/09/12(土) 18:34:35お前は操り人形か何かなのか?
0267デフォルトの名無しさん
2009/09/12(土) 19:17:47お前がスレタイを百遍読み直せ
0268デフォルトの名無しさん
2009/09/12(土) 19:19:250269デフォルトの名無しさん
2009/09/12(土) 19:21:22決まってないなら他に何があるか書いてみろよ
0270デフォルトの名無しさん
2009/09/12(土) 19:23:52たぶんメッシュアニメーションを参考にしてみるのといいのかこういうの・・・
0271デフォルトの名無しさん
2009/09/12(土) 19:42:24俺は知らん
0272デフォルトの名無しさん
2009/09/12(土) 19:43:50どうやって入手するのが良いのですか?
0273デフォルトの名無しさん
2009/09/12(土) 19:45:36どうせDirectX11対応のビデオカードまだねえし。
0274デフォルトの名無しさん
2009/09/12(土) 19:47:580275デフォルトの名無しさん
2009/09/12(土) 23:56:28DirectXを使うこととD3DXに頼り切ることは全くの別
勝手に決めつけるな
0276デフォルトの名無しさん
2009/09/13(日) 00:11:15そこで言われた一言
「自作したほうがいい」
正しかった。
(でも、D3DXをいじくりまわして理論を学ぶのは有用だと思う)
0277デフォルトの名無しさん
2009/09/13(日) 00:29:39D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
それ前提で自作する事も考える
プログラムできれば当たり前の事だ
まったく何も解らないのに、詳しそうに見えるように書いて悦にはいってるんじゃねーよ
0278デフォルトの名無しさん
2009/09/13(日) 00:47:14最新版は入ってるはずだよ
0279デフォルトの名無しさん
2009/09/13(日) 01:53:25質問する側がそんな態度でどうする。お里が知れるというものだ。
0280デフォルトの名無しさん
2009/09/13(日) 02:17:52生まれは海無し県だ。
学校は青山にあったが今はない。
0281デフォルトの名無しさん
2009/09/13(日) 03:07:46>生まれは海無し県だ。
埼玉県民かよw
神奈川県民よりランク下になった感想はどうなんだよこのクズw
0282デフォルトの名無しさん
2009/09/13(日) 07:37:27正: じゃあ俺のお里に来てみろ。
0283デフォルトの名無しさん
2009/09/13(日) 09:09:02だったら最初からD3DXで出来るかどうか聞けば良かったのに、
他人に責任転嫁とはどれだけ甘やかされて育ったんだろう?
0284デフォルトの名無しさん
2009/09/13(日) 09:10:500285デフォルトの名無しさん
2009/09/13(日) 09:26:43モデルデータ分割するだけで実現出来ることの為に自作しろとかアホだろw
0286デフォルトの名無しさん
2009/09/13(日) 09:34:11>D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
>それ前提で自作する事も考える
0287デフォルトの名無しさん
2009/09/13(日) 15:09:170288デフォルトの名無しさん
2009/09/13(日) 15:32:23根絶やしにせねばいつまでも初心者がはびこったままだ
0289デフォルトの名無しさん
2009/09/13(日) 15:33:53でもパーツだけ動かすってのはちょっと興味が湧いたな
Xファイルから特定のメッシュを取り出すようなのを作ってみるとするか
0290デフォルトの名無しさん
2009/09/13(日) 15:45:150291デフォルトの名無しさん
2009/09/13(日) 16:04:09勉強用には最適だよ。
だが、理解したら自前フォーマットにしとけ。
アニメーション大量に入れたら、ロードに10秒とか20秒とかかかるんだぜ。
自前フォーマットにしたら1秒かからなかったわ。
いくら拡張性やらに気を使われているとはいえ、遅すぎだぞXファイル。
0292デフォルトの名無しさん
2009/09/13(日) 16:08:510293デフォルトの名無しさん
2009/09/13(日) 16:09:490294デフォルトの名無しさん
2009/09/13(日) 16:13:56ゲームデータのリッパーとかもソース公開されてるから
書けなくは無い
0295デフォルトの名無しさん
2009/09/13(日) 16:33:30圧縮とかするの?
0296デフォルトの名無しさん
2009/09/13(日) 16:35:35例えば頂点データをmemcpyでいっきにVRAM上にコピーできるようにする。
これだけでも速度が圧倒的に違う。
Xファイルは、ファイルフォーマットエラーに対処するためかデータをかなり細かく読んでる。
自前なら「エラーがないことを前提に」高速化が可能なわけさね
0297デフォルトの名無しさん
2009/09/13(日) 16:36:46ちょっとやってみるかな
でもPシェーダーとかやったけど
何にも利用してねえなあ・・・
0298デフォルトの名無しさん
2009/09/13(日) 16:47:52俺は今作ってるゲームで、
モデルデータはXファイル
アニメーションデータは自前にして、ID3DXAnimationControllerを作成
ってやってる。
アニメデータが大量にあると、Xファイルの読み込みが超遅かったんでな。
モデルデータの読み込み速度は0.1〜0.3秒くらいなので不満はない。
0299デフォルトの名無しさん
2009/09/13(日) 16:48:40追記。
ID3DXAnimationControllerは、ちょっと複雑なことやるとバグ満載なんで
次回作ではぜってー使わないって心に決めてる。
もう理屈はわかったので、頼る必要もないしな。
0300デフォルトの名無しさん
2009/09/13(日) 17:15:48それは行列でアニメーションデータを並べているせいでは?
きちんと位置、回転、スケールでキーフレームを作っておけばデータがそんなにでかくなることはない。
読み方云々以前にデータそのものを見直した方がいい。
0301デフォルトの名無しさん
2009/09/13(日) 17:26:430302デフォルトの名無しさん
2009/09/13(日) 17:53:540303デフォルトの名無しさん
2009/09/13(日) 18:27:29なんで最初から積んでないんだ?
0304デフォルトの名無しさん
2009/09/13(日) 19:35:40DXライブラリ(だっけ?)で読んでいるからじゃないかな。
他の3Dフォーマットと比べても、さして特殊な形式とは思わないし(古いけど)。
ちなみにXファイルはバイナリ圧縮形式もあるよ。
今は色々なツールでサポートされているんだな。俺の頃はどの3Dモデラも
中途半端な扱いしかしてなくて、速攻で候補から外されちゃったよ。
0305デフォルトの名無しさん
2009/09/13(日) 20:18:16ゲームの起動時に毎回それやるって、アホらしくならない?
0306デフォルトの名無しさん
2009/09/13(日) 20:25:180307デフォルトの名無しさん
2009/09/13(日) 20:32:570308デフォルトの名無しさん
2009/09/13(日) 21:00:29存在しないものは計算しようがない。
0309デフォルトの名無しさん
2009/09/13(日) 21:10:360310デフォルトの名無しさん
2009/09/13(日) 21:29:16あれってテクスチャ重ねてるだけなの?
0311デフォルトの名無しさん
2009/09/13(日) 21:42:420312デフォルトの名無しさん
2009/09/13(日) 21:47:410313デフォルトの名無しさん
2009/09/13(日) 21:49:540314デフォルトの名無しさん
2009/09/13(日) 22:26:530315デフォルトの名無しさん
2009/09/14(月) 00:14:31ああ、データは膨大だよ。
BVHからとり込んだりして、かなり動きを細かく作ってるからね
これでも一応無意味な中間データの削除とかはしてるんだぜ
0316デフォルトの名無しさん
2009/09/15(火) 15:47:470317デフォルトの名無しさん
2009/09/15(火) 15:48:522つの面があった場合近い方の面しか判定されないの?
0318デフォルトの名無しさん
2009/09/15(火) 17:11:010319デフォルトの名無しさん
2009/09/15(火) 17:43:55おめえ円周率はいくつって習った?
言ってみろ
0320デフォルトの名無しさん
2009/09/15(火) 17:46:31ちゃんと、DirectInputなりで「相対値でのマウス移動量」を取得すると、FPSみたいなこともできるぞ。
絶対値でやろうとすると、デスクトップからマウス飛び出ちゃったら困るだろ?
0321デフォルトの名無しさん
2009/09/15(火) 20:19:063.1415926535
0322デフォルトの名無しさん
2009/09/15(火) 23:41:173
0323デフォルトの名無しさん
2009/09/16(水) 18:32:313.2
0324デフォルトの名無しさん
2009/09/16(水) 20:21:052.2360679
0325デフォルトの名無しさん
2009/09/16(水) 23:02:29マウスを中心に移動させてやればいいだろ
0326デフォルトの名無しさん
2009/09/16(水) 23:06:38毎フレーム戻そうが、画面外でボタン押したら入力とられちゃうよ
0327デフォルトの名無しさん
2009/09/16(水) 23:09:21どんなに文字を大きくしてもアンチエイリアスがかかりません
どうやったらいいですか?
0328デフォルトの名無しさん
2009/09/16(水) 23:10:14クリッピングすればいいだけだろ
WinAPIの基本的なことはDirectXやる前に少しぐらい知っとけ
0329デフォルトの名無しさん
2009/09/16(水) 23:13:48フォントが不適切ではないか。オプション(使い方)が間違ってないかを中心に再調査する。
0330デフォルトの名無しさん
2009/09/16(水) 23:36:27よく見るとアンチエイリアスはかかってた
でもアンチエイリアスの質が悪すぎて、かかってないように見える
PROOF_QUALITYでも同じだった
仕方ないから2倍のサイズに表示してリニアフィルタで縮小して使うか
でもフォントのサイズを2倍にしても大きさって2倍にならないんだよな
くそったれ
0331デフォルトの名無しさん
2009/09/17(木) 00:45:18DirectInputを使う場合も、バッファを十分に用意しておかないとネガティブアクセルが発生する。
XP以降ならRawInputが一番いい。
SDKのヘルプにRawInputでマウスを扱う説明あるから、それを参考にするといいかと。
0332デフォルトの名無しさん
2009/09/17(木) 01:04:43D3DXCreateFontだったかでフォントの大きさを指定するときに
高さを基準に大きさを指定できるだろ
だからフォントサイズがどうとか関係ない
0333デフォルトの名無しさん
2009/09/17(木) 14:07:41どうすればいいんでしょうか?
法線の傾きとって回せばいいのかなあと思いましたが
その方法がわかりませんご教授願います
0334デフォルトの名無しさん
2009/09/17(木) 15:51:13物とは3次元に属するので、3つの基本軸を持つとする。
物のローカル座標系でみたとき、+x方向をR、+y方向をS、+z方向をTとする。
そして、R、S、Tは長さが1であり、互いに直交する。※正規直交基底
ポリゴンの平面に沿うように物を配置する為には、
・R軸は変わらない。
・S軸は平面の法線と平行
・T軸はR軸と平面の法線の外積
となっていればいい。
それぞれ新しいRSTをR'S'T'、
回転行列をMとすると、
[R'] [R]
[S']=M[S]
[T'] [T]
これをMについて解くと、
[R']
M=[S'] * [R][S][T]
[T']
このMをワールド空間の変換行列にすればいい。
0335デフォルトの名無しさん
2009/09/17(木) 16:00:48>>・S軸は平面の法線と平行
>>・T軸はR軸と平面の法線の外積
ごめんごめん、これちょっと違うわ。
新しいR軸は、S軸と直交する範囲で、任意に決めてね、
0336デフォルトの名無しさん
2009/09/17(木) 16:40:460337デフォルトの名無しさん
2009/09/17(木) 17:25:49ウィ
方向性が見えたんでなんとかしてみます
0338デフォルトの名無しさん
2009/09/21(月) 07:42:590339デフォルトの名無しさん
2009/09/21(月) 07:48:19ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換
ワールド変換でワールド座標(ワールド座標)
ビュー変換でカメラ座標(カメラのローカル座標)
射影変換で同次クリップ空間(xyが-1〜1になるzは0〜1)
ビューポート変換でスクリーン座標(スクリーンの座標になる)
0340デフォルトの名無しさん
2009/09/21(月) 07:51:140341デフォルトの名無しさん
2009/09/21(月) 07:55:390342デフォルトの名無しさん
2009/09/21(月) 07:56:530343デフォルトの名無しさん
2009/09/21(月) 07:59:52ご教授お願いいたします。
0344デフォルトの名無しさん
2009/09/21(月) 08:08:38D3DXVec3Projectこれかな?
0345デフォルトの名無しさん
2009/09/21(月) 08:55:57DirectXって何?
0346デフォルトの名無しさん
2009/09/21(月) 09:01:44Microsoft DirectX は Windows プラットフォームでハイパフォーマンス、ハイクオリティ グラフィックスを実現するための業界最高のテクノロジーです
0347デフォルトの名無しさん
2009/09/21(月) 15:35:46DirectSoundデバイスの作成、協調レベルの設定、DSBUFFERDESC構造体の設定、WAVEFORMATEX構造体の設定は問題ないと思うのですが、
IDirectSoundBuffer *ptmpBuf=NULL;
if(SUCCEEDED(pDirectSound->CreateSoundBuffer(&m_DSBD, &ptmpBuf, NULL)))
{
ptmpBuf->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*)pDirectSoundBuffer);
ptmpBuf->Release();
}
ここのCreateSoundBufferが成功せず、QueryInterfaceが実行されていないようです
あちこち調べたのですが、原因がサッパリ分からず困り果てています
問題点をご指摘してくださると、大変助かります
0348デフォルトの名無しさん
2009/09/21(月) 15:38:050349デフォルトの名無しさん
2009/09/21(月) 15:43:22恐らく問題は無いと思います。第3引数は、NULLでなければいけないようです
0350デフォルトの名無しさん
2009/09/21(月) 15:55:05動くコードをコピーしろよ
そんなので悩むのは駄目
自分で書いて動かないなんてはプロでも結構アリガチ
そんなのどうせライブラリ作った人間しかわからないんだからはじめから動くコードを入れるしかない
お前のやりかただと一生かかってもゲームなんて完成しない
0351デフォルトの名無しさん
2009/09/21(月) 16:13:36というかまずCreateSoundBufferが返してるエラーコードを調べるべきでは・・・
0352デフォルトの名無しさん
2009/09/21(月) 16:29:53まず350が言ってるように他人が書いてチェックされた(できればDirectX公式の)サンプルコードをそのままビルドして確かめること。
サンプルが存在しないような世界ならともかくDirectXならいくらでもサンプルがある。
それからDirectX関係のAPIはありとあらゆるところでエラーが返ってくる可能性があるので、
SUCCESSEDチェックではなくてちゃんとエラーコードを取得できるようなコードを書くこと。
この2つをやらないと、いつまで経っても能率も品質も上がらないよ。
0353デフォルトの名無しさん
2009/09/21(月) 16:34:23無効なパラメータが関数に渡されたようです
つまりm_DSBDの値がおかしい可能性があるようですが、これはmsdnのリファレンスを丸々写しただけなのでこのままでは問題箇所が分かりません
とりあえず、ちゃんと動くサンプルプログラムを探して、そこから何が悪かったのかを調べてみることにします
0354347
2009/09/21(月) 17:27:04DSBUFFERDESCの設定がおかしかったようです
m_DSBD.dwSize = sizeof(DSBUFFERDESC);
と書くところを
m_DSBD.dwSize = sizeof(DSCBUFFERDESC);
と書いていました
コンパイルは通ってしまっただけにこんな単純なミスで5時間以上悩んでいたのが悔しいっ…ビクビク
皆さん、助言どうもありがとうございました
0355デフォルトの名無しさん
2009/09/21(月) 17:45:48DirectXに限らず、プログラム動かしててエラーが発生したら、
まずはエラーメッセージどおりに物事を考えること。
最初からDSERR_INVALIDPARAMというエラー内容にしたがって
引数がどうなってるかチェックしたらそんなに時間食わなかったはず。
プログラムは思ったとおりに動かない。
書いたとおりに動く。
0356デフォルトの名無しさん
2009/09/21(月) 18:27:240357デフォルトの名無しさん
2009/09/21(月) 18:37:48断然XAudio2。
実装が圧倒的に簡単な上に、VistaだとどうせDirectSoundアクセラレーションが効かないので。
0358デフォルトの名無しさん
2009/09/21(月) 19:19:390359デフォルトの名無しさん
2009/09/21(月) 20:35:460360デフォルトの名無しさん
2009/09/21(月) 21:01:13さらに現状はXBOX360のコントローラーしか対応パッドないとか論外すぎるだろ。
0361デフォルトの名無しさん
2009/09/21(月) 21:03:04いや、だからなぜそういう仕様にしてしまったのか、ってことだろ
まあXBOX360コントローラーをPC用の標準コントローラー的な位置づけにしたいってとこだと思うけど
0362デフォルトの名無しさん
2009/09/21(月) 22:04:46ゲームによってはあまったボタンをショートカットにふれたりして便利なんだが。
0363デフォルトの名無しさん
2009/09/21(月) 22:23:27テクスチャを張り付けて、縮小をしてるんですが
xのみ縮小すると問題なくx軸方向に縮小できる、同様にy軸のみ縮小でも問題ありません
ですがxとyを同時に縮小しようとするとなぜか画像が暗くなります(小さければ小さいほど暗くなる)
拡大では全く問題ありません、解決策をしってる方がいたら教えていただけると助かります
0364デフォルトの名無しさん
2009/09/22(火) 00:04:02普通に変換済みの頂点で描画したほうが楽だろ
0365デフォルトの名無しさん
2009/09/22(火) 06:56:17昔PS2でキーボードマニアというゲームのUSB接続の専コンがあってだな
0366デフォルトの名無しさん
2009/09/22(火) 09:41:410367デフォルトの名無しさん
2009/09/22(火) 09:45:400368デフォルトの名無しさん
2009/09/22(火) 09:54:13そもそもプログラムには向いていない。
0369デフォルトの名無しさん
2009/09/22(火) 10:10:56通常の3Dメッシュを描画する場合なら、
トランスフォーム行列を適用した結果、頂点法線の長さが変わって
暗くなるというのはある。
ただし、D3DXSpriteは基本的にライティングをOFFにするので
これは起こりえないようだ。
ところで、Begin()に渡すD3DXSPRITEは、どう設定している?
>>367-368
そう言うな。ここは初心者板だし、
なかなか面白い事象じゃないか。
0370363
2009/09/22(火) 10:25:42ふつうに4角形ポリゴン作ってテクスチャはっつけたらできました
ありがとうー
>>369
どっかで見たソースほぼそのまま
pSprite->Begin(0);
pSprite->Draw( pTex, NULL, NULL, NULL, 0xffffffff );
pSprite->End();
だったと思うけどもう書き換えちゃたんでわからないです
0371デフォルトの名無しさん
2009/09/22(火) 10:30:070372デフォルトの名無しさん
2009/09/22(火) 10:55:45描画ステータスに内部で何が設定されてるのかわからんし
spriteなんて使うなってのは原因不明な事象にぶち当たったときに全く検討が付かないからだけどな
固定シェーダもこういうの多い
自分で研究しろw
0373デフォルトの名無しさん
2009/09/22(火) 10:59:07D3DXSprite使ってるようなのにこれはきついなw
以下、BBXから転載
>いろいろ作業していましたが、
>どうやら、MIPMAPの設定で縮小時にMIPMAPの切り替えで、
>約半分の設定(縮小)の時にMIPMAPの小さいときの設定がされていなく、
>フィルターでLINEARを指定しているので、
>設定なしの(黒)のものとのフィルター処理をしていて、だんだん
>暗くなっていってしまっていたようです。
0374デフォルトの名無しさん
2009/09/22(火) 11:13:23なるどね〜そういうことか。
0375デフォルトの名無しさん
2009/09/22(火) 11:38:06×なるどね〜
○なるほどね〜
0376デフォルトの名無しさん
2009/09/22(火) 12:01:340377デフォルトの名無しさん
2009/09/22(火) 15:41:33円とか三角は無理?
0378デフォルトの名無しさん
2009/09/22(火) 16:16:18そもそもそんな物はない
0379デフォルトの名無しさん
2009/09/22(火) 16:21:40ステンシルバッファ使ったらどうよ。
0380デフォルトの名無しさん
2009/09/22(火) 19:01:460381デフォルトの名無しさん
2009/09/23(水) 13:24:510382デフォルトの名無しさん
2009/09/23(水) 15:24:340383デフォルトの名無しさん
2009/09/23(水) 15:54:10ここはプログラミングのスレなので、ゲーマー用のスレは別だぞと言っておく。
その上で、d3dx10_41.dllは特定のバージョンのDirectX(年数回配信される)にあるD3DXライブラリのDLLだ。
それくらいのバージョンだったら普通に2009年以降の最新のDirectX再頒布パッケージをインストールすればいいと思うよ。
だめだったらファイル名でぐぐってどのバージョンに入ってるか調べてくれ。
0384デフォルトの名無しさん
2009/09/23(水) 16:19:11因みにゲームではなく、マルペケつくろーどっとコムというサイトで、
DirectX10版高速フォント表示サンプルが動かなかったんです。
0385デフォルトの名無しさん
2009/09/23(水) 23:54:510386デフォルトの名無しさん
2009/09/24(木) 00:08:58それ使えば?
0387デフォルトの名無しさん
2009/09/24(木) 01:01:370388デフォルトの名無しさん
2009/09/24(木) 01:06:440389デフォルトの名無しさん
2009/09/24(木) 01:10:25使い物にならないとおもうんだが。
0390デフォルトの名無しさん
2009/09/24(木) 01:19:03アンチエイリアス使う時点で後ろの絵が必要に決まってんだろw
0391デフォルトの名無しさん
2009/09/24(木) 01:33:200392デフォルトの名無しさん
2009/09/24(木) 01:34:04MSAAとかFSAAとエッジアンチの違い分かってないだろ・・・
0393デフォルトの名無しさん
2009/09/24(木) 03:14:44処理が無駄なので飛ばしたいんですけど
どうやればいいですか?
0394デフォルトの名無しさん
2009/09/24(木) 03:33:13ステンシルバッファを併用しろ。
0395デフォルトの名無しさん
2009/09/24(木) 03:54:14これじゃ駄目なの?
0396デフォルトの名無しさん
2009/09/24(木) 07:41:20誰がそんな話してんの?
死ねよ
0397デフォルトの名無しさん
2009/09/24(木) 08:47:51肩の力抜けよ、知らないことはこれから知っていけばいい
0398デフォルトの名無しさん
2009/09/24(木) 08:57:301、普通に描画
2、レンダターゲットをテクスチャにコピー
3、ワイヤーフレームでもう一回描画
このとき、シェーダでマルチサンプリング
これでどうか?
一回コピーが入るのがウザいが、D3D9では仕方ない
>>393
clip(-1)だろ常考
0399デフォルトの名無しさん
2009/09/24(木) 09:21:56RenderState設定するだけだし一番簡単だとおもうんだが。
つかD3D9ってエッジアンチできたっけ?
0400デフォルトの名無しさん
2009/09/24(木) 10:00:532004年December以前とその後以降でライティングの結果が変わりました
2004以前だとグーローシェーディングが滑らかにかかってるのが
それよりはフラットに近い感じになっています。
D3DXComputeNormalsの結果が違うような気がするのですが、そういうことってあるでしょうか?
0401デフォルトの名無しさん
2009/09/24(木) 10:08:06っていうかD3DXはバグが多いから気をつけろ
0402デフォルトの名無しさん
2009/09/24(木) 10:16:580403デフォルトの名無しさん
2009/09/24(木) 10:57:42典型的なゆとりだな
0404デフォルトの名無しさん
2009/09/24(木) 11:14:120405デフォルトの名無しさん
2009/09/25(金) 01:42:02ポリゴンの法線の成分と垂直なベクトルの成分の内角を計算する・・・のかなあ
0406デフォルトの名無しさん
2009/09/25(金) 01:51:39atan2でいいじゃん
0407デフォルトの名無しさん
2009/09/25(金) 08:52:52それをアナウンスしないんだよなぁ。
例えば、しれっとフラグメントリンカ削除したりさ。
いや別にいらないんだけどさ、
What's Newにぐらい書いてくれてもいいのに。
>>405
そのとおり、普通は面の法線と比較対象ベクトルの内積を使う。
双方が正規化されていれば、内積の結果はcosθになり、
ぜんぜん傾いていないなら+1に、90度傾いていれば0に、
真逆を向いていれば-1になり、わかりやすい。
D3DXならD3DXPlaneDotNormalを使う。
0408デフォルトの名無しさん
2009/09/25(金) 09:33:14え?今フラグメントリンカないの?
DX10で削除されたのは知ってるけど
0409デフォルトの名無しさん
2009/09/26(土) 00:01:07DXUTに比べれば天国に思えるよ!
0410デフォルトの名無しさん
2009/09/27(日) 11:25:17するのは可能でしょうか?
例えば1mの立方体をどの位置に描画しても、視点から3mくらいの大きさに描画したいのです。
ただしパースは合ってるようにしたいのです。
0411デフォルトの名無しさん
2009/09/27(日) 11:32:040412デフォルトの名無しさん
2009/09/27(日) 11:46:52D3DXMatrixOrthoRHを使ってみたのですが、CAD図とか
昔あった斜め上視点みたいになってしまいました。
これとはちょっと違うのです。なにかよい例えがあれば
よいのですが。すいません。
0413デフォルトの名無しさん
2009/09/27(日) 11:48:51カメラを動かせばいいんじゃね
0414デフォルトの名無しさん
2009/09/27(日) 11:53:580415デフォルトの名無しさん
2009/09/27(日) 12:07:140416デフォルトの名無しさん
2009/09/27(日) 12:08:400417デフォルトの名無しさん
2009/09/27(日) 12:17:39手作業で
0418デフォルトの名無しさん
2009/09/27(日) 12:28:530419デフォルトの名無しさん
2009/09/27(日) 12:30:56>>414
>>415
>>416
>>417
早々にありがとうございます。本屋に行ってました。
3DMaxとかCGソフトの本を眺め見ましたが例えば位置とか回転とかを
コントロールする図形を描画するには、どうすればよろしいでしょうか?
ソフトを触ったことがないのですがCGソフトでこれらの図形は、変更したい
立方体の位置に関わらず大きさが一定になるっている気がします。
0420デフォルトの名無しさん
2009/09/27(日) 12:36:40常に画面に対し10%のサイズで描画したいってことかな
0421デフォルトの名無しさん
2009/09/27(日) 13:13:06表現が適切ではありませんでした。すいません。
おっしゃる通り、常に画面(できればモニターの解像度)に対して
一定の大きさに描画したいのです。テクスチャーに描画して
2D描画してみましたが当然奥行きに対する向きが合っていません。
0422デフォルトの名無しさん
2009/09/27(日) 14:03:440423デフォルトの名無しさん
2009/09/27(日) 14:31:04>>210
0424デフォルトの名無しさん
2009/09/27(日) 15:24:53要するに、ここにアイテムがあるとかの記号的な描画をしたいということでいいのか?
Direct3Dにおいては基本的にポリゴンは1個ずつ描画していくものなので、あまり複雑に考える必要はないよ。
普通にカメラ空間でどの位置(XYZ)になるかを計算した上で、Z値を調整すればいいだけ。
パースを正しくというのは意味不明。カメラ空間上正しく描画されるのも正しいし、
何か特定の距離のパースを拡大・縮小されるのだって正しいさ。
0425デフォルトの名無しさん
2009/09/27(日) 15:40:02(ビュー空間でのターゲットの Z 距離)/(3.0f)で
スケーリングすればいいんじゃないの?
0426デフォルトの名無しさん
2009/09/27(日) 15:41:30カメラ座標原点と、立方体基準点の距離をとってから
スケーリング行列挟めばいいんとちゃうの?
0427デフォルトの名無しさん
2009/09/27(日) 15:43:040428デフォルトの名無しさん
2009/09/27(日) 17:03:11無理に説明しようとしたためです。出直してきます。
MAYA PLEという体験版っぽいのを入れてみました。大きさを変更したい時に
表示される矢印があります。これは向きがありかすが、大きさを変更したい
オブジェクトがどの位置にあっても(正規化された?)大きさを維持しています。
これができれば自分のやりたいことは満たします。どこかにサンプルプログラムが
あればそこから原理がわかるのですが見当たりません。
また変なことを言っている気がします。すいません。
>>422
>>423
>>424
>>425
>>426
を参考に出直します。
0429デフォルトの名無しさん
2009/09/27(日) 18:06:05このスレには荷が重いんすよ。
スケーリングすりゃいいのはわかった。
で、そのスケーリング係数はどうやって求めるの?的な。
0430デフォルトの名無しさん
2009/09/27(日) 19:15:36だからさー
挑発して情報引き出すにしても、もうちょいマシな挑発はできないの?
スケーリングの係数なんて、MSDN見りゃ丸わかりなもん(あらゆる関数の計算式が公開されてるんだぜ?)、とっとと見に行けよ
0431デフォルトの名無しさん
2009/09/27(日) 19:37:520432デフォルトの名無しさん
2009/09/27(日) 19:45:010433デフォルトの名無しさん
2009/09/27(日) 19:48:310434デフォルトの名無しさん
2009/09/27(日) 20:05:25ビルボードでのカメラ方向への回転の代わりに、
カメラとの距離の逆比例でのスケーリングに置き換えるだけじゃねーの。
もしかしたらもっとシンプルな方法があるかも知れんが。
0435デフォルトの名無しさん
2009/09/27(日) 20:09:46それに合わせてオブジェクト全体が表示されるように
ビュー行列を設定したいということでは?
0436デフォルトの名無しさん
2009/09/27(日) 20:15:22相手するの馬鹿らしくなってきた。
0437デフォルトの名無しさん
2009/09/27(日) 20:26:270438デフォルトの名無しさん
2009/09/27(日) 20:54:22ビュー行列も、プロジェクション行列も式が公開されてますが・・・
0440デフォルトの名無しさん
2009/09/27(日) 21:17:570441デフォルトの名無しさん
2009/09/27(日) 22:26:23先に数学初心者質問スレでもいけば?
0442デフォルトの名無しさん
2009/09/27(日) 22:45:120443429
2009/09/27(日) 22:45:56ハッタリご苦労さまっす。
0444デフォルトの名無しさん
2009/09/27(日) 22:52:560445デフォルトの名無しさん
2009/09/27(日) 23:01:01がんばってください。
0446デフォルトの名無しさん
2009/09/27(日) 23:33:47いや、なんかメガネを自分のおでこにかけてるのに「メガネはどこだ!教えろ!」って言ってる状態だから、滑稽でしかないんだよ
もしかしてView行列とか、Projection行列の意味を知らないの?
0447デフォルトの名無しさん
2009/09/28(月) 00:08:21そういう奴が現れるたびに俺は何度でもこのコピペを貼るぞ
初心者の質問のほとんどがオブジェクト空間からスクリーン座標への変換の仕方を
知らないことからはじまると俺は思っている(よければテンプレに入れてほしい)
昔は宇治社中とかあったけどなw
とりあえず変換ごとに座標系がどの空間に移るか考えたほうがいいぞ
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換
ワールド変換でワールド座標(ワールド座標)
ビュー変換でカメラ座標(カメラのローカル座標)
射影変換で同次クリップ空間(xyが-1〜1になるzは0〜1)
ビューポート変換でスクリーン座標(スクリーンの座標になる)
0448デフォルトの名無しさん
2009/09/28(月) 00:23:01何かがわかってるというなら、もっと具体的に書いてくださいよ。
例えば、単純に大きさを合わせると言うけど、何と何の何の大きさを合わせるつもりですか?
そこまですら考えてないんでしょ。だからハッタリと言うんですよ。
0449デフォルトの名無しさん
2009/09/28(月) 00:31:00あなたは寝て下さい
0450デフォルトの名無しさん
2009/09/28(月) 01:24:31だから使うカメラが全然別なんだよ
単純にただそれだけでいけると思うよ
�@ワールド変換 →�A ビュー変換 → �B�C射影変換ビューポート変換
だから
ビュー変換で使うカメラ行列がいまのカメラの行列を使っちゃダメ
射影変換とびゅーぽーとも描画したいとこにあわせるからこれも違うもん用意することになると思う
ってことでワールドにいる状態の物体を描画する方法で描画をするなら
�A�B�Cを違うもんにしないとダメってすぐにわかるな
また、もし、仮想空間に別の世界を用意してその描画結果を反映したいなら
�@�A�B�Cすべて違うものにしなくてはいけないってただそんだけだろ?
0451デフォルトの名無しさん
2009/09/28(月) 01:44:32もっとやれ
0452デフォルトの名無しさん
2009/09/28(月) 01:54:47お前に好かれたくねえよホモ野郎
0453デフォルトの名無しさん
2009/09/28(月) 01:58:380454デフォルトの名無しさん
2009/09/28(月) 03:05:470455デフォルトの名無しさん
2009/09/28(月) 03:10:34なかなか教えてもらえない。
そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。
これを思い出したな
0456デフォルトの名無しさん
2009/09/28(月) 03:22:410457429
2009/09/28(月) 08:27:30大きさを合わせる対象とする為に、メッシュに合った
位置(v_pos_w)と半径(v_radius_w)を持った境界球を考える。
�@v_pos_wを座標変換し、スクリーン座標系でのZ値(v_pos_s.z)を得る。
�Aスクリーン座標系で2点[0,0,v_pos_s.z,1]、[0+v_width_s,0,v_pos_s.z,1]を定義し
逆行列で座標変換して、ワールド座標系での2点(w_pos0,w_pos1)を得る。
�Bl=w_pos1-wpos0、メッシュをl方向にlength(l)/v_radius_w分スケーリングする。
以上、終わり
0458デフォルトの名無しさん
2009/09/28(月) 08:33:57▲視野角
物体
視野角の半分の角度(直角三角形を作る)と物体の幅から、
三角関数で視野から物体までの適正距離を求めて、カメラをその距離に置く。
というのが自分的なやり方。
0459デフォルトの名無しさん
2009/09/28(月) 08:40:41描画幅から距離を求めることも、距離から描画幅を求めることもできる。
アスペクト比と解像度は掛けるなり割るなりはするけど。
0460デフォルトの名無しさん
2009/09/28(月) 08:51:34パースが狂うし、Zバッファの不整合が起きそうでお勧めしない。
0461デフォルトの名無しさん
2009/09/28(月) 08:55:27Z値を破壊しても問題ないんじゃね?
どうせレンダリングは最後のタイミングにやらんといかんでしょ。
0462デフォルトの名無しさん
2009/09/28(月) 09:38:59てっきり「壁の裏のアイテム」にでるマーカーは、壁に遮られるのかと思ったよ
Z値無視なら2D描画でいいじゃんw
0463デフォルトの名無しさん
2009/09/28(月) 09:42:29本当に3Dでやる必要があるのかとか他との前後関係はどうするのかとか
どういう意図で行いたい演出なのかとかが待ったく不明。
0464デフォルトの名無しさん
2009/09/28(月) 10:13:420465デフォルトの名無しさん
2009/09/28(月) 10:38:28観光で写真を撮るときに、被写体に対してカメラの位置を調整するだろ。
それと同じだ。
0466デフォルトの名無しさん
2009/09/28(月) 10:59:46>例えば1mの立方体をどの位置に描画しても、視点から3mくらいの大きさに描画したいのです。
>ただしパースは合ってるようにしたいのです。
物体のサイズは固定にしたいが、距離に応じたパースはかけたいってことでしょ。
カメラとの距離を一定にしたら、常に同じパースがかかってることになる。
0467デフォルトの名無しさん
2009/09/28(月) 12:58:100468デフォルトの名無しさん
2009/09/28(月) 13:01:080469デフォルトの名無しさん
2009/09/28(月) 20:39:51あと、「○○だから問題ない」の○○が抜けてない?
逆ケースって何?
ちょっと日本語が不自由過ぎやしないか
0470デフォルトの名無しさん
2009/09/28(月) 21:04:08>ソフトを触ったことがないのですがCGソフトでこれらの図形は、変更したい
>立方体の位置に関わらず大きさが一定になるっている気がします。
そもそもこの挙動はターゲットに合わせてカメラをスナップしているんだから、
カメラ自体の位置を調整して条件通りなんだよ。
>>466の方が日本語が不自由だろう。
カメラとのターゲットの距離を一定にするなんて誰が言ったんだ?
0471デフォルトの名無しさん
2009/09/28(月) 21:34:49>表示される矢印があります。これは向きがありかすが、大きさを変更したい
>オブジェクトがどの位置にあっても(正規化された?)大きさを維持しています。
これを読むと、カメラ空間内のオブジェクトの位置は一定ではないように見えるが?
大体、常にカメラとターゲットが一定なら、こんな質問は端から出ないわ。
>>カメラとのターゲットの距離を一定にするなんて誰が言ったんだ?
簡単にまとめるとこういうことだ。
メッシュを表示する時に、矢印オブジェクトを一定の大きさで表示したい。
↓
矢印オブジェクトとカメラとの距離を一定にすれば、
常に同じ大きさで表示されるでしょ。(>>458の方法)
↓
でも、メッシュの映像に違うカメラから撮った映像を合成する形になって、
パースや深度値に不整合が起きるでしょ。
0472デフォルトの名無しさん
2009/09/28(月) 22:43:44市販のゲームのアレ
って表現でいけねーのか?
俺はこんなの(豚さん)をステータス画面端に出したいのかと思ったぜ
http://image.excite.co.jp/feed/news/extnews/extnews_yatterman080310.jpg
0473デフォルトの名無しさん
2009/09/28(月) 22:58:05そしてその宝箱がどこからでも一定の大きさに見える
とかそういうのをやりたいんじゃないの?
遠くにあっても見えなくならないように
0474デフォルトの名無しさん
2009/09/28(月) 23:25:35ただし宝箱が遠くても近くても、同じ大きさの矢印で表示したい。
2Dでは「壁の裏の宝箱の上に出ている矢印が、壁のせいで見えない」を再現できないのでダメ。
0475デフォルトの名無しさん
2009/09/28(月) 23:34:28見えないはずのものが見えることには変わりない気がするんだが
そういうのやる場合って現在の視点からそれが見えるかどうか判定して
見えてたらそこになんらかのマークを2Dで書き込むとかってやるんじゃないか?
0476デフォルトの名無しさん
2009/09/28(月) 23:35:430477デフォルトの名無しさん
2009/09/28(月) 23:37:450478デフォルトの名無しさん
2009/09/28(月) 23:38:570479デフォルトの名無しさん
2009/09/28(月) 23:50:320480デフォルトの名無しさん
2009/09/29(火) 20:26:15移動中にそのウィンドウの上でカーソルを適当に動かすと描画がかくつく・・・
ウィンドウの外で動かした場合はなにもない
これは何が原因なんだ?
0481デフォルトの名無しさん
2009/09/29(火) 21:37:44ウインドウにメッセージが飛んできて
メッセージハンドラが動くから、それかな?
でもそんなに重いとは思えないが・・
0482デフォルトの名無しさん
2009/09/29(火) 21:51:300483デフォルトの名無しさん
2009/09/30(水) 15:20:09良いアルゴリズムはありませんか
0484デフォルトの名無しさん
2009/09/30(水) 15:34:26D3DXCreateSphereで作らせるか、ツールで作ってメッシュデータを読み込ませる。
確かに、2Dで円を描かせる簡単さに比べて2Dで球に内接するメッシュデータを作るのは簡単ではないわなぁ。
0485デフォルトの名無しさん
2009/09/30(水) 15:51:34よく確認してないけど、すぐ見つかったぞ
http://ynomura.dip.jp/archives/2009/04/post_35.html
たぶんこういうことだろ?
0486デフォルトの名無しさん
2009/09/30(水) 18:58:17ポリゴンで球を作る場合によく使う方法は次の2種類
・緯度経度で分割(北極と南極だけ三角形になり中間は四角の面を張る)
・正二十面体などから再帰的に分割する
後者は指向性のないメッシュを構築できるが、ポリゴン数の細かい制御ができないのと
低ポリゴンだと期待したほど滑らかにならないのが欠点。
他には、緯度毎に経度を半分ずらすとか、リンゴの皮向きみたいにStrip1本で
繋げるとか色々あるけど、自分で実装して比べてみるのがいいかと。
0487デフォルトの名無しさん
2009/10/01(木) 14:57:04どうすればいいんでしょ・・・?
0488デフォルトの名無しさん
2009/10/01(木) 16:36:44クック・トランスの鏡面反射モデル
異方性ライティング
好きなのを選べ
0489デフォルトの名無しさん
2009/10/01(木) 19:57:230490デフォルトの名無しさん
2009/10/01(木) 20:00:240491デフォルトの名無しさん
2009/10/01(木) 20:36:15背伸びすんなよw
自分にできることを一歩一歩こなしていけ
どうせ普通のライティングもよくわかってねぇんだろw
0492デフォルトの名無しさん
2009/10/01(木) 20:56:580493デフォルトの名無しさん
2009/10/01(木) 21:19:37お前らみたいに趣味でやってんじゃねーんだ
0494デフォルトの名無しさん
2009/10/01(木) 21:22:400495デフォルトの名無しさん
2009/10/01(木) 21:31:33要は鈍く光ってりゃ金属に見えるわけだ
その方向で弄れば?
ところでプラスチックの微妙に半透明な感じどーやって再現すっぺ・・・
0496デフォルトの名無しさん
2009/10/01(木) 21:39:30車輪の再発明頑張ってください
0497デフォルトの名無しさん
2009/10/01(木) 21:42:25つーかスプライト厨が帰ってきたのか?
0498デフォルトの名無しさん
2009/10/01(木) 22:03:40SSS
0499デフォルトの名無しさん
2009/10/01(木) 23:01:27手足が実際のように回転したり叩き付けられてはね回ったりするのですが
あれはどのようにしているのでしょうか?
読み込んだ時のメッシュコンテナに回転やら重力等の力をかけてるのか
元からそういう動きをアニメーションとして実装しているものなのか・・・
デッドスペースのような物ではバラバラになるオブジェクトを別に用意して
切り替えていると聞きましたが・・・
やっぱり後者で単純に済ましてるのかなあ・・・?
0500デフォルトの名無しさん
2009/10/01(木) 23:08:18端的に言うと、物理シム
0501デフォルトの名無しさん
2009/10/01(木) 23:09:29わかりましたなんとかしてみます
0502デフォルトの名無しさん
2009/10/01(木) 23:47:160503デフォルトの名無しさん
2009/10/02(金) 14:26:35とやりたいのですがウィンドウを半分にわけるにはどうすればよいのでしょうか?
0504デフォルトの名無しさん
2009/10/02(金) 14:28:340505デフォルトの名無しさん
2009/10/02(金) 14:34:21よければ詳しく教えていただけないでしょうか?
0506デフォルトの名無しさん
2009/10/02(金) 14:38:050507デフォルトの名無しさん
2009/10/02(金) 14:38:42そうしたら残った半分にもう一回描けばいいだけのことに気がつくから。
0508デフォルトの名無しさん
2009/10/02(金) 14:41:24なんとかやってみたいと思います
0509デフォルトの名無しさん
2009/10/02(金) 16:43:392つのテクスチャを重ねあわせる方法ってどうやるのでしょうか??
教えてください
0510デフォルトの名無しさん
2009/10/02(金) 17:51:27固定パイプラインの場合、2とおりある。
1.先にレンダーターゲットに1枚目を普通に書き込んでから2枚目を加算する。
2.レンダーターゲットに1枚目のテクスチャを指定して2枚目を加算で描画する。
[2]の方が高速だが、1枚目のテクスチャは破壊される。
固定パイプラインでも1枚目と2枚目の演算を別々に設定できるようなら(試してないんで分からない)
同時に書き込むことも可能だと思う。ただZオーダーによる優先順には注意。
シェーダーを使うなら、そのようなプログラムを書け。以上。
0511デフォルトの名無しさん
2009/10/02(金) 18:02:410512デフォルトの名無しさん
2009/10/02(金) 18:13:31レスありがとうございます。
用途としては、画一的なブレンディング用のグラデーションと
普通に用意した画像をブレンドさせたいと思ってます。
普通に用意した画像はほとんどがpngで、画像の縁が透明処理されていますので
ただの加算だと、その部分にまで影響が来てしまいます。
1の方法で描画しました。
>>511
その通りです。
エスパーさせてしまいすみません。
0513デフォルトの名無しさん
2009/10/02(金) 18:24:22D3DTSS_COLOROP D3DTOP_ADD
D3DTSS_COLORARG1 D3DTA_CURRENT
D3DTSS_COLORARG2 D3DTA_TEXTURE
D3DTSS_ALPHAOP D3DTOP_MODULATE
D3DTSS_ALPHAARG1 D3DTA_CURRENT
D3DTSS_ALPHAARG2 D3DTA_TEXTURE
[ステージ1]
D3DTSS_COLOROP D3DTOP_SELECTARG1
D3DTSS_COLORARG1 D3DTA_TEXTURE
D3DTSS_ALPHAOP D3DTOP_SELECTARG1
D3DTSS_ALPHAARG1 D3DTA_TEXTURE
[ステージ2]
D3DTSS_COLOROP D3DTOP_DISABLE
D3DTSS_ALPHAOP D3DTOP_DISABLE
0514デフォルトの名無しさん
2009/10/02(金) 18:25:03これを機にシェーダーに切り替えるのが正解
0515513
2009/10/02(金) 18:30:260516デフォルトの名無しさん
2009/10/02(金) 19:38:46RGB加算、α乗算指定
引数1:前のブレンディングステージの結果を使用(ステージ0の場合0xffffffffとなる)
引数2:ステージ0のテクスチャステージのテクスチャデータ
ステージ1
色:COLORARG1をそのまま出力
α:ALPHAARG1をそのまま出力
ステージ2
出力の無効(初期化?)
513さんの回答をもとに調べてきました。
0と1が逆なんですかね?
あとステージ2は何をしてるんでしょうか?
0517デフォルトの名無しさん
2009/10/02(金) 19:49:24そう0と1が逆。
ステージ2は、ブレンディングステージは全部で8つあるんで、
ステージ1で処理を終了する為に設定する。
といってもデフォルトでDISABLEになってるんだが。
ということで、>>513でいうところの1->0->2が正しい設定。
どうも俺の記憶では、この順番が逆だった気がするんだよなぁ。
0518デフォルトの名無しさん
2009/10/02(金) 19:57:43なるほど。
理屈がわかったので、あとはtry&errorでやってみます。
ありがとうございました。
すごく助かりました。
0519デフォルトの名無しさん
2009/10/02(金) 22:42:37ヘルプ通り、Direct3D9作成→窓1個作成→デバイス1初期化→デバイス2初期化→デバイス1Resetの手順でやってるんだけど、
デバイス1から描画しようとしてもバックバッファのクリアでInvalidCall、
デバイス2から描画しようとしても、PresentでinvalidCallになりまふ
画面解像度とか、一瞬変わるんだけど、すぐ戻っちゃう…
マルチヘッドでは動くんだけど、画面4つ出す必要があってどうしてもマルチアダプタも動かしたいの…
教えて薫で申し訳ないですが、教えてください
0520デフォルトの名無しさん
2009/10/03(土) 02:37:49ヒエラルキーの読み込み
メッシュコンテナとフレームの作成
レンダリング
はなんとか考えたんですが
他に考慮すべき物はありますか?
というかいまいち指針がわからないので
指し示して頂けるとありがたいです
0521デフォルトの名無しさん
2009/10/03(土) 09:24:300522503
2009/10/03(土) 10:17:19シーン内に複数のビューを描画するときにSetViewport を繰り返して使うと
最後にSetViewportで設定したものしか描画されないのですがなにがいけないのでしょうか?
0523デフォルトの名無しさん
2009/10/03(土) 10:34:32ttp://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d12.htm
0524デフォルトの名無しさん
2009/10/03(土) 10:46:50そこも見ましたがおそらくビューポートを設定した度に描画をしないといけないと思うのですが
自分のいじってるサンプルは描画は違うクラスで行っているのかもしれないです
ttp://www.dotup.org/uploda/www.dotup.org213348.zip
0525デフォルトの名無しさん
2009/10/03(土) 10:49:580526デフォルトの名無しさん
2009/10/03(土) 10:52:19http://www.dotup.org/uploda/www.dotup.org213368.zip
0527デフォルトの名無しさん
2009/10/03(土) 11:23:45思ったんなら試せよ
0528デフォルトの名無しさん
2009/10/03(土) 12:57:23そりゃあなた、2台のカメラから見える異なる2つの景色を描画したいんだから、2回描画するしかあるまいよ
0529デフォルトの名無しさん
2009/10/03(土) 21:42:29今現在、MicroSoftが封印しようとしているDirectX8を無理に使う利点はあるでしょうか?
・WindowsMEで動く。
以外に、描画速度や単純な処理の重さの問題が気になっています。
現在、初めてのDirectXでDX9を勉強しているのですが、今後固定機能の描画が
DX10でなくなるとの事で、HLSLでの描画を学びました。
そして作ったものを古いPCでテストしたところ、プリミティブ一個の描画すらまともにできませんでした。
そこで固定機能に移行する際、気になったのがDX8とDX9の速度の違いです。
(単純にそのPCでDX8ゲーがつるつる動いて、同じようなことをしているはずのDX9ゲーがかくかくしたので)
もしも大幅に違うのならば、がんばってDirectX8を発掘しようと思っております。
利点の他にも難点があれば、ご教示願いたいです。
・仕様変更にかかわるエラーなど解決しないといけない。等でしょうか、、?
0530デフォルトの名無しさん
2009/10/03(土) 21:45:06出なかったって言い方するって事は初期化は成功しているんだろう。
つまりDirectXのせいじゃなく君のプログラムが悪くて表示されていないという事だ。
初期化すら出来ない場合はサポート対象外の環境という事になる。
0531デフォルトの名無しさん
2009/10/03(土) 21:52:44例えばIntel GMA950みたいな環境ではVertexShaderがないから、
デバイスの初期化のときにソフトシェーダーを指定しておかないと描画されない。
しかも実行時エラーは出てこないので結構困ったりもする。
(たぶんPIXとかでなら見られるんだろうが)
その辺は確認した?
0532デフォルトの名無しさん
2009/10/03(土) 21:56:44まずは実験環境を明確にすること。
同じようなこととはいったい何をどのようにしたのか明確にすること。
つるつる、かくかくとは、それぞれがFPSになったのか明確にすること。
以上をまずははっきりさせろ、話はそれからだ。
0533デフォルトの名無しさん
2009/10/03(土) 22:04:54プログラマには向いていない。
0534529
2009/10/03(土) 22:12:16>実験環境
古いソニーのVAIOです。
CPU:Intel MobileCPU Pentium�V 1133MHz
メモリ:256MB
Mobility Radeon
チップ:M6(LY)
DAC:IntarnalDAC(350MHz)
メモリ:16MB
>初期化
確かに座標変換を行ったプリミティブは表示されませんでした。
ですが、変換済みプリミティブ(2D板ポリゴン)の描画自体は成功しました。
この辺りも良く分からないのですが、、ゲームを製作中で、速度は0.7FPSというところです。
0535デフォルトの名無しさん
2009/10/03(土) 22:14:46それは本当にHALで動いているのか?
0536デフォルトの名無しさん
2009/10/03(土) 22:20:00つかそのレベルを対象にゲームなんて作ってどうすんだ・・・
0537529
2009/10/03(土) 22:27:51時間が無くて、なるべく無駄を省きたいと先走ってしまいました。申し訳ありません。
ゲームの実験状況はどう説明すれば良いものか、、、
DX8のゲームは60FPS出るのですが、DX9のゲームは大体40FPS程度です。
やっていることは大体70くらいのプリミティブで構成された3Dの背景と
2Dのオブジェクト100個程度描画されている状況でしょうか?
特別重くなるようなエフェクトは特にかかってないと思われますが、
どうしても曖昧になってしまいますね(汗)
一番知りたいのはDX8とDX9の描画速度の違いです。もしかしたら
自分の気づかないエフェクトがDX9のゲームにかかっているのかもしれませんので。
0538デフォルトの名無しさん
2009/10/03(土) 22:31:20結局同じ機能を使う分には同じだよ。
ただ使える機能に違いがあるんで、差が出るとすればそこ。
D3D8は初めてのシェーダ搭載で、いろいろと未整備。
D3D9は主流だった期間も長いせいもあって、安定してるし
得られる情報も多い。あえて8を選ぶ利点はないよ。
0539529
2009/10/03(土) 22:35:03>>536
自分なりに考えたところではHLSLのエミュレートに
ものすごい処理を持っていかれているのでは?と思ったのです。
固定機能で実験してから質問したほうが良いでしょうか?
単純にDX8は速いのかどうか知りたかったので、、申し訳ありません。
もし実験してから出ないと答えが得られないならば実験してきます。
0540デフォルトの名無しさん
2009/10/03(土) 22:36:57その格ゲーの対応 PCの対応 DX8のゲーム
2倍速処理機能 ○ ○ ○ DX8
4倍速処理機能 × ○ ○ DX8
8倍速処理機能 ○ × × DX9
8倍速処理をしたいところだけどPCが対応していないので4倍。
その4倍は格ゲーが対応していないので2倍速処理に落ち着いた。
DX8のゲームは4倍速処理が出来るから格ゲーより結果的に速くなった。
0543デフォルトの名無しさん
2009/10/03(土) 22:55:37倍速処理ってなんのこと?
0544デフォルトの名無しさん
2009/10/03(土) 22:59:57恐ろしくわかりづらいけど、
HWで速いケースとSWで遅いケースを言ってるんだな。
0545デフォルトの名無しさん
2009/10/03(土) 23:00:44絡む要素が多すぎるからむしろシンプルで分かりやすい。
0546デフォルトの名無しさん
2009/10/03(土) 23:33:18ゲームを作っているのですが、仕様上、fps固定ではなくできるだけ速く動かす必要があります。
ただし、画面の描画はディスプレイの垂直同期にあわせたいと思います。
つまり、
while (1) {
while (垂直同期のタイミングが来るまで) {
/* フレーム処理 */
}
/* 描画処理 */
}
といったことをしたいです。
この 「垂直同期のタイミングが来るまで」 の判定方法が見つかりませんでした…。
デバイスのステートとして D3DPRESENT_INTERVAL_ONE を使うと、
垂直同期を待っている間は何も処理できないので、垂直同期1回につき1度しかフレーム処理が行えず、失敗です。
また、D3DPRESENT_INTERVAL_IMMEDIATE を使うと、垂直同期を待たずに描画されてしまい、これも失敗です。
何か方法はないでしょうか?
よろしくお願いします。
0547デフォルトの名無しさん
2009/10/03(土) 23:51:58タイミングがくるまで他の処理なんて組み方してたら永遠に描画できないよ。
1秒間の60回の垂直同期が行われるとしてティアリングを起こさないのは
帰線期間の間だけだから他の処理しつつ待つなんて時間的にシビアすぎて無理。
素直にスレッド使え。
0548デフォルトの名無しさん
2009/10/04(日) 00:01:57昔のDirectDrawでは、IDirectDraw::WaitForVerticalBlankを使えば可能だった。
D3D9に同じような機能は多分無いだろう。
0549デフォルトの名無しさん
2009/10/04(日) 00:05:35IDirect3DDevice9::GetRasterStatusでいける。
ただ>>547の言うように、有用かどうかは別。
0550546
2009/10/04(日) 00:11:16垂直同期とずれるのを避けるため D3DPRESENT_INTERVAL_ONE にした途端、
(当たり前ですが) 60フレームしか出なくて困っていました。
>>547-549
ありがとうございます!
>GetRasterStatus
試してみます。進捗があればまた報告させていただきます。
別スレッドで描画することについても検討してみます。
ありがとうございました。
0551デフォルトの名無しさん
2009/10/04(日) 01:03:17すげーでかい声で笑ってしまったw
0552デフォルトの名無しさん
2009/10/04(日) 01:05:27スレッドでガチでWindowsのスレッドなんか使ったら奴等は
何秒単位で反応する仕様になってるの?
少なくともメッセージがこないと動かないわけだからそのラグはあるよね?
場合によっては無理なんとちゃう?
0553デフォルトの名無しさん
2009/10/04(日) 01:35:181.注視点の位置
2.カメラの位置
3.カメラの向きの上方を示すベクトル
ヒントでもご存知の方いますか?
0554553
2009/10/04(日) 01:36:440555デフォルトの名無しさん
2009/10/04(日) 01:40:14できるんじゃね?
アークタンジェント当たり使いまくればいけんじゃね?
0556デフォルトの名無しさん
2009/10/04(日) 01:49:24最近は液晶モニタ用にブランク期間を削ったタイミングが使われていることがあって、
VBlankが物凄く短い環境もあるから、VBlank中に何かするような発想は避けた方がいいよ。
内部処理をできるだけ速く回しつつ、表示はモニタのタイミングに合わせたいなら、
内部処理と描画でスレッドを分けるのが一番いい。
0557デフォルトの名無しさん
2009/10/04(日) 02:02:15サンプルに付属されていたxファイルなら読み込めるのですが
それ以外のxファイルだと上記のエラーがでてしまうのですがなぜでしょうか?
サンプルはここのを使ってます
ttp://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d12.htm
0558デフォルトの名無しさん
2009/10/04(日) 07:34:43float4 Color : COLOR;
このColorの中身についてなんですが、
Color.a
とα値を参照しているサイトがあります。
RenderMonkey1.82をエディタとして活用している最中ですが
このツールだと、
Color.w
Color.x
Color.y
Color.z
と出てきます。
エディタの予測が間違っているだけでしょうか?
0559デフォルトの名無しさん
2009/10/04(日) 09:43:560560デフォルトの名無しさん
2009/10/04(日) 09:52:33シェーダーでは xyzw = rgba になっとる。
>>559
SDKのサンプル
0561デフォルトの名無しさん
2009/10/04(日) 11:17:510xfeeefeeeってのは、deleteされたかなんかして無効になった変数を示す。
要はそのプログラムがバグってるんだよ。
0562デフォルトの名無しさん
2009/10/04(日) 12:00:45ファイルによるのか?
0563デフォルトの名無しさん
2009/10/04(日) 12:01:310564デフォルトの名無しさん
2009/10/04(日) 14:44:18ttp://www.dotup.org/uploda/www.dotup.org218742.jpg
setviewportで左右それぞれに描画したいのですが原因が分からず右側しか描写されません
どなたかわかりますでしょうか?
お願いします
0565デフォルトの名無しさん
2009/10/04(日) 15:24:430566デフォルトの名無しさん
2009/10/04(日) 16:38:23「複数のジオメトリのインスタンスの効率的な描画」というページ
(http://msdn.microsoft.com/ja-jp/library/bb173349(VS.85).aspx)において
ハードウェアインスタンシングというテクニックは
3_0 頂点シェーダー モデルをサポートするデバイスが必要ですと
書かれているのですが、Instancingというサンプルのfxファイルには
technique THW_Instancing
{
pass P0
{
VertexShader = compile vs_2_0 VS_HWInstancing();
PixelShader = compile ps_2_0 PS();
ZEnable = true;
AlphaBlendEnable = false;
}
}
となっており、つまりVS2_0でコンパイルしているようなのですが
これにはどのような意図があるのでしょうか?
0567558
2009/10/04(日) 16:42:21ありがとうございます。納得しました。
0568デフォルトの名無しさん
2009/10/04(日) 16:57:02シェーダー的には2.0でも動く。
対応された世代が3.0世代だから便宜上そうなってるだけ。
当然2.0対応ハードウェアでも動かないカードは沢山ある。
動くかどうかはCAPS次第。
0569デフォルトの名無しさん
2009/10/04(日) 17:53:58ポリゴンの頂点の並びから読み出して
頂点データを書き換えるのかなあ・・・?
0570デフォルトの名無しさん
2009/10/04(日) 18:17:52なるほど・・「シェーダのバージョンは2.0だけど複数ジオメトリはサポートしている」というカードを
動作対象にいれるための措置ということですね?
>動くかどうかはCAPS次第
D3DCAPS9のページ
(http://msdn.microsoft.com/ja-jp/library/bb172513(VS.85).aspx)
を見た限りでは分かりませんでした。
シェーダのバージョンに関わらずハードウェアインスタンシングをサポートするという
カードを識別する方法はあるのですか?
0571デフォルトの名無しさん
2009/10/04(日) 18:27:05そう
例えばMSDNの
頂点バッファーの内容へのアクセス (Direct3D 9)
(http://msdn.microsoft.com/ja-jp/library/bb172233(VS.85).aspx)
に説明がある
0572デフォルトの名無しさん
2009/10/04(日) 18:29:56あーやっぱりそうなんですか
わかりました
ありがとうございます
0573デフォルトの名無しさん
2009/10/04(日) 19:49:13ヘルプには、vs_3_0からの新機能として
「頂点ストリームの頻度」が挙がっているけどな。
0574デフォルトの名無しさん
2009/10/04(日) 21:14:53ATiはRadeonX1000系ではシェーダーモデル2.0止まりにしたけど
ドライバーでジオメトリインスタンスには対応したんだよ。
0575デフォルトの名無しさん
2009/10/04(日) 23:14:34template<typename T> inline T square( T x ) { return x * x; }
void orientation_to_euler( const D3DXVECTOR3& dir, float& yaw, float& pitch )
{
____yaw = std::atan2( dir.x, dir.z );
____pitch = std::atan2( -dir.y, sqrt( square( dir.x ) + square( dir.z ) ) );
}
void orientation_to_euler( const D3DXVECTOR3& dir, const D3DXVECTOR3& up, float& yaw, float& pitch, float& roll )
{
____orientation_to_euler( dir, yaw, pitch );
____D3DXVECTOR3 v1, v2( 0, 1, 0 );
____D3DXVec3Cross( &v1, &dir, &v2 );
____D3DXVec3Normalize( &v1, &v1 );
____D3DXVec3Cross( &v2, &dir, &v1 );
____roll = std::atan2( -D3DXVec3Dot( &up, &v1 ), -D3DXVec3Dot( &up, &v2 ) );
}
google code search で見つけたやつをDirectX用に書き換えてみた
ヨーとピッチは正しいけどロールの値が怪しいときがある
0576519
2009/10/04(日) 23:39:02海外をググってもなかなか情報が出てこない・・・
もし参考文献・URLだけでもありましたらお願いします.
スルーされたのに再度書き込み申し訳ないです.
0577デフォルトの名無しさん
2009/10/04(日) 23:47:34窓4つつくってそれぞれに描画って話じゃなくて?
0578デフォルトの名無しさん
2009/10/04(日) 23:51:41何を悩んでいるのか具体的によくわからないな
0579519
2009/10/04(日) 23:52:13フルスクリーンで4画面やりたいのですが,
デバイスを2つ作る場合,同じWindowハンドルを渡さないといけないですよね?
かつ,別々のアダプタじゃないと駄目ですよね.
マルチヘッドでやる場合,違うWindowハンドルを渡さないと駄目ですよね?
カード2枚,それぞれで2画面を出すとき,どうしたらいいんでしょう…
0580デフォルトの名無しさん
2009/10/05(月) 00:00:08できないんじゃない?
4画面やりたいならカード4枚必要なんじゃない?
0581デフォルトの名無しさん
2009/10/05(月) 00:02:550582519
2009/10/05(月) 00:03:36ヘルプにある
・フルスクリーンのデバイスと同じフォーカス ウィンドウを持たす
・どのフルスクリーンデバイスとも異なるアダプタを表す。
・デバイス1作成⇒2作成⇒1をReset
に従って初期化はOKだったんですが最初に初期化したデバイスをPresentした瞬間デバイスがLostします.
どこかに良い情報ありますでしょうか.
0583519
2009/10/05(月) 00:07:08むりですか… orz
了解しました…
じゃぁ諦めてDualHeadのPCを2台にします…
0584519
2009/10/05(月) 00:08:57ありがとうございます!! > 577,578,580,581
0585デフォルトの名無しさん
2009/10/05(月) 00:09:36・デバイス1枚モニタ2枚
・デバイス2枚モニタ2枚
はいけんの?
マルチモニタ アプリケーションでは複数のデバイスをフルスクリーンモードにすることができるが、
それは、これらのデバイスがすべて異なるアダプタのデバイスであり、
同じ Direct3D オブジェクトによって作成され、しかも同じフォーカス ウィンドウを共有する場合に限られる。
0586デフォルトの名無しさん
2009/10/05(月) 00:10:28光の当たり具合によるコントラストは何によって再現しているのでしょうか?
法線ベクトルと光との角度?
0587519
2009/10/05(月) 00:13:41・デバイス1枚モニタ2枚 ⇒OK
・デバイス2枚モニタ2枚 ⇒×
でした.もし,後者の情報があれば解決できるかも…とは思っていますが.
後者のは一般的なようですが,あまりに一般的すぎてか,Webで情報を
見つけられませんでした.
同じフォーカスwindowのハンドルを与えているんだけど…
とりあえず2画面に渡るおっきいwindow作ってハンドル与えればいいんですよね?
そのあたりの情報がもしあれば紹介いただけると嬉しいです.
0588デフォルトの名無しさん
2009/10/05(月) 00:14:23どうすればいいんでしょうか?
0589デフォルトの名無しさん
2009/10/05(月) 00:14:26>法線ベクトルと光との角度?
わかってんじゃん
0590デフォルトの名無しさん
2009/10/05(月) 00:15:55うぜーからやめろw
0591デフォルトの名無しさん
2009/10/05(月) 00:26:01それやってるゲームたまにあるけど
マジで切れそうになるほどウザイよ。
0592デフォルトの名無しさん
2009/10/05(月) 00:28:02いやあマウスの座標はとれるんだけど
画面外に出ちゃってボタンを押すと変なところ押しちゃうから
避けたかったんだけど・・・
しかたないからマウス使うのやめるか・・・
0593デフォルトの名無しさん
2009/10/05(月) 00:30:38http://bbx.hp.infoseek.co.jp/
検索欄にマルチモニタとかぶち込んでみるとか・・・
なんかそれっぽいのやってる人いるっぽいけどな
DirectX8の話題っしょ?
0594デフォルトの名無しさん
2009/10/05(月) 00:34:42曲を鳴らすとき、新たにスレッドを作成して
ttp://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここの方法をスレッド内で行うことでストリーミング再生をしているのですが、
曲を途中で止めた後にまた最初から鳴らす方法や、最後まで鳴らし終わった後にループして最初から鳴らす方法が分からずに困っています
何か良い方法をご存じないでしょうか
0595519
2009/10/05(月) 00:39:41そうですそうです.9は8と同じ方法でできそうです.
検索で出てきました,
・残りのセカンダリ以降のDirect3DDevice8オブジェクトは、
それぞれのデバイスウインドウにレンダリングする。
(D3DPRESENT_PARAMETERSのhDeviceWindowにセット)
デバイスウインドウはフォーカスウインドウの子ウインドウでなければならない。
の,子windowじゃないと,てのを試していませんでした.やってみます.
(この人は失敗しているようですが…)
0596519
2009/10/05(月) 01:48:42window作成時のパラメタに制限でもあるのかな…
子Windowの作り方がイマイチ分かっていない(とりあえずparentに設定するとかしてみました)
のが原因な気もしますが…
画面は両方解像度も変わるし全画面になるし,windowサイズも変更されますが,
すぐに全画面が解けてwindowが見えちゃう…
先日トライした時はデバイス2のクリア,Presentはできたのに,今回はそれすらもできませんですた
もうちょっとWindowsのプログラミングを勉強してまいります
0597デフォルトの名無しさん
2009/10/05(月) 01:54:420598デフォルトの名無しさん
2009/10/05(月) 02:22:49というか、Dx9だと1つのデバイスで複数のディスプレイのウィンドウに書けるんだが。
それぞれでフルスクリーンにするんだぞ(しないと使えない)
これをグループ化されたフルスクリーンというわけだが。
試したんだな? 試したな?
Dx8以前はどうか知らない。
0599デフォルトの名無しさん
2009/10/05(月) 02:39:52やったこと無い、ひ・と・も〜♪
0600デフォルトの名無しさん
2009/10/05(月) 02:40:340601519
2009/10/05(月) 02:53:19それでも要求は満たせるので,良いということは思いついたんですが,
知識欲求のためにwというか,できないはずはないという思いと,
できないのが悔しいので…
ありがとうございます.解決しなかったらウィンドウでやります!
> 598
CreateDeviceが1つで良いということですか汗それは知らなかったです…
ありがとうございます.試してみます.ちなみに試してなかった…ですorz.
全部のアダプタにCreateDeviceして,という情報に踊らされてた感じですか泣
それぞれでフルスクリーンにすると言うのがいまひとつ分からないですが…
D3DPRESENT_PARAMETERSのwindowedにFalseつけてCreateDevice
するものだと思っていました…
2枚目以降は手動でChangeDisplaySettingsExをするのでしょうか?
そもそもWindowsプログラミングを始めたばかりなのですいません.
0602558
2009/10/05(月) 07:25:39エフェクトをかけたい画像、エフェクトの画像の表示は確認できました。
シェーダでもやってみたのですが、描画はできたのですがマスクがかかった処理が出来ません。
考えうるミスがあるようでしたら教えてください。
ピクセルシェーダの中身は
float4 PS( float2 TexUV : TEXCOORD0 ) : COLOR
{
float4 EffectColor;
float4 TextureColor;
// テクスチャにサンプラーの設定を適用させた色を取得
EffectColor = tex2D(EffectSampler, TexUV);
TextureColor = tex2D(TextureSampler, TexUV);
// α値が0.0より大きい個所のみエフェクト適用
if (0.0 < (TextureColor.a * EffectColor.a))
{
TextureColor.r = TextureColor.r + EffectColor.r;
TextureColor.g = TextureColor.g + EffectColor.g;
TextureColor.b = TextureColor.b + EffectColor.b;
}
return TextureColor;
}
としています。
0603デフォルトの名無しさん
2009/10/05(月) 07:26:36マルチディスプレイって、どちらかというとマルチヘッドの方が特殊な例で
本来は複数のビデオカードを接続して使うもんだよ。
その場合は、ビデオカードの数だけデバイスを作成するもの。
2画面程度ならマルチヘッドで対応できるが、4画面以上となると現状では
複数のビデオカードを使って複数のデバイスが必要。
519はマルチヘッドでは既に出来ている。
>>519
マルチデバイスは経験したことないので推測で言うけど、テクスチャ等の
リソースはデバイスごとに独立しているものだから、マルチデバイスだと
それぞれのデバイスでテクスチャの作成が必要なはず。
その辺のリソース管理はちゃんとやってる?
0604558
2009/10/05(月) 07:26:52・エフェクトをかけたいテクスチャの描画
・テクニック設定
・Begin
・BeginPass
・シェーダへテクスチャを渡す
・SetTexture エフェクト画像のセット
・SetFVF
・DrawPrimitiveUP
・EndPass
・End
という順番で行っています。
申し訳ないですが、原因が特定できないのでエスパー的な回答を求めています。
0605デフォルトの名無しさん
2009/10/05(月) 08:36:50technichの定義に必要なフラグを書け。
0606519
2009/10/05(月) 11:41:34フォローありがとうございます.
仰る通りマルチヘッドは既にできました.が,4画面あるようなビデオカードでは
少々重いシーンをレンダリングしてるので,複数ボードにチャレンジしてる次第です.
とりあえずデバイス毎にテクスチャやメッシュの作成をしてますが,ひとまず動作確認のため
バックバッファのクリア→presentだけやってますが,それでも失敗しています.
とりあえずDX8のSDKに複数デバイスのスクリーンセーバのサンプルがあるとの情報を得たので
落してみつつ軽く違いを見てみたのですが今ひとつわからず…
まずはこのサンプルを動かしてみて,動くかやってみて,違いを良くみて,再度報告します.
(なんで最新のSDKにはマルチモニタのサンプルは無いんだTT)
0607デフォルトの名無しさん
2009/10/05(月) 12:55:30というか、1つのデバイスで全部描画させて、
残りはバックバッファからGDIなんかで転送かけたほうが早くね?
0608デフォルトの名無しさん
2009/10/05(月) 13:58:53もしかしてこれって遅くなる・・・?
0609デフォルトの名無しさん
2009/10/05(月) 14:00:06片方をResetするともう片方がLostしてしまうね。
ヘルプに
As a result, a multiple-monitor application can place several devices in full-screen mode, but only if all these devices are for different adapters, were created by the same Direct3D object, and share the same focus window.
という記述があるけど、all these devices are for different adaptersってのは
物理的に別のビデオカードでないと駄目ということなのかな?
>>606
デバイスを2つ作成する際に、異なるビデオカードになるように選択しても駄目かな?
AdapterOrdinalInGroupが0のアダプタを2つ選んでみて。
0610558
2009/10/05(月) 14:00:14すみません、調べてみましたが質問の意味がよくわかりません。
もう少し詳しく教えてもらっていいですか?
0611519
2009/10/05(月) 14:04:57なるほど,その手もありますね.ありがとうございます.
両方動かせるようになったら,是非速度比較してみます.
大半プロジェクタなんでどの方法でも60fps出れば良いんですが…
そのほうが簡単だしリソース節約できそうですね.
ちなみに他の手段として,マルチヘッドのプログラムを使って,
DualHead2Gox2なんかも考えてみました.正味4回レンダリングするだけでいいかな,
と思ったりもするのです.(金で解決という裏ワザかもしれませんが…)
どのみちマルチアダプタができると,それに越したことはないので,
(いまとりあえず2x2画面が目標ですが,できれば最終的には6画面出したいのですorz
全画面同じ環境,異なる視点でのレンダリングです.)
いきなりボード3枚ざしはドライバの問題とかソフトの問題とか山積みそうだったので
まずは2枚からやってみたいです.
やや(だいぶ?)特殊な状況ですいません.先に報告したサンプルで頑張ってみます.
0612558
2009/10/05(月) 14:12:39質問じゃないや、回答だ
0613609
2009/10/05(月) 14:41:21ドライバが腐ってるだけかなぁ。
マルチモニタの設定変えてると、おかしくなることが多いし。
0614609
2009/10/05(月) 14:46:17どうもDebug Runtimeだとうまく動かないようだ。
0615519&606
2009/10/05(月) 14:57:16>片方をResetするともう片方がLostしてしまうね。
まったくおんなじ現象です.
>デバイスを2つ作成する際に、異なるビデオカードになるように選択しても駄目かな?
AdapterOrdinalInGroupが0のアダプタを2つ選んでみて。
それもやってみました…
>どうもDebug Runtimeだとうまく動かないようだ。
っていうか,ええええええええ!!
Debugだとだめですと…ちょっといま時間ができたので即効ためしてきてみます.
0616デフォルトの名無しさん
2009/10/05(月) 14:59:480617デフォルトの名無しさん
2009/10/05(月) 15:02:53お前は1から10まで説明されないと理解できないのか?
それは勉強してるとは言わない。話を聞いてるだけだ。
自分で調べろ。technique構文はHLSLで重要な意味を持つんだぞ。
0618デフォルトの名無しさん
2009/10/05(月) 15:04:17再生しなおし→普通に再生しなおすだけ。
ループ→フラグをつけるだけ。
ヘルプちゃんと読んでるの?
0619558
2009/10/05(月) 15:31:13ピクセルシェーダとバーテックスシェーダをラッピングしたようなメソッドのことですよね?
だから直接アセンブラで記述することもできる、と理解しています。
私がわからないのは、テクニックの定義にフラグを使用しているのかどうかがわからないのです。
エフェクトのロード時にデバッグ用のフラグや最適化無しのフラグを立てたり等は出来るそうなのですが
そのことを言っているのでしょうか?
それとも、テクニックに複数のパスを作り、それを分けるフラグのことでしょうか?
不勉強で申し訳ない……。
0620558
2009/10/05(月) 15:36:49修正した点は、
・BeginPass後にSetTextureを呼んでいたのをその前に置く
・そもそも、シェーダの処理はエフェクトをかけたテクスチャを出力しているので
エフェクトの描画を行う必要が無かったので
テクスチャの描画に変更
・シェーダの記述を変更
シェーダの記述は以下の通りです
float4 EffectColor;// : COLOR;
float4 TextureColor;// : COLOR;
// テクスチャにサンプラーの設定を適用させた色を取得
EffectColor = tex2D(EffectSampler, TexUV);
TextureColor = tex2D(TextureSampler, TexUV);
// α値が0.0より大きい個所のみエフェクト適用
if (0.0 < (TextureColor.a * EffectColor.a))
{
TextureColor.r = TextureColor.r * 0.5 + EffectColor.r * 0.5 * EffectColor.a;
TextureColor.g = TextureColor.g * 0.5 + EffectColor.g * 0.5 * EffectColor.a;
TextureColor.b = TextureColor.b * 0.5 + EffectColor.b * 0.5 * EffectColor.a;
}
0621デフォルトの名無しさん
2009/10/05(月) 16:27:16XAudio2のボイスは、普通に停止させると自動的に現在の再生場所を保持するので、その状態で再びスタートさせても途中からの再生になるんです
つまり、停止ではなく一時停止の状態なんです
なので、再生が終了したりといった任意のタイミングで、一時停止ではなく停止をさせる、もしくは再生位置を最初に戻す方法を探しているのですが、
ググったりMSDNを探しても見つからないのです
0622デフォルトの名無しさん
2009/10/05(月) 17:40:04pauseじゃなくてstopかければいいじゃん。
0623519&606&615
2009/10/05(月) 17:42:45ちなみにDebug→Releaseにしたら,フルスクリーンが解除されたりはしなくなりましたが,
PresentでまだINVALID_CALLになりまふ…2枚x2画面でやってもダメポです…
ResetかけてもINVALID_CALL…
Presentの3番目をNULLにしても親窓にしても子窓にしても駄目でした…
基本,マルチヘッドでググったら最初に出てくるサイトのプログラムを弄ってるんですが.
CreateWindowを2枚にして(位置はあまり関係ないですよね?),
Parentに主窓,デバイス2のd3dppの設定に子窓を設定,
ヘッド数を1に強制,デバイス2のCreateDeviceで主窓を設定,
デバイス2作成後,デバイス1をReset,んで,あとはSwapChainうんぬんを飛ばして
ClearしてPresentしてるだけなんですが…
(ちなみにSwapchainを取ろうとすると既にLOSTしていてInvalidcall)
613さんと何が違うんでしょう…
0624デフォルトの名無しさん
2009/10/05(月) 17:48:02Pauseは無くStopしかないのですが、Stopを実行すると上記の一時停止の状態になるんです
0625519
2009/10/05(月) 17:48:21Windowsの起動時に画面乱れるし…相性もあるのかな…
余談ですが,先に指摘されていましたが,どういう条件か忘れましたが,
2つのデバイスで1つの画面(画面1)に
描ける状況になりました.なのになんで画面2に書けないんだろう…汗
さらにDX8SDKが見つからなくて先のサンプルも試せなかったです…
まぁでも読んでみましたが明らかにおかしいところもわからなかったorz
0626デフォルトの名無しさん
2009/10/05(月) 17:53:20確かにPauseはなかった。スマン。
だがStop時にSourceVoiceを止めて開放(Release)して、バッファも削除したらそれでいいんじゃないの?
別に迷うようなところじゃないと思うんだが。
0627デフォルトの名無しさん
2009/10/05(月) 18:14:46そんなやり方じゃあ背景残したい場合にどうすんのよ。
0628デフォルトの名無しさん
2009/10/05(月) 18:29:21えっと、Stop時にはソースボイスやバッファを削除して、再び再生するときにソースボイスやバッファを作り直すということでしょうか
なお、ストリーミング再生の部分は、スレッドを新たに作成し、その中でストリーミングの処理を行っているので、Stop時にそのスレッドを削除し、
再び再生するときにまたスレッドを作成するという方法を取ろうとしたのですが、ExitThread関数を実行した時点でエラーが出てしまい、どうにもうまくいきませんでした
0629558
2009/10/05(月) 18:33:41背景って残すものなんですか?
毎回描画してるんですが……。
0630デフォルトの名無しさん
2009/10/05(月) 22:40:13基準点を置いてそこを中心に対の点を置く、それを結んで描画しています。
ビルボード処理みたいなのをかけて出来る限り面がこちらを向くようにしたいのですが詰まっています。
「カメラ→注視点」のベクトルと「カメラ→基準点」のベクトルをD3DXVec3Crossを使い外積を求め(全てのベクトルは正規化済み)、
基準点を中心に求めたベクトルと、、その対に置いていけば出来るんじゃないかなと思ってやってみましたが上手くいかず。
その他色々試していますが似たような結果しか得られていません。
どなたかアドバイスを頂けると嬉しいですorz
0631575
2009/10/06(火) 00:07:57オイラー角ってジンバルロックとかあるから
ロール角は求めないほうがいいね
0632デフォルトの名無しさん
2009/10/06(火) 00:10:260633デフォルトの名無しさん
2009/10/06(火) 00:24:03やったことねぇけどスクリーン座標にもってきてからつなげてみれば?w
0634デフォルトの名無しさん
2009/10/06(火) 00:24:51ダメだ
そんなの紙に描いて自分でなんとかしろ
0635デフォルトの名無しさん
2009/10/06(火) 01:42:23いや、スレッドはXAudio2が勝手に作るものだし……。
ExitThreadを明示的に呼び出すなんて論外。
ヘルプとサンプルをもう一度読み直せ!
>>629
お前はDrawPrimitive1発で終わるような画面描画しかせんのか?
0636628
2009/10/06(火) 03:02:43ありゃ、そうだったんですか…
http://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここで、ストリーミング再生には個別にスレッドを作る必要がある、みたいに書いてあったんでCreateThreadでスレッドを作成して、
その中でストリーミング処理を行っていました…
というか、そうしないと音楽再生中はひたすらwhile文で回すので、再生中は他のことが出来ないと思ったんですが
ちなみに、最後まで音を鳴らした後に、ループしてまた最初から鳴らす方法はこの方法でも解決しました
(ただ、指定した場所からループする、というようなことはまだ出来ないですが)
0637558
2009/10/06(火) 12:35:37いわんとすることがよくわからないので、
問題が起こった時に635さんの回答を思い出して描画パイプラインをもう一度見直します。
ありがとうござました。
0638デフォルトの名無しさん
2009/10/06(火) 13:56:12そんなの、意訳を読んで誤解してるだけ。原文はこう。
http://msdn.microsoft.com/en-us/library/ee415791(VS.85).aspx
Streaming audio data in XAudio2 is accomplished by creating a separate thread
for reading the audio data and using callbacks to control that thread.
creating a separate threadするのはXAudio2であってプログラマが用意する必要は無い。
組み込みでいくつかのコールバッククラスがあって、利用する際にはそれを継承したクラスを用意して使う。
その使い方が口酸っぱくかかれてると思うんだが?
0639デフォルトの名無しさん
2009/10/06(火) 13:59:49確かに、背景という用語はちょっと誤解を招く表現だった。スマン。
先に描画したフレームバッファ上の画像データのことを言っている。
ポリゴン同士ならZバッファがあるから描画順が違ってても問題ないが、
αかけるならZバッファ使えなくなるだろ?
じゃあ半透過にするには背景(in_color)の色と混ぜないといけなくなる。
0640デフォルトの名無しさん
2009/10/06(火) 15:08:03詳しい回答助かります!
確かに作成した画像の一部が被さるような描画を行うとおかしくなりますね。
今現在、ゲームのインターフェース部分でのみの使用なので
画像が被るような処理を行わないようになっています。
今後それ以外の用途が出た場合にプログラム側でZバッファで
描画する順番をソートするプログラムで回避しようと思います。
ありがとうございました。
0641デフォルトの名無しさん
2009/10/06(火) 21:11:51なるほど、そうでしたか
ttp://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここの方法だと、再生が終了するまでwhileで回し続けていたので、終了するまで他の動作が出来ない→スレッドを作成して、その中で処理する必要がある
と思ってましたが、回し続けなくても、メインループの中で、コールバックがあったときだけ次のバッファにデータを入れれば良かったんですね
メインループの中で処理できるのなら、途中でストップ→最初から再生、なども簡単に出来そうです
0642デフォルトの名無しさん
2009/10/06(火) 21:35:13なにがメインループや。コールバックと言ってるじゃないか。
全然人の話聞いてないだろ。
0643デフォルトの名無しさん
2009/10/06(火) 21:47:02あ、てっきりコールバックは、条件を満たしたときにそれを知らせるだけかと思ってました
OnBufferEnd内でストリーミング処理を行えばいいんですね
0644デフォルトの名無しさん
2009/10/06(火) 21:57:28だから、CreateEventとかしなくても問題ないと
すいませんちょっと頭の中整理してきます
0645デフォルトの名無しさん
2009/10/06(火) 22:12:10CreateEventしなくていいわけないだろCreateThreadだ
0646デフォルトの名無しさん
2009/10/06(火) 23:16:44どうすればいいのか、よくわかっていません。
フックするなどのキーワードが出てきましたが
フックする方法も良く分かっていません。
何か参考になるものや方法をご存知の方いらっしゃいますか?
0647デフォルトの名無しさん
2009/10/06(火) 23:20:22いや、イベントハンドルも基本的には要らないし。
いちいち付き合ってられんな。もうちょっと勉強してから書き込んでくれ。
0648デフォルトの名無しさん
2009/10/06(火) 23:21:180649デフォルトの名無しさん
2009/10/06(火) 23:38:33どういうことだろう。
他のアプリがDirectInputから情報を見てるから
そこにダミーの情報を送ってやれば良いと
考えているのですが。
0650519
2009/10/07(水) 06:11:07>> 609さん
DualHeadのVGAでも,マルチデバイス出来ましたか?
もし可能なら,参考になりそうな情報か,ソースを一部分でもいいので
頂けるとありがたいです…
0651デフォルトの名無しさん
2009/10/07(水) 11:51:561つ目:デバイス用
2つ目:アプリでいじくる用
デバイスから頂点を読むと遅くなるので
コピーを渡す必要があり、結果、動的バッファで速度を重視するなら
頂点量が2倍になるという考え方は普通ですよね?
0652651
2009/10/07(水) 12:47:00いや・・・静的なバッファでもManagedを指定すれば
結局背後で自動的にメモリが確保されたりするし
かといって静的なバッファをDEFAULTするにも自分で
バックアップを用意しないといけないから結局2倍必要であり、
静・動関わらず、頂点データの領域はは2倍必要という事か・・
0653デフォルトの名無しさん
2009/10/07(水) 14:02:34シェーダで何とかすることを考えた方が有用だろう。
0654609
2009/10/07(水) 18:48:40エラー処理も終了時の後始末もないような酷いコードで良ければ。
ttp://www.dotup.org/uploda/www.dotup.org230822.zip.html
ダウンロードパスは609
動作確認はGF9600GTのデスクトップ機と、945GSEのネットブック。
どちらもDualHeadの環境。
そして今試したら、DebugRuntimeでも動いてしまった。
この前駄目だったときから変えたのは、ネットブック用にHWT&Lの判定を
追加したくらいなんだけど。
0655デフォルトの名無しさん
2009/10/07(水) 20:59:58リアルタイムですべての頂点を不定形に動かしまくるなら話は別だが、
普通は頂点バッファの一部だけが変わればいいので、
すべての状態を表した1個の頂点バッファを用意して、
毎フレームIndexBufferを作り直している。
IndexBufferもWriteOnlyで1回確保して毎フレーム書き込んでるだけ。
これで何も問題ない。
0656デフォルトの名無しさん
2009/10/07(水) 21:58:54確かにその場で書き込めばメモリ確保しておく必要ないし
IndexBufferを変えるのは考えていませんでした。
0657650
2009/10/07(水) 22:19:52ありがとうございますっ!!感謝感激です.
だうそできました!!そしてコードを読んでみました.
やはりWindowハンドルの与え方まわりが違いそうです.
子窓にしなくてもできてるんですね・・・へるぷの馬鹿…
今日から出張中につき一週間ほどテストできないのが口惜しいんですが,
ありがとうございます!
Debugでも動くなら何よりです.参考に頑張ってみます!
0658デフォルトの名無しさん
2009/10/08(木) 04:43:30カメラがどこを向いているかは関係ない。
カメラの位置とビルボードの位置の問題だから。
カメラの位置とビルボードの位置を結ぶベクトルを正規化したベクトルFから適当なupベクトルとの外積を使って直行基底を求める。
直行基底をなす、3つの単位ベクトルで回転行列を作る。
このとき、逆回転行列を求めたいので最初から転置しておく。
これで、ビルボードをカメラ方向に向ける回転行列が完成。
0659デフォルトの名無しさん
2009/10/09(金) 10:18:15データ容量も小さくストリーミング再生も問題ないし、配布についても問題無しですか?
0660デフォルトの名無しさん
2009/10/09(金) 11:03:16XAudioはXBox360専用。XAudio2がPCでも使えるほうな。
DirectX Audioというなら問題ないんだが。
Direct Show でWMVの再生ができることは確認したが、
音声はogg+vorbisを使えるようにしてしまってるからWMAは試したことないな。
他のやつ答えてやってくれ。
WMAの採用は基本的には問題ないが、OS単体で再生が保証されてるわけじゃないから
コーデックの別途インストールが必要になるケースが出るぞ。
0661デフォルトの名無しさん
2009/10/09(金) 12:08:07XAudio2を使うのならxWMAの再生は保障されるんじゃないか?
0662デフォルトの名無しさん
2009/10/09(金) 12:57:32MSDNちょっと読んでみたが、xWMAはWMAのサブセットで、
「XAudio2 と XACT3 の両方において、ソフトウェアで xWMA をデコードできるようになりました」って書いてあるね。
じゃあ大丈夫なのかも。
事実上別形式と思っておいたほうが安全そうだね。
0663デフォルトの名無しさん
2009/10/09(金) 14:03:01そうだね。
WMAは普通はASFコンテナだけど、
xWMAはRIFFコンテナに突っ込んであるから、普通のプレーヤーで再生できなかったりするし(要はDirectShow経由で再生できない)。
>>659
あーそういや、指定位置に着たら指定位置に飛ぶようなループは設定できなかったっりしなかったっけ?
そういう曲使わないなら問題ないと思うけど。
0664デフォルトの名無しさん
2009/10/09(金) 14:41:52そういうのはバッファをSourceVoiceで与えるときにフラグで指定できるけど、
正直めんどくさい……(まだ自分では対応させてない)
0665デフォルトの名無しさん
2009/10/09(金) 17:52:41別アプリのサーフェイスの取得 または 描画のフック が実現できるような関数あれば教えてください。
(サンプルがあるサイトとかもあると助かります・・・)
うまく説明できないので実際あるやつだと
・DirectXを使うゲームを起動
・frapsやdxtoryなど(DirectXの)動画を録画するツールを起動
・ゲーム画面に fps(フレームレート)が表示される (←これと同じようなことをやりたい)
透明なウインドウを重ねただけだと、片方のウインドウしか動画に録画されないのです。
0666デフォルトの名無しさん
2009/10/09(金) 18:10:34なんかこのスレみてたらこんな質問が何回も出てくるけど、
何でこんなめんどくさいことばかりこいつらはやりたがるんだ?
アプリからじかにハードウェアを叩けるのがDirectXのいいところなのに、
横から割り込めるようなチャチな作りだったら意味ないだろ。
0667デフォルトの名無しさん
2009/10/09(金) 18:24:16なんでそんな動画を保存したいのか?って訊かれたら趣味・・かな。
0668デフォルトの名無しさん
2009/10/09(金) 19:31:510669デフォルトの名無しさん
2009/10/09(金) 22:27:160670デフォルトの名無しさん
2009/10/10(土) 00:14:380672デフォルトの名無しさん
2009/10/10(土) 00:23:16>キーボードとマウスの操作をゲーム画面に重ねて動画に保存したいからです。
ビジネスアプリでほしい場面はあるけど
それはそれでキャプった後で別でつけたほうが早いよ多分
だってどうせコメントだっていれなきゃいけないんでしょ?
0673デフォルトの名無しさん
2009/10/10(土) 00:56:52キモッ
0674デフォルトの名無しさん
2009/10/10(土) 01:55:50ちゃんと影が落ちてたりするし、手調整じゃなくて
オートでやってるなら凄い技術だね。
ただシェーダ主体になってくると、簡単にはいかないだろう。
World変換行列がどれかすら判断する術がない。
0675デフォルトの名無しさん
2009/10/10(土) 05:41:55なにか関数の使い方等間違っていますか?
最適化などは後でやるのでとりあえず動くようにしたいです
0676デフォルトの名無しさん
2009/10/10(土) 05:44:52BOOL Vec_Pol(D3DXVECTOR3 *v1, D3DXVECTOR3 *v2, D3DXVECTOR3 *p1, D3DXVECTOR3 *p2, D3DXVECTOR3 *p3){
//Planeを作る
D3DXPLANE pln;
D3DXPlaneFromPoints(&pln, p1, p2, p3);
//無限平面との衝突点を算出
D3DXVECTOR3 o;
if(NULL==D3DXPlaneIntersectLine(&o, &pln, v1, v2))return false;
//ポリゴンと点の内外判定
D3DXVECTOR3 vec1, vec2, cross, temp;
vec1 = *p1 - o;
vec2 = *p1 - *p2;
//外せきその1
D3DXVec3Cross(&temp, &vec1, &vec2);
vec1 = *p2 - o;
vec2 = *p2 - *p3;
//外せきその2
D3DXVec3Cross(&cross, &vec1, &vec2);
if(temp.x * cross.x < 0.0f)return false;
if(temp.y * cross.y < 0.0f)return false;
if(temp.z * cross.z < 0.0f)return false;
vec1 = *p3 - o;
vec2 = *p3 - *p1;
//外せきその3
D3DXVec3Cross(&cross, &vec1, &vec2);
if(temp.x * cross.x < 0.0f)return false;
if(temp.y * cross.y < 0.0f)return false;
if(temp.z * cross.z < 0.0f)return false;
return true;
}
0677デフォルトの名無しさん
2009/10/10(土) 06:28:00サンプルで見たこともない形式のファイルを読み込んでるんだけど
0678デフォルトの名無しさん
2009/10/10(土) 07:08:310679デフォルトの名無しさん
2009/10/10(土) 07:28:27誰?お前?
0680デフォルトの名無しさん
2009/10/10(土) 09:40:39普通に出来る
0681デフォルトの名無しさん
2009/10/10(土) 09:57:340682デフォルトの名無しさん
2009/10/10(土) 12:37:35ってやってるんだけど
もしかしてレイによるポリゴン判定ってあまりやらない方がいいんですか?
0683デフォルトの名無しさん
2009/10/10(土) 12:51:202Dのシューティングで当たり判定がしばしば矩形になっているように、
当たり判定処理は描画してるポリゴンとは別に考えたほうが簡単になる。
3Dの場合ならいくつかの球体と考えればいいんじゃね?
0684デフォルトの名無しさん
2009/10/10(土) 13:27:32どうしてもポリゴン単位でないとゲーム性に問題が出るつーならそうするが
そうれないなら速度的な問題を考慮して単純な形状で判定するのが基本。
0685682
2009/10/10(土) 13:34:20しようとしたんでこうなったんですが・・・
やっぱり速度的にまずいんですねえ・・・
どーすっかなあ・・・
0686デフォルトの名無しさん
2009/10/10(土) 13:49:06ありがとうございます。
なんとか打開できました。
0687デフォルトの名無しさん
2009/10/10(土) 13:49:45ボールなら問題ねぇだろw
0688682
2009/10/10(土) 13:54:200689デフォルトの名無しさん
2009/10/10(土) 13:56:44ちゃんと確認はしてないけど、
if(temp.x * cross.x < 0.0f)return false;
if(temp.y * cross.y < 0.0f)return false;
if(temp.z * cross.z < 0.0f)return false;
これは内積にしないと駄目じゃない?
例えば[+0.1,+1,0]と[-0.1,+1,0]のケースがはじかれる。
0690デフォルトの名無しさん
2009/10/10(土) 14:29:54二分法
移動量ぶんだけ進めて、めりこんでたら半分戻して、まだめりこんでたら半分戻して、
めりこまなくなったら半分進めて・・・
というのを、欲しい精度までやる
0691デフォルトの名無しさん
2009/10/10(土) 14:34:50マップの構造と用途によるなぁ
箱庭を主人公が歩く程度だったら地形判定用簡易ポリゴンを用意して
レイと簡易ポリゴンでいいと思うよ
箱庭で物理シミュとかやるんだったら球(や必要な形状)とポリゴンの判定とか必要じゃね?
これは大変だな
広いフィールドなら格子状の高さマップから平面の方程式だな
後はすべての地形を幾何学形状にして根性で当たり判定?
俺が知ってるのはこんなもんかなぁ・・・
0692デフォルトの名無しさん
2009/10/10(土) 16:21:50Zバッファを有効にした場合、手前にアルファ値0.0に近い値で描画しているものがあるとその奥に描画されても見えません。
無効にすると当然前後関係が無くなり描画順になってしまいます。
描画しているものは雲や煙、レーザーやその他エフェクトと数が多いです。
雲と煙に関しては白黒なので合成方法を変えてやれば何とかなりますが
様々な色が乗っているエフェクトはどうにも出来ませんでした。
描画方法が個々で違ったり数が多かったりしますが、何とかしてでもソートさせないと駄目なものなんですかね・・・。
0693デフォルトの名無しさん
2009/10/10(土) 16:48:49逆に半透明なオブジェクトを描画するときにZバッファを切ればいいんじゃね?
というか、いつも描画順でソートした状態で描画してるから、そんなことで悩んだことないな。
0694デフォルトの名無しさん
2009/10/10(土) 16:55:54ゲーム性やデータ構造とか欲しい精度とかにあわせて変更しつつ
さらにそのゲームにあわせた細かい調整が必須。
0695デフォルトの名無しさん
2009/10/10(土) 17:04:12>いつも描画順でソートした状態で描画してるから
平たく言うと何のソートもしてないってことか
0696デフォルトの名無しさん
2009/10/10(土) 17:04:59正しいかどうか知らんが
そういう抽象的なアドバイスって
何かの役に立つの?
0697デフォルトの名無しさん
2009/10/10(土) 17:06:52不完全なD3D11の技術デモで
俺SUGEEEE!!!してるぐらいだから無理じゃね?
0698デフォルトの名無しさん
2009/10/10(土) 17:24:05逆だ逆。Zバッファをろくにつかってない。
それで済ませてしまってる。
0699デフォルトの名無しさん
2009/10/10(土) 17:25:140700692
2009/10/10(土) 17:26:09やはりシンプルには出来ないようですね。
とりあえず描画順をソートする対象を減らすことから対応してみます。
0701デフォルトの名無しさん
2009/10/10(土) 17:32:43PSはそうやってました
0702デフォルトの名無しさん
2009/10/10(土) 18:36:080703デフォルトの名無しさん
2009/10/10(土) 19:44:25モノによるけどあんなのキャラ描画した上にかぶせるだけじゃね?
0704デフォルトの名無しさん
2009/10/11(日) 01:13:472D板ポリゴンを作成してテクスチャを一枚貼り付けることはできたのですが、
マルチテクスチャにしようとするとStage0だけ反映されてStage1以降が反映されません
・テクスチャはグローバル変数にLPDIRECT3DTEXTURE9を2つ作ってそこにファイルから読み込みました
・Stage設定とテクスチャのセットはポリゴンの頂点を決めた後に行っています
・ステージ0の設定は加算合成、色1テクスチャ、色2ディフューズ
・ステージ1の設定はα合成、色1テクスチャ、色2カレント にしてます
順序がおかしいのか、必要な手順が抜けてるのだと思いますが、分かる方お願いします
もしくは簡単なマルチテクスチャのサンプルコードあったら教えてください
0705デフォルトの名無しさん
2009/10/11(日) 01:22:31シェーダー使え。
というか、シェーダー使って例の本読みながらプログラム書いてたら、基本的な部分で迷うことはほとんど無くなったな。
0706デフォルトの名無しさん
2009/10/11(日) 01:36:44これだと文字が太すぎてデバッグ用途に不便なのでデスクトップの文字みたいな
細い文字を使用したいのですがどうすればいいのでしょうか
0707デフォルトの名無しさん
2009/10/11(日) 02:18:17例の本ってなんですか?
0708デフォルトの名無しさん
2009/10/11(日) 02:26:25お前馬鹿じゃねーの
例の本って言ったら例の本のことだろーが
0709デフォルトの名無しさん
2009/10/11(日) 02:33:56フォント変えればいいじゃないか
0710デフォルトの名無しさん
2009/10/11(日) 02:55:21出ると思った。
会社にあるから書籍名調べるのが面倒だったんだが。
これのことね。
http://www.amazon.co.jp/gp/product/toc/4797344962/ref=dp_toc?ie=UTF8&n=465392
この本があれば、あとはMSDNとSDKのサンプルでほとんど事足りるな。
0711704
2009/10/11(日) 05:13:29すいません、意味がよくわかりません
シェーダを使わないとマルチテクスチャは使えないんでしょうか?
2D板ポリゴン(三角形×2)の上に、2枚目のテクスチャを貼り付けたいだけなんですが
0712デフォルトの名無しさん
2009/10/11(日) 05:29:12今切れ氏の本
>>711
その方法もこの本に書いてある
あとシェーダで書けばテクスチャステージとかレンダーステートとか
そういう面倒な設定をしなくても、普通にテクスチャ2つサンプリングして
サンプリングした色を足すなり乗算するなり簡単に出来る
0713デフォルトの名無しさん
2009/10/11(日) 07:30:26言葉じゃなくて、その部分のコードを正確にそのまま書かないと
何が悪いか分からん。
固定機能でも8枚までテクスチャは貼れる。
0714デフォルトの名無しさん
2009/10/11(日) 10:32:06>>712が書いてるけどシェーダで組めるようになれば色々楽。
まぁそれまでが大変かもしれないけど、何れ覚えないといけないことなので早いに越したことはない。
0715デフォルトの名無しさん
2009/10/11(日) 11:33:55ソースも出さずに分かりませんは良くないと思うけど
あまりにかわいそうなので情報だけ
http://marupeke296.com/DXG_TextureStage.html
0716デフォルトの名無しさん
2009/10/11(日) 11:42:04固定機能パイプラインが無くなるからなぁ・・・。
Vista以降をターゲットでいいならDirectX11は古いビデオカードでも使えるしな。
0717デフォルトの名無しさん
2009/10/11(日) 12:16:28LPD3DXEFFECTをクラスに組み込んでオブジェクト数に応じた数をそろえるのって無駄だよな?
0718デフォルトの名無しさん
2009/10/11(日) 12:16:53無くなったら過去の大量のゲーム類が動かなくなるんだが、
無くなると言うソースはどこにあるんだ?
0719デフォルトの名無しさん
2009/10/11(日) 12:21:34いやとりあえず動くんじゃね?
だってあの機能ってエミュだろ?
0720デフォルトの名無しさん
2009/10/11(日) 12:21:53そう無駄。
COMは参照カウンタ付きなんだから
普通にそれぞれ参照を持たせるのが吉。
>>718
Win7でD9D9以前が動けばモーマンタイだろ。
実際どうだかは知らんが。
0721デフォルトの名無しさん
2009/10/11(日) 12:25:22実際、そういう環境の差異で動かなくなってしまう場合は多い
昔、Cドライブにデータを保存してたアプリなんてセキュリティが厳しくなったせいで
まったく動かなくなってしまったの多いしな
0722デフォルトの名無しさん
2009/10/11(日) 12:35:060723デフォルトの名無しさん
2009/10/11(日) 13:19:06>げふぉ3
これなんか差異がなかったっけ?
0724デフォルトの名無しさん
2009/10/11(日) 14:07:51DirectX10から固定機能パイプラインはないぞ。
単にWindowsVsitaやWindows7上でも
過去のDirectX自体は動くから過去のゲームはそのまま動く。
0725デフォルトの名無しさん
2009/10/11(日) 15:16:41それがオブジェクトの違う部分に貼ってあるとします
でシェーダーを実装して表示してみたら
なんでかテクスチャの位置が入れ替わっているのですが
これは何でなんでしょうか?
ただ単にSetTextureの部分がおかしいのでしょうか?
0726デフォルトの名無しさん
2009/10/11(日) 15:18:511枚貼って様子見て、ついで2枚目を貼るという普通の開発手順を踏んでるよな? な?
そしたらそんな疑問は出ないはずなんだが。
0727デフォルトの名無しさん
2009/10/11(日) 15:41:34でもトゥーンシェーダー組み込もうとしただけなのになんでこんな・・・
0728デフォルトの名無しさん
2009/10/11(日) 15:59:46おい……板ポリに対してトゥーンシェーダーかけるなんて……冗談だよな……?
冗談と言ってくれ……。
0729デフォルトの名無しさん
2009/10/11(日) 16:28:450730デフォルトの名無しさん
2009/10/11(日) 16:37:430731デフォルトの名無しさん
2009/10/11(日) 16:59:39どこにトゥーンシェーダー介する余地があるんだ。
0732デフォルトの名無しさん
2009/10/11(日) 17:00:04そのくらいつくってんだからわかるわw
車の形だよ
したらば上が青でタイヤが黒なのに逆になってんだよ
今調査中
0733デフォルトの名無しさん
2009/10/11(日) 17:07:13なにいってるの?
バンプなら板ポリでもお日様の位置で陰が微妙に変わるだろ?
変なこというな
0734デフォルトの名無しさん
2009/10/11(日) 17:28:49少しわからないことがあるので相談お願いします。
現在グラフィックカードHD4850の512MBをしています。
OSが、VISTAの64BITなのですが、ダイレクトXを導入することにより
グラフィック(ベンチマーク)は向上するのでしょうか?
0735デフォルトの名無しさん
2009/10/11(日) 17:30:190736デフォルトの名無しさん
2009/10/11(日) 17:33:500737デフォルトの名無しさん
2009/10/11(日) 17:46:44ただの板ポリにバンプマップするのかよw
0738デフォルトの名無しさん
2009/10/11(日) 18:25:00例え板ポリといえど、法線や深度など
必要な情報がそろっていれば、十分意味はある。
単にそれらを頂点で持つか、テクスチャとして持つかの
違いでしかない。
アンタの考え方は一昔前のもの。
0739デフォルトの名無しさん
2009/10/11(日) 18:43:48デザイナの勝手だろ
奴等がそう作ればそう表示されるようになってるだけだ
ていうかちょっと使い方に驚くけど結構板ポリバンプ使うぞ奴等
0740デフォルトの名無しさん
2009/10/11(日) 18:59:440741デフォルトの名無しさん
2009/10/11(日) 19:13:42それもデザイナの勝手
0742デフォルトの名無しさん
2009/10/11(日) 19:17:380743デフォルトの名無しさん
2009/10/11(日) 19:20:54>>711と>>725を同一人物なの?
おれは違うと思ったんだけど
0744デフォルトの名無しさん
2009/10/11(日) 19:22:43車のオブジェクトって言ってるし
0745デフォルトの名無しさん
2009/10/11(日) 19:24:20馬鹿は頭に血が上ってるから自分と違う意見は全部同一人物なのさ
0746デフォルトの名無しさん
2009/10/11(日) 20:54:55float4 VertexShader(float4 f4Position : POSITION) : POSITION
{
return mul( f4Position, matWVP );//3D変換
}
float4 PixelShader() : COLOR
{
return float4(1,1,0,1); //黄色単色
}
technique tecMinimum
{
pass P0
{
VertexShader = compile vs_2_0 VertexShader();
PixelShader = compile ps_2_0 PixelShader();
}
}
っていうシェーダーなんですがD3DXCreateEffectFromFileによる読み込みの
段階で弾かれるんです、どこを直すべきなのかご教授願えませんか?
0747デフォルトの名無しさん
2009/10/11(日) 20:56:300748デフォルトの名無しさん
2009/10/11(日) 20:58:54if( FAILED( D3DXCreateEffectFromFile(pDevice, _T("aaa.fx"), NULL, NULL,
0, NULL, &g_pEffect, NULL)))
{
MessageBox( NULL, "シェーダーファイル読み込み失敗", "", MB_OK);
return E_FAIL;
}
とやってみるとダイアログが出るので読み込んでいないとしか・・・
こういうのってなにか足りないと読み込まないもんなんじゃないんですか?
0749デフォルトの名無しさん
2009/10/11(日) 20:59:060750デフォルトの名無しさん
2009/10/11(日) 21:06:44printfか何かで出力されてるはず
0751デフォルトの名無しさん
2009/10/11(日) 21:11:360752デフォルトの名無しさん
2009/10/11(日) 21:11:50HRESUT型でわざわざ返してくれるんだから。
0753デフォルトの名無しさん
2009/10/11(日) 21:13:47とりあえず、関数名のPixelShader、VertexShaderは
予約語とかぶるから、別な名前にしたら?
つーかD3DXCreateEffectFromFileの最後の引数をNULLにすんな。
0754デフォルトの名無しさん
2009/10/11(日) 21:14:01D3DXCreateEffectFromFileの戻り値を調べるとか
シェーダー内でコンパイルエラーが出てるなら
怪しいところ
いったん全部コメントアウトしてどこで死んでるのか絞り込むとか
特別な知識がなくてもそれくらはできそうなものだけど
0755デフォルトの名無しさん
2009/10/11(日) 21:20:320756デフォルトの名無しさん
2009/10/11(日) 21:21:320757デフォルトの名無しさん
2009/10/11(日) 21:23:55それだ!
VS PSにしたら動きました
馬鹿正直に英語にするんじゃなかった・・・
0758デフォルトの名無しさん
2009/10/11(日) 21:24:39Name: E_FAIL
Description: An undetermined error occurred
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4005 (16389)
だそうだ
0759デフォルトの名無しさん
2009/10/11(日) 21:27:470760デフォルトの名無しさん
2009/10/11(日) 21:31:340761デフォルトの名無しさん
2009/10/11(日) 21:33:280762デフォルトの名無しさん
2009/10/11(日) 21:33:49HRESULT hr = D3DXCreateEffectFromFile(d3ddevice, filename, NULL, NULL, 0, NULL, &effect, &compilation_errors);
if(compilation_errors)
{
MessageBoxA(NULL, static_cast<char*>(compilation_errors->GetBufferPointer()), "", MB_OK);
compilation_errors->Release();
}
?
0763デフォルトの名無しさん
2009/10/11(日) 21:35:230764デフォルトの名無しさん
2009/10/11(日) 21:39:14自分のアプリと関係する全部のライブラリをDLL版のランタイムを使うように直すしかないものでしょうか?
0765デフォルトの名無しさん
2009/10/13(火) 15:29:34VSのディレクトリ参照でDirectXのディレクトリ参照を最優先にした段階で全体をビルドしてる?
DirectInput関係だったかでPlatformSDK側と干渉することがあるよ。
0766デフォルトの名無しさん
2009/10/14(水) 22:01:52IMEを使いたくてこのサンプルを弄ってるのですが、
以下のようにソースを改変しました
http://www1.axfc.net/uploader/Sc/so/45629.zip
(変更したソース、実行ファイルが入ってます)
大まかにはF8キーが押されたときに
一旦終了処理を行い、再度スクリーンモードの全画面、窓を切り替えて
立ち上げなおすという処理を加えました。
これが問題なく動作する環境もあるのですが、
一部でフルスクリーンのとき限定でIMEに全角文字を打ち込むと??と表示されてしまいます
終了の処理等に問題あったらアドバイスいただければと思います。
0767デフォルトの名無しさん
2009/10/14(水) 22:38:400768デフォルトの名無しさん
2009/10/14(水) 22:45:28最初にフルスクリーンで起動すると、問題なく日本語全角入力することができます。
ウィンドウモードで起動し、フルスクリーンに切り替えた場合、
フルスクリーンで起動し、再度フルスクリーンで再起動させた場合
に入力がおかしくなってしまいます。
Comic Sansのフォントはサンプルがそれを使ってたのでそのまま使っていますが
全角で入力した部分だけゴシックっぽい文字で表示されるようです。
またMS ゴシックなどに明示的に変えても症状はかわりませんでした。
0769デフォルトの名無しさん
2009/10/14(水) 23:35:000770766
2009/10/15(木) 02:07:32ソースを見てもらうのと分りやすいのですが、
WinMainの中でDXUTを使ってる部分を終了させ、再度DXUTを初期化して立ち上げ直すという処理を行っていて
この立ち上げ直した際に、フルスクリーン限定でIMEに全角文字が入力できないという症状です。
0771デフォルトの名無しさん
2009/10/15(木) 10:20:22大量のポリゴン出すとDXUTのUI系テクスチャがバグる事があるんですが、同じ人いますか?
0772デフォルトの名無しさん
2009/10/15(木) 10:31:06本当にテクスチャがバグっているのか、
Zバッファやステンシルバッファが汚染されて正しくかけないのか、
あるいはそれ以外の原因なのかによって話が変わってくるな。
0773デフォルトの名無しさん
2009/10/15(木) 11:28:46う〜む・・確かに試した時にGOMプレイヤーだか何か起動していた気がするし
その関係かも知れません。
もう再現できないので分からない・・。
ご助言ありがとうございます。
0774デフォルトの名無しさん
2009/10/16(金) 10:15:480775デフォルトの名無しさん
2009/10/16(金) 10:19:450776デフォルトの名無しさん
2009/10/16(金) 10:27:070777デフォルトの名無しさん
2009/10/16(金) 20:29:260778デフォルトの名無しさん
2009/10/17(土) 02:58:57背景の色ってどこでかえんの?
青一色なんだけど・・・
0779デフォルトの名無しさん
2009/10/17(土) 04:12:070780デフォルトの名無しさん
2009/10/17(土) 16:55:03XInputだと別々の値としてあるんですが、現状DirectInputだと一軸の+-としてしか取れなくて、
左右トリガーを同時に使うと相殺して0とかの値になってしまいます。
0781デフォルトの名無しさん
2009/10/17(土) 17:00:07それはMSの嫌がらせ的仕様。
XBoxコントローラーのドライバをサードパーティー製に入れ替えれば取れないことも無い。
0782デフォルトの名無しさん
2009/10/17(土) 17:05:070783781
2009/10/17(土) 17:14:45XBoxコントローラを検出したら、XInput使えってことになるんですかね。
0784780
2009/10/17(土) 17:15:420785デフォルトの名無しさん
2009/10/17(土) 17:24:29いろいろXBox360型のコントローラー以外認めないですよ仕様があって鬱陶しいな。
0786デフォルトの名無しさん
2009/10/17(土) 18:49:23インデックスバッファをD3DPOOL_MANAGED
あるいはその逆とか
複数ストリームに頂点バッファをモデルとインスタンスとに分けて
描画したりする時もモデルだけMANNGEDでインスタンスを
D3DUSAGE_DYNAMIC | D3DUSAGE_WRI-TEONLYのD3DPOOL_DEFAULT
にするのはありですか?
0787デフォルトの名無しさん
2009/10/17(土) 18:50:44//ソース1
if (FAILED(D3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
D3DCREATE_MIXED_VERTEXPROCESSING,
&d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &Device))
) return false;
//ソース2
if (FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
){
return false;
}
0788デフォルトの名無しさん
2009/10/17(土) 18:55:370789デフォルトの名無しさん
2009/10/17(土) 18:59:21少なくとも後者はどのモードで起動しているのか分からない。
デバッグを容易にするためにも前者のほうがいい。
ただ、前者もここまで行数が増えるならカッコでくくらないと視認性に欠ける。
0790デフォルトの名無しさん
2009/10/17(土) 19:00:084時間前からDirectXの勉強始めた人間なんでテキトー発言だけど。
0791デフォルトの名無しさん
2009/10/17(土) 19:01:27別にC言語としちゃあ間違ってないが、オレならそもそもそういったダダ書きは嫌だな。
引数を変えたい部分だけを残して残りを固定化したラッパー関数をまず用意する。
で、順にチェックしていって失敗したらエラー処理してreturnするように書く。
void InitD3dDevice() {
if(MyD3DCreate(D3D, ...))
return true;
if(MyD3DCreate(D3D, ...))
return true;
if(MyD3DCreate(D3D, ...))
return true;
if(MyD3DCreate(D3D, ...))
return true;
//全部失敗したのでエラー終了
}
0792デフォルトの名無しさん
2009/10/17(土) 19:30:490793デフォルトの名無しさん
2009/10/17(土) 19:34:45enum D3DDeviceConfig {
D3DDEVCNF_HAL_MIXED = 0,
D3DDEVCNF_HAL_HARDWARE,
D3DDEVCNF_HAL_SOFTWARE,
D3DDEVCNF_REF,
D3DDEVCNF_MAX, // ループカウント
};
0794786
2009/10/17(土) 19:41:120795デフォルトの名無しさん
2009/10/17(土) 20:39:090796デフォルトの名無しさん
2009/10/17(土) 20:48:31もうとっくにDirectX SDKに入ってるよ。
ただベータ版と違って正式版はどうもVistaでは動かない模様。
ちゃんと確認はしてないけど。
少なくともSlimDX経由では動かなかった。
0797デフォルトの名無しさん
2009/10/17(土) 21:37:45>>790
>>791
参考になります。
こういった記述の多い条件分岐だと、書く人によって結構変わるんですね。
ひとつわからないことがあるのですが、>>789のモードとはなんでしょうか?
視認性の事ばかり考えていて、デバッグに関しては考えていなかったのですが
「モード」というものがわかると前者の方がデバッグしやすくなるんですか?
0798デフォルトの名無しさん
2009/10/17(土) 22:06:33失敗したときに何故失敗したのか分からないと
困ると思うんだけど
0799デフォルトの名無しさん
2009/10/17(土) 22:54:570800デフォルトの名無しさん
2009/10/18(日) 01:11:28さぁ早くDirectX11の解説サイトを開くんだ。
0801デフォルトの名無しさん
2009/10/18(日) 01:13:46おめーら使ってる?
0802デフォルトの名無しさん
2009/10/18(日) 01:25:08DirectX11で9以降に対応しているハードは動く。
0803デフォルトの名無しさん
2009/10/18(日) 02:16:45つーかこのまま永遠にD3D9でいーよもう。
んで、ららびーが出たら完全ソフトレンダ化でD3D廃棄、
3D初心者総挫折っと。
0804デフォルトの名無しさん
2009/10/18(日) 02:31:18今のDirectXの方が初心者総挫折だと思うけどな。
ソフトレンダ化でD3D廃棄なら、当然MSが代替SDKを出すだろうし。
0805デフォルトの名無しさん
2009/10/18(日) 02:51:230806デフォルトの名無しさん
2009/10/18(日) 03:12:17ソフトウェア3Dレンダー作ってた奴って世界で一人くらい生き残ってないの
0807デフォルトの名無しさん
2009/10/18(日) 10:11:51パイプラインは複雑化したけど、頂点シェーダーとピクセルシェーダーだけで描画は出来るから
別にアレもこれもやろうとしなければAPI自体はいたってシンプルになってるとおもうぞ。
>>805
August2009にグラフィックだけに特化したchm入ってたぜ。
>>806
ある程度の年代以上ならいくらでもいるだろうけど、今はみんなD3Dでシェーダー書いてるんじゃないかね。
若い奴らの方がそういうのまったく出来ないんじゃね。
0808デフォルトの名無しさん
2009/10/18(日) 10:47:44GPUの仮想化が出来てるなら、
今までみたいに、何でもかんでもDX通さなきゃ駄目って
訳じゃなくなったんだろ。
0809デフォルトの名無しさん
2009/10/18(日) 10:50:19今となっては竹槍でB29と戦うようなものだからな。
0810デフォルトの名無しさん
2009/10/18(日) 11:56:54Win32APIにインターフェイスを用意したらDirectXとのデータの遣り取りが冗長になる。
GPGPUはCUDAやらBrookやら各社俺が俺が状態で一向に纏まらないし、
おかげでGPU物理演算が普及しないし。
Compute Shaderがあれば、BulletのGPUメーカーに依存しないGPUアクセラレーションの可能性が見えてくる。
0811デフォルトの名無しさん
2009/10/18(日) 12:31:10それまではCUDAとCompute ShaderとOpenCLを平行してやるしかないだろ。
まぁBrook+は要らんとしても。
0812デフォルトの名無しさん
2009/10/18(日) 17:25:52既に読み込んであるアニメーションデータをバイナリデータでテキストに
吐き出しておいて、実行時に読み出そうと思ってるのですが、そういうのって
可能でしょうか?
割りとこういう質問すると「独自形式やれよカス」とレスがつけられるんですが
俺の力じゃ無理だ。
0813デフォルトの名無しさん
2009/10/18(日) 17:37:46モーションが一種類で同じ動きをするオブジェクトが複数あるって事?
0814デフォルトの名無しさん
2009/10/18(日) 17:44:580815812
2009/10/18(日) 18:05:13ああ、そっかXFILEってバイナリデータ書き出しがサポートされてましたね。
訳の分からない質問してごめんなさい。
XFILEのテキストモードでの書き出し見る限り階層構造とかロード時に内部で
動的にくみ上げてるものだと思いましたが、バイナリモードのXFILEでやりとりすれば
自分が質問したことは普通にやってくれちゃってるのかも。
(つまりDirectXで扱いやすいように展開された状態でバイナリデータ書き出しされていると)
という事はXFILEの書き出しや読み込み時にバイナリさえ指定してしまえばこれ以上早くアニメーションをロードするのは難しいって事ですかね。
うーん。
0816デフォルトの名無しさん
2009/10/18(日) 18:24:55補間される事、表示同期のコマ数と同じか?
最適化される部分が色々あると思う。
0817デフォルトの名無しさん
2009/10/18(日) 18:29:170818デフォルトの名無しさん
2009/10/18(日) 20:05:02モーションブレンドが阻害される上に、無駄にでかくなるだけだから。
0819デフォルトの名無しさん
2009/10/18(日) 20:42:50>モーションブレンドが阻害される上に、無駄にでかくなるだけだから。
これってどういうこと?
大抵LightWaveから書き出してるけど、その際はファイルサイズを抑えるために行列(Matrix)で書き出してる。
行列データだから拡大や移動なんかの普段使われないデータも入ってるから
無駄って事でFAなんだろうか?
0820デフォルトの名無しさん
2009/10/18(日) 21:07:390821デフォルトの名無しさん
2009/10/18(日) 21:44:12光源からオブジェクトを貫通した光が次に命中する部分を
黒くするようにすれば良いんだろうけど
どうすればいいんだろ?
0822デフォルトの名無しさん
2009/10/18(日) 22:05:00|DirectX 影 | |検索|
└―――――――――┘ └――┘
0823デフォルトの名無しさん
2009/10/18(日) 22:05:12教えてやってもいい
0824デフォルトの名無しさん
2009/10/18(日) 22:06:48影が必要なオブジェクトをライトの方向に拡大してステンシルバッファにみに書き込み、
交差した位置のバッファを対象に、その位置を暗く塗りつぶす。
0825デフォルトの名無しさん
2009/10/18(日) 22:08:210826デフォルトの名無しさん
2009/10/18(日) 22:12:380827デフォルトの名無しさん
2009/10/18(日) 22:13:34半端な説明なら無い方がいいです
0828デフォルトの名無しさん
2009/10/18(日) 22:14:170829デフォルトの名無しさん
2009/10/18(日) 22:16:25だれだよ
スプライト厨だろおめー
0830デフォルトの名無しさん
2009/10/18(日) 22:16:45http://pc11.2ch.net/test/read.cgi/blog/1252976332/1-100
0831デフォルトの名無しさん
2009/10/18(日) 22:19:52Teapotのサイト見ればいい
0832デフォルトの名無しさん
2009/10/18(日) 22:27:090833デフォルトの名無しさん
2009/10/18(日) 22:31:04「分からないなら書き込まないでください」
とかいって情報を引き出そうとする下等テックニック
ぐぐれカスと答えればおk
0834デフォルトの名無しさん
2009/10/18(日) 22:35:060835デフォルトの名無しさん
2009/10/18(日) 22:42:23こういうアプローチで試して見ましたがうまくいきませんでした、なぜですか?
という質問ならいつでも歓迎
0836デフォルトの名無しさん
2009/10/18(日) 22:46:52DrawIndexedPrimitiveというのは普通だと思うのですが
その際、任意の板ポリを描画しないだとかのオンオフはどのようにしていますか?
私は動的なバッファの場合、ポジションを画面外にするか0にするかとかしか思いつかんです。
静的なバッファならどうにもならないような・・・。
0837デフォルトの名無しさん
2009/10/18(日) 22:54:07その方向にぶっつぶして黒くすることでやってたわ
ただ角度のある物体には出来なくて悩んだなあ
ところで二つのオブジェクトが近いとポリゴンが縞々に
なるって見えるんだがこれはなにが原因なの?
一応配置を何とかしてるけど出来るなら解決したい
どうすべきか?
0838デフォルトの名無しさん
2009/10/18(日) 22:58:49誤差範囲内に入っているとしかたない。近くないようにデータを工夫する
0839デフォルトの名無しさん
2009/10/18(日) 23:00:09物を教えるのは不可能と偉そうに言う前に
>>824に突っ込んでやれよ
Z位置をステンシルに書き込むって
シャドウマップとステンシルシャドウをごっちゃにしてるんですか?ってよ
お前ら本当につかえないカスだな
0840デフォルトの名無しさん
2009/10/18(日) 23:10:030842デフォルトの名無しさん
2009/10/18(日) 23:17:40Zファイティング (Z-fighting) という現象
Zバッファの精度不足でZ値が丸められてしまい、
場所によって実際より手前になったり (Z値が切捨てられたり) 奥になったり (Z値が切上げられたり) して縞々になる
なるべく近クリップ面を遠くにして遠クリップ面を近くにすると、1個のZ値が担当する範囲が狭くなって精度が上がるので、
少しマシになるかもしれない (ならないかもしれない)
0843デフォルトの名無しさん
2009/10/18(日) 23:39:150844デフォルトの名無しさん
2009/10/18(日) 23:46:56null
0845デフォルトの名無しさん
2009/10/18(日) 23:49:120846デフォルトの名無しさん
2009/10/18(日) 23:57:290847デフォルトの名無しさん
2009/10/19(月) 00:05:51基本的に、ON/OFFは毎フレームIndexBufferを書き直すことで表現する。
そのためのIndexBufferだ。
また、描画順を入れ替えても問題ない場合なら、切り替えたいメッシュを前側なり後ろ側なり集めて
DrawIndexedPrimitiveの描画Primitive数を変更するという方法でもいい。
0848デフォルトの名無しさん
2009/10/19(月) 00:09:43シャドウマップかシャドウボリュームでぐぐって
自分で使いやすいほうを使えばいいと思うよ
どっちも一長一短だからどっちが良いとはいえないし
0849デフォルトの名無しさん
2009/10/19(月) 03:13:54ありがとうございます。良く分かりました。
0850デフォルトの名無しさん
2009/10/19(月) 09:25:18他の方法はソフトシャドウが出来なかったりしてだめすぎる
シャドウマップなら指数シャドウマップとかバリアンスシャドウマップとか
あとPCFもあるし
ていうか最近のゲームでシャドウマップ以外はほとんど使われてないだろ
0851デフォルトの名無しさん
2009/10/20(火) 01:36:26DirectX11が主流になればシャドウボリュームが盛り変えすかも知れない
テッセレータとジオメトリシェーダで影の負荷を大分減らせそうな気がしてるんだが
0852デフォルトの名無しさん
2009/10/20(火) 02:38:490853デフォルトの名無しさん
2009/10/20(火) 03:03:07頂点の生成をジオメトリシェーダで動的にやるって話じゃ?
DX10が流行らなかったからあまり認知されてないみたいだけど
0854デフォルトの名無しさん
2009/10/20(火) 03:04:500855デフォルトの名無しさん
2009/10/20(火) 06:59:05影の生成以前に角度によってあり得ない穴が開いているように見えるだろ。
0856デフォルトの名無しさん
2009/10/20(火) 08:51:02どれだけGPUにやらせることが出来るのかな?
�@境界エッジの抽出
�Aシャドウボリュームの作成
�Bシャドウボリューム描画x2
�@〜�BまでCPUの介入無しに行えたら、結構いいかも
0857デフォルトの名無しさん
2009/10/20(火) 09:57:480858デフォルトの名無しさん
2009/10/20(火) 10:31:09フルスクリーンモード(Windowed=FALSE)のときに、モーダルダイアログを表示したいと思っている。
そのまま表示させるとフレームが塗りつぶされちゃってダイアログが見えなくなるんだが、
(マウスの反応そのものはしているようだ)
フレーム描画をやめるだけで普通に表示できるようになるんだろうか?
0859デフォルトの名無しさん
2009/10/20(火) 11:36:54カーマックが考案した方法なら、カメラがシャドウボリュームの中に入っても平気だよ。
逆にファークリップでシャドウボリュームが切られるとおかしくなるが。
0860デフォルトの名無しさん
2009/10/20(火) 11:49:50GDI surfaceとFlipの問題があるので、たんに描画をやめるだけでは駄目。
IDirect3DDevice9::SetDialogBoxModeを使えばいい。
0861デフォルトの名無しさん
2009/10/20(火) 12:21:53オブジェクトがあるじゃないですか
あれの実装って手足のメッシュコンテナのOBBを作って
メッシュの動きにあわせてOBBを回せばいいんでしょうか?
それとも他の方法があるんでしょうか?
0862デフォルトの名無しさん
2009/10/20(火) 12:29:31ただ、確かセガだかが特許とってるはずだから商用利用の場合は注意
0863デフォルトの名無しさん
2009/10/20(火) 12:35:13それでもいいとおもうが
細かい動きをするメッシュだと全部に作られちゃうから
そこんとこ考慮した方が良いと思う
前にロボの指にまで作っちゃったことあったからな・・・
0864デフォルトの名無しさん
2009/10/20(火) 14:02:39思考実験すると、ファー以外にもビューボリューム全面でクリップが必要な気がするが
そのカーマックの方法ってどういうの?
>>862
多関節なら、球を使っても回転を考えなきゃならん気がするが。
つーか、そんなしょうもないもんで特許なんて取ってるの?
(VRシステムとかで取れるぐらいだから普通にありそう)
ちょっとセガが嫌いになった。
0865デフォルトの名無しさん
2009/10/20(火) 14:06:41てか今更ステンシルシャドウか
0866デフォルトの名無しさん
2009/10/20(火) 14:11:00スキンメッシュを行ってる以上すでに
各ボーンのワールド行列は全て計算済みのはず
あとはこの位置に球があると仮定して当たり判定を行うだけ
この程度の特許まだましな方
セガは調べるともっとどうでもいいことに特許はいっぱいとってる
あと、これは別にセガに限った話ではないので
特定社を中傷する意味で書いたわけでないのであしからず
0867デフォルトの名無しさん
2009/10/20(火) 14:19:09カーマックの方法は、Z failでステンシルを更新する方法。
更新の仕方も逆で、シャドウボリュームの裏面でインクリメント、表面でデクリメント。
普通の方法では、シャドウボリュームの手前側の面がステンシルを更新した部分に
影ができるが、カーマックの方法は手前の面が更新しなかった部分に影ができる。
だから、ボリュームの中に視点が入っても大丈夫。
詳しくは「カーマック シャドウボリューム」「カーマックリバース」あたりでググるか、
DOOM3の技術解説でも読んで。
0868デフォルトの名無しさん
2009/10/20(火) 14:24:54>>867
どちらもよくわかりました。ありがとう。
0869デフォルトの名無しさん
2009/10/20(火) 17:38:32ありがとう。そのメソッドを呼んでみたけど、それ自体でInvalidCallが帰ってきちゃうなぁ。
デバイスの初期化周りを再検討中……。
0870デフォルトの名無しさん
2009/10/21(水) 01:17:000871デフォルトの名無しさん
2009/10/21(水) 15:40:582Dの、例えばオセロの盤面のような画面を作る場合、
マスごとにポリゴンを作るのと、一枚の大きなポリゴンにするのと、どちらがいいのでしょうか
0872デフォルトの名無しさん
2009/10/21(水) 15:43:030873デフォルトの名無しさん
2009/10/21(水) 16:20:340874デフォルトの名無しさん
2009/10/21(水) 16:35:58ビルドはできるのですが、実行時エラーが出て動作しません。
サンプルは以下の部分でエラーでとまります。原因は何が考えられるでしょうか?
0875デフォルトの名無しさん
2009/10/21(水) 16:36:580876874
2009/10/21(水) 16:36:59D3DXMatrixIdentity(&m_view);
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( 0.0f, 0.0f, -6.0f),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));
// シェーダプログラムの読み込みとコンパイル
LPD3DXBUFFER errors = 0;
D3DXCreateEffectFromFile(pD3DDevice, TEXT("basic.fx"), 0, 0, D3DXSHADER_DEBUG, 0, &m_pFX, &errors);
if( errors){
return E_FAIL;
}
// シェーダプログラムへテクニックへのハンドルの取得
m_hTech = m_pFX->GetTechniqueByName("BasicTech"); ここで止まる!
// シェーダープログラムのグローバル変数のハンドルの取得
m_hWvp = m_pFX->GetParameterByName(0, "g_wvp");
m_hColor = m_pFX->GetParameterByName(0, "g_color");
return S_OK;
-------------------------------------------------------------------
デバッガ出力
D3DFWSample.exe の 0x00a02311 で初回の例外が発生しました: 0xC0000005:
場所 0x00000000 を読み込み中にアクセス違反が発生しました。
D3DFWSample.exe の 0x00a02311 でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
0877デフォルトの名無しさん
2009/10/21(水) 16:40:29fxc.exeで試してみろ
0878874
2009/10/21(水) 16:59:15それらしきファイルとして、下記コードでbasic.fxというファイルがあるのですが、
これでしょうか?
0879デフォルトの名無しさん
2009/10/21(水) 17:05:06「0x00000000 を読み込み中」ってことはm_pFXがNULLになってるっぽいね。
D3DXCreateEffectFromFileは本当に成功してるのか?
errorsじゃなくて戻り値のHRESULTも見たほうがいいと思うよ。
0880デフォルトの名無しさん
2009/10/21(水) 17:07:32float4x4 g_wvp;
float4 g_color;
// 頂点シェーダ
void BasicVS( float3 in_pos : POSITION,
out float4 out_pos : POSITION,
out float4 out_color :COLOR0)
{
// 座標変換
out_pos = mul(float4(in_pos, 1.0f), g_wvp);
// 頂点の色の決定
out_color = g_color;
}
// ピクセルシェーダ
void BasicPS(float4 in_color : COLOR0,
out float4 out_color : COLOR0)
{
// 入力された色情報をそのまま設定
out_color = in_color;
}
// テクニック宣言
technique BasicTech
{
pass P0
{
vertexShader = compile vs_3_0 BasicVS();
pixelShader = compile ps_3_0 BasicPS();
}
}
0881デフォルトの名無しさん
2009/10/21(水) 17:08:100882874
2009/10/21(水) 17:20:22サンプルプログラムを入力して、ビルド、実行させているだけで、
中身はあまりよくわからないです。
具体的に原因を指摘をお願いします。
0883デフォルトの名無しさん
2009/10/21(水) 17:35:340884デフォルトの名無しさん
2009/10/21(水) 17:37:36どれを聞いてるのかな。
>>880はHLSLだよ。
basic.fxは実行時どこに置いてる?
0885デフォルトの名無しさん
2009/10/21(水) 17:39:08その動かないサンプルコードとやらをこの場ではお前しか持ってないのに
その挙動を人に尋ねるというのか?
そんなコンセンサスが得たいなら聖書でも読んでろ。
助言を得たいなら助言が得られるだけの詳しい情報を書け。
0886デフォルトの名無しさん
2009/10/21(水) 18:53:410887デフォルトの名無しさん
2009/10/21(水) 19:06:350888874
2009/10/21(水) 20:19:19>>886
助言ありがとうございます。
fxファイルの置き場も、参考書のとおりにやっています。
Visual Studio 2008を使ってますので、その画面で説明します。
「ソリューションエクスプローラ」のプロジェクト名の直下にファイルを
置いています。
サンプルプログラムのcppファイルは「ソースファイルフォルダ」に
hファイルは「ヘッダファイル」に入れました。「リソースファイルフォルダ」
には何も入っていません。
0889デフォルトの名無しさん
2009/10/21(水) 20:22:310890デフォルトの名無しさん
2009/10/21(水) 21:16:180891デフォルトの名無しさん
2009/10/21(水) 21:28:09>中身はあまりよくわからないです。
>具体的に原因を指摘をお願いします。
何?その横柄な態度
自分で考えるつもりがないならさっさと止めろよ
0893デフォルトの名無しさん
2009/10/21(水) 21:34:49日本語でOK
0894デフォルトの名無しさん
2009/10/21(水) 21:36:54つか戻り値見れば、何が問題か特定できるだろ
0895デフォルトの名無しさん
2009/10/21(水) 21:38:150896デフォルトの名無しさん
2009/10/21(水) 21:38:530897デフォルトの名無しさん
2009/10/21(水) 22:05:01(ファイルパスに全角文字が含まれると問題あるけど)
0898874
2009/10/21(水) 22:35:08書籍名;DirectXシェーダプログラミング
仕組みからわかるゲームエフェクトテクニック
ページ:008から024まで
開発環境の準備とプロジェクトの作成
P18のサンプルプログラムの実行ができない。
よろしくお願いします。
0899デフォルトの名無しさん
2009/10/21(水) 22:43:20後、errorsはRelease()しないとリークすんぞ
0900874
2009/10/21(水) 22:44:42実行時エラーはなくなりました。
ただ、この関数でエラーが帰り、次の行でreturnされました。
該当のコードは>>876
使っている参考書は、VS2003,VS2005を前提に書かれていますが、
私はVS2008でサンプルプログラムの実行しています。
それが原因でエラーがでることはないでしょうか?
0901デフォルトの名無しさん
2009/10/21(水) 22:47:39errorsに、エラーの詳細が書いてあるよ。
0902デフォルトの名無しさん
2009/10/21(水) 22:48:08>戻り値
>
> 成功した場合は、D3D_OK を返す。
>
> 失敗した場合は、次のいずれかの値を返す。
> D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドの引数に無効な値が設定されている場合などである。
> D3DXERR_INVALIDDATA データが無効である。
> E_OUTOFMEMORY MicrosoftR Direct3DR が呼び出しを完了するための十分なメモリを割り当てることができなかった。
0903デフォルトの名無しさん
2009/10/21(水) 22:48:59「,」
_,._
( ゚Д゚) ガシャ
( つ O __
と_)_) (_()、o:。
゚*・:。
0904デフォルトの名無しさん
2009/10/21(水) 22:58:110905デフォルトの名無しさん
2009/10/21(水) 23:12:160907デフォルトの名無しさん
2009/10/21(水) 23:53:55>>874がみてる本と同じものを見てるので、fxファイルは>>880と同じものです。
引数名の頭を大文字にしたり、ピクセルシェーダの出力型?をCOLOR0からCOLORにしたり、
いろいろやっているのですが、バーテックスシェーダで出力される色が画面にでてしまい、
ピクセルシェーダをとおってないような挙動をします。
D3DXCreateEffectFromFileは正常終了しており、errorも見ています。(.fxにわざと間違いを書くと、errorに情報が出力されるのも確認してます。)
私のグラフィックスボードが少し古く、ハードウェアでPSに対応しておらずVSにしか対応してないので、
D3DDEVTYPE_REFフラグで、以下のように初期化も行ってます。
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice )
何か教えてもらえると助かります。よろしくお願いいたします。
0908デフォルトの名無しさん
2009/10/22(木) 00:08:54>880のシェーダーって頂点の色そのまま出すだけのシェーダーに見えるけど
0909デフォルトの名無しさん
2009/10/22(木) 00:28:25説明不足でした。
実際には>>880から少し修正してます。以下に張り付けます。
VSの色出力にtexcoord情報をかけてますが、そのような色の三角形が画面に出力されてます。
PSを通ったら、白色の三角形が表示されるはずなのですが。
float4x4 g_wvp;
float4 g_color;
void BasicVS(float3 In_pos : POSITION, float2 In_tex : TEXCOORD0,
out float4 Out_pos : POSITION,
out float4 Out_color : COLOR0,
out float2 Out_tex : TEXCOORD0
)
{
Out_pos = mul(float4(In_pos, 1.f), g_wvp);
Out_color = g_color * In_tex.x;
Out_tex = In_tex;
}
float4 BasicPS(float4 In_color : COLOR0, float2 In_tex : TEXCOORD0) : COLOR
{
return float4(1.f, 1.f, 1.f, 1.f);
}
technique BasicTech
{
pass P0
{
VertexShader = compile vs_1_1 BasicVS();
PixelShader = compile ps_1_1 BasicPS();
}
}
0910デフォルトの名無しさん
2009/10/22(木) 00:34:38HLSL使うならピクセルシェーダーは2.0以上でコンパイルするべきじゃないの?
0911デフォルトの名無しさん
2009/10/22(木) 00:37:240912デフォルトの名無しさん
2009/10/22(木) 00:45:18一応、2.0や3.0も試してるのですが、さっぱりなんです。
VSからの色出力には、.fxファイルの変更に応じて反応があるのですが…。
SetRenderStateとかで何か重要なパラメータを設定してないのか?
とかもいろいろ考えてますが…なかなかそれらしいものが見つからずです。
0913871
2009/10/22(木) 00:52:12回答どうも
そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
シングルパスで描画できるんでしょうか?
それともやはりマルチパスでやった方が良いのでしょうか?
0914デフォルトの名無しさん
2009/10/22(木) 00:54:41REFモードのサンプルもねー状態でやってんの?
あったらまずそれを動かせよ
0915デフォルトの名無しさん
2009/10/22(木) 01:51:43> 2Dの、例えばオセロの盤面のような画面を作る場合、
オセロ盤はテクスチャ1枚、板ポリ1枚で済むでしょ?
>そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
どういうこと?
0916デフォルトの名無しさん
2009/10/22(木) 01:57:090917デフォルトの名無しさん
2009/10/22(木) 01:58:17アンチエイリアスがかかるのですが、露光表現等のピクセルシェーダの
エフェクトを使うために一度モデルをテクスチャに描画する必要がある場合に
これらの設定でのアンチエイリアスが無効になってます。
これって解決の方法があるんでしょうか?
できれば露光表現もアンチエイリアスも併用したいのですが。
分かりやすくいうと。
バックサーフェイスにモデルを描画するとアンチエイリアスがかかる。
テクスチャにモデルを描画するとアンチエイリアスがかからん。
0918デフォルトの名無しさん
2009/10/22(木) 02:06:28もしNVだったらバグでAAされない事がある。XPで発生する。
コピー先とコピー元のサイズを違うようにすれば何故か回避される。
同一サイズの場合なんらかの、インチキスケジューリングが発動する模様。
やってるとは思うがレンダ後の映像を得たいなら非マルチサンプリング化も忘れずに。
0919871
2009/10/22(木) 02:08:21オセロの盤面がマスごとに白丸や黒丸を置かれるように、
マスごとに状況に応じてテクスチャを貼り付けたいわけです
その場合の描画処理はどういう手順にするのが効率が良いのかを聞きたくて質問しました
わかりにくくてすいません
0920デフォルトの名無しさん
2009/10/22(木) 02:11:38自由に置けるしアニメーションもできる。
わざわざ一体化させる意味がわからん。
0921871
2009/10/22(木) 02:16:54わかりました
0922デフォルトの名無しさん
2009/10/22(木) 06:29:38○●□をマスごとおいたほうが描画処理軽いなたしかに
0923デフォルトの名無しさん
2009/10/22(木) 07:43:02ピクセルシェーダでアルファ値で条件分けして出力を変えればいいんでしょうか?
(テクスチャの透明でない部分はテクスチャの色をそのまま出力したい)
もっと簡単な方法はありますか
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
でやればできるのかと思ったら、テクスチャの透明でない部分がフェースカラーと混ざってしまうので
0924デフォルトの名無しさん
2009/10/22(木) 08:32:290925デフォルトの名無しさん
2009/10/22(木) 08:33:45テクスチャにMSAAの指定があるのはDirectX10からだぞ。
DirectX9でやりたいならMSAA指定のサーフェイスと深度バッファ作って
レンダリング後にStrechRectでテクスチャに転送ってやらないとダメだぞ。
デバイス生成時のMSAAの設定は「バックバッファサーフェイス」への設定でしかないぞ。
0927デフォルトの名無しさん
2009/10/22(木) 13:50:56r ┤ ト
|. \_/ \
| __( ̄ | 彡
| __)_ノノハ@ < >>ゲッツ!!!
ヽ___) ノ‘д‘.) / ̄\
. > ⌒ヽ | ├ r
/ へ/ \_/ .|
/ / |  ̄)__ | ))
レ ノ ヽ_(__ |
/ ミ (___/
/ /|
/ /(
( 、 \
| | 、 \ サッ !
| | \ \
. | / \ ⌒l
| | ) /
ノ )゛゛゛゛゛゛ し'゛゛゛゛゛゛゛゛゛゛゛゛゛゛゛
(_/
0928デフォルトの名無しさん
2009/10/22(木) 15:05:31D3DVECTOR2とすると定義されていない識別子と警告が出ます。
DirectX9でd3d9.hとd3dx9.hをインクルードしているのですが・・。
2D座標を1つの変数で受け取るにはどうすれば良いでしょうか?
0929デフォルトの名無しさん
2009/10/22(木) 15:15:140930デフォルトの名無しさん
2009/10/22(木) 15:24:24Xが抜けてたんですね・・ありがとうございました。
0931デフォルトの名無しさん
2009/10/22(木) 16:30:380932デフォルトの名無しさん
2009/10/22(木) 18:46:190933デフォルトの名無しさん
2009/10/22(木) 18:50:42MSDNライブラリ
0934デフォルトの名無しさん
2009/10/22(木) 23:12:05IDirectSound8 *g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
ってのと
LPDIRECTSOUND8 g_pDSound;
のどっちが正しいんですか?
なぜか下の方は
g_pDSound->SetCooperativeLevel(hWnd,DSSCL_NORMAL);
でエラーが出るんです
これはもしかして持ってる資料が古い・・・?
0935デフォルトの名無しさん
2009/10/22(木) 23:17:550936デフォルトの名無しさん
2009/10/22(木) 23:19:020937デフォルトの名無しさん
2009/10/22(木) 23:26:530938デフォルトの名無しさん
2009/10/22(木) 23:27:100x00416858 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
あとは・・・hWndに式を評価できないとでているんですが
妙だな他のは問題ないはずなんだが・・・
0939デフォルトの名無しさん
2009/10/22(木) 23:28:070940デフォルトの名無しさん
2009/10/22(木) 23:28:37LPDIRECTSOUND8 g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
が正しい
0941934
2009/10/22(木) 23:30:55ちょっと資料調べてみます
もしかするとかなりショボイミスをしてる気がしてきた
すいませんでした
0942デフォルトの名無しさん
2009/10/22(木) 23:40:09DirectSoundCreate8を呼ばないってことなのか
0943デフォルトの名無しさん
2009/10/22(木) 23:51:41普通の透視変換のやつじゃ駄目かな?
ライトに近いほど精度高くなるって意味なさそう。
みんなはどうしてる?
0944デフォルトの名無しさん
2009/10/22(木) 23:59:360945デフォルトの名無しさん
2009/10/23(金) 12:58:47バウンディングボックスからD3DXVec3Projectでメッシュに対応する2D座標を作っているのですが
バウンディングボックスのmin max値は正常に出力できていて
そこからカメラ横回転を4分割(90度毎)。 縦を水平以上か以下かで2分割の計8分割し
どの3D頂点が2D座標のどの最大/最小値になるかリストを作って計算しているのですが、
2Dのxの最大値と最小値が入れ替わっていたり
2Dのy座標が角度によって入れ替わったりとアベコベな状態になってしまいます。
2日程無理やり数値が合うようにならないかあれこれ試しているのですが上手く行きません;
バウンディングボックスから正しい2D座標を割り出す計算式は有ったら紹介して下さると助かります orz
もしかしてD3DXVec3Project使ってるのは自分くらいで他の方法で実現するのが定番だったりするのでしょうか;
0946デフォルトの名無しさん
2009/10/23(金) 13:22:29お前の頭の中ではそれで完結してるのかもしれんが
他人に理解してもらうにはもう少し努力が必要
0947デフォルトの名無しさん
2009/10/23(金) 13:52:54なんとか無理矢理補正する方法を見つけたので
ブラックボックスが出来たような嫌な気分ですが・・実装は出来ました。
失礼しましたー・・ orz
0948858
2009/10/23(金) 14:13:00なんとD3DDeviceの初期化時に画面モードをA8R8G8B8にしていたのが原因だった!
X8R8G8B8にしたら問題なし。
ただ描画を止めている間、再描画が行われないので他のウィンドウで隠れた部分がつぶれてしまうな。
WM_PAINTのハンドラを実装するのが面倒に感じたので、
いったんビットマップでゲーム画面のキャプチャを作成して
PixtureBoxに貼り付けて表示させることにした。
Win32APIで直接書いてるならここまでやらなくてもいいけど、
さしあたりこれでも速度上の問題はないのでよしとする。
0949デフォルトの名無しさん
2009/10/23(金) 15:43:12メッシュコンテナからバウンディングボックスを生成する関数は無いでしょうか?
D3DXFrameCalculateBoundingSphere()なら見つかるのですが・・。
0950デフォルトの名無しさん
2009/10/23(金) 16:21:420951デフォルトの名無しさん
2009/10/23(金) 16:53:32SetDialogBoxModeをTRUEにすると、Presentでダイアログが上書きされなくなるから
描画を止める必要はないよ。
0952デフォルトの名無しさん
2009/10/23(金) 17:22:39やっぱりメッシュコンテナから直接ボックスってのは無いんでしょうね。
ありがとうございました。
0953デフォルトの名無しさん
2009/10/23(金) 17:51:57良いみたいな事を書いてあったので疑問に思ったことを質問させてください。
D3DPOOL_MANAGEDを指定するとビデオ メモリーとシステム メモリーの両方にメモリが確保されるようですが
これを使うメリットってデバイスリセット時の自動復旧だけなんですか?
だとするとデバイス失効時の対処が苦にならない場合は静的なバッファであっても
D3DPOOL_DEFAULTで作成した方が速度の面でもメモリの面でも
有利という事ですか?
0954デフォルトの名無しさん
2009/10/23(金) 18:26:220955デフォルトの名無しさん
2009/10/23(金) 18:29:18色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
それが分かっているなら好きにすればいい。
プログラミングは自由なものなんだから。
0956デフォルトの名無しさん
2009/10/23(金) 20:27:410957デフォルトの名無しさん
2009/10/23(金) 20:50:31頑張って作っても複雑怪奇なシステムに仕上がるし、どうせ将来性がない。
D3d9前提ののシステムをVista以降に向けてリファクタリングする過程で9Exを通過し、
そこでMANAGED不要になっておくのが吉。
0958デフォルトの名無しさん
2009/10/23(金) 20:59:51>色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
確実に使い方が分かっていない。
出直してこい。
0959デフォルトの名無しさん
2009/10/23(金) 21:28:55>>954
今までビデオメモリが足りなくなるという状況は考えていませんでした・・・。
そういう場合、普通は確保時に失敗するんでしょうね。
仮にMANAGEDが自動で何とかするとしても描画毎にシステムメモリとビデオメモリを
往復しないといけないので毎回デバイスをリセットするのと同じように重くなる気はします。
>>955
MANAGEDには制限がありますが、DEFAULTはそれに比べフリーですよね。
>>956
まじっすか?レガシー気味?
>>957
将来性がないっていうのは、複雑奇怪なシステムを作った場合の話ですよね?
私はリソース管理をDXUTを通して行なう予定なので
リソース管理におけるMANAGEDとDEFAULTの複雑さは変わらないし
描画シーンの管理としては動的なバッファを多用するほうが楽な気がします。
0960953
2009/10/23(金) 22:15:46自問自答っぽいくなりますが、まとめてみます。
>静的なバッファであってもD3DPOOL_DEFAULTで作成した方が
>速度の面でもメモリの面でも有利か?
DEFAULTで作成したバッファはMANAGEDで作成したバッファより
速度重視の領域に置かれやすい。
逆に言えば動的なバッファ用にその領域を残しておくのが吉。
もしも動的なバッファを作らなければMANGEDがその領域を使うだろうし。
そしてMANAGEDが使うシステムメモリもRAMを奪うわけではないので
メモリの面でMANAGEDがネックになるとも思えない。
0961デフォルトの名無しさん
2009/10/23(金) 22:16:18それ用の管理機能が必要になるし、
その管理機能があればMANAGEDはいらないし。
多少凝ったことをすればDEFAULTは外せないし。
0962デフォルトの名無しさん
2009/10/23(金) 23:20:48トゥーン+映り込み(環境マッピング)+バンプの3つのエフェクトファイル(.fx)があってそれぞれ単体では正常に動くのですが、
同時に2つ以上を使いたい場合どうなるのかと思いまして。
0963デフォルトの名無しさん
2009/10/23(金) 23:32:31MSDN読め。
http://msdn.microsoft.com/ja-jp/library/bb172584%28VS.85%29.aspx
「D3DPOOL_DEFAULT プールに配置されたテクスチャーは、ダイナミック テクスチャーか、プライベートな FOURCC ドライバー フォーマットでない限り、ロックすることはできません。」
0964デフォルトの名無しさん
2009/10/23(金) 23:33:13VC++2008ExpressEditonを使ってDirect3Dを触っているのですが、
.ddsファイルを点灯表示するプログラムを作りました。
しかし、exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
exeに.ddsファイルを組み込む方法はないのでしょうか?
0965デフォルトの名無しさん
2009/10/23(金) 23:36:57普通にexeにリソースとして放り込んでおけばいいんじゃね?
D3DXでリソースを読み込むAPIだってあるんだし。
0966デフォルトの名無しさん
2009/10/23(金) 23:39:22>exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
意味が分からん
exeと同じフォルダにddsがないと落ちるって意味なのか?
0967デフォルトの名無しさん
2009/10/24(土) 00:01:59DirectX使う上で外部にあったらじゃまなファイルを
exe内に取り込むVC++的技があるんじゃないかな〜・・・と思いまして
0968デフォルトの名無しさん
2009/10/24(土) 00:08:06シェーダーをソースに書くってのは出来るけど・・・
0969デフォルトの名無しさん
2009/10/24(土) 00:19:580970デフォルトの名無しさん
2009/10/24(土) 00:34:13データが増えると数100MBとか数GBのexeが出来上がるけどいいの?
0971デフォルトの名無しさん
2009/10/24(土) 00:36:22作るほうはDirectX関係ないのでここじゃ説明しない
0972デフォルトの名無しさん
2009/10/24(土) 00:53:240973デフォルトの名無しさん
2009/10/24(土) 00:57:44お作法的には外だしが基本ということですかね。
0974デフォルトの名無しさん
2009/10/24(土) 02:12:472つのエフェクトファイルを同時に使うということ?
それは無いな。include使えばいい。
0975デフォルトの名無しさん
2009/10/24(土) 06:22:34あったら実装する方法を教えてください
0976デフォルトの名無しさん
2009/10/24(土) 07:43:58お前の目は節穴か
0977975
2009/10/24(土) 10:30:10ボタンを押さずリストボックスだけ利用する方法があるのでしょうか?
あるのなら実装方法を教えて欲しいのですが
DXUTguiとDXUTsettingsdlgにあるのだろうとは思いますが、
どこが使われているのか分かりません
0978デフォルトの名無しさん
2009/10/24(土) 10:32:530979デフォルトの名無しさん
2009/10/24(土) 10:57:48多分これですよね
詳しく見てみます
0980デフォルトの名無しさん
2009/10/24(土) 18:28:39LPDIRECTSOUNDBUFFERに音楽データーを書き込むわけですから
音一つにつきバッファは一つずつ用意した方が良いんでしょうか?
0981デフォルトの名無しさん
2009/10/24(土) 18:33:540982デフォルトの名無しさん
2009/10/24(土) 18:35:16オンメモリ再生したいのかストリーミング再生したいのかで話が変わってくるんじゃね?
ていうか今時ならXAudio2使ったらどうよ。
0983980
2009/10/24(土) 18:38:00じゃあそれです
Xaudio2か・・・健闘してみます
0984デフォルトの名無しさん
2009/10/24(土) 18:39:08http://msdn.microsoft.com/ja-jp/library/bb219704%28VS.85%29.aspx
0985デフォルトの名無しさん
2009/10/24(土) 23:55:09これはもしかして終了時に解放してない部分があるって事なんでしょうか?
0986デフォルトの名無しさん
2009/10/24(土) 23:59:28なんで質問する子は舌っ足らずなのばかりなのか……。
0987デフォルトの名無しさん
2009/10/25(日) 00:08:370988985
2009/10/25(日) 00:13:18>>986
はあ
プログラムのスタート時にXファイルを読み込んで
終了時にデータを破棄しているんですが
実行→終了を繰り返しているうちにオブジェクトのテクスチャが消え
真っ白になってしまうんです
やはり何か解放忘れがあるからこのような症状が出るんでしょうか?
0989デフォルトの名無しさん
2009/10/25(日) 00:15:05とりあえず、リソースの開放と取得のタイミングでログを書き出して眺めてみたら?
リソースリークはトレースして解析するのが基本。
0990デフォルトの名無しさん
2009/10/25(日) 00:16:06うぃ
なんとかやってみます
0991デフォルトの名無しさん
2009/10/25(日) 00:21:26この辺に関してVCが役立たずすぎる
リークにしてもせめて確保したソースの場所ぐらい
newやdelete、createやreleaseに仕組みを入れてもいんじゃねぇか?
デバッグバージョンぐらいにはよ
0992デフォルトの名無しさん
2009/10/25(日) 00:31:04見捨てられてるけど
0993デフォルトの名無しさん
2009/10/25(日) 00:38:44すでにそれがなにもんかすらわからねぇよw
0994デフォルトの名無しさん
2009/10/25(日) 00:41:090995デフォルトの名無しさん
2009/10/25(日) 00:43:40じゃあ、これからManaged DirectXって流行るの?
0996デフォルトの名無しさん
2009/10/25(日) 00:45:16Xファイルのテクスチャが複数あるのに1つしか解放していないとかよくあるミスはまさかね。
テクスチャを読み込んでいる部分がメモリ破壊されていて、偶然上手く動いているという面倒な原因もあるから注意ね。
まぁ、テクスチャやXファイルなんかは管理するクラスを作っておいて、
最悪実行終了時に全解放する関数を走らせるのが無難かな。
Xファイルだとそこらの解説サイト通りに組み込むと使用するテクスチャが同じなのに別々に読み込む無駄が出るし。
0997デフォルトの名無しさん
2009/10/25(日) 00:47:17そんな時代もありました。
0998デフォルトの名無しさん
2009/10/25(日) 01:34:410999デフォルトの名無しさん
2009/10/25(日) 01:51:13そういう機能ってVC6の頃からあるよ。
VCは悪くない。
1000デフォルトの名無しさん
2009/10/25(日) 02:07:18http://pc12.2ch.net/test/read.cgi/tech/1256403984/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。