【C++】 DirectX初心者質問スレ Part25 【C】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part24 【C】
http://pc12.2ch.net/test/read.cgi/tech/1245675989/
2デフォルトの名無しさん:2009/08/25(火) 22:51:49
前スレ終わりの方だったため質問が流されてしまったので
またお願いします。

SetRenderTarget()で2枚分のテクスチャにDrawSubset()で描画して
2枚のテクスチャをプログラマブルシェーダでミックスして表示させようとしたのですが
背景色が表示されるだけで肝心のDrawSubset()で描画したメッシュが表示されません。
どうすればいいんでしょうか?
3デフォルトの名無しさん:2009/08/25(火) 23:59:15
エスパーでもねぇのにそんな脳内説明だけでわかるわけないだろ・・・。
初心者スレつってもちゃんとした説明くらいしてくれねぇと困る。

というわけでPIXで何が書かれてないか確認しろ。
4デフォルトの名無しさん:2009/08/26(水) 00:02:00
前スレ>>996
Gamefest 2008で口頭のアナウンスがあっただけで正式発表はまだないぞ。
したがってDirectX 11がVistaで動作しうるかについては確度は高いが確定情報ではない。
5デフォルトの名無しさん:2009/08/26(水) 00:36:33
>>3
すいませんでした。

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();
6デフォルトの名無しさん:2009/08/26(水) 00:38:21
LPDIRECT3DSURFACE9 surface0;
EffectTexture[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 );
7デフォルトの名無しさん:2009/08/26(水) 00:39:58
>>5-6が関係ありそうなソースになります。
よろしくお願いします。
8デフォルトの名無しさん:2009/08/26(水) 01:30:42
省略したところでつまらない凡ミスしてて、それが原因だったらどうするの
9デフォルトの名無しさん:2009/08/26(水) 01:32:14
surface0->Release();
surface1->Release();
かなー。
10デフォルトの名無しさん:2009/08/26(水) 01:33:10
そもそも普通にDrawSubsetしてちゃんとモデルはバックバッファにかかれてんのか>
11デフォルトの名無しさん:2009/08/26(水) 02:47:49
>>8
すいません。

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;
12デフォルトの名無しさん:2009/08/26(水) 02:48:58
pVertex[0].fTU0 = pVertex[0].fTU1 = 0; pVertex[0].fTV0 = pVertex[0].fTV1 = 0;
pVertex[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();
13デフォルトの名無しさん:2009/08/26(水) 02:54:11
>>8
>>11-12が矩形を描画する処理です

>>9
どうすればいいですか?

>>10
メッシュの極一部が異常に拡大されて一色のみ表示されているかのような状態でテクスチャに書き込まれている気がします
あるいはテクスチャに書き込まれてさえいないかも知れません
どちらも自信はありませんが
14デフォルトの名無しさん:2009/08/26(水) 08:56:56
PIXで調べろという最も簡単かつ効果的なアドバイスが出ているのに、なぜガン無視するんだ
15デフォルトの名無しさん:2009/08/26(水) 10:23:09
トゥーンシェーディングをしたいんですが
あれって法線ベクトルをいくつかに分類して
それぞれに色を割り当てれば良いんですか?
16デフォルトの名無しさん:2009/08/26(水) 10:28:45
>>15
テクスチャでライトの強度を変調しろ。
17デフォルトの名無しさん:2009/08/26(水) 16:13:52
現在Directx9でスプライトを使って複数の2D画像の描画をしようとしているのですが、
マリオブラザーズのようなゲームで敵を描画するとき ステージごとに敵の配列を用意して

///
Sprite->Begin( NULL );

関数( 敵情報の配列 );

g_pSprite->End();
///

関数に 位置座標・どの画像を使うか の変数等が入った構造体の配列を渡して、
関数内でfor文により要素全てを描画するという形で、一応描画はされるのですが
要素の二つ目以降がキーボードのキーを押したりマウスカーソルを動かすと描画されない時があり
点滅しているような状態になってしまいます。
ちなみにマウスカーソルに関するプログラムは一切書いていません。
イマイチ原因がわからないので何かアドバイス頂けませんか? 初心者なので根本的に可笑しいとかならば
それを指摘してくださると助かります。
18デフォルトの名無しさん:2009/08/26(水) 16:34:09
関数の説明って何処にあるの
19デフォルトの名無しさん:2009/08/26(水) 16:37:52
どの関数?
20デフォルトの名無しさん:2009/08/26(水) 16:56:27
>>17
根本的におかしいのは
「たった3行の疑似コードで原因が分かるわけないだろう」
ってこと

その僅か3行で指摘できるのは、SpriteのBeginを呼んでいるのに
Endはg_pSpriteのを呼んでいる点くらいだ。
21デフォルトの名無しさん:2009/08/26(水) 18:22:37
>>20
原因それでした!
ばっちり直りました
ありがとうございます
22デフォルトの名無しさん:2009/08/26(水) 19:22:04
>>3 >>14
すいませんでした
PIXで調べてみたらテクスチャ自体には描き込まれていたようで
矩形描画の処理に問題があったみたいです
ありがとうございました
2317:2009/08/26(水) 20:57:58
>>18-20
すみません、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の方はただの記述ミスでした。
2417:2009/08/26(水) 21:02:40
左詰めになってしまい読み辛くて申し訳ない。
25デフォルトの名無しさん:2009/08/26(水) 22:47:40
動画を再生するプログラムを作ろうとしているんですが、
音量調整をするにはどうすればいいですか?
26デフォルトの名無しさん:2009/08/26(水) 23:02:42
データをいじるかデバイスを操作するか。
2725:2009/08/26(水) 23:07:34
すみません。説明不足でした
プログラム実行中に上下ボタンなどで音量調整するには、どうすればいいですか?
28デフォルトの名無しさん:2009/08/26(水) 23:27:10
だからデータをいじるかデバイスを操作するか。
2917:2009/08/26(水) 23:50:45
すみません自己解決しました。 どうもお騒がせしました。
30デフォルトの名無しさん:2009/08/27(木) 00:14:27
>>28
初心者をいびるために来ているクズは死ねばいいのに。
誰も概論などききたかねーよ。コピペすりゃ動くコードを張れと行ってんだくうきよめ

31デフォルトの名無しさん:2009/08/27(木) 00:26:28
>>29
何が原因だったの?
32デフォルトの名無しさん:2009/08/27(木) 00:59:59
>>31
関数に渡す構造体変数を宣言するときに static を付けるのを忘れてました・・・
33デフォルトの名無しさん:2009/08/27(木) 01:41:50
>>30
われわれは質問者のママではない。
ろくなヒントも環境も説明もなしでエスパー発揮して
やさしく答えてくれるのを期待するならママに聞くべき。
34デフォルトの名無しさん:2009/08/27(木) 07:02:35
>>32
staticを付けなければ動かない時点で、設計ミスだろう
35デフォルトの名無しさん:2009/08/27(木) 10:16:15
地面との当たり判定と高さをとろうと思い
3点測量とベクトルを用いてどの面にいてどのぐらいの高さかを調べようと思ったのですが
この方法だと穴の開いたポリゴンの当たり判定をとれません

穴の部分を識別するなんかいい方法ないですかね?
36デフォルトの名無しさん:2009/08/27(木) 10:38:00
>>35
シミュレーションのような厳密な計算をするんでなければ、
通常当たり判定はポリゴン自体でなく、それを内接するいくつかの点をチェックすれば十分だ。
37デフォルトの名無しさん:2009/08/27(木) 11:25:34
D3DXにあたり判定とるための関数があるが、あれじゃダメなのか?
3835:2009/08/27(木) 11:26:12
え?
もしかしてレイを使う奴?
39デフォルトの名無しさん:2009/08/27(木) 11:34:55
てか穴の開いたポリゴンって何?
40デフォルトの名無しさん:2009/08/27(木) 11:50:00
えっ
41デフォルトの名無しさん:2009/08/27(木) 12:02:34
ポリゴンってのは閉じた多角形のこと。
これには異論はないよな?
それをふまえて穴の開いたポリゴンって何?

ドーナッツポリゴンのこと言ってんの?
42デフォルトの名無しさん:2009/08/27(木) 12:03:54
ポリゴンの面がない部分の事じゃねえの?
43デフォルトの名無しさん:2009/08/27(木) 12:06:01
いやドーナツ状でしょ普通に考えて
44デフォルトの名無しさん:2009/08/27(木) 12:17:39
じゃあこれでいいと思う

if( ドーナッツに該当するポリゴンの当たり判定 && !穴に該当するポリゴンの当たり判定 )
return ドーナッツに該当するポリゴンとの距離;
45デフォルトの名無しさん:2009/08/27(木) 12:23:28
だからその穴があるかどうかの判別法を聞いてんだろ35は
46デフォルトの名無しさん:2009/08/27(木) 12:29:34
>>45
穴もポリゴンだろ
穴を凸ポリゴンとしてレイとの接触判定すればいい

ま、実際聞きたいことは別だろうし
スレ荒らしはここまでにするわ
ではでは
47デフォルトの名無しさん:2009/08/27(木) 13:46:41
質問です
ビルドが成功したプログラムをデバッグしてみると、FLOATに値を代入するところでエラーが発生しました(代入に関しては問題は無いと思ってください)
何も変更せずにもう一度デバッグしてみると、今度は問題なく動作しました。
エスパーさんがいたら、この原因を当ててください。お願いします。
48デフォルトの名無しさん:2009/08/27(木) 13:53:48
スレ違い
49デフォルトの名無しさん:2009/08/27(木) 15:10:12
>>34
いや動きはしますよ、なぜかキー入力をしたりすると描画処理が飛ばされるんです。
50デフォルトの名無しさん:2009/08/27(木) 16:28:05
DirectX9.0c SDK December2004
無印探してるんだけどもう配布されてないの?
51デフォルトの名無しさん:2009/08/27(木) 16:41:33
俺のHDDにある
52デフォルトの名無しさん:2009/08/27(木) 16:49:55
そんな古いバージョン今更何に使うんだ……。
53デフォルトの名無しさん:2009/08/27(木) 19:14:35
あの、ちょっとお聞きしたいんですけどDirectXってライブラリの事なんですか?
本とに初心者なんで変な質問ですみません。
54デフォルトの名無しさん:2009/08/27(木) 19:16:46
帰れ。
55デフォルトの名無しさん:2009/08/27(木) 19:38:31
前スレの985ですが
半透明の四角形は表示できたのですが
それを使って画面全体をフェードアウトするために
画面全体に四角形を描画して徐々に透明度を下げてくと
画面がチラついてしまいます。どうすればいいのでしょうか。
透明にする処理を付けくわえたソースです
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;
}
56デフォルトの名無しさん: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未開放領域の
スタックトレースとかの文がずらずらと表示されます。

開放の仕方や条件があるのでしょうか?
どなたか教えてくださいよろしくお願いします。
5756:2009/08/27(木) 21:59:36
S_FAILじゃなくS_FALSEの間違いでした。
現状ここで詰んでます。よろしくお願いします。
58デフォルトの名無しさん:2009/08/27(木) 22:12:25
そもそも
if(pSurfaceScreen != NULL)
if(pTextureScreen != NULL)
が全くの無意味。
5956:2009/08/28(金) 00:10:59
直接的な関連性は分かりませんが、別の箇所でテクスチャをファイルから二重に読み込んでいた
箇所を直したら開放漏れが無くなりました。

if(pSurfaceScreen != NULL)
は実際は別関数になっており、アプリケーションの構造上何度も呼ばれる可能性があるのでこうなってます。
60デフォルトの名無しさん:2009/08/28(金) 02:01:43
>>59
いつでも使える方法ではないが、
オレはゲームエンジン本体側とスクリプト側で、すべてのリソースのハンドルを保持して
必要なタイミングで全部開放するようなコードを2重に用意しているぞ。
2重になってるのは保険のためと、スクリプト側で使いまわすが
本体側からはその意図が掴めない場合があるためだな。
61デフォルトの名無しさん:2009/08/28(金) 02:36:46
>>59
リファレンスカウンタ、もしくは参照カウンタ
ってググってみ
62デフォルトの名無しさん:2009/08/28(金) 22:37:40
キャラクターのクラスでキャラクターの行動を乱数で決めてるんだが。
このクラスを配列で表示するとみんな同じ動きになるんだ。
どうやって乱数にすればいい?
63デフォルトの名無しさん:2009/08/28(金) 22:40:42
乱数で変化とかいいから、まずそれぞれ個別に別の動きをさせられるようにしろ。
64デフォルトの名無しさん:2009/08/29(土) 00:41:23
何が言いたいのかよく分からんが、スレ違いだと思うぞ
65デフォルトの名無しさん:2009/08/29(土) 01:43:16
DirectMusicをNovember2008で使いたいのですが
dmusici.hその他、DirectMusic関連のファイルを
November2008に移すだけで使えるの?
何か問題が出る?
66デフォルトの名無しさん:2009/08/29(土) 02:38:44
>>64
多分、乱数値が全部いっしょのもんしかとってこれてないんだろ
67デフォルトの名無しさん:2009/08/29(土) 03:11:55
>>65
古いSDKからヘッダ持ってくればビルド可能だから問題は特にないが
DirectMusic自体MSから切られてる動かなくてもいちいち人に聞くなよって程度。
68デフォルトの名無しさん:2009/08/29(土) 05:35:42
配布されているサンプルで、コンパイルは成功するが画面が立ち上がらないことがあるんだが
自分が使っているDirectX SDKのバージョンと配布者が使っているバージョンが違うと
こういうことは起こる?
69デフォルトの名無しさん:2009/08/29(土) 06:57:52
どのバージョンの何のサンプルが動かないか程度の情報を出すのすら面倒くさいのか?
70デフォルトの名無しさん:2009/08/29(土) 07:29:29
>69
申し訳なかった
サンプルはDirectX SDKのではなく個人のもの(○×さんのサイトの)
シェーダ編 「多分必須!頂点変換の基本」のサンプル なんだが
コンパイルは成功するが画面が立ち上がらない
自分が使ってるSDKは2007 August
71デフォルトの名無しさん:2009/08/29(土) 07:43:27
個人の作ったものなら作った本人に聞けよ
72デフォルトの名無しさん:2009/08/29(土) 08:01:06
>71
そうだなw
悪かった 本人さんに尋ねます
73デフォルトの名無しさん:2009/08/29(土) 16:41:22
質問です。Direct3D9、XP、VS2005 を使っています。

・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 があったのですが、こちらは見つかりませんでした…。
ステンシルバッファの使い方は情報が多いのですが、作り方が…。

よろしくお願いします。
74デフォルトの名無しさん:2009/08/29(土) 17:16:54
ステンシルバッファに対して
CPUから直接値を書き込むという発想が間違っている。

DrawPrimitiveでポリゴンを書け。
7573:2009/08/29(土) 17:35:08
>>74
CPU から直で描く必要はないのですが、DrawPrimitive でポリゴンを描いたとしても、
ステンシルバッファに書き込まれる値は、D3DSTENCILOP で指定できる
「0 にする」 「1 加算する」 「特定の値(固定)にする」 などだけではなのでしょうか?

例えば色情報などを書き込めるなら、テクスチャに描画→DrawPrimitive で好きな値にできるのですが…。
76デフォルトの名無しさん:2009/08/29(土) 18:51:12
ステンシルは色じゃねえ。ただのマスクだ。
0〜255までの整数しか書き込めねえ。
7773:2009/08/29(土) 19:36:38
>>76
色情報と言うのは、DrawPrimitive で出力される情報の例として書いただけです。
自由に指定できる値なら何でもいいです。

例えばテクスチャを作成し、ロックして好きな値を書き込み、
D3DFVF_XYZRHW なりを利用して DrawPrimitive で描画します。
例えば結果の R値(赤) なりアルファ値なりをステンシルバッファに出力できれば、つまり好きな値を書き込めるという意味です。

単に、ステンシルバッファに好きな値を書き込みたいだけなんです…。
78デフォルトの名無しさん:2009/08/29(土) 19:43:22
むしろ何で普通の色用のバッファを使わないのか問い詰めたい
Youシェーダに手を出しちゃいなYO!
79デフォルトの名無しさん:2009/08/29(土) 19:43:46
>>77
そもそも何をしたいのかが明確じゃないから話がまとまらない。
ステンシルに自由に書きたいってのは手段であって目的ではないだろ。
80デフォルトの名無しさん:2009/08/29(土) 19:47:49
手段を問わずとにかく好きな値を書き込みたいというだけなら、
1ピクセルサイズのポリゴンで1ピクセルずつ固定値で描画すればいいがな。
8173:2009/08/29(土) 19:56:23
>>78-79
おっしゃる通りでした。すみません。
普通にテクスチャに書き込んで、シェーダでごにょごにょ処理すれば上手くいきました。
やりたかったのは、マスク+αです。例えば、ステンシル値が 0 なら描画しない、255 なら描画する、に加えて
128 なら半透明その他色々な効果も持たせて描画したかったのです。

基本がマスクなのでステンシル、という考えから抜け出せていなかったようです。
解決です、ありがとうございました。

後学としてお聞きしたいのですが、元の質問のように、
ステンシルバッファに好きな値を書き込むのはできないのでしょうか?
>>80 さんの指摘のように、半ば無理やり書き込むしかないのでしょうか。
単に興味としての質問で、目的は特にないです。
82デフォルトの名無しさん:2009/08/29(土) 19:57:32
DirectX10なら可能って聞いたような気がするような気がしないかもしれない
83デフォルトの名無しさん:2009/08/29(土) 21:26:26
>>81
というか、ピクセルシェーダで複数のテクスチャを与えて、
そのうちひとつをマスクとして使うようにしたらステンシルバッファいらなくね?
ただしこの場合、テクスチャが複数あってもテクセルはひとつなので、
基本的にテクスチャとマスクの形を合わせないといけないんだけど。

なので、オレは逆にステンシルバッファの方を使ったことがない。
84デフォルトの名無しさん:2009/08/29(土) 23:17:04
>>83
DrawPrimitiveの結果、ピクセル書き込みの成否によって
バッファの値を変化させるのが、ステンシルバッファの肝であって
これは、ピクセルシェーダで代替は出来ないだろう。
Zテストの結果等に左右される訳だから。
85デフォルトの名無しさん:2009/08/30(日) 00:57:35
ステンシルテストでクリップされる場合は
ピクセルシェーダーの処理自体がカットされるから
たいへん高速に処理される。
86名無しさん@そうだ選挙に行こう:2009/08/30(日) 07:24:57
Xファイルのボーンオフセット行列って
親子関係考慮する必要ないよな?
87名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:23:42
プログラムシェーダーって難しいの?
処理を軽くできないかなあと思って挑戦したいんだが・・・
88名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:49:11
実際にやってみたらいいだけの話だろ。
89名無しさん@そうだ選挙に行こう:2009/08/30(日) 18:49:13
シェーダーを使えないガキの環境を気にかけるべきだ
という風潮があるのでゲンナリする
そして気にかけてやってもガキ相手で不毛なのでゲーム制作を辞めたくなる
90名無しさん@そうだ選挙に行こう:2009/08/30(日) 18:57:13
>>89
商業じゃないんだったら、気に入らないのでやらない、でいいじゃないか。
91名無しさん@そうだ選挙に行こう:2009/08/30(日) 19:11:55
商業だってあるていどでかい会社は切り捨ててますし
92名無しさん@そうだ選挙に行こう:2009/08/30(日) 19:41:51
>>91
ゆとりのガキも乞食のくせして同じこと主張するよw
93デフォルトの名無しさん:2009/08/30(日) 21:52:11
シェーダーってユーザーが使用のon/off切り替えられるようにするのって難しいの?
94デフォルトの名無しさん:2009/08/30(日) 21:56:44
シェーダといっても何をやるかによるんだから、自分で組んで試せばいいだろ。
95デフォルトの名無しさん:2009/08/30(日) 22:44:44
そもそも出来ない処理をどうするんだって話だよ。
ジオメトリインスタンシングとか未対応のハード用に
ライブラリもシェーダーも全部用意するのかって話。
96デフォルトの名無しさん:2009/08/30(日) 22:45:27
>>93
それってどうしてユーザーに選択させるの?
頂点シェーダのほうはハードにあるなし関係なくエミュっちまうからわかんねーぞ
97デフォルトの名無しさん:2009/08/30(日) 22:47:14
>>95
やんなきゃいいじゃん
普通にそれっぽいテクスチャで描画
フィルタだったらかけなきゃいい
98デフォルトの名無しさん:2009/08/30(日) 22:51:07
簡単に言ってくれるじゃないの……
99デフォルトの名無しさん:2009/08/30(日) 22:58:17
ただ表示させるだけなら、切り替えなんていくらでも可能。
だけどそんな分かりきった結論に何の意味があるの?
100デフォルトの名無しさん:2009/08/30(日) 23:04:54
>>97
やることによってモデルが10000個60FPSで出るけど
それをしないことによってハイエンドPCですら処理落ちするようになる。

ていうかそもそもジオメトリインスタンスが何かわかってねぇだろ。
101デフォルトの名無しさん:2009/08/30(日) 23:32:03
>>100
エフェクト自体を切っちゃえばいいじゃんってこと
102デフォルトの名無しさん:2009/08/31(月) 00:14:10
はぁ……、実際自分でやってから言えよ。
103デフォルトの名無しさん:2009/08/31(月) 00:16:40
しっかしHLSLのスクリプトは管理しづらいな。
従来のAPI+エフェクトを表す列挙値のやり方と相性が悪すぎる。
みんなどうやって管理してるの?
104デフォルトの名無しさん:2009/08/31(月) 00:48:00
全部の可能な組み合わせに対応しようと思わず、実際にゲームで使うものだけ作れば数は爆発しない。

105デフォルトの名無しさん:2009/08/31(月) 01:12:16
>>102
は?やるかやらないかの話だけだろ?
他に問題があるなら言えよ
こんな簡単なこともできないなんてアフォじゃねーの?
止めて普通に描画(もしくは消す)もできない程度のアフォが俺に意見たれてんじゃねーよ
106デフォルトの名無しさん:2009/08/31(月) 02:08:52
HLSLなんてプログラムで動的に作成して使う時にコンパイルすれば数なんて問題ないけどな
107デフォルトの名無しさん:2009/08/31(月) 08:21:27
Xファイル表示させてるんだけど
Meshの法線って単位ベクトルにしといたほうがいいよな?
デフォだと単位ベクトルじゃないんだが一般的には単位ベクトルにすべきか?
108デフォルトの名無しさん:2009/08/31(月) 08:50:20
>>107
単位ベクトルかどうかは吐き出すツールしだいだろ
109デフォルトの名無しさん:2009/08/31(月) 09:10:34
>>108
そうなんだがなんで単位ベクトルじゃないんだ?
単にこちら側でNormalizeすれば済む話だけど
ツール側が単位ベクトルで吐き出さない理由って何があるんだ?
110デフォルトの名無しさん:2009/08/31(月) 14:26:26
ツール製作者に聞けば良いんじゃね
111デフォルトの名無しさん:2009/08/31(月) 17:19:50
ツールに何かしら都合がいいんじゃないの。わからんけど
どうせ拡大縮小したらNormalizeせざるをえないわけで、やっとけやっとけ
112デフォルトの名無しさん:2009/08/31(月) 19:26:27
DirectSoundで、IDirectSoundBuffer8::Play()を呼ぶと、エラー0x88890008が返ってきたりDS_OKが返ってきたりします。
MSDNのドキュメントに0x88890008が返ってくることは明記されていませんが、WASAPIのAUDCLNT_E_UNSUPPORTED_FORMATに相当するそうです。
0x88890008が返ってくるのはPlay()初回のみです。プロセスを再起動すると、やはり同じエラーが返ったりDS_OKが返ったりします。
88890008でググると、Relatek製サウンドカードで発生するようで、開発PCもRelatekです(ドライバは最新)。
今はとりあえず2回Play()して握りつぶしていますが、原因や根本的対策があれば教えてください
113デフォルトの名無しさん:2009/08/31(月) 19:34:55
>>112
とりあえず、DirectSoundの初期化で使いもしないフラグを指定していないか調べる。
114デフォルトの名無しさん:2009/08/31(月) 19:36:57
けどマジでツール制作者はどうしてるんだろうな
MetasequoiaがどうしてるかとかPIXで監視しようかとしたらみれねーし
115デフォルトの名無しさん:2009/08/31(月) 19:53:01
単位ベクトルにしたら、
正規化で精度が失われるからじゃねーの
何にしても気にするとこじゃないよ
116デフォルトの名無しさん:2009/08/31(月) 21:05:15
>>113
レスありがとうございました。
DSBCAPS_CTRLVOLUME等全部消して22.05kHz/8bitでも発生してしまいました。
お手上げです。
117デフォルトの名無しさん:2009/08/31(月) 21:23:32
>>116
まずOSを書け。Vista以降と以前でハードウェアの取り扱いがまったく違うぞ。
それからRealtek以外にサウンドデバイスが無いかどうかも書くこと。
複数あるならBIOSの設定が必要な場合がある。
118デフォルトの名無しさん:2009/08/31(月) 21:28:28
>>116
http://www.computing.net/answers/hardware/bad-directsound-driver-error/22225.html
ここに、Windowsを再インストールするかセーフモードでサウンド関係のデバイスを全部削除して、
再起動してWindowsにデバイスを再認識させてドライバを入れなおすと直ると報告があるな。
119デフォルトの名無しさん:2009/09/01(火) 00:35:30
>>117
そうでした。すみません。Windows Vista Home Edition SP1 x86とDirectX9(August 2007 SDK)です。
今思い出しましたが、MediaPlayerClassic+ffdshowで、起動直後に音声ファイルが無音再生されることがありました。これも再生しなおすと直ります。
出力先は、スピーカー・イアホンと、HDMIの2種類あります。どちらもRealtekです。あとMIDIデバイスですがMIDI Yokeが入っています。
BIOSにそんな設定があるとは知りませんでした。調べてみます。
>>118
Response 3ですね。貴重な情報ありがとうございます。
HDDバックアップして試してみます。
# 5年前から発生していたのか…
120デフォルトの名無しさん:2009/09/01(火) 09:24:33
質問
D3DXMATRIXA16とD3DXMATRIXって混同して問題になったりしないの?
121デフォルトの名無しさん:2009/09/01(火) 09:28:14
俺は一度混同した
122デフォルトの名無しさん:2009/09/01(火) 10:04:26
A16のほうが精密なんだっけか?
その程度の認識しかない
123デフォルトの名無しさん:2009/09/01(火) 10:14:31
16byteアラインでSSEウマスだよ
124デフォルトの名無しさん:2009/09/01(火) 12:25:52
D3DXIntersectって2番目で針を出す位置を決めて3番目でどの位置が針の末端かを書くの?
125デフォルトの名無しさん:2009/09/01(火) 22:00:32
>>124
始点と方向じゃね?
126デフォルトの名無しさん:2009/09/02(水) 19:30:50
質問です。
DeferredShadingてなんでカメラ空間の法線を書き出しているんですか?
ワールド空間の法線じゃだめなんですか?
また半透明はなぜだめで、透明は大丈夫なんですか?
127デフォルトの名無しさん:2009/09/02(水) 19:40:52
>>126

>>なんでカメラ空間の法線を書き出しているんですか? 
質問がおかしいです。
ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。


>>また半透明はなぜだめで、透明は大丈夫なんですか?
質問がおかしいです。
透明って100%透明てこと?なら見えないよね。
128408:2009/09/02(水) 19:54:41
DeferredShadingがよく理解できない俺のために
解説へのポインターを教えてください。
129デフォルトの名無しさん:2009/09/02(水) 21:10:00
そんなに難しい話じゃないよ。
解説ならDeferredShadingでググって出てくる先で十分だ。

例えば、2つの光源+1つの球があるシーンを描画することを考えてみる。
今まで通りの方法だと、

やっぱ面倒くせえ、次の人続きよろしく
130デフォルトの名無しさん:2009/09/02(水) 21:41:19
Deferred Renderingの方がいっぱいヒットすると思う。
131デフォルトの名無しさん:2009/09/02(水) 22:58:39
物凄い初歩的な質問ですがどなたか教えてください。

DirectXでのモデルの各頂点の座標は同じ形であれば小さければ小さいほど処理が早いんでしょうか?
使うモデルと背景の縮尺はいくらでも変えれると思いますが、ポリゴンの形が計算の丸め誤差などで崩れてしまわない程度に
一番小さなスケールでやったほうがいいんでしょうか?

またマップを作成する場合、物凄い広大なマップのデータを作ったとして、原点から遠く離れた場所の描画(ビュー変換など)ほど
処理が重くなったりするんでしょうか?
もしそうであれば広大なマップではある程度原点から離れた場所にカメラが行くたびに、
マップ自体を原点へ戻すような処理をすべきなんでしょうか?
132デフォルトの名無しさん:2009/09/02(水) 23:12:09
カメラ空間なら奥向きの法線を格納せず、1-R^2-G^2で求められるから?
133デフォルトの名無しさん:2009/09/02(水) 23:32:00
しいて言うなら決まりはない。
好きなようにデータをサーフェイスに格納して好きなように使えばいい。

単にモデルのレンダリング時にシェーディングしなけりゃなんでも全部Deferred Renderingだ。

半透明が出来ない理由はやってみれば馬鹿でもすぐわかる。
134デフォルトの名無しさん:2009/09/02(水) 23:42:32
DirectX11は10と違ってCaps見たいなのがあって
別にDirectX11対応のビデオカードじゃなくても動かすことができるらしいな
これからは11の時代だぜひゃっほー
135デフォルトの名無しさん:2009/09/03(木) 00:22:56
それって、またDirectX9以前みたいにビデオカードごとに
動くか動かないかを自力で判定しないといけないんじゃ。
136デフォルトの名無しさん:2009/09/03(木) 00:24:40
イエス
137デフォルトの名無しさん:2009/09/03(木) 00:28:21
何の為にD3D10でバッサリ切ったのか
わからんよな。
ウロチョロしてんなよって感じ。
138デフォルトの名無しさん:2009/09/03(木) 04:01:39
>>131
浮動小数点数 は、原点( 0.0000000 )から遠ざかると、精度が落ちてゆく。
重さより精度の問題。

同じく、あまり小さくしすぎると、アンダーフロー(桁落ち?)がおきる。
適度なスケールを使うのがよいと思う。
139126:2009/09/03(木) 05:44:52
>>127
>ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。
言っている意味がよくわからないです。
テクスチャはただのバッファでは?空間はなんでもいいはずです。

gamewatchでKILLZONE2の記事を見ると、カメラ空間の法線を書き出しています。
自分はワールド座標とワールド空間の法線を書き出しあとでシェーディングしています。
ポイントライトには座標も必要だから。

でも、座標を書き出さないでライティングできているのはカメラ空間の法線が何かキーを
握っているのではと思うのですが、よくわかりません。

カメラ空間なら奥行きの法線はいらないのはわかるのですが、どうやってポイントライト
でライティングできるのか謎です。
140デフォルトの名無しさん:2009/09/03(木) 07:44:54
>>131
とりあえず座標計算上(バーテックスシェーダ)では関係ない。138の言ってるように浮動小数点の精度が変わるだけ。
CPUと違ってGPUでは浮動小数点数の精度がぎりぎりまで削られてるのであまり信用しないように。
2Dテクスチャの大きさはこの時点ではまったく関係ない(この時点ではただのUV値に過ぎない)

ただし、テクセル計算(ピクセルシェーダ)では画面に占めるメッシュ描画の大きさで負荷が変わる。
141デフォルトの名無しさん:2009/09/03(木) 08:49:03
>>139

>>ワールド空間を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座標系のものだ。
142デフォルトの名無しさん:2009/09/03(木) 09:02:57
つーかプロジェクション空間のzがあれば
ピクセルの位置からワールド座標が逆算できるだろ。
143デフォルトの名無しさん:2009/09/03(木) 09:14:34
>>142
x' = x / w
y' = y / w
z' = z / w

x'y'z'から、どうやってwを得るんだ?
別途wバッファがあるなら別だが。
144デフォルトの名無しさん:2009/09/03(木) 09:39:35
プロジェクション空間ならw=1に射影されてんだろ。
プロジェクション行列の逆行列をピクセルごとに(ry
145デフォルトの名無しさん:2009/09/03(木) 17:07:51
>>144
意味わかんね
適当なこと書くなよ
146126:2009/09/03(木) 20:54:55
>>141
>ワールド空間はXYZの3軸、一方2Dテクスチャ座標はXYの2軸。
>ワールド座標の法線を書き込むというが、そのままじゃ軸が一個多いのはわかるだろ。
何を言っているかホントによくわからないんですが。
2Dテクスチャには普通に射影変換して書き込みますよ。
その2Dのテクスチャの座標に何を書き込むかが問題なのではないですか?
ワールド空間の座標かカメラ空間の座標か。
ワールド空間の法線かカメラ空間の法線か。

実際自分は、ワールド空間の座標、法線を2Dテクスチャに格納し、
ポイントライティング、ディレクショナルライティングはできています。

でもわからないのは、なぜKILLZONE2は座標を書き込まずカメラ空間(View空間)
の法線だけでライティングできているのか?そこなんです。

ちなみに、Proj空間、射影座標系でライティングしているとは一言も言っていません。

カメラ空間(View空間、カメラ座標系)

です。

本当にDeferredShadingというか、座標系のことわかって言ってるんですか?


147デフォルトの名無しさん:2009/09/03(木) 21:36:42
>>146
ビュー空間なのは >>132 の言うように法線データの圧縮ができるから
ワールド座標を描かなくてもいい理由とかも、Game Programming Gems 6 の 5.7 を読むといいよ

148デフォルトの名無しさん:2009/09/03(木) 21:50:35
>>146
全然わかっていないのは君だよ。
KILLZONE2の法線を収めたバッファ、あれは奥行きがあるだろ?
奥行きがあるってことは、透視変換された結果だ。
3Dであるカメラ空間(View座標系)から透視変換されて、
2Dである(実際は3Dだが)射影空間(Proj座標系)になって
その上で、テクスチャに落とされているんだ。

>Proj空間、射影座標系でライティングしているとは一言も言っていません。 
>カメラ空間(View空間、カメラ座標系) です。
だから、これらは全部認識が誤ってるんだよ。
149148:2009/09/03(木) 21:56:05
いや、わかった。
勘違いしていたのは、俺だったかも。
すまんすまん。
150デフォルトの名無しさん:2009/09/03(木) 22:33:47
>>147
法線データの圧縮が出来るのは
ベクトルの長さが1であるからであって
ビュー空間云々は関係ないと思うが
151147:2009/09/03(木) 23:40:15
>>150
そう思うだろうけど、実はz=±√(1-x^2-y^2) だから z の正負がわからない
ビュー空間なら zが[0 - 1] に限定される
152131:2009/09/04(金) 01:26:49
>>138
>>140
回答ありがとうございます。
精度の問題ですか、とあるFPSの現象を思い出しました。
(スナイパーライフルで遠距離の人間の顔を見ると目玉が顔のポリゴンを飛び出して
 見えてゾンビみたいになってしまってる)
あまり原点から距離が離れてしまうところに細かい構造のオブジェクトを描かない方が良いということですね。
その辺りの調整可能な作りにすることにします。
153デフォルトの名無しさん:2009/09/04(金) 01:28:39
Z値がバッファに書かれていればXY=ピクセル座標、W=1でXYZWが求まるから
それにカメラの逆行列をかけてWで割ればワールド座標に戻る。
154デフォルトの名無しさん:2009/09/04(金) 01:53:33
>>152
それは全く別の問題。

普通に作る分にはfloatの精度なんて、あんまり気にしなくていいよ。
155デフォルトの名無しさん:2009/09/04(金) 02:17:28
>>153
検算したら、確かにビュー座標に逆変換出来た。
射影空間では、wは不定(ビューのz)だから変換は出来ないけど
ビュー以前なら、w=1だから変換出来るんだな。目から鱗。
156デフォルトの名無しさん:2009/09/04(金) 02:38:07
メッシュの描画に使用した、行列をかけた変換後のメッシュ頂点情報って取得できるんですか?
もし可能であればご教授ください。
157126:2009/09/04(金) 04:51:12
>147
>150
なるほど!ありがとうございます!!
自分も目から鱗です
158デフォルトの名無しさん:2009/09/04(金) 14:48:22
質問です。
ピクセルシェーダで

void psShadowDiffuseForFloor(
float4 Color : COLOR0
,float4 DepthFromCamera : TEXCOORD0
,out float4 outColor : COLOR0
,out float outDepth : DEPTH0
)

こんな感じで、カラーと深度値を同時に出力すると、どうにも画面が乱れてしまいます。
どちらか一方だけであれば問題がおきないのですが、カラーと深度値は同時にoutしてはダメなのでしょうか?

色々ぐぐって、同時に使っている例を探そうとしてみたのですが、1つも見つからないので、やってはいけない方法なのかと心配になりまして
159デフォルトの名無しさん:2009/09/04(金) 15:10:35
>>156
やろうと思えば出来なくはないが、というレベル。
普通は代わりに、IDirect3DDevice9::ProcessVerticesを使う。
もっと言えば、こんなメソッド使うより自前でやった方が
いろいろと楽。
160158:2009/09/04(金) 15:27:32
失礼しました。
どうも原因は別にあったようです。
161デフォルトの名無しさん: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;

としているようです。
そこで両方試したところ、結果が異なっているようです。

何故異なるのか、どちらが正しいのかがよくわかりません。
どなたか分かるかたいらっしゃいますでしょうか。
よろしくお願いします。
162デフォルトの名無しさん:2009/09/04(金) 15:59:58
>>161
両方とも同じ
結果が異なるとしたら別の要因
163158:2009/09/04(金) 16:09:47
すいません。名前抜けてました。

別の要因ですか・・・。
デバッグDLLでも再現するので何かしら「ちゃんとミス」っぽいですね。
また質問をまとめなおします。
164158: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;
}
165158: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;
}
166デフォルトの名無しさん:2009/09/04(金) 16:18:45
また、陰のカラー値を頂点シェーダから受け取らず、
固定値としてoutColor = 1;
とした場合もうまくいきます。

具体的にどう「うまくいかない」のかと言いますと、
何も条件がかわっていない描画を続けているのに、(バイアスをかけず、カラーのみを出力するピクセルシェーダで描画している)他オブジェクトとの前後関係がチラチラと変化します。
挙動的には「メモリーリークなどでどこか壊したのでは?」というような内容です。

Debug.DLLで動かしてみましたが、現象はかわりませんでした。
また、特にエラーなども出力されませんでした。

以上です。
何か「お前こんなことすれば当たり前じゃん」といった部分があれば、ご指摘いただけると幸いです。
167158:2009/09/04(金) 16:28:16
追加情報です。
Depthが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を使った時だけ異常になるようです。
(とはいうものの、他の成功例も「成功したように見える」だけで、実際狂っている可能性はありますが)
168158:2009/09/04(金) 16:52:51
追加情報です。
まず、>>167は、Depthの「値を入れていない要素」については0を代入していました。

(5)のパターンであっても、Depth.x と Depth.y にPos.zの値を入れておくと、正常に動作するようです。
最初、割り算の子の部分を Depth.zにしていなかったのかと思って再確認しましたが、間違い無く
z / w になっていました。
TEXCOORDは、それぞれの要素xyzw が個別に補間されるものだと思っていたのですが…。
169158: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計算まわりの挙動が変わっていることはありませんでした。
(コンパイラのバグというのを期待?していたのですが)

何なんだろうこれ・・・
170158:2009/09/04(金) 17:51:16
どうも、一番の原因は
TEXCOORD0
を使っていることのようです。
TEXCOORD1
に変えると、さまざまな不具合が解消されます。

確かに今描画しようとしているものには、UVが存在します。
ですが今回のシェーダでの描画では必要ない(ライトの陰影だけ書きだしたい)ので、頂点シェーダの引数としても受け取っていません。

このあたりが何か悪さをするのでしょうか?
試しに無意味でもと思って
, float2 Tex : TEXCOORD0
を頂点シェーダの引数に加えた(使わない)ところ、また少し違った「おかしな現象」が置きました。
意味がわからない・・・
171158:2009/09/04(金) 17:52:05
失礼しました。
>>170の最後3行は無視してください。これはこちらのミスでした。
172デフォルトの名無しさん:2009/09/05(土) 11:42:55
他のPCもしくはリファレンスラスタライザの結果をみて
環境の不具合か自分のミスか切り分けるしかなさそうだね。
俺の場合、こういうときはハードの不具合と思いがちだったけど、
実際は自分のミスだったことが多かった気がする。
173デフォルトの名無しさん:2009/09/05(土) 23:58:33
>>172
アドバイスありがとうございます。
REFでも結果同じですね。

どうも色々いじった感じですと、TEXCOORD0のZとWに不具合がある気がします。
元のメッシュがUVを使っている場合、DrawSubsetの段階でfloat2なテクスチャ座標を使うとFVFなどで内部的に宣言されるわけですよね。
この時に頂点シェーダ>ピクセルシェーダ間でTEXCOORD0のZやWを使ってしまって良いものなのでしょうか。

今改めて考えてみると、頂点データの流し込みの時点では存在しないTEXCOORD1などを、
頂点シェーダ>ピクセルシェーダ時に新設してるのは合法なのでしょうか?
(今更合法でないといわれても困ってしまいますがw)
174デフォルトの名無しさん:2009/09/06(日) 00:01:47
ん、すいません。REFでも結果が同じというのはいったん撤回です。
月曜日にもう一度再現含めて試してみます。
175デフォルトの名無しさん:2009/09/06(日) 02:03:43
Xファイルでボーンアニメーションやってるんですが
頂点はいい具合に動くんですが光源計算がうまく行きません。

法線も頂点と同様に行列かける以外違いってあるんですか?
176デフォルトの名無しさん:2009/09/06(日) 02:12:46
正規化しないと駄目だった希ガス
177デフォルトの名無しさん:2009/09/06(日) 03:56:20
>頂点シェーダ>ピクセルシェーダ時に新設してるのは合法なのでしょうか?
合法って・・別に法律に触れたりしないぞ・・・。

まぁ実際問題普通に頂点シェーダーで作ったデータをピクセルシェーダーに送るので
CPU→VSとVS→PSはまったく関係ないとおもっとけ。
178175:2009/09/06(日) 07:17:22
正規化はちゃんとしてあるんだけどなぁ
変換する行列に平行移動の成分があったらダメとか
Xファイルの法線は特別とかそういうのはないですよね?
179デフォルトの名無しさん:2009/09/06(日) 09:09:52
>>177
>合法って・・別に法律に触れたりしないぞ・・・。
お前の馬鹿さ加減に爆笑した
コーヒー返せ
180デフォルトの名無しさん:2009/09/06(日) 09:35:12
>>178
スキンメッシュ変換しおわった後に正規化だよ?
181175:2009/09/06(日) 09:50:39
VS_OUTPUT Out = (VS_OUTPUT)0;
//●頂点の変換と出力
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;
182175:2009/09/06(日) 09:52:46
↑はバーテックスシェーダーの中身です
アニメーション自体は正常に動作しており、
またメッシュの法線は正規化されております
183デフォルトの名無しさん:2009/09/06(日) 10:51:13
ワールドもっていってから正規化じゃね?(いや、テキトーだけどw)
184デフォルトの名無しさん:2009/09/06(日) 12:27:35
>変換する行列に平行移動の成分があったらダメ
法線の変換なら駄目だろ、3x3の回転行列にしてみ
185175:2009/09/06(日) 12:29:06
>>184
float3x3にする事で移動成分ってなくならないんですか?
186デフォルトの名無しさん:2009/09/06(日) 12:32:26
ワールドのライティングをしてるって事は
シェーダー変数のライトディレクションはワールドの値だよね?
後は、ライトディレクションの向きは反対じゃないよね?
(内積取れる方向って意味)
187デフォルトの名無しさん:2009/09/06(日) 12:34:00
ウエイトを100.0fで割ってる意味が激しく分らん
シェーダー定数に100倍したウエイト値を入れてるの?
188デフォルトの名無しさん:2009/09/06(日) 12:36:10
ワールド変換行列に拡縮入ってたらワールド変換してから正規化しないと駄目だな
189デフォルトの名無しさん:2009/09/06(日) 12:38:39
俺はワールドライトをローカル変換する派だから
なんかキモイ処理に見えたw
190デフォルトの名無しさん:2009/09/06(日) 12:49:25
>>189
頂点はワールドに変換しなきゃいけないのに
ライトだけローカルにもってきてるお前のがレアじゃね?
191デフォルトの名無しさん:2009/09/06(日) 13:24:00
接空間のことじゃね?
まあ頂点ライティングでそれを使うのはレアだとは思う
192デフォルトの名無しさん:2009/09/06(日) 13:32:08
なるほどバンプマップはたしかにそうだな
それとは別に法線は法線でワールドにもってきてるわw俺のソースw
193175:2009/09/06(日) 13:46:17
>>186
あ すいませんコメントが間違ってました
ここがマイナスでもプラスでもライティングは失敗します

>>187
言われてみれば最初から100で割っておけば余計な手間が省けますね

>>188
やってみたらうまくいきました
ワールド空間座標に縮小はないんですがなんでだったんだろう…。
194デフォルトの名無しさん:2009/09/06(日) 13:47:42
>>193
あるんだろ多分
そんなのロードされるモデル次第じゃね?
195デフォルトの名無しさん:2009/09/06(日) 13:59:47
>言われてみれば最初から100で割っておけば余計な手間が省けますね
えっ・・・
196デフォルトの名無しさん:2009/09/06(日) 14:02:24
スキニングウエイトを%単位にしているのか?
197デフォルトの名無しさん:2009/09/06(日) 14:15:18
・単位をcmにしている。
・固定小数点と三角関数テーブルで高速化、という10年前の知識を紹介してる5年前の本を読んだ
198デフォルトの名無しさん:2009/09/06(日) 14:26:04
組み込みではまだ有効なテクです
199デフォルトの名無しさん:2009/09/06(日) 14:53:27
組み込みでは有効だがWindowsでは無駄な処理だろう・・
そもそもそれなら乗算除算じゃなくてビットシフトしろっていう。
200デフォルトの名無しさん:2009/09/06(日) 15:05:34
PSPとかDSは組み込みに含まれるの?
201158:2009/09/07(月) 13:28:13
>>158です。
問題の出た環境で再度、REFとそうでない状況でテストしてみたところ、
・REFでは正しく描画される
・REFでないとおかしくなる
のを確認しました。

もうこうなってくると、ドライバが悪いんだ!と思い、最新版にしてみましたが状況は変わりませんでした。
現象が起こる環境は
Intel(R) G33/G31 Express Chipset Family
です。
GF9600などでは再現しませんでした。

オンボだしなぁ…。
TEXCOORDは1を使うようにするかぁ…。
というのが今の結論です。

何かツッコミどころがあればご意見いただけると幸いです。
202デフォルトの名無しさん:2009/09/07(月) 22:11:50
サウンドノベルのようなものではなく、とにかく高速に文字列がスクロールなどし、表示されなければならないような
ゲームの場合、文字列を描画するにはどういった方法が用いられるのでしょうか?
動的テクスチャの方法でしょうか?それとももっといい方法があるのでしょうか?
203デフォルトの名無しさん:2009/09/07(月) 22:25:04
>>202
ないよ
やることわかってんじゃん
さっさとやれ
204デフォルトの名無しさん:2009/09/07(月) 22:35:39
巻物を模したオブジェクトを作って、そこに全ての文字列を貼っておく
205デフォルトの名無しさん:2009/09/07(月) 22:47:29
>>202
そこでDirectWriteですよ。
206デフォルトの名無しさん:2009/09/08(火) 00:35:25
DxLib3.0誕生
207デフォルトの名無しさん:2009/09/09(水) 09:42:28
D3DXColorNegativeって負のカラーを生成するって書いてあるけど
負のカラーとはなんですか?
208デフォルトの名無しさん:2009/09/09(水) 09:54:32
>>207
なんでヘルプ読まないの?

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;
209デフォルトの名無しさん:2009/09/09(水) 14:12:29
あーあれか
ショッキングな演出か
210デフォルトの名無しさん:2009/09/09(水) 15:18:02
板ポリで2Dゲームを作ろうと思っているんですが座標は3D座標で管理したいので、
頂点フォーマットをD3DFVF_XYZにして正射影でスクリーンに写して完全に表示を2Dにしたいのですが、
どうもサイズの調整がうまくいかなく読み込む画像自体のサイズとスクリーンに表示されるサイズが一致しません。
調整の仕方は画像の縦幅をスクリーン座標→ワールド座標へ変換した値でポリゴンの頂点を決めてやっています。
が、これだと変に画像が歪んで小さくなっちゃいます。
D3DFVF_XYZRHWは使いたくないので悩んでいます、どうすればいいでしょうか?
211デフォルトの名無しさん:2009/09/09(水) 15:22:54
>>210
おお! オレもちょうど同じ疑問に行き当たってる。
もっとも、2D画像に関してはスクリーン座標を使う形で対処できてはいるが。
まだZ値の管理をぜんぜんやってないんだな。(だから描画順で完全制御してる)
212デフォルトの名無しさん:2009/09/09(水) 15:37:03
○×に似たようなのがあった気がする
213デフォルトの名無しさん:2009/09/09(水) 16:02:07
>>210
WorldMatrix * ViewMatrix * ProjMatrix * ViewportMatrix = WVPV
スクリーン座標系の表示したい座標 = X = [ x, y, z, 1 ] ※zはviewportのzmin, zmaxの中間値
ワールド座標系の表示したい座標 = X' = [ x', y', z', 1 ]

X * WVPV^-1 = X'

このX'使ってる?

214213:2009/09/09(水) 16:06:37
っていうかD3DXVec3Unproject()使えばいいか
これの結果と自前の結果、比較すればいいんじゃねーの
215デフォルトの名無しさん:2009/09/09(水) 16:30:31
よく分からん
馬鹿でも分かるように説明してよ
216デフォルトの名無しさん:2009/09/09(水) 21:31:17
ViewMatrixは単位行列
ProjectionMatrixは正射影行列
WorldMatrixはキャラクターの座標で

World*View*Projectionでうつらなかったっけ
217デフォルトの名無しさん:2009/09/09(水) 21:51:21
Windows7だと

RECT 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にならないのですが
どうしてですか?
218デフォルトの名無しさん:2009/09/09(水) 22:04:57
DirectXと何の関係もない
219デフォルトの名無しさん:2009/09/09(水) 22:06:04
>>217
あたりまえじゃねーか。自分の書いたコードをよく見てみろ。
220デフォルトの名無しさん:2009/09/09(水) 22:59:26
>>219
なぜ?
221デフォルトの名無しさん:2009/09/09(水) 23:01:51
0123456789
222デフォルトの名無しさん:2009/09/09(水) 23:07:09
>>220
Windows7ってタイトルバーとかウィンドウの枠が無くなるんだっけ?
223デフォルトの名無しさん:2009/09/09(水) 23:09:40
オレぁWindows7でもちゃんとクライアントサイズ640x480でウィンドウ作れてるが
224デフォルトの名無しさん:2009/09/09(水) 23:21:49
WS_OVERLAPPEDWINDOWのフラグをCreateWindowと同じにしてなかった。
同じにしたら作れた
225デフォルトの名無しさん:2009/09/10(木) 07:25:47
226デフォルトの名無しさん:2009/09/10(木) 07:55:20
SDKのアイコンが青い椎茸からXNAみたいな今風に変わってる
227デフォルトの名無しさん:2009/09/10(木) 08:55:11
サンプル山盛り追加だな
228デフォルトの名無しさん:2009/09/10(木) 09:12:26
しかし大半がDirectX11用なので起動すらしない
229デフォルトの名無しさん:2009/09/10(木) 10:03:10
やっと11きたか
230デフォルトの名無しさん:2009/09/10(木) 10:20:15
KB971644のリンクも今の段階では機能していないな。
Win7だとDX11用サンプルもある程度動くんだろう。
231デフォルトの名無しさん:2009/09/10(木) 14:01:29
すみません、Web上でいくらかDirectXの勉強をし始めたのですが、
いまいち要領を得ないので、本を一冊買ってそれで勉強しようと思うんですが、
おすすめの良書とかないでしょうか?
232デフォルトの名無しさん:2009/09/10(木) 14:04:55
directx逆引き大辞典

てにはいらんと思うけど
233デフォルトの名無しさん:2009/09/10(木) 14:47:57
前回のSDKからか、
fx2.0のコードがコンパイル通らなくなったんだよね
今回の入れるか迷う
234デフォルトの名無しさん:2009/09/10(木) 16:32:38
>>231
付属のHelpを地道に覚えるのお勧め
遠いようで近道だったり
他にwebや参考書を使う場合でも、あくまでHelpのここが
分からないけどどういうことなのかな?っ手感じで
調べる時に使うのがいいと思う
そうするとHelpを中心としたDirectX脳内マップが出来上がります
235233:2009/09/10(木) 16:49:49
直ってた
杞憂だったみたい
236デフォルトの名無しさん:2009/09/10(木) 21:12:07
>>232
絶版のようですね・・・

>>234
Helpですか。わかりました、ヘルプ覚える所からまた始めてみようと思います。
237デフォルトの名無しさん:2009/09/11(金) 00:46:08
>>234
日本語のHELPください><
238デフォルトの名無しさん:2009/09/11(金) 03:34:15
>>237
オンライン(こっちのが内容が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を探したり
逆に英語主体で読んでて分からなかったら日本語を見てみたりとかも有効かと

あと時々、全体を見渡してどの項にどういう事が書いてあるのかつかんで置くといいよ。
あと、サンプルブラウザから適当なサンプル探して解析するのが重要だよ。
勿論ここでも質問汁!
239デフォルトの名無しさん:2009/09/11(金) 04:08:23
>>231
何をやりたいかが明確なら他に参考書も挙げやすいかも
240デフォルトの名無しさん:2009/09/11(金) 09:24:33
KB971644+FW190.38betaでとりあえずサンプルが起動まではする様になった
241デフォルトの名無しさん:2009/09/11(金) 13:51:36
無料C++総合環境DirectXゲームプログラミング ってサイトを参考にシューティングゲーム
つくってたんですが、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ではなく、↑に設定してみると、弾がでました。

解決方法を教えてください。
242デフォルトの名無しさん:2009/09/11(金) 14:08:11
>>241
デバッガで止めて様子を見る。
243デフォルトの名無しさん:2009/09/11(金) 14:10:45
これDXライブラリ?
244デフォルトの名無しさん:2009/09/11(金) 15:14:20
>>241
>PAD_INPUT_A // A(1)ボタンチェックマスク(Zキー)
まずはZキーを押してみる
245デフォルトの名無しさん:2009/09/11(金) 15:43:30
>>244
Z押したら出ました・・・
Aって書いてあっても。
対応キーが違うなんて、なんという罠。

とにかくありがとうございました!
246デフォルトの名無しさん:2009/09/11(金) 16:04:10
>>245
JOY PADのAボタンという意味で、
キーボードのAキーという意味ではない
247デフォルトの名無しさん:2009/09/11(金) 16:45:17
常に起動しているDirectX 3Dで描画しているアプリに、文字や絵などを割り込み絵画させたいのですが、どのような方法があるでしょうか?

(DxtoryのFPSや録画ステータスが表示されているように、DirectX描画に割り込み描画する方法が知りたいです)
248デフォルトの名無しさん:2009/09/11(金) 17:19:06
>>247
それが自分の書いたアプリかそうでないかで話は全然変わってくる。
249247:2009/09/11(金) 17:24:17
自分が書いたアプリではないです。ソースコードも不明です
>>248
250デフォルトの名無しさん:2009/09/11(金) 20:38:55
無理に決まってんだろカス
251デフォルトの名無しさん:2009/09/11(金) 21:00:51
モンスターハンターフロンティでモンスターのHPをクライアント内に描画するチートあったけどあんな感じのがやりたいんだろうな


俺もやりたい
252デフォルトの名無しさん:2009/09/11(金) 21:16:19
普通に考えて、COMコーポネントにラッパーかますか
フック使うんじゃねーの
253デフォルトの名無しさん:2009/09/11(金) 21:26:06
VisualStdio2008で、
三角ボタンの隣のソリューション設定で、
debugからreleaseに切り替えたら、

debugで3Dオブジェクトが描画されてたのに、
releaseでされなくなった

こんなのこってあるんのだろうか・・・
#ifdef _DEBUG
とかはつかっていないんだがOTL
254デフォルトの名無しさん:2009/09/11(金) 22:00:41
どうせ関数の戻り値を確認してねーんだろ
しろカス
255デフォルトの名無しさん:2009/09/11(金) 22:01:01
目の前で起きてるんなら、あるんじゃね
256デフォルトの名無しさん:2009/09/11(金) 22:16:13
>>253
ありまくるに決まってるだろがw
257デフォルトの名無しさん:2009/09/11(金) 22:18:22
>>253
まあ大抵は変数の初期化忘れなわけだが。
258デフォルトの名無しさん:2009/09/11(金) 22:22:34
>>256
そうなのか初心者でdebugとreleaseの違いが
パスくらいしか思い浮かばなくてOTL

たとえばどんなときに起こるでしょう?
259デフォルトの名無しさん:2009/09/11(金) 22:23:44
>>257
なるほど!
急いでチェックしてみまする
260デフォルトの名無しさん:2009/09/11(金) 22:31:20
デフォルトではreleaseとdebugでは違うプリプロセッサが付いてるよ
261デフォルトの名無しさん:2009/09/11(金) 22:46:40
>>257
本当にありがとう!
まさに変数の初期化忘れだった!

リリースもーどだと、
変数は初期化しないと何が入っているかわからない
こんな初歩的なことを忘れていた

レス付けてくれた方、ありがとう
262デフォルトの名無しさん:2009/09/11(金) 23:59:47
UTF-8の文字列処理が多量にあるプログラムをするのですが、
シフトJISとUnicodeは普通にCライブラリがありますが、UTF-8はそういうのあるんでしょうか?
263デフォルトの名無しさん:2009/09/12(土) 00:04:32
>>262
なぜその質問をここで聞くの? もっとしかるべきサイトやスレがあるでしょっ!
UTF-8とUTF16は同じ文字セットでエンコード方式が違うだけだから機械的に変換できるのよ。
計算の仕方は調べてね。
って、アンタに言ったんじゃないわよ! さっさと行きなさいよ!
264デフォルトの名無しさん:2009/09/12(土) 06:59:58
そもそもUTF8もUNICODEの一種な訳だが
265デフォルトの名無しさん:2009/09/12(土) 17:31:23
モデルを作るときにパーツを分けてモデルを作れるけど
普通に読み込むと全部同時によみこむよなあ
パーツだけ別に読み込んで操作って出来ないのかなあ?
266デフォルトの名無しさん:2009/09/12(土) 18:34:35
出来る出来ないもなにも、自分がやるかやらないかでしかないんだが、
お前は操り人形か何かなのか?
267デフォルトの名無しさん:2009/09/12(土) 19:17:47
D3DXLoadMesh〜()に出来るか出来ないかを聞いてるに決まってるだろうが
お前がスレタイを百遍読み直せ
268デフォルトの名無しさん:2009/09/12(土) 19:19:25
決まってねぇよどこのバカだよ
269デフォルトの名無しさん:2009/09/12(土) 19:21:22
>>268
決まってないなら他に何があるか書いてみろよ
270デフォルトの名無しさん:2009/09/12(土) 19:23:52
考えたことなかったが
たぶんメッシュアニメーションを参考にしてみるのといいのかこういうの・・・
271デフォルトの名無しさん:2009/09/12(土) 19:42:24
xファイルの操作法とかっしょ
俺は知らん
272デフォルトの名無しさん:2009/09/12(土) 19:43:50
SDKを今さっきインストールしたらDirect 2Dのd2d1.hとかのファイルがありませんでした
どうやって入手するのが良いのですか?
273デフォルトの名無しさん:2009/09/12(土) 19:45:36
正式リリースまで待つのが良いです。
どうせDirectX11対応のビデオカードまだねえし。
274デフォルトの名無しさん:2009/09/12(土) 19:47:58
DirectX11ってDx10や9と比べて使い心地どうよ?
275デフォルトの名無しさん:2009/09/12(土) 23:56:28
>>267
DirectXを使うこととD3DXに頼り切ることは全くの別
勝手に決めつけるな
276デフォルトの名無しさん:2009/09/13(日) 00:11:15
昔このスレで、メッシュやらアニメーションコントローラーについて色々教えてもらったけど、
そこで言われた一言

「自作したほうがいい」

正しかった。
(でも、D3DXをいじくりまわして理論を学ぶのは有用だと思う)
277デフォルトの名無しさん:2009/09/13(日) 00:29:39
ゆとりの知ったかぶりが痛い
D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
それ前提で自作する事も考える
プログラムできれば当たり前の事だ
まったく何も解らないのに、詳しそうに見えるように書いて悦にはいってるんじゃねーよ
278デフォルトの名無しさん:2009/09/13(日) 00:47:14
>>272
最新版は入ってるはずだよ
279デフォルトの名無しさん:2009/09/13(日) 01:53:25
>>265,267,277
質問する側がそんな態度でどうする。お里が知れるというものだ。
280デフォルトの名無しさん:2009/09/13(日) 02:17:52
じゃあ俺のお里を行ってみろ。
生まれは海無し県だ。
学校は青山にあったが今はない。
281デフォルトの名無しさん:2009/09/13(日) 03:07:46
>>280
>生まれは海無し県だ。
埼玉県民かよw
神奈川県民よりランク下になった感想はどうなんだよこのクズw
282デフォルトの名無しさん:2009/09/13(日) 07:37:27
誤: じゃあ俺のお里を行ってみろ。
正: じゃあ俺のお里に来てみろ。
283デフォルトの名無しさん:2009/09/13(日) 09:09:02
>>277
だったら最初からD3DXで出来るかどうか聞けば良かったのに、
他人に責任転嫁とはどれだけ甘やかされて育ったんだろう?
284デフォルトの名無しさん:2009/09/13(日) 09:10:50
答えとしては出来るけど、細かい機能を実装していくなら自前で組んだ方が楽という話。
285デフォルトの名無しさん:2009/09/13(日) 09:26:43
粘着必死すぎ
モデルデータ分割するだけで実現出来ることの為に自作しろとかアホだろw
286デフォルトの名無しさん:2009/09/13(日) 09:34:11
>>285
>D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
>それ前提で自作する事も考える
287デフォルトの名無しさん:2009/09/13(日) 15:09:17
スプライト厨がいなくなったと思ったら何この状況
288デフォルトの名無しさん:2009/09/13(日) 15:32:23
Xファイル厨も同根だからなあ
根絶やしにせねばいつまでも初心者がはびこったままだ
289デフォルトの名無しさん:2009/09/13(日) 15:33:53
まあな
でもパーツだけ動かすってのはちょっと興味が湧いたな

Xファイルから特定のメッシュを取り出すようなのを作ってみるとするか
290デフォルトの名無しさん:2009/09/13(日) 15:45:15
どうせDrawSubsetで描画していくんだから、全体読み込んだって別に問題ないような気がするんだが。
291デフォルトの名無しさん:2009/09/13(日) 16:04:09
Xファイルほど、色々なツールでサポートされ、仕様がわかりやすいフォーマットはないだろ?
勉強用には最適だよ。

だが、理解したら自前フォーマットにしとけ。
アニメーション大量に入れたら、ロードに10秒とか20秒とかかかるんだぜ。
自前フォーマットにしたら1秒かからなかったわ。

いくら拡張性やらに気を使われているとはいえ、遅すぎだぞXファイル。
292デフォルトの名無しさん:2009/09/13(日) 16:08:51
自作の人は自前でモデラソフトの保存用プラグイン書くの?
293デフォルトの名無しさん:2009/09/13(日) 16:09:49
そういう時もあるし、Xファイルのようなわかりやすいフォーマットで出力してから、変換かける場合もある
294デフォルトの名無しさん:2009/09/13(日) 16:13:56
seleneにも独自形式あるし、
ゲームデータのリッパーとかもソース公開されてるから
書けなくは無い
295デフォルトの名無しさん:2009/09/13(日) 16:33:30
自前フォーマットってどうやんの?
圧縮とかするの?
296デフォルトの名無しさん:2009/09/13(日) 16:35:35
圧縮はしないな。
例えば頂点データをmemcpyでいっきにVRAM上にコピーできるようにする。
これだけでも速度が圧倒的に違う。

Xファイルは、ファイルフォーマットエラーに対処するためかデータをかなり細かく読んでる。
自前なら「エラーがないことを前提に」高速化が可能なわけさね
297デフォルトの名無しさん:2009/09/13(日) 16:36:46
ほー
ちょっとやってみるかな

でもPシェーダーとかやったけど
何にも利用してねえなあ・・・
298デフォルトの名無しさん:2009/09/13(日) 16:47:52
>>297
俺は今作ってるゲームで、
モデルデータはXファイル
アニメーションデータは自前にして、ID3DXAnimationControllerを作成

ってやってる。
アニメデータが大量にあると、Xファイルの読み込みが超遅かったんでな。
モデルデータの読み込み速度は0.1〜0.3秒くらいなので不満はない。
299デフォルトの名無しさん:2009/09/13(日) 16:48:40
>>298
追記。
ID3DXAnimationControllerは、ちょっと複雑なことやるとバグ満載なんで
次回作ではぜってー使わないって心に決めてる。
もう理屈はわかったので、頼る必要もないしな。
300デフォルトの名無しさん:2009/09/13(日) 17:15:48
>>298
それは行列でアニメーションデータを並べているせいでは?
きちんと位置、回転、スケールでキーフレームを作っておけばデータがそんなにでかくなることはない。
読み方云々以前にデータそのものを見直した方がいい。
301デフォルトの名無しさん:2009/09/13(日) 17:26:43
ID3DXAnimationControllerを変な風に使おうとして動作不良起こさせてるんじゃないの。
302デフォルトの名無しさん:2009/09/13(日) 17:53:54
正しく使うのが大変で、自分で作った方がマシ。
303デフォルトの名無しさん:2009/09/13(日) 18:27:29
あれよりヒエラルキーのほうがめんどい
なんで最初から積んでないんだ?
304デフォルトの名無しさん:2009/09/13(日) 19:35:40
ロード時間が長いのは別にXファイルの形式のせいじゃなくね?
DXライブラリ(だっけ?)で読んでいるからじゃないかな。
他の3Dフォーマットと比べても、さして特殊な形式とは思わないし(古いけど)。
ちなみにXファイルはバイナリ圧縮形式もあるよ。

今は色々なツールでサポートされているんだな。俺の頃はどの3Dモデラも
中途半端な扱いしかしてなくて、速攻で候補から外されちゃったよ。
305デフォルトの名無しさん:2009/09/13(日) 20:18:16
Xファイル使ってる人って、ロード後に境界級のサイズも計算するんでしょ?
ゲームの起動時に毎回それやるって、アホらしくならない?
306デフォルトの名無しさん:2009/09/13(日) 20:25:18
じゃあ何かに記録するようにして最初だけ計算しては?
307デフォルトの名無しさん:2009/09/13(日) 20:32:57
・・・と、そうやって追加情報を加えていけば結局自前フォーマットに行き着く
308デフォルトの名無しさん:2009/09/13(日) 21:00:29
そもそも境界級など存在しない。
存在しないものは計算しようがない。
309デフォルトの名無しさん:2009/09/13(日) 21:10:36
xファイルやd3dx.h使ってる奴をおとしめて、俺tueeeしてるだけ
310デフォルトの名無しさん:2009/09/13(日) 21:29:16
古いDirectXのサンプルにファーみたいなやつを実装したのがあったと思うんだけど
あれってテクスチャ重ねてるだけなの?
311デフォルトの名無しさん:2009/09/13(日) 21:42:42
サンプルなんだからソースを確認しろよ
312デフォルトの名無しさん:2009/09/13(日) 21:47:41
そんなことよりラブプラスやろうず
313デフォルトの名無しさん:2009/09/13(日) 21:49:54
ラブプラスの悪魔
314デフォルトの名無しさん:2009/09/13(日) 22:26:53
きちがいのフリしなくても元から頭おかしかったろ
315デフォルトの名無しさん:2009/09/14(月) 00:14:31
>>300
ああ、データは膨大だよ。
BVHからとり込んだりして、かなり動きを細かく作ってるからね
これでも一応無意味な中間データの削除とかはしてるんだぜ
316デフォルトの名無しさん:2009/09/15(火) 15:47:47
D3DXIntersectのレイって二つの一番近い面しか判定されないの?
317デフォルトの名無しさん:2009/09/15(火) 15:48:52
間違った
2つの面があった場合近い方の面しか判定されないの?
318デフォルトの名無しさん:2009/09/15(火) 17:11:01
カーソルがウィンドウの端でとまるんだけどfpsみたいに無限に右に動かしたりできないの?
319デフォルトの名無しさん:2009/09/15(火) 17:43:55
>>318
おめえ円周率はいくつって習った?
言ってみろ
320デフォルトの名無しさん:2009/09/15(火) 17:46:31
>>318
ちゃんと、DirectInputなりで「相対値でのマウス移動量」を取得すると、FPSみたいなこともできるぞ。
絶対値でやろうとすると、デスクトップからマウス飛び出ちゃったら困るだろ?
321デフォルトの名無しさん:2009/09/15(火) 20:19:06
>>319
3.1415926535
322デフォルトの名無しさん:2009/09/15(火) 23:41:17
>>319
3
323デフォルトの名無しさん:2009/09/16(水) 18:32:31
>>319
3.2
324デフォルトの名無しさん:2009/09/16(水) 20:21:05
>>319
2.2360679
325デフォルトの名無しさん:2009/09/16(水) 23:02:29
ダイレクトインプット使わなくても、毎フレーム
マウスを中心に移動させてやればいいだろ
326デフォルトの名無しさん:2009/09/16(水) 23:06:38
ウィンドウモードだとどうするの?
毎フレーム戻そうが、画面外でボタン押したら入力とられちゃうよ
327デフォルトの名無しさん:2009/09/16(水) 23:09:21
D3DXFontでMSゴシックを指定して文字を出したら
どんなに文字を大きくしてもアンチエイリアスがかかりません
どうやったらいいですか?
328デフォルトの名無しさん:2009/09/16(水) 23:10:14
>>326
クリッピングすればいいだけだろ
WinAPIの基本的なことはDirectXやる前に少しぐらい知っとけ
329デフォルトの名無しさん:2009/09/16(水) 23:13:48
>>327
フォントが不適切ではないか。オプション(使い方)が間違ってないかを中心に再調査する。
330デフォルトの名無しさん:2009/09/16(水) 23:36:27
わかった
よく見るとアンチエイリアスはかかってた
でもアンチエイリアスの質が悪すぎて、かかってないように見える
PROOF_QUALITYでも同じだった
仕方ないから2倍のサイズに表示してリニアフィルタで縮小して使うか
でもフォントのサイズを2倍にしても大きさって2倍にならないんだよな
くそったれ
331デフォルトの名無しさん:2009/09/17(木) 00:45:18
マウスカーソルを真ん中に戻すのは、ネガティブアクセルの原因になるからやめた方がいい。
DirectInputを使う場合も、バッファを十分に用意しておかないとネガティブアクセルが発生する。

XP以降ならRawInputが一番いい。
SDKのヘルプにRawInputでマウスを扱う説明あるから、それを参考にするといいかと。
332デフォルトの名無しさん:2009/09/17(木) 01:04:43
>>330
D3DXCreateFontだったかでフォントの大きさを指定するときに
高さを基準に大きさを指定できるだろ
だからフォントサイズがどうとか関係ない
333デフォルトの名無しさん:2009/09/17(木) 14:07:41
ポリゴンの平面に沿うように物を配置したいんだけど
どうすればいいんでしょうか?

法線の傾きとって回せばいいのかなあと思いましたが
その方法がわかりませんご教授願います
334デフォルトの名無しさん:2009/09/17(木) 15:51:13
>>333
物とは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をワールド空間の変換行列にすればいい。
335デフォルトの名無しさん:2009/09/17(木) 16:00:48
>>・R軸は変わらない。 
>>・S軸は平面の法線と平行 
>>・T軸はR軸と平面の法線の外積 
ごめんごめん、これちょっと違うわ。
新しいR軸は、S軸と直交する範囲で、任意に決めてね、
336デフォルトの名無しさん:2009/09/17(木) 16:40:46
○×に似たような記事があった気がする
337デフォルトの名無しさん:2009/09/17(木) 17:25:49
>>335
ウィ
方向性が見えたんでなんとかしてみます
338デフォルトの名無しさん:2009/09/21(月) 07:42:59
任意の3D座標(x,y,z)をカメラから見た2D座標(x,y)に変換するにはどうすれば良いですか?
339デフォルトの名無しさん:2009/09/21(月) 07:48:19
>>338
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換

ワールド変換でワールド座標(ワールド座標)
ビュー変換でカメラ座標(カメラのローカル座標)
射影変換で同次クリップ空間(xyが-1〜1になるzは0〜1)
ビューポート変換でスクリーン座標(スクリーンの座標になる)
340デフォルトの名無しさん:2009/09/21(月) 07:51:14
スクリーン座標の数値を取り出せる関数はありますか?
341デフォルトの名無しさん:2009/09/21(月) 07:55:39
画像を動かせるすごい関数はありますか?
342デフォルトの名無しさん:2009/09/21(月) 07:56:53
DirectXというのは画像表示できるんですか?
343デフォルトの名無しさん:2009/09/21(月) 07:59:52
DirectXとC言語ではどちらの方が優秀なのでしょうか?
ご教授お願いいたします。
344デフォルトの名無しさん:2009/09/21(月) 08:08:38
>>340
D3DXVec3Projectこれかな?
345デフォルトの名無しさん:2009/09/21(月) 08:55:57
>>344
DirectXって何?
346デフォルトの名無しさん:2009/09/21(月) 09:01:44
>>345
Microsoft DirectX は Windows プラットフォームでハイパフォーマンス、ハイクオリティ グラフィックスを実現するための業界最高のテクノロジーです
347デフォルトの名無しさん:2009/09/21(月) 15:35:46
DirectSoundの勉強中なのですが、セカンダリバッファの作成で躓いています
DirectSoundデバイスの作成、協調レベルの設定、DSBUFFERDESC構造体の設定、WAVEFORMATEX構造体の設定は問題ないと思うのですが、
IDirectSoundBuffer *ptmpBuf=NULL;
if(SUCCEEDED(pDirectSound->CreateSoundBuffer(&m_DSBD, &ptmpBuf, NULL)))
{
ptmpBuf->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*)pDirectSoundBuffer);
ptmpBuf->Release();
}
ここのCreateSoundBufferが成功せず、QueryInterfaceが実行されていないようです
あちこち調べたのですが、原因がサッパリ分からず困り果てています
問題点をご指摘してくださると、大変助かります
348デフォルトの名無しさん:2009/09/21(月) 15:38:05
よくわからんけど、NULLアドレス渡しても大丈夫なの?
349デフォルトの名無しさん:2009/09/21(月) 15:43:22
scanf("%d", &n)のnのように、&ptmpBufの値から何かをするのではなく、CreateSoundBufferによって作られたデータを格納するのがptmpBufなので
恐らく問題は無いと思います。第3引数は、NULLでなければいけないようです
350デフォルトの名無しさん:2009/09/21(月) 15:55:05
>>347
動くコードをコピーしろよ
そんなので悩むのは駄目
自分で書いて動かないなんてはプロでも結構アリガチ
そんなのどうせライブラリ作った人間しかわからないんだからはじめから動くコードを入れるしかない

お前のやりかただと一生かかってもゲームなんて完成しない
351デフォルトの名無しさん:2009/09/21(月) 16:13:36
>>347
というかまずCreateSoundBufferが返してるエラーコードを調べるべきでは・・・
352デフォルトの名無しさん:2009/09/21(月) 16:29:53
>>347
まず350が言ってるように他人が書いてチェックされた(できればDirectX公式の)サンプルコードをそのままビルドして確かめること。
サンプルが存在しないような世界ならともかくDirectXならいくらでもサンプルがある。

それからDirectX関係のAPIはありとあらゆるところでエラーが返ってくる可能性があるので、
SUCCESSEDチェックではなくてちゃんとエラーコードを取得できるようなコードを書くこと。

この2つをやらないと、いつまで経っても能率も品質も上がらないよ。
353デフォルトの名無しさん:2009/09/21(月) 16:34:23
エラーコードを調べたところ、DSERR_INVALIDPARAMが返されているようでした
無効なパラメータが関数に渡されたようです
つまりm_DSBDの値がおかしい可能性があるようですが、これはmsdnのリファレンスを丸々写しただけなのでこのままでは問題箇所が分かりません
とりあえず、ちゃんと動くサンプルプログラムを探して、そこから何が悪かったのかを調べてみることにします
354347:2009/09/21(月) 17:27:04
すいません、原因が分かりました
DSBUFFERDESCの設定がおかしかったようです
m_DSBD.dwSize = sizeof(DSBUFFERDESC);
と書くところを
m_DSBD.dwSize = sizeof(DSCBUFFERDESC);
と書いていました
コンパイルは通ってしまっただけにこんな単純なミスで5時間以上悩んでいたのが悔しいっ…ビクビク
皆さん、助言どうもありがとうございました
355デフォルトの名無しさん:2009/09/21(月) 17:45:48
>>354
DirectXに限らず、プログラム動かしててエラーが発生したら、
まずはエラーメッセージどおりに物事を考えること。
最初からDSERR_INVALIDPARAMというエラー内容にしたがって
引数がどうなってるかチェックしたらそんなに時間食わなかったはず。

プログラムは思ったとおりに動かない。
書いたとおりに動く。
356デフォルトの名無しさん:2009/09/21(月) 18:27:24
DirectSoundとXAudio2ってどちらを学ぶべきですか?
357デフォルトの名無しさん:2009/09/21(月) 18:37:48
>>356
断然XAudio2。
実装が圧倒的に簡単な上に、VistaだとどうせDirectSoundアクセラレーションが効かないので。
358デフォルトの名無しさん:2009/09/21(月) 19:19:39
XAudio2はすばらしいのになぜXInputはあんなにガッカリなのか
359デフォルトの名無しさん:2009/09/21(月) 20:35:46
XAudioはハードウェアに依存しないけどXinputはハードが対応しないと使えないからでは
360デフォルトの名無しさん:2009/09/21(月) 21:01:13
いやそれはそうなんだけどなんで古いハード丸ごと切り捨て。
さらに現状はXBOX360のコントローラーしか対応パッドないとか論外すぎるだろ。
361デフォルトの名無しさん:2009/09/21(月) 21:03:04
>>359
いや、だからなぜそういう仕様にしてしまったのか、ってことだろ
まあXBOX360コントローラーをPC用の標準コントローラー的な位置づけにしたいってとこだと思うけど
362デフォルトの名無しさん:2009/09/21(月) 22:04:46
あれ10ボタン縛りだけどどうなんかね。
ゲームによってはあまったボタンをショートカットにふれたりして便利なんだが。
363デフォルトの名無しさん:2009/09/21(月) 22:23:27
direct3d9でD3DXSPRITEを作成し、D3DXMatrixScalingをつかって行列を作成し
テクスチャを張り付けて、縮小をしてるんですが
xのみ縮小すると問題なくx軸方向に縮小できる、同様にy軸のみ縮小でも問題ありません
ですがxとyを同時に縮小しようとするとなぜか画像が暗くなります(小さければ小さいほど暗くなる)
拡大では全く問題ありません、解決策をしってる方がいたら教えていただけると助かります
364デフォルトの名無しさん:2009/09/22(火) 00:04:02
D3DXSpriteなんか使うなよ
普通に変換済みの頂点で描画したほうが楽だろ
365デフォルトの名無しさん:2009/09/22(火) 06:56:17
>>362
昔PS2でキーボードマニアというゲームのUSB接続の専コンがあってだな
366デフォルトの名無しさん:2009/09/22(火) 09:41:41
>>364以外の方に答えて頂きたいです
367デフォルトの名無しさん:2009/09/22(火) 09:45:40
そもそもD3DXSPRITEは列挙子であって作成するものではない。
368デフォルトの名無しさん:2009/09/22(火) 09:54:13
自分が使っているインタフェイスの名前すら確認しないような馬鹿は、
そもそもプログラムには向いていない。
369デフォルトの名無しさん:2009/09/22(火) 10:10:56
>>363
通常の3Dメッシュを描画する場合なら、
トランスフォーム行列を適用した結果、頂点法線の長さが変わって
暗くなるというのはある。
ただし、D3DXSpriteは基本的にライティングをOFFにするので
これは起こりえないようだ。

ところで、Begin()に渡すD3DXSPRITEは、どう設定している?

>>367-368
そう言うな。ここは初心者板だし、
なかなか面白い事象じゃないか。
370363:2009/09/22(火) 10:25:42
>>364
ふつうに4角形ポリゴン作ってテクスチャはっつけたらできました
ありがとうー

>>369
どっかで見たソースほぼそのまま
pSprite->Begin(0);
pSprite->Draw( pTex, NULL, NULL, NULL, 0xffffffff );
pSprite->End();
だったと思うけどもう書き換えちゃたんでわからないです
371デフォルトの名無しさん:2009/09/22(火) 10:30:07
あ、pSpriteはID3DXSpriteです
372デフォルトの名無しさん:2009/09/22(火) 10:55:45
無理だな
描画ステータスに内部で何が設定されてるのかわからんし
spriteなんて使うなってのは原因不明な事象にぶち当たったときに全く検討が付かないからだけどな
固定シェーダもこういうの多い

自分で研究しろw
373デフォルトの名無しさん:2009/09/22(火) 10:59:07
ぐぐったらあったw
D3DXSprite使ってるようなのにこれはきついなw

以下、BBXから転載

>いろいろ作業していましたが、
>どうやら、MIPMAPの設定で縮小時にMIPMAPの切り替えで、
>約半分の設定(縮小)の時にMIPMAPの小さいときの設定がされていなく、
>フィルターでLINEARを指定しているので、
>設定なしの(黒)のものとのフィルター処理をしていて、だんだん
>暗くなっていってしまっていたようです。
374デフォルトの名無しさん:2009/09/22(火) 11:13:23
>>373
なるどね〜そういうことか。
375デフォルトの名無しさん:2009/09/22(火) 11:38:06
>>374
×なるどね〜
○なるほどね〜
376デフォルトの名無しさん:2009/09/22(火) 12:01:34
: | ェェ  ェェ |: :
377デフォルトの名無しさん:2009/09/22(火) 15:41:33
SetviewPortって四角限定?
円とか三角は無理?
378デフォルトの名無しさん:2009/09/22(火) 16:16:18
>SetviewPort
そもそもそんな物はない
379デフォルトの名無しさん:2009/09/22(火) 16:21:40
>>377
ステンシルバッファ使ったらどうよ。
380デフォルトの名無しさん:2009/09/22(火) 19:01:46
他の使いたいなあ
381デフォルトの名無しさん:2009/09/23(水) 13:24:51
d3dx10_41.dllがないと表示されて実行できないのですが何をインストールすればよいのでしょうか?
382デフォルトの名無しさん:2009/09/23(水) 15:24:34
自分の開発環境に合わせて再コンパイルすればエラーは出なくなるよ。
383デフォルトの名無しさん:2009/09/23(水) 15:54:10
>>381
ここはプログラミングのスレなので、ゲーマー用のスレは別だぞと言っておく。
その上で、d3dx10_41.dllは特定のバージョンのDirectX(年数回配信される)にあるD3DXライブラリのDLLだ。
それくらいのバージョンだったら普通に2009年以降の最新のDirectX再頒布パッケージをインストールすればいいと思うよ。
だめだったらファイル名でぐぐってどのバージョンに入ってるか調べてくれ。
384デフォルトの名無しさん:2009/09/23(水) 16:19:11
わかりました。最新のDirectX再頒布パッケージをインストールしてみます。

因みにゲームではなく、マルペケつくろーどっとコムというサイトで、
DirectX10版高速フォント表示サンプルが動かなかったんです。
385デフォルトの名無しさん:2009/09/23(水) 23:54:51
ポリゴンの外周部分にアンチエイリアスかけるのってどうやんの?
386デフォルトの名無しさん:2009/09/24(木) 00:08:58
D3D7ぐらいなら、エッジアンチエイリアスあっただろうから
それ使えば?
387デフォルトの名無しさん:2009/09/24(木) 01:01:37
糞レス入りました
388デフォルトの名無しさん:2009/09/24(木) 01:06:44
2速に入ってるな
389デフォルトの名無しさん:2009/09/24(木) 01:10:25
エッジアンチはソートが必要だから
使い物にならないとおもうんだが。
390デフォルトの名無しさん:2009/09/24(木) 01:19:03
何不思議発言してんの?
アンチエイリアス使う時点で後ろの絵が必要に決まってんだろw
391デフォルトの名無しさん:2009/09/24(木) 01:33:20
ここで華麗にDirectXのバージョンをアンチエイジング
392デフォルトの名無しさん:2009/09/24(木) 01:34:04
>>390
MSAAとかFSAAとエッジアンチの違い分かってないだろ・・・
393デフォルトの名無しさん:2009/09/24(木) 03:14:44
シェーダーで描画しようとしている色が透明のときは
処理が無駄なので飛ばしたいんですけど
どうやればいいですか?
394デフォルトの名無しさん:2009/09/24(木) 03:33:13
>>393
ステンシルバッファを併用しろ。
395デフォルトの名無しさん:2009/09/24(木) 03:54:14
return FLOAT4(0,0,0,0);

これじゃ駄目なの?
396デフォルトの名無しさん:2009/09/24(木) 07:41:20
>>392
誰がそんな話してんの?
死ねよ
397デフォルトの名無しさん:2009/09/24(木) 08:47:51
>>396
肩の力抜けよ、知らないことはこれから知っていけばいい
398デフォルトの名無しさん:2009/09/24(木) 08:57:30
じゃあ、D3D9でエッジアンチエイリアスをやるとして、
1、普通に描画
2、レンダターゲットをテクスチャにコピー
3、ワイヤーフレームでもう一回描画
 このとき、シェーダでマルチサンプリング

これでどうか?
一回コピーが入るのがウザいが、D3D9では仕方ない

>>393
clip(-1)だろ常考
399デフォルトの名無しさん:2009/09/24(木) 09:21:56
普通にMSAA使うのじゃダメなのか?
RenderState設定するだけだし一番簡単だとおもうんだが。

つかD3D9ってエッジアンチできたっけ?
400デフォルトの名無しさん:2009/09/24(木) 10:00:53
Xファイル読み込んで表示してみたのですが、
2004年December以前とその後以降でライティングの結果が変わりました
2004以前だとグーローシェーディングが滑らかにかかってるのが
それよりはフラットに近い感じになっています。
D3DXComputeNormalsの結果が違うような気がするのですが、そういうことってあるでしょうか?
401デフォルトの名無しさん:2009/09/24(木) 10:08:06
ありまくる
っていうかD3DXはバグが多いから気をつけろ
402デフォルトの名無しさん:2009/09/24(木) 10:16:58
え?D3DXって仕様変更よくあるの?
403デフォルトの名無しさん:2009/09/24(木) 10:57:42
>>396
典型的なゆとりだな
404デフォルトの名無しさん:2009/09/24(木) 11:14:12
最近だとD3DXComputeTangentとかな
405デフォルトの名無しさん:2009/09/25(金) 01:42:02
面がどのくらい傾いてるかをしらべたいんだけどどうすればいいんでしょうか?
ポリゴンの法線の成分と垂直なベクトルの成分の内角を計算する・・・のかなあ
406デフォルトの名無しさん:2009/09/25(金) 01:51:39
傾いてるっていうにはどっか基準があんだろ?
atan2でいいじゃん
407デフォルトの名無しさん:2009/09/25(金) 08:52:52
D3DXは、いろいろ変更するのはいいんだけど
それをアナウンスしないんだよなぁ。
例えば、しれっとフラグメントリンカ削除したりさ。
いや別にいらないんだけどさ、
What's Newにぐらい書いてくれてもいいのに。

>>405
そのとおり、普通は面の法線と比較対象ベクトルの内積を使う。
双方が正規化されていれば、内積の結果はcosθになり、
ぜんぜん傾いていないなら+1に、90度傾いていれば0に、
真逆を向いていれば-1になり、わかりやすい。
D3DXならD3DXPlaneDotNormalを使う。
408デフォルトの名無しさん:2009/09/25(金) 09:33:14
>>407
え?今フラグメントリンカないの?
DX10で削除されたのは知ってるけど
409デフォルトの名無しさん:2009/09/26(土) 00:01:07
>>407
DXUTに比べれば天国に思えるよ!
410デフォルトの名無しさん:2009/09/27(日) 11:25:17
立方体を描画するとして、それをどの位置にあっても同じ大きさ(厳密は違うけど)に
するのは可能でしょうか?
例えば1mの立方体をどの位置に描画しても、視点から3mくらいの大きさに描画したいのです。
ただしパースは合ってるようにしたいのです。
411デフォルトの名無しさん:2009/09/27(日) 11:32:04
正射影
412デフォルトの名無しさん:2009/09/27(日) 11:46:52
>>411
D3DXMatrixOrthoRHを使ってみたのですが、CAD図とか
昔あった斜め上視点みたいになってしまいました。
これとはちょっと違うのです。なにかよい例えがあれば
よいのですが。すいません。
413デフォルトの名無しさん:2009/09/27(日) 11:48:51
よくわからんけど、立方体との位置が常に3mになるように
カメラを動かせばいいんじゃね
414デフォルトの名無しさん:2009/09/27(日) 11:53:58
中心座標だけあわせて3mの位置に描画しか方法ないよな
415デフォルトの名無しさん:2009/09/27(日) 12:07:14
論理的に不可能なことをやろうとしたってできるわけがない。
416デフォルトの名無しさん:2009/09/27(日) 12:08:40
ビルボートの事を言ってる・・・わけでもなさそうだし
417デフォルトの名無しさん:2009/09/27(日) 12:17:39
立方体が同じ大きさになるように拡大して描画すればいい
手作業で
418デフォルトの名無しさん:2009/09/27(日) 12:28:53
遠くに行って小さくなる分拡大しながら表示すればいいんじゃね?
419デフォルトの名無しさん:2009/09/27(日) 12:30:56
>>411
>>414
>>415
>>416
>>417
早々にありがとうございます。本屋に行ってました。
3DMaxとかCGソフトの本を眺め見ましたが例えば位置とか回転とかを
コントロールする図形を描画するには、どうすればよろしいでしょうか?
ソフトを触ったことがないのですがCGソフトでこれらの図形は、変更したい
立方体の位置に関わらず大きさが一定になるっている気がします。
420デフォルトの名無しさん:2009/09/27(日) 12:36:40
常に3mの位置にあるように描画したいのではなく
常に画面に対し10%のサイズで描画したいってことかな
421デフォルトの名無しさん:2009/09/27(日) 13:13:06
>>420
表現が適切ではありませんでした。すいません。
おっしゃる通り、常に画面(できればモニターの解像度)に対して
一定の大きさに描画したいのです。テクスチャーに描画して
2D描画してみましたが当然奥行きに対する向きが合っていません。
422デフォルトの名無しさん:2009/09/27(日) 14:03:44
物体が移動したらカメラも移動させればいいだろ。
423デフォルトの名無しさん:2009/09/27(日) 14:31:04
424デフォルトの名無しさん:2009/09/27(日) 15:24:53
>>410
要するに、ここにアイテムがあるとかの記号的な描画をしたいということでいいのか?
Direct3Dにおいては基本的にポリゴンは1個ずつ描画していくものなので、あまり複雑に考える必要はないよ。
普通にカメラ空間でどの位置(XYZ)になるかを計算した上で、Z値を調整すればいいだけ。

パースを正しくというのは意味不明。カメラ空間上正しく描画されるのも正しいし、
何か特定の距離のパースを拡大・縮小されるのだって正しいさ。
425デフォルトの名無しさん:2009/09/27(日) 15:40:02
>>410
(ビュー空間でのターゲットの Z 距離)/(3.0f)で
スケーリングすればいいんじゃないの?
426デフォルトの名無しさん:2009/09/27(日) 15:41:30
要するに、カメラ座標に変換する前に、
カメラ座標原点と、立方体基準点の距離をとってから
スケーリング行列挟めばいいんとちゃうの?
427デフォルトの名無しさん:2009/09/27(日) 15:43:04
ぬおう、リロードしてへんかった。
428デフォルトの名無しさん:2009/09/27(日) 17:03:11
混乱してしまいました。説明が下手なのと考えすぎというよりは無知っぷりで
無理に説明しようとしたためです。出直してきます。

MAYA PLEという体験版っぽいのを入れてみました。大きさを変更したい時に
表示される矢印があります。これは向きがありかすが、大きさを変更したい
オブジェクトがどの位置にあっても(正規化された?)大きさを維持しています。
これができれば自分のやりたいことは満たします。どこかにサンプルプログラムが
あればそこから原理がわかるのですが見当たりません。

また変なことを言っている気がします。すいません。

>>422
>>423
>>424
>>425
>>426
を参考に出直します。
429デフォルトの名無しさん:2009/09/27(日) 18:06:05
ま、ちょっと難しい問題なんで、
このスレには荷が重いんすよ。
スケーリングすりゃいいのはわかった。
で、そのスケーリング係数はどうやって求めるの?的な。
430デフォルトの名無しさん:2009/09/27(日) 19:15:36
>>429
だからさー
挑発して情報引き出すにしても、もうちょいマシな挑発はできないの?
スケーリングの係数なんて、MSDN見りゃ丸わかりなもん(あらゆる関数の計算式が公開されてるんだぜ?)、とっとと見に行けよ
431デフォルトの名無しさん:2009/09/27(日) 19:37:52
そんなもん書いてねえよ
432デフォルトの名無しさん:2009/09/27(日) 19:45:01
あれだろ?全ての変換行列掛けた後にオブジェクトのZ値だけ固定の値を入れてから普通に描画でできるじゃん
433デフォルトの名無しさん:2009/09/27(日) 19:48:31
すいません俺ら無能なんで他所で聞いてもらえると助かります
434デフォルトの名無しさん:2009/09/27(日) 20:05:25
だから、
ビルボードでのカメラ方向への回転の代わりに、
カメラとの距離の逆比例でのスケーリングに置き換えるだけじゃねーの。
もしかしたらもっとシンプルな方法があるかも知れんが。
435デフォルトの名無しさん:2009/09/27(日) 20:09:46
オブジェクトそのものが拡大縮小されても
それに合わせてオブジェクト全体が表示されるように
ビュー行列を設定したいということでは?
436デフォルトの名無しさん:2009/09/27(日) 20:15:22
もうほっとこうぜ。
相手するの馬鹿らしくなってきた。
437デフォルトの名無しさん:2009/09/27(日) 20:26:27
そーな…
438デフォルトの名無しさん:2009/09/27(日) 20:54:22
>>431
ビュー行列も、プロジェクション行列も式が公開されてますが・・・
439429:2009/09/27(日) 21:10:37
>>434
そういうお茶を濁したような
カスみたいな情報はいらないんだって。
だから、このスレの連中には荷が重いって言ってるっす。
440デフォルトの名無しさん:2009/09/27(日) 21:17:57
実装できないとかwww
441デフォルトの名無しさん:2009/09/27(日) 22:26:23
>>439
先に数学初心者質問スレでもいけば?
442デフォルトの名無しさん:2009/09/27(日) 22:45:12
DirectXがダウンロード出来なくなっちまったが、どうしたの?
443429:2009/09/27(日) 22:45:56
俺は検討と検証は済んでる。
ハッタリご苦労さまっす。
444デフォルトの名無しさん:2009/09/27(日) 22:52:56
検討と検証ご苦労様です
445デフォルトの名無しさん:2009/09/27(日) 23:01:01
検討と検証が済んでるならあとはそのとおりやるだけです。
がんばってください。
446デフォルトの名無しさん:2009/09/27(日) 23:33:47
>>439
いや、なんかメガネを自分のおでこにかけてるのに「メガネはどこだ!教えろ!」って言ってる状態だから、滑稽でしかないんだよ
もしかしてView行列とか、Projection行列の意味を知らないの?
447デフォルトの名無しさん:2009/09/28(月) 00:08:21
また、基礎を知らない奴が出たのか?
そういう奴が現れるたびに俺は何度でもこのコピペを貼るぞ
初心者の質問のほとんどがオブジェクト空間からスクリーン座標への変換の仕方を
知らないことからはじまると俺は思っている(よければテンプレに入れてほしい)
昔は宇治社中とかあったけどなw

とりあえず変換ごとに座標系がどの空間に移るか考えたほうがいいぞ
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換

ワールド変換でワールド座標(ワールド座標)
ビュー変換でカメラ座標(カメラのローカル座標)
射影変換で同次クリップ空間(xyが-1〜1になるzは0〜1)
ビューポート変換でスクリーン座標(スクリーンの座標になる)
448デフォルトの名無しさん:2009/09/28(月) 00:23:01
>>446
何かがわかってるというなら、もっと具体的に書いてくださいよ。
例えば、単純に大きさを合わせると言うけど、何と何の何の大きさを合わせるつもりですか?
そこまですら考えてないんでしょ。だからハッタリと言うんですよ。
449デフォルトの名無しさん:2009/09/28(月) 00:31:00
>>447
あなたは寝て下さい
450デフォルトの名無しさん:2009/09/28(月) 01:24:31
質問者の意図としてはもうワールドとか関係ないじゃん
だから使うカメラが全然別なんだよ
単純にただそれだけでいけると思うよ

@ワールド変換 →A ビュー変換 → BC射影変換ビューポート変換

だから
ビュー変換で使うカメラ行列がいまのカメラの行列を使っちゃダメ
射影変換とびゅーぽーとも描画したいとこにあわせるからこれも違うもん用意することになると思う

ってことでワールドにいる状態の物体を描画する方法で描画をするなら
ABCを違うもんにしないとダメってすぐにわかるな

また、もし、仮想空間に別の世界を用意してその描画結果を反映したいなら
@ABCすべて違うものにしなくてはいけないってただそんだけだろ?
451デフォルトの名無しさん:2009/09/28(月) 01:44:32
具体的にコードを書いてやらず説教するおまえらが好きだ
もっとやれ
452デフォルトの名無しさん:2009/09/28(月) 01:54:47
きもちわるい
お前に好かれたくねえよホモ野郎
453デフォルトの名無しさん:2009/09/28(月) 01:58:38
ここまで説明されてわからんとか素敵です
454デフォルトの名無しさん:2009/09/28(月) 03:05:47
コード出るまで粘る気っぽいからスルーだな。
455デフォルトの名無しさん:2009/09/28(月) 03:10:34
2chで調べ物をしたい時は「教えてください」って書いても
なかなか教えてもらえない。

そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。

これを思い出したな
456デフォルトの名無しさん:2009/09/28(月) 03:22:41
コード書いても座標変換のラッシュで意味を理解してないとなんもかんもわからんと思うけどな
457429:2009/09/28(月) 08:27:30
例えば、スクリーン座標系でメッシュを常に一定の幅(v_width_s)で表示したいとする。
大きさを合わせる対象とする為に、メッシュに合った
位置(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分スケーリングする。

以上、終わり
458デフォルトの名無しさん:2009/09/28(月) 08:33:57
視野
▲視野角
物体

視野角の半分の角度(直角三角形を作る)と物体の幅から、
三角関数で視野から物体までの適正距離を求めて、カメラをその距離に置く。
というのが自分的なやり方。
459デフォルトの名無しさん:2009/09/28(月) 08:40:41
そもそも視野角が分かっていれば、余計な変換をかけなくても、
描画幅から距離を求めることも、距離から描画幅を求めることもできる。

アスペクト比と解像度は掛けるなり割るなりはするけど。
460デフォルトの名無しさん:2009/09/28(月) 08:51:34
物体の大きさを変える為にカメラの位置を調節する方法は、
パースが狂うし、Zバッファの不整合が起きそうでお勧めしない。
461デフォルトの名無しさん:2009/09/28(月) 08:55:27
この場合、どうせ距離は無視、パースはそれなりなんだから、
Z値を破壊しても問題ないんじゃね?
どうせレンダリングは最後のタイミングにやらんといかんでしょ。
462デフォルトの名無しさん:2009/09/28(月) 09:38:59
え、Z値無視でいいの?
てっきり「壁の裏のアイテム」にでるマーカーは、壁に遮られるのかと思ったよ
Z値無視なら2D描画でいいじゃんw
463デフォルトの名無しさん:2009/09/28(月) 09:42:29
そもそも質問者が何をやりたいのかって部分が不透明だから混乱するんだよ。
本当に3Dでやる必要があるのかとか他との前後関係はどうするのかとか
どういう意図で行いたい演出なのかとかが待ったく不明。
464デフォルトの名無しさん:2009/09/28(月) 10:13:42
就活用に無駄に3Dで組みたい
465デフォルトの名無しさん:2009/09/28(月) 10:38:28
>>460
観光で写真を撮るときに、被写体に対してカメラの位置を調整するだろ。
それと同じだ。
466デフォルトの名無しさん:2009/09/28(月) 10:59:46
>>465
>例えば1mの立方体をどの位置に描画しても、視点から3mくらいの大きさに描画したいのです。 
>ただしパースは合ってるようにしたいのです。
物体のサイズは固定にしたいが、距離に応じたパースはかけたいってことでしょ。
カメラとの距離を一定にしたら、常に同じパースがかかってることになる。
467デフォルトの名無しさん:2009/09/28(月) 12:58:10
条件通りで、何の問題もない。
468デフォルトの名無しさん:2009/09/28(月) 13:01:08
逆ケースが必要なら距離と幅から視野角を求めればいい。
469デフォルトの名無しさん:2009/09/28(月) 20:39:51
条件通りの条件って何?
あと、「○○だから問題ない」の○○が抜けてない?

逆ケースって何?

ちょっと日本語が不自由過ぎやしないか
470デフォルトの名無しさん:2009/09/28(月) 21:04:08
ちょっと前のレスすら読めない文盲には理解できない。

>ソフトを触ったことがないのですがCGソフトでこれらの図形は、変更したい
>立方体の位置に関わらず大きさが一定になるっている気がします。

そもそもこの挙動はターゲットに合わせてカメラをスナップしているんだから、
カメラ自体の位置を調整して条件通りなんだよ。
>>466の方が日本語が不自由だろう。
カメラとのターゲットの距離を一定にするなんて誰が言ったんだ?
471デフォルトの名無しさん:2009/09/28(月) 21:34:49
>MAYA PLEという体験版っぽいのを入れてみました。大きさを変更したい時に 
>表示される矢印があります。これは向きがありかすが、大きさを変更したい 
>オブジェクトがどの位置にあっても(正規化された?)大きさを維持しています。 
これを読むと、カメラ空間内のオブジェクトの位置は一定ではないように見えるが?
大体、常にカメラとターゲットが一定なら、こんな質問は端から出ないわ。

>>カメラとのターゲットの距離を一定にするなんて誰が言ったんだ?
簡単にまとめるとこういうことだ。

メッシュを表示する時に、矢印オブジェクトを一定の大きさで表示したい。

矢印オブジェクトとカメラとの距離を一定にすれば、
常に同じ大きさで表示されるでしょ。(>>458の方法)

でも、メッシュの映像に違うカメラから撮った映像を合成する形になって、
パースや深度値に不整合が起きるでしょ。
472デフォルトの名無しさん:2009/09/28(月) 22:43:44
やっぱり仕様がわからんのがなんともな
市販のゲームのアレ
って表現でいけねーのか?

俺はこんなの(豚さん)をステータス画面端に出したいのかと思ったぜ
http://image.excite.co.jp/feed/news/extnews/extnews_yatterman080310.jpg
473デフォルトの名無しさん:2009/09/28(月) 22:58:05
例えば普通の3Dマップがあって、その中に宝箱を複数配置
そしてその宝箱がどこからでも一定の大きさに見える
とかそういうのをやりたいんじゃないの?
遠くにあっても見えなくならないように
474デフォルトの名無しさん:2009/09/28(月) 23:25:35
宝箱の上に3Dの矢印を出したい。
ただし宝箱が遠くても近くても、同じ大きさの矢印で表示したい。
2Dでは「壁の裏の宝箱の上に出ている矢印が、壁のせいで見えない」を再現できないのでダメ。
475デフォルトの名無しさん:2009/09/28(月) 23:34:28
2Dでやっても3Dでやっても周囲のものより巨大に表示したら
見えないはずのものが見えることには変わりない気がするんだが

そういうのやる場合って現在の視点からそれが見えるかどうか判定して
見えてたらそこになんらかのマークを2Dで書き込むとかってやるんじゃないか?
476デフォルトの名無しさん:2009/09/28(月) 23:35:43
うるさいな。
477デフォルトの名無しさん:2009/09/28(月) 23:37:45
>419 の話からずれてきてるぞ
478デフォルトの名無しさん:2009/09/28(月) 23:38:57
もう質問者本人がいないんだから、伸ばすなよw
479デフォルトの名無しさん:2009/09/28(月) 23:50:32
スクリーンショットを撮ってUPすればわかる。撮り方がわからないのか?
480デフォルトの名無しさん:2009/09/29(火) 20:26:15
矢印キーで視点移動するプログラムつくったんだけど
移動中にそのウィンドウの上でカーソルを適当に動かすと描画がかくつく・・・
ウィンドウの外で動かした場合はなにもない
これは何が原因なんだ?
481デフォルトの名無しさん:2009/09/29(火) 21:37:44
ウインドウ内でカーソルを動かすと
ウインドウにメッセージが飛んできて
メッセージハンドラが動くから、それかな?
でもそんなに重いとは思えないが・・
482デフォルトの名無しさん:2009/09/29(火) 21:51:30
個人情報を、犯罪者をも含むような輩の中へ出すわけには行かない
483デフォルトの名無しさん:2009/09/30(水) 15:20:09
頂点バッファを自分で確保して球を作りたいんですけど
良いアルゴリズムはありませんか
484デフォルトの名無しさん:2009/09/30(水) 15:34:26
>>483
D3DXCreateSphereで作らせるか、ツールで作ってメッシュデータを読み込ませる。

確かに、2Dで円を描かせる簡単さに比べて2Dで球に内接するメッシュデータを作るのは簡単ではないわなぁ。
485デフォルトの名無しさん:2009/09/30(水) 15:51:34
普通にぐぐれよ
よく確認してないけど、すぐ見つかったぞ
http://ynomura.dip.jp/archives/2009/04/post_35.html
たぶんこういうことだろ?
486デフォルトの名無しさん:2009/09/30(水) 18:58:17
>>483
ポリゴンで球を作る場合によく使う方法は次の2種類
・緯度経度で分割(北極と南極だけ三角形になり中間は四角の面を張る)
・正二十面体などから再帰的に分割する

後者は指向性のないメッシュを構築できるが、ポリゴン数の細かい制御ができないのと
低ポリゴンだと期待したほど滑らかにならないのが欠点。

他には、緯度毎に経度を半分ずらすとか、リンゴの皮向きみたいにStrip1本で
繋げるとか色々あるけど、自分で実装して比べてみるのがいいかと。
487デフォルトの名無しさん:2009/10/01(木) 14:57:04
金属の質感出したいんですけど
どうすればいいんでしょ・・・?
488デフォルトの名無しさん:2009/10/01(木) 16:36:44
環境マッピング
クック・トランスの鏡面反射モデル
異方性ライティング

好きなのを選べ
489デフォルトの名無しさん:2009/10/01(木) 19:57:23
理論はいいからコードで示してくれませんか?
490デフォルトの名無しさん:2009/10/01(木) 20:00:24
うわあまた出た
491デフォルトの名無しさん:2009/10/01(木) 20:36:15
>>489
背伸びすんなよw
自分にできることを一歩一歩こなしていけ
どうせ普通のライティングもよくわかってねぇんだろw
492デフォルトの名無しさん:2009/10/01(木) 20:56:58
つーかその言葉でぐぐれば確実にソース晒してるサイトぐらい見つかるだろ
493デフォルトの名無しさん:2009/10/01(木) 21:19:37
そんな時間かけたら就職活動に役立たないない
お前らみたいに趣味でやってんじゃねーんだ

494デフォルトの名無しさん:2009/10/01(木) 21:22:40
つ 「テクスチャ」
495デフォルトの名無しさん:2009/10/01(木) 21:31:33
つーか実装の方じゃなくね?
要は鈍く光ってりゃ金属に見えるわけだ
その方向で弄れば?

ところでプラスチックの微妙に半透明な感じどーやって再現すっぺ・・・
496デフォルトの名無しさん:2009/10/01(木) 21:39:30
シェーダーが始まった何年も前に論文とか読んだけど

車輪の再発明頑張ってください
497デフォルトの名無しさん:2009/10/01(木) 21:42:25
毎度毎度の事ながらカオスだなあ

つーかスプライト厨が帰ってきたのか?
498デフォルトの名無しさん:2009/10/01(木) 22:03:40
>>495
SSS
499デフォルトの名無しさん:2009/10/01(木) 23:01:27
質問なんですがFPSで人のオブジェクトが飛ぶ時
手足が実際のように回転したり叩き付けられてはね回ったりするのですが
あれはどのようにしているのでしょうか?

読み込んだ時のメッシュコンテナに回転やら重力等の力をかけてるのか
元からそういう動きをアニメーションとして実装しているものなのか・・・
デッドスペースのような物ではバラバラになるオブジェクトを別に用意して
切り替えていると聞きましたが・・・
やっぱり後者で単純に済ましてるのかなあ・・・?
500デフォルトの名無しさん:2009/10/01(木) 23:08:18
ラグドール物理でぐぐれ
端的に言うと、物理シム
501デフォルトの名無しさん:2009/10/01(木) 23:09:29
やっぱそうなんすか・・・
わかりましたなんとかしてみます
502デフォルトの名無しさん:2009/10/01(木) 23:47:16
Bulletにそのもののサンプルが入ってるから、コピペして使えばいい
503デフォルトの名無しさん:2009/10/02(金) 14:26:35
立体映像を作成するためにカメラ2台設置してウィンドウを半分に分けて右側に右目映像、左側に左目映像
とやりたいのですがウィンドウを半分にわけるにはどうすればよいのでしょうか?
504デフォルトの名無しさん:2009/10/02(金) 14:28:34
ウィンドウを分けなくても、ビューポートを左半分、右半分に設定すればいいだけじゃないか?
505デフォルトの名無しさん:2009/10/02(金) 14:34:21
>>504
よければ詳しく教えていただけないでしょうか?
506デフォルトの名無しさん:2009/10/02(金) 14:38:05
SetViewportで、ウインドウ全体ではなく左半分(もしくは右半分)を指定するんだ。
507デフォルトの名無しさん:2009/10/02(金) 14:38:42
難しく考えなくても、まずはウインドウ半分にバックバッファの内容を描画すればいい。
そうしたら残った半分にもう一回描けばいいだけのことに気がつくから。
508デフォルトの名無しさん:2009/10/02(金) 14:41:24
回答ありがとうございます
なんとかやってみたいと思います
509デフォルトの名無しさん:2009/10/02(金) 16:43:39
ブレンディングの設定で、RGBを加算、Aを乗算で
2つのテクスチャを重ねあわせる方法ってどうやるのでしょうか??
教えてください
510デフォルトの名無しさん:2009/10/02(金) 17:51:27
>>509
固定パイプラインの場合、2とおりある。
1.先にレンダーターゲットに1枚目を普通に書き込んでから2枚目を加算する。
2.レンダーターゲットに1枚目のテクスチャを指定して2枚目を加算で描画する。

[2]の方が高速だが、1枚目のテクスチャは破壊される。
固定パイプラインでも1枚目と2枚目の演算を別々に設定できるようなら(試してないんで分からない)
同時に書き込むことも可能だと思う。ただZオーダーによる優先順には注意。

シェーダーを使うなら、そのようなプログラムを書け。以上。
511デフォルトの名無しさん:2009/10/02(金) 18:02:41
いやマルチテクスチャブレンディングの指定が知りたいんだろ、常考
512デフォルトの名無しさん:2009/10/02(金) 18:13:31
>>510
レスありがとうございます。
用途としては、画一的なブレンディング用のグラデーションと
普通に用意した画像をブレンドさせたいと思ってます。
普通に用意した画像はほとんどがpngで、画像の縁が透明処理されていますので
ただの加算だと、その部分にまで影響が来てしまいます。

1の方法で描画しました。

>>511
その通りです。
エスパーさせてしまいすみません。
513デフォルトの名無しさん:2009/10/02(金) 18:24:22
[ステージ0]
D3DTSS_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
514デフォルトの名無しさん:2009/10/02(金) 18:25:03
もはやシェーダーが使えないPCなんて存在してないんだから
これを機にシェーダーに切り替えるのが正解
515513:2009/10/02(金) 18:30:26
ステージの順が逆かも。ひさしぶりで忘れてもうた。
516デフォルトの名無しさん:2009/10/02(金) 19:38:46
ステージ0
RGB加算、α乗算指定
引数1:前のブレンディングステージの結果を使用(ステージ0の場合0xffffffffとなる)
引数2:ステージ0のテクスチャステージのテクスチャデータ

ステージ1
色:COLORARG1をそのまま出力
α:ALPHAARG1をそのまま出力

ステージ2
出力の無効(初期化?)


513さんの回答をもとに調べてきました。
0と1が逆なんですかね?
あとステージ2は何をしてるんでしょうか?
517デフォルトの名無しさん:2009/10/02(金) 19:49:24
>>516
そう0と1が逆。
ステージ2は、ブレンディングステージは全部で8つあるんで、
ステージ1で処理を終了する為に設定する。
といってもデフォルトでDISABLEになってるんだが。
ということで、>>513でいうところの1->0->2が正しい設定。
どうも俺の記憶では、この順番が逆だった気がするんだよなぁ。
518デフォルトの名無しさん:2009/10/02(金) 19:57:43
>>517
なるほど。
理屈がわかったので、あとはtry&errorでやってみます。
ありがとうございました。
すごく助かりました。
519デフォルトの名無しさん:2009/10/02(金) 22:42:37
Direct3D9でマルチモニタが動きません。
ヘルプ通り、Direct3D9作成→窓1個作成→デバイス1初期化→デバイス2初期化→デバイス1Resetの手順でやってるんだけど、
デバイス1から描画しようとしてもバックバッファのクリアでInvalidCall、
デバイス2から描画しようとしても、PresentでinvalidCallになりまふ
画面解像度とか、一瞬変わるんだけど、すぐ戻っちゃう…
マルチヘッドでは動くんだけど、画面4つ出す必要があってどうしてもマルチアダプタも動かしたいの…

教えて薫で申し訳ないですが、教えてください
520デフォルトの名無しさん:2009/10/03(土) 02:37:49
スキンメッシュアニメーションを実装したいんですが
ヒエラルキーの読み込み
メッシュコンテナとフレームの作成
レンダリング
はなんとか考えたんですが
他に考慮すべき物はありますか?

というかいまいち指針がわからないので
指し示して頂けるとありがたいです
521デフォルトの名無しさん:2009/10/03(土) 09:24:30
作って初めて見える景色があるということ
522503:2009/10/03(土) 10:17:19
SetViewport を使ってスクリーンの一部に描画はできたのですが
シーン内に複数のビューを描画するときにSetViewport を繰り返して使うと
最後にSetViewportで設定したものしか描画されないのですがなにがいけないのでしょうか?
523デフォルトの名無しさん:2009/10/03(土) 10:34:32
SetViewportでググって上位にきたサイト

ttp://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d12.htm
524デフォルトの名無しさん:2009/10/03(土) 10:46:50
>>523
そこも見ましたがおそらくビューポートを設定した度に描画をしないといけないと思うのですが
自分のいじってるサンプルは描画は違うクラスで行っているのかもしれないです
ttp://www.dotup.org/uploda/www.dotup.org213348.zip
525デフォルトの名無しさん:2009/10/03(土) 10:49:58
そもそもPresentを二回やれば、ビューポートを使う必要性が無い。
526デフォルトの名無しさん:2009/10/03(土) 10:52:19
すみませんURL間違えてました
http://www.dotup.org/uploda/www.dotup.org213368.zip
527デフォルトの名無しさん:2009/10/03(土) 11:23:45
>524
思ったんなら試せよ
528デフォルトの名無しさん:2009/10/03(土) 12:57:23
>>524
そりゃあなた、2台のカメラから見える異なる2つの景色を描画したいんだから、2回描画するしかあるまいよ
529デフォルトの名無しさん:2009/10/03(土) 21:42:29
1つ質問させてください。
今現在、MicroSoftが封印しようとしているDirectX8を無理に使う利点はあるでしょうか?
・WindowsMEで動く。
以外に、描画速度や単純な処理の重さの問題が気になっています。
現在、初めてのDirectXでDX9を勉強しているのですが、今後固定機能の描画が
DX10でなくなるとの事で、HLSLでの描画を学びました。
そして作ったものを古いPCでテストしたところ、プリミティブ一個の描画すらまともにできませんでした。
そこで固定機能に移行する際、気になったのがDX8とDX9の速度の違いです。
(単純にそのPCでDX8ゲーがつるつる動いて、同じようなことをしているはずのDX9ゲーがかくかくしたので)
もしも大幅に違うのならば、がんばってDirectX8を発掘しようと思っております。
利点の他にも難点があれば、ご教示願いたいです。
・仕様変更にかかわるエラーなど解決しないといけない。等でしょうか、、?
530デフォルトの名無しさん:2009/10/03(土) 21:45:06
古いPCがどの程度古いのかは別としてプリミティブ1個も
出なかったって言い方するって事は初期化は成功しているんだろう。

つまりDirectXのせいじゃなく君のプログラムが悪くて表示されていないという事だ。

初期化すら出来ない場合はサポート対象外の環境という事になる。
531デフォルトの名無しさん:2009/10/03(土) 21:52:44
>>529
例えばIntel GMA950みたいな環境ではVertexShaderがないから、
デバイスの初期化のときにソフトシェーダーを指定しておかないと描画されない。
しかも実行時エラーは出てこないので結構困ったりもする。
(たぶんPIXとかでなら見られるんだろうが)

その辺は確認した?
532デフォルトの名無しさん:2009/10/03(土) 21:56:44
>>529
まずは実験環境を明確にすること。
同じようなこととはいったい何をどのようにしたのか明確にすること。
つるつる、かくかくとは、それぞれがFPSになったのか明確にすること。
以上をまずははっきりさせろ、話はそれからだ。
533デフォルトの名無しさん:2009/10/03(土) 22:04:54
あやふやになっている物をあやふやで済ませようとする奴は、
プログラマには向いていない。
534529:2009/10/03(土) 22:12:16
すみません。最低限の情報を明記しておりませんでした。
>実験環境
古いソニーのVAIOです。
CPU:Intel MobileCPU PentiumV 1133MHz
メモリ:256MB
Mobility Radeon
チップ:M6(LY)
DAC:IntarnalDAC(350MHz)
メモリ:16MB

>初期化
確かに座標変換を行ったプリミティブは表示されませんでした。
ですが、変換済みプリミティブ(2D板ポリゴン)の描画自体は成功しました。
この辺りも良く分からないのですが、、ゲームを製作中で、速度は0.7FPSというところです。

535デフォルトの名無しさん:2009/10/03(土) 22:14:46
>0.7FPS
それは本当にHALで動いているのか?
536デフォルトの名無しさん:2009/10/03(土) 22:20:00
それレベルじゃDirectX8にしたところで無駄だろ・・・。
つかそのレベルを対象にゲームなんて作ってどうすんだ・・・
537529:2009/10/03(土) 22:27:51
>あやふや
時間が無くて、なるべく無駄を省きたいと先走ってしまいました。申し訳ありません。

ゲームの実験状況はどう説明すれば良いものか、、、
DX8のゲームは60FPS出るのですが、DX9のゲームは大体40FPS程度です。
やっていることは大体70くらいのプリミティブで構成された3Dの背景と
2Dのオブジェクト100個程度描画されている状況でしょうか?
特別重くなるようなエフェクトは特にかかってないと思われますが、
どうしても曖昧になってしまいますね(汗)

一番知りたいのはDX8とDX9の描画速度の違いです。もしかしたら
自分の気づかないエフェクトがDX9のゲームにかかっているのかもしれませんので。
538デフォルトの名無しさん:2009/10/03(土) 22:31:20
D3D8だろうが9だろうが、速いとか遅いとかは無いよ。
結局同じ機能を使う分には同じだよ。
ただ使える機能に違いがあるんで、差が出るとすればそこ。

D3D8は初めてのシェーダ搭載で、いろいろと未整備。
D3D9は主流だった期間も長いせいもあって、安定してるし
得られる情報も多い。あえて8を選ぶ利点はないよ。
539529:2009/10/03(土) 22:35:03
>>535
>>536
自分なりに考えたところではHLSLのエミュレートに
ものすごい処理を持っていかれているのでは?と思ったのです。
固定機能で実験してから質問したほうが良いでしょうか?

単純にDX8は速いのかどうか知りたかったので、、申し訳ありません。
もし実験してから出ないと答えが得られないならば実験してきます。

540デフォルトの名無しさん:2009/10/03(土) 22:36:57
超大雑把な説明

          その格ゲーの対応   PCの対応  DX8のゲーム         
2倍速処理機能     ○          ○        ○      DX8
4倍速処理機能     ×          ○        ○      DX8
8倍速処理機能     ○          ×        ×      DX9

8倍速処理をしたいところだけどPCが対応していないので4倍。
その4倍は格ゲーが対応していないので2倍速処理に落ち着いた。
DX8のゲームは4倍速処理が出来るから格ゲーより結果的に速くなった。

541529:2009/10/03(土) 22:37:44
>>538
回答ありがとうございます!よく分かりました。


板を汚してしまい申し訳ありませんでした。
542529:2009/10/03(土) 22:45:09
>>540
分かりやすい説明細かな疑問まで晴れました。本当にありがとうございます!
543デフォルトの名無しさん:2009/10/03(土) 22:55:37
>>540
倍速処理ってなんのこと?
544デフォルトの名無しさん:2009/10/03(土) 22:59:57
>>540
恐ろしくわかりづらいけど、
HWで速いケースとSWで遅いケースを言ってるんだな。
545デフォルトの名無しさん:2009/10/03(土) 23:00:44
細かく書いたところで意味がないから出た言葉じゃね?
絡む要素が多すぎるからむしろシンプルで分かりやすい。
546デフォルトの名無しさん:2009/10/03(土) 23:33:18
ちょっと質問です。XP、Visual Studio 2005、Direct3D9 を使っています。

ゲームを作っているのですが、仕様上、fps固定ではなくできるだけ速く動かす必要があります。
ただし、画面の描画はディスプレイの垂直同期にあわせたいと思います。
つまり、

while (1) {
 while (垂直同期のタイミングが来るまで) {
  /* フレーム処理 */
 }
 /* 描画処理 */
}

といったことをしたいです。
この 「垂直同期のタイミングが来るまで」 の判定方法が見つかりませんでした…。

デバイスのステートとして D3DPRESENT_INTERVAL_ONE を使うと、
垂直同期を待っている間は何も処理できないので、垂直同期1回につき1度しかフレーム処理が行えず、失敗です。
また、D3DPRESENT_INTERVAL_IMMEDIATE を使うと、垂直同期を待たずに描画されてしまい、これも失敗です。

何か方法はないでしょうか?
よろしくお願いします。
547デフォルトの名無しさん:2009/10/03(土) 23:51:58
垂直同期のタイミングってものすごい短い時間だから
タイミングがくるまで他の処理なんて組み方してたら永遠に描画できないよ。

1秒間の60回の垂直同期が行われるとしてティアリングを起こさないのは
帰線期間の間だけだから他の処理しつつ待つなんて時間的にシビアすぎて無理。

素直にスレッド使え。
548デフォルトの名無しさん:2009/10/04(日) 00:01:57
垂直同期のタイミングで、ってのは
昔のDirectDrawでは、IDirectDraw::WaitForVerticalBlankを使えば可能だった。
D3D9に同じような機能は多分無いだろう。
549デフォルトの名無しさん:2009/10/04(日) 00:05:35
と思ったらあった。
IDirect3DDevice9::GetRasterStatusでいける。
ただ>>547の言うように、有用かどうかは別。
550546:2009/10/04(日) 00:11:16
今まで D3DPRESENT_INTERVAL_IMMEDIATE で数百フレーム出ていたのが、
垂直同期とずれるのを避けるため D3DPRESENT_INTERVAL_ONE にした途端、
(当たり前ですが) 60フレームしか出なくて困っていました。

>>547-549
ありがとうございます!

>GetRasterStatus
試してみます。進捗があればまた報告させていただきます。
別スレッドで描画することについても検討してみます。

ありがとうございました。
551デフォルトの名無しさん:2009/10/04(日) 01:03:17
>>534
すげーでかい声で笑ってしまったw
552デフォルトの名無しさん:2009/10/04(日) 01:05:27
>>547
スレッドでガチでWindowsのスレッドなんか使ったら奴等は
何秒単位で反応する仕様になってるの?
少なくともメッセージがこないと動かないわけだからそのラグはあるよね?
場合によっては無理なんとちゃう?
553デフォルトの名無しさん:2009/10/04(日) 01:35:18
下記の3つの情報からカメラのパン・チルト・ロールって計算できるのでしょうか?

1.注視点の位置
2.カメラの位置
3.カメラの向きの上方を示すベクトル

ヒントでもご存知の方いますか?
554553:2009/10/04(日) 01:36:44
ちなみにその逆の計算は知っています。
555デフォルトの名無しさん:2009/10/04(日) 01:40:14
>>553
できるんじゃね?
アークタンジェント当たり使いまくればいけんじゃね?
556デフォルトの名無しさん:2009/10/04(日) 01:49:24
>>550
最近は液晶モニタ用にブランク期間を削ったタイミングが使われていることがあって、
VBlankが物凄く短い環境もあるから、VBlank中に何かするような発想は避けた方がいいよ。

内部処理をできるだけ速く回しつつ、表示はモニタのタイミングに合わせたいなら、
内部処理と描画でスレッドを分けるのが一番いい。
557デフォルトの名無しさん:2009/10/04(日) 02:02:15
xfile.exe の 0xfeeefeee でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfeeefeee を読み込み中にアクセス違反が発生しました。

サンプルに付属されていたxファイルなら読み込めるのですが
それ以外のxファイルだと上記のエラーがでてしまうのですがなぜでしょうか?
サンプルはここのを使ってます
ttp://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d12.htm
558デフォルトの名無しさん:2009/10/04(日) 07:34:43
シェーダの記述方法について質問です。

float4 Color : COLOR;

このColorの中身についてなんですが、
Color.a
とα値を参照しているサイトがあります。
RenderMonkey1.82をエディタとして活用している最中ですが
このツールだと、
Color.w
Color.x
Color.y
Color.z
と出てきます。

エディタの予測が間違っているだけでしょうか?
559デフォルトの名無しさん:2009/10/04(日) 09:43:56
DirectX11の初心者向けのコードを惜しげもなく公開しているサイトはありませんか?
560デフォルトの名無しさん:2009/10/04(日) 09:52:33
>>558
シェーダーでは xyzw = rgba になっとる。

>>559
SDKのサンプル
561デフォルトの名無しさん:2009/10/04(日) 11:17:51
>>557
0xfeeefeeeってのは、deleteされたかなんかして無効になった変数を示す。
要はそのプログラムがバグってるんだよ。
562デフォルトの名無しさん:2009/10/04(日) 12:00:45
>>557の試してみたけど、問題出ないなあ。
ファイルによるのか?
563デフォルトの名無しさん:2009/10/04(日) 12:01:31
ってxファイルだけ流用か・・・
564デフォルトの名無しさん:2009/10/04(日) 14:44:18
ttp://www.dotup.org/uploda/www.dotup.org218741.zip
ttp://www.dotup.org/uploda/www.dotup.org218742.jpg

setviewportで左右それぞれに描画したいのですが原因が分からず右側しか描写されません
どなたかわかりますでしょうか?
お願いします
565デフォルトの名無しさん:2009/10/04(日) 15:24:43
SetViewportで設定して描いたら、もういちどSetViewportして描けばいい
566デフォルトの名無しさん: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でコンパイルしているようなのですが
これにはどのような意図があるのでしょうか?
567558:2009/10/04(日) 16:42:21
>>560
ありがとうございます。納得しました。
568デフォルトの名無しさん:2009/10/04(日) 16:57:02
>>566
シェーダー的には2.0でも動く。
対応された世代が3.0世代だから便宜上そうなってるだけ。

当然2.0対応ハードウェアでも動かないカードは沢山ある。

動くかどうかはCAPS次第。
569デフォルトの名無しさん:2009/10/04(日) 17:53:58
ポリゴンの特定の点を動かすにはどうすればいいんですか?

ポリゴンの頂点の並びから読み出して
頂点データを書き換えるのかなあ・・・?
570デフォルトの名無しさん:2009/10/04(日) 18:17:52
>>568
なるほど・・「シェーダのバージョンは2.0だけど複数ジオメトリはサポートしている」というカードを
動作対象にいれるための措置ということですね?

>動くかどうかはCAPS次第

D3DCAPS9のページ
(http://msdn.microsoft.com/ja-jp/library/bb172513(VS.85).aspx)
を見た限りでは分かりませんでした。
シェーダのバージョンに関わらずハードウェアインスタンシングをサポートするという
カードを識別する方法はあるのですか?
571デフォルトの名無しさん:2009/10/04(日) 18:27:05
>>569
そう
例えばMSDNの
頂点バッファーの内容へのアクセス (Direct3D 9)
(http://msdn.microsoft.com/ja-jp/library/bb172233(VS.85).aspx)
に説明がある
572デフォルトの名無しさん:2009/10/04(日) 18:29:56
>>571
あーやっぱりそうなんですか
わかりました

ありがとうございます
573デフォルトの名無しさん:2009/10/04(日) 19:49:13
>>570
ヘルプには、vs_3_0からの新機能として
「頂点ストリームの頻度」が挙がっているけどな。
574デフォルトの名無しさん:2009/10/04(日) 21:14:53
>>573
ATiはRadeonX1000系ではシェーダーモデル2.0止まりにしたけど
ドライバーでジオメトリインスタンスには対応したんだよ。
575デフォルトの名無しさん:2009/10/04(日) 23:14:34
>>553

template<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用に書き換えてみた
ヨーとピッチは正しいけどロールの値が怪しいときがある
576519:2009/10/04(日) 23:39:02
519ですが,DX9以前のマルチモニタに関して,
海外をググってもなかなか情報が出てこない・・・
もし参考文献・URLだけでもありましたらお願いします.
スルーされたのに再度書き込み申し訳ないです.

577デフォルトの名無しさん:2009/10/04(日) 23:47:34
何がしたいのかいまいちわからんけど。
窓4つつくってそれぞれに描画って話じゃなくて?
578デフォルトの名無しさん:2009/10/04(日) 23:51:41
違うウィンドウに描画なんて楽勝でできるし
何を悩んでいるのか具体的によくわからないな
579519:2009/10/04(日) 23:52:13
> 577
フルスクリーンで4画面やりたいのですが,
デバイスを2つ作る場合,同じWindowハンドルを渡さないといけないですよね?
かつ,別々のアダプタじゃないと駄目ですよね.
マルチヘッドでやる場合,違うWindowハンドルを渡さないと駄目ですよね?

カード2枚,それぞれで2画面を出すとき,どうしたらいいんでしょう…

580デフォルトの名無しさん:2009/10/05(月) 00:00:08
>>579
できないんじゃない?
4画面やりたいならカード4枚必要なんじゃない?
581デフォルトの名無しさん:2009/10/05(月) 00:02:55
フルスクリーンで4画面ってそもそも4出力対応のビデオカード必須だとおもうんだが・・・。
582519:2009/10/05(月) 00:03:36
一部DualHeadを諦めてデバイスを4つ作成するバージョンでも試してみましたがダメでした…
ヘルプにある
・フルスクリーンのデバイスと同じフォーカス ウィンドウを持たす
・どのフルスクリーンデバイスとも異なるアダプタを表す。
・デバイス1作成⇒2作成⇒1をReset
に従って初期化はOKだったんですが最初に初期化したデバイスをPresentした瞬間デバイスがLostします.
どこかに良い情報ありますでしょうか.
583519:2009/10/05(月) 00:07:08
> 580さん, 581さん
むりですか… orz
了解しました…
じゃぁ諦めてDualHeadのPCを2台にします…
584519:2009/10/05(月) 00:08:57
大事な一行を忘れました ToT

ありがとうございます!! > 577,578,580,581
585デフォルトの名無しさん:2009/10/05(月) 00:09:36
とりあえず
・デバイス1枚モニタ2枚
・デバイス2枚モニタ2枚
はいけんの?

マルチモニタ アプリケーションでは複数のデバイスをフルスクリーンモードにすることができるが、
それは、これらのデバイスがすべて異なるアダプタのデバイスであり、
同じ Direct3D オブジェクトによって作成され、しかも同じフォーカス ウィンドウを共有する場合に限られる。
586デフォルトの名無しさん:2009/10/05(月) 00:10:28
質問です
光の当たり具合によるコントラストは何によって再現しているのでしょうか?
法線ベクトルと光との角度?
587519:2009/10/05(月) 00:13:41
> 585
・デバイス1枚モニタ2枚 ⇒OK
・デバイス2枚モニタ2枚 ⇒×
でした.もし,後者の情報があれば解決できるかも…とは思っていますが.
後者のは一般的なようですが,あまりに一般的すぎてか,Webで情報を
見つけられませんでした.
同じフォーカスwindowのハンドルを与えているんだけど…
とりあえず2画面に渡るおっきいwindow作ってハンドル与えればいいんですよね?
そのあたりの情報がもしあれば紹介いただけると嬉しいです.
588デフォルトの名無しさん:2009/10/05(月) 00:14:23
マウスを画面からはみ出さないようにしたいのですが
どうすればいいんでしょうか?
589デフォルトの名無しさん:2009/10/05(月) 00:14:26
>>586
>法線ベクトルと光との角度?
わかってんじゃん
590デフォルトの名無しさん:2009/10/05(月) 00:15:55
>>588
うぜーからやめろw
591デフォルトの名無しさん:2009/10/05(月) 00:26:01
>>588
それやってるゲームたまにあるけど
マジで切れそうになるほどウザイよ。
592デフォルトの名無しさん:2009/10/05(月) 00:28:02
え?そうなの?
いやあマウスの座標はとれるんだけど
画面外に出ちゃってボタンを押すと変なところ押しちゃうから
避けたかったんだけど・・・

しかたないからマウス使うのやめるか・・・
593デフォルトの名無しさん:2009/10/05(月) 00:30:38
>>587
http://bbx.hp.infoseek.co.jp/
検索欄にマルチモニタとかぶち込んでみるとか・・・
なんかそれっぽいのやってる人いるっぽいけどな
DirectX8の話題っしょ?
594デフォルトの名無しさん:2009/10/05(月) 00:34:42
XAudio2のストリーミング再生のことで質問があります
曲を鳴らすとき、新たにスレッドを作成して
ttp://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここの方法をスレッド内で行うことでストリーミング再生をしているのですが、
曲を途中で止めた後にまた最初から鳴らす方法や、最後まで鳴らし終わった後にループして最初から鳴らす方法が分からずに困っています
何か良い方法をご存じないでしょうか
595519:2009/10/05(月) 00:39:41
> 593
そうですそうです.9は8と同じ方法でできそうです.
検索で出てきました,

・残りのセカンダリ以降のDirect3DDevice8オブジェクトは、
それぞれのデバイスウインドウにレンダリングする。
(D3DPRESENT_PARAMETERSのhDeviceWindowにセット)
デバイスウインドウはフォーカスウインドウの子ウインドウでなければならない。

の,子windowじゃないと,てのを試していませんでした.やってみます.
(この人は失敗しているようですが…)
596519:2009/10/05(月) 01:48:42
ダメデシタ.
window作成時のパラメタに制限でもあるのかな…
子Windowの作り方がイマイチ分かっていない(とりあえずparentに設定するとかしてみました)
のが原因な気もしますが…
画面は両方解像度も変わるし全画面になるし,windowサイズも変更されますが,
すぐに全画面が解けてwindowが見えちゃう…
先日トライした時はデバイス2のクリア,Presentはできたのに,今回はそれすらもできませんですた

もうちょっとWindowsのプログラミングを勉強してまいります
597デフォルトの名無しさん:2009/10/05(月) 01:54:42
全画面じゃなく、画面解像度いっぱいのウィンドウにしちゃえば?
598デフォルトの名無しさん:2009/10/05(月) 02:22:49
>>519
というか、Dx9だと1つのデバイスで複数のディスプレイのウィンドウに書けるんだが。
それぞれでフルスクリーンにするんだぞ(しないと使えない)
これをグループ化されたフルスクリーンというわけだが。
試したんだな? 試したな?

Dx8以前はどうか知らない。
599デフォルトの名無しさん:2009/10/05(月) 02:39:52
ロール、プレイン、ゲーム!
やったこと無い、ひ・と・も〜♪
600デフォルトの名無しさん:2009/10/05(月) 02:40:34
すいません誤爆しました
601519:2009/10/05(月) 02:53:19
> 597
それでも要求は満たせるので,良いということは思いついたんですが,
知識欲求のためにwというか,できないはずはないという思いと,
できないのが悔しいので…
ありがとうございます.解決しなかったらウィンドウでやります!

> 598
CreateDeviceが1つで良いということですか汗それは知らなかったです…
ありがとうございます.試してみます.ちなみに試してなかった…ですorz.
全部のアダプタにCreateDeviceして,という情報に踊らされてた感じですか泣
それぞれでフルスクリーンにすると言うのがいまひとつ分からないですが…
D3DPRESENT_PARAMETERSのwindowedにFalseつけてCreateDevice
するものだと思っていました…
2枚目以降は手動でChangeDisplaySettingsExをするのでしょうか? 

そもそもWindowsプログラミングを始めたばかりなのですいません.
602558: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;
}
としています。
603デフォルトの名無しさん:2009/10/05(月) 07:26:36
>>598
マルチディスプレイって、どちらかというとマルチヘッドの方が特殊な例で
本来は複数のビデオカードを接続して使うもんだよ。
その場合は、ビデオカードの数だけデバイスを作成するもの。

2画面程度ならマルチヘッドで対応できるが、4画面以上となると現状では
複数のビデオカードを使って複数のデバイスが必要。

519はマルチヘッドでは既に出来ている。

>>519
マルチデバイスは経験したことないので推測で言うけど、テクスチャ等の
リソースはデバイスごとに独立しているものだから、マルチデバイスだと
それぞれのデバイスでテクスチャの作成が必要なはず。
その辺のリソース管理はちゃんとやってる?
604558:2009/10/05(月) 07:26:52
描画処理は
・エフェクトをかけたいテクスチャの描画
・テクニック設定
・Begin
・BeginPass
・シェーダへテクスチャを渡す
・SetTexture エフェクト画像のセット
・SetFVF
・DrawPrimitiveUP
・EndPass
・End
という順番で行っています。
申し訳ないですが、原因が特定できないのでエスパー的な回答を求めています。
605デフォルトの名無しさん:2009/10/05(月) 08:36:50
>>604
technichの定義に必要なフラグを書け。
606519:2009/10/05(月) 11:41:34
> 603
フォローありがとうございます.
仰る通りマルチヘッドは既にできました.が,4画面あるようなビデオカードでは
少々重いシーンをレンダリングしてるので,複数ボードにチャレンジしてる次第です.

とりあえずデバイス毎にテクスチャやメッシュの作成をしてますが,ひとまず動作確認のため
バックバッファのクリア→presentだけやってますが,それでも失敗しています.

とりあえずDX8のSDKに複数デバイスのスクリーンセーバのサンプルがあるとの情報を得たので
落してみつつ軽く違いを見てみたのですが今ひとつわからず…
まずはこのサンプルを動かしてみて,動くかやってみて,違いを良くみて,再度報告します.
(なんで最新のSDKにはマルチモニタのサンプルは無いんだTT)
607デフォルトの名無しさん:2009/10/05(月) 12:55:30
>>606
というか、1つのデバイスで全部描画させて、
残りはバックバッファからGDIなんかで転送かけたほうが早くね?
608デフォルトの名無しさん:2009/10/05(月) 13:58:53
アニメーションの描画に再起関数使ってるんだけど
もしかしてこれって遅くなる・・・?
609デフォルトの名無しさん:2009/10/05(月) 14:00:06
マルチヘッド環境でデバイス2つ作成してマルチモニタを試してみたけど、
片方を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つ選んでみて。
610558:2009/10/05(月) 14:00:14
>>605
すみません、調べてみましたが質問の意味がよくわかりません。
もう少し詳しく教えてもらっていいですか?
611519:2009/10/05(月) 14:04:57
> 607さん
なるほど,その手もありますね.ありがとうございます.
両方動かせるようになったら,是非速度比較してみます.
大半プロジェクタなんでどの方法でも60fps出れば良いんですが…
そのほうが簡単だしリソース節約できそうですね.

ちなみに他の手段として,マルチヘッドのプログラムを使って,
DualHead2Gox2なんかも考えてみました.正味4回レンダリングするだけでいいかな,
と思ったりもするのです.(金で解決という裏ワザかもしれませんが…)

どのみちマルチアダプタができると,それに越したことはないので,
(いまとりあえず2x2画面が目標ですが,できれば最終的には6画面出したいのですorz
全画面同じ環境,異なる視点でのレンダリングです.)
いきなりボード3枚ざしはドライバの問題とかソフトの問題とか山積みそうだったので
まずは2枚からやってみたいです.
やや(だいぶ?)特殊な状況ですいません.先に報告したサンプルで頑張ってみます.
612558:2009/10/05(月) 14:12:39
>>610
質問じゃないや、回答だ
613609:2009/10/05(月) 14:41:21
もう一度実行してみたら、普通に動いた>マルチデバイスでマルチモニタ

ドライバが腐ってるだけかなぁ。
マルチモニタの設定変えてると、おかしくなることが多いし。
614609:2009/10/05(月) 14:46:17
原因判明。
どうもDebug Runtimeだとうまく動かないようだ。
615519&606:2009/10/05(月) 14:57:16
> 609
>片方をResetするともう片方がLostしてしまうね。
まったくおんなじ現象です.
>デバイスを2つ作成する際に、異なるビデオカードになるように選択しても駄目かな?
AdapterOrdinalInGroupが0のアダプタを2つ選んでみて。
それもやってみました…

>どうもDebug Runtimeだとうまく動かないようだ。
っていうか,ええええええええ!!
Debugだとだめですと…ちょっといま時間ができたので即効ためしてきてみます.
616デフォルトの名無しさん:2009/10/05(月) 14:59:48
>>594が分かる方、どなたかいらっしゃらないでしょうか?
617デフォルトの名無しさん:2009/10/05(月) 15:02:53
>>610
お前は1から10まで説明されないと理解できないのか?
それは勉強してるとは言わない。話を聞いてるだけだ。
自分で調べろ。technique構文はHLSLで重要な意味を持つんだぞ。
618デフォルトの名無しさん:2009/10/05(月) 15:04:17
>>594
再生しなおし→普通に再生しなおすだけ。
ループ→フラグをつけるだけ。

ヘルプちゃんと読んでるの?
619558:2009/10/05(月) 15:31:13
>>617
ピクセルシェーダとバーテックスシェーダをラッピングしたようなメソッドのことですよね?
だから直接アセンブラで記述することもできる、と理解しています。

私がわからないのは、テクニックの定義にフラグを使用しているのかどうかがわからないのです。
エフェクトのロード時にデバッグ用のフラグや最適化無しのフラグを立てたり等は出来るそうなのですが
そのことを言っているのでしょうか?
それとも、テクニックに複数のパスを作り、それを分けるフラグのことでしょうか?

不勉強で申し訳ない……。
620558: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;
}
621デフォルトの名無しさん:2009/10/05(月) 16:27:16
>>618
XAudio2のボイスは、普通に停止させると自動的に現在の再生場所を保持するので、その状態で再びスタートさせても途中からの再生になるんです
つまり、停止ではなく一時停止の状態なんです
なので、再生が終了したりといった任意のタイミングで、一時停止ではなく停止をさせる、もしくは再生位置を最初に戻す方法を探しているのですが、
ググったりMSDNを探しても見つからないのです
622デフォルトの名無しさん:2009/10/05(月) 17:40:04
>>621
pauseじゃなくてstopかければいいじゃん。
623519&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さんと何が違うんでしょう…
624デフォルトの名無しさん:2009/10/05(月) 17:48:02
>>622
Pauseは無くStopしかないのですが、Stopを実行すると上記の一時停止の状態になるんです
625519:2009/10/05(月) 17:48:21
そういえば書いていませんでした,VGAにはGF7900とGF7600使ってます.
Windowsの起動時に画面乱れるし…相性もあるのかな…

余談ですが,先に指摘されていましたが,どういう条件か忘れましたが,
2つのデバイスで1つの画面(画面1)に
描ける状況になりました.なのになんで画面2に書けないんだろう…汗

さらにDX8SDKが見つからなくて先のサンプルも試せなかったです…
まぁでも読んでみましたが明らかにおかしいところもわからなかったorz
626デフォルトの名無しさん:2009/10/05(月) 17:53:20
>>624
確かにPauseはなかった。スマン。
だがStop時にSourceVoiceを止めて開放(Release)して、バッファも削除したらそれでいいんじゃないの?
別に迷うようなところじゃないと思うんだが。
627デフォルトの名無しさん:2009/10/05(月) 18:14:46
>>620
そんなやり方じゃあ背景残したい場合にどうすんのよ。
628デフォルトの名無しさん:2009/10/05(月) 18:29:21
>>626
えっと、Stop時にはソースボイスやバッファを削除して、再び再生するときにソースボイスやバッファを作り直すということでしょうか

なお、ストリーミング再生の部分は、スレッドを新たに作成し、その中でストリーミングの処理を行っているので、Stop時にそのスレッドを削除し、
再び再生するときにまたスレッドを作成するという方法を取ろうとしたのですが、ExitThread関数を実行した時点でエラーが出てしまい、どうにもうまくいきませんでした
629558:2009/10/05(月) 18:33:41
>>627
背景って残すものなんですか?
毎回描画してるんですが……。
630デフォルトの名無しさん:2009/10/05(月) 22:40:13
長方形のポリゴンを繋げてミサイルの煙を表現しようとしています。
基準点を置いてそこを中心に対の点を置く、それを結んで描画しています。
ビルボード処理みたいなのをかけて出来る限り面がこちらを向くようにしたいのですが詰まっています。
「カメラ→注視点」のベクトルと「カメラ→基準点」のベクトルをD3DXVec3Crossを使い外積を求め(全てのベクトルは正規化済み)、
基準点を中心に求めたベクトルと、、その対に置いていけば出来るんじゃないかなと思ってやってみましたが上手くいかず。
その他色々試していますが似たような結果しか得られていません。
どなたかアドバイスを頂けると嬉しいですorz

631575:2009/10/06(火) 00:07:57
575で書いちゃったけど
オイラー角ってジンバルロックとかあるから
ロール角は求めないほうがいいね
632デフォルトの名無しさん:2009/10/06(火) 00:10:26
8分木ってここで聞いていい話?
633デフォルトの名無しさん:2009/10/06(火) 00:24:03
>>630
やったことねぇけどスクリーン座標にもってきてからつなげてみれば?w
634デフォルトの名無しさん:2009/10/06(火) 00:24:51
>>632
ダメだ
そんなの紙に描いて自分でなんとかしろ
635デフォルトの名無しさん:2009/10/06(火) 01:42:23
>>628
いや、スレッドはXAudio2が勝手に作るものだし……。
ExitThreadを明示的に呼び出すなんて論外。
ヘルプとサンプルをもう一度読み直せ!

>>629
お前はDrawPrimitive1発で終わるような画面描画しかせんのか?
636628:2009/10/06(火) 03:02:43
>>635
ありゃ、そうだったんですか…
http://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここで、ストリーミング再生には個別にスレッドを作る必要がある、みたいに書いてあったんでCreateThreadでスレッドを作成して、
その中でストリーミング処理を行っていました…
というか、そうしないと音楽再生中はひたすらwhile文で回すので、再生中は他のことが出来ないと思ったんですが
ちなみに、最後まで音を鳴らした後に、ループしてまた最初から鳴らす方法はこの方法でも解決しました
(ただ、指定した場所からループする、というようなことはまだ出来ないですが)
637558:2009/10/06(火) 12:35:37
>>635
いわんとすることがよくわからないので、
問題が起こった時に635さんの回答を思い出して描画パイプラインをもう一度見直します。
ありがとうござました。
638デフォルトの名無しさん:2009/10/06(火) 13:56:12
>>636
そんなの、意訳を読んで誤解してるだけ。原文はこう。
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であってプログラマが用意する必要は無い。
組み込みでいくつかのコールバッククラスがあって、利用する際にはそれを継承したクラスを用意して使う。
その使い方が口酸っぱくかかれてると思うんだが?
639デフォルトの名無しさん:2009/10/06(火) 13:59:49
>>637
確かに、背景という用語はちょっと誤解を招く表現だった。スマン。
先に描画したフレームバッファ上の画像データのことを言っている。
ポリゴン同士ならZバッファがあるから描画順が違ってても問題ないが、
αかけるならZバッファ使えなくなるだろ?
じゃあ半透過にするには背景(in_color)の色と混ぜないといけなくなる。
640デフォルトの名無しさん:2009/10/06(火) 15:08:03
>>639
詳しい回答助かります!
確かに作成した画像の一部が被さるような描画を行うとおかしくなりますね。
今現在、ゲームのインターフェース部分でのみの使用なので
画像が被るような処理を行わないようになっています。

今後それ以外の用途が出た場合にプログラム側でZバッファで
描画する順番をソートするプログラムで回避しようと思います。
ありがとうございました。
641デフォルトの名無しさん:2009/10/06(火) 21:11:51
>>638
なるほど、そうでしたか
ttp://msdn.microsoft.com/ja-jp/library/bb669177(VS.85).aspx
ここの方法だと、再生が終了するまでwhileで回し続けていたので、終了するまで他の動作が出来ない→スレッドを作成して、その中で処理する必要がある
と思ってましたが、回し続けなくても、メインループの中で、コールバックがあったときだけ次のバッファにデータを入れれば良かったんですね
メインループの中で処理できるのなら、途中でストップ→最初から再生、なども簡単に出来そうです
642デフォルトの名無しさん:2009/10/06(火) 21:35:13
>>614
なにがメインループや。コールバックと言ってるじゃないか。
全然人の話聞いてないだろ。
643デフォルトの名無しさん:2009/10/06(火) 21:47:02
>>642
あ、てっきりコールバックは、条件を満たしたときにそれを知らせるだけかと思ってました
OnBufferEnd内でストリーミング処理を行えばいいんですね
644デフォルトの名無しさん:2009/10/06(火) 21:57:28
あー、違う、コールバックを継承したクラスを作成すると、それがスレッドみたいな扱いになるんですかね
だから、CreateEventとかしなくても問題ないと
すいませんちょっと頭の中整理してきます
645デフォルトの名無しさん:2009/10/06(火) 22:12:10
ああダメだやっぱり混乱してる
CreateEventしなくていいわけないだろCreateThreadだ
646デフォルトの名無しさん:2009/10/06(火) 23:16:44
DirectInputを使用している他のアプリに対して、ダミー入力を送りたいのですが
どうすればいいのか、よくわかっていません。

フックするなどのキーワードが出てきましたが
フックする方法も良く分かっていません。

何か参考になるものや方法をご存知の方いらっしゃいますか?
647デフォルトの名無しさん:2009/10/06(火) 23:20:22
>>645
いや、イベントハンドルも基本的には要らないし。
いちいち付き合ってられんな。もうちょっと勉強してから書き込んでくれ。
648デフォルトの名無しさん:2009/10/06(火) 23:21:18
DirectInputを使う必要あるの?
649デフォルトの名無しさん:2009/10/06(火) 23:38:33
>>648

どういうことだろう。

他のアプリがDirectInputから情報を見てるから
そこにダミーの情報を送ってやれば良いと
考えているのですが。
650519:2009/10/07(水) 06:11:07
どうしても駄目ですね…マルチデバイスでマルチモニタができません…

>> 609さん
DualHeadのVGAでも,マルチデバイス出来ましたか?
もし可能なら,参考になりそうな情報か,ソースを一部分でもいいので
頂けるとありがたいです…
651デフォルトの名無しさん:2009/10/07(水) 11:51:56
動的な頂点バッファって、普通に考えて頂点バッファが2倍必要ですか?

1つ目:デバイス用
2つ目:アプリでいじくる用

デバイスから頂点を読むと遅くなるので
コピーを渡す必要があり、結果、動的バッファで速度を重視するなら
頂点量が2倍になるという考え方は普通ですよね?
652651:2009/10/07(水) 12:47:00
>>651
いや・・・静的なバッファでもManagedを指定すれば
結局背後で自動的にメモリが確保されたりするし
かといって静的なバッファをDEFAULTするにも自分で
バックアップを用意しないといけないから結局2倍必要であり、
静・動関わらず、頂点データの領域はは2倍必要という事か・・
653デフォルトの名無しさん:2009/10/07(水) 14:02:34
頂点バッファを読み込まなければならないようなプログラムを組むんだったら、
シェーダで何とかすることを考えた方が有用だろう。
654609:2009/10/07(水) 18:48:40
>>650
エラー処理も終了時の後始末もないような酷いコードで良ければ。
ttp://www.dotup.org/uploda/www.dotup.org230822.zip.html
ダウンロードパスは609

動作確認はGF9600GTのデスクトップ機と、945GSEのネットブック。
どちらもDualHeadの環境。

そして今試したら、DebugRuntimeでも動いてしまった。
この前駄目だったときから変えたのは、ネットブック用にHWT&Lの判定を
追加したくらいなんだけど。
655デフォルトの名無しさん:2009/10/07(水) 20:59:58
>>651
リアルタイムですべての頂点を不定形に動かしまくるなら話は別だが、
普通は頂点バッファの一部だけが変わればいいので、
すべての状態を表した1個の頂点バッファを用意して、
毎フレームIndexBufferを作り直している。
IndexBufferもWriteOnlyで1回確保して毎フレーム書き込んでるだけ。
これで何も問題ない。
656デフォルトの名無しさん:2009/10/07(水) 21:58:54
>>655
確かにその場で書き込めばメモリ確保しておく必要ないし
IndexBufferを変えるのは考えていませんでした。
657650:2009/10/07(水) 22:19:52
>> 609
ありがとうございますっ!!感謝感激です.
だうそできました!!そしてコードを読んでみました.
やはりWindowハンドルの与え方まわりが違いそうです.
子窓にしなくてもできてるんですね・・・へるぷの馬鹿…
今日から出張中につき一週間ほどテストできないのが口惜しいんですが,
ありがとうございます!
Debugでも動くなら何よりです.参考に頑張ってみます!
658デフォルトの名無しさん:2009/10/08(木) 04:43:30
>>630
カメラがどこを向いているかは関係ない。
カメラの位置とビルボードの位置の問題だから。
カメラの位置とビルボードの位置を結ぶベクトルを正規化したベクトルFから適当なupベクトルとの外積を使って直行基底を求める。
直行基底をなす、3つの単位ベクトルで回転行列を作る。
このとき、逆回転行列を求めたいので最初から転置しておく。
これで、ビルボードをカメラ方向に向ける回転行列が完成。

659デフォルトの名無しさん:2009/10/09(金) 10:18:15
xAudioを使いたいのですが、xWMAフォーマットを使っておけば
データ容量も小さくストリーミング再生も問題ないし、配布についても問題無しですか?
660デフォルトの名無しさん:2009/10/09(金) 11:03:16
>>659
XAudioはXBox360専用。XAudio2がPCでも使えるほうな。
DirectX Audioというなら問題ないんだが。

Direct Show でWMVの再生ができることは確認したが、
音声はogg+vorbisを使えるようにしてしまってるからWMAは試したことないな。
他のやつ答えてやってくれ。

WMAの採用は基本的には問題ないが、OS単体で再生が保証されてるわけじゃないから
コーデックの別途インストールが必要になるケースが出るぞ。
661デフォルトの名無しさん:2009/10/09(金) 12:08:07
>>660
XAudio2を使うのならxWMAの再生は保障されるんじゃないか?
662デフォルトの名無しさん:2009/10/09(金) 12:57:32
>>661
MSDNちょっと読んでみたが、xWMAはWMAのサブセットで、
「XAudio2 と XACT3 の両方において、ソフトウェアで xWMA をデコードできるようになりました」って書いてあるね。

じゃあ大丈夫なのかも。
事実上別形式と思っておいたほうが安全そうだね。
663デフォルトの名無しさん:2009/10/09(金) 14:03:01
>>662
そうだね。
WMAは普通はASFコンテナだけど、
xWMAはRIFFコンテナに突っ込んであるから、普通のプレーヤーで再生できなかったりするし(要はDirectShow経由で再生できない)。

>>659
あーそういや、指定位置に着たら指定位置に飛ぶようなループは設定できなかったっりしなかったっけ?
そういう曲使わないなら問題ないと思うけど。
664デフォルトの名無しさん:2009/10/09(金) 14:41:52
>>663
そういうのはバッファをSourceVoiceで与えるときにフラグで指定できるけど、
正直めんどくさい……(まだ自分では対応させてない)
665デフォルトの名無しさん:2009/10/09(金) 17:52:41
別アプリでDirectXで描画している画面に、図形などを表示したいのですが
別アプリのサーフェイスの取得 または 描画のフック が実現できるような関数あれば教えてください。
(サンプルがあるサイトとかもあると助かります・・・)
うまく説明できないので実際あるやつだと
・DirectXを使うゲームを起動
・frapsやdxtoryなど(DirectXの)動画を録画するツールを起動
・ゲーム画面に fps(フレームレート)が表示される (←これと同じようなことをやりたい)

透明なウインドウを重ねただけだと、片方のウインドウしか動画に録画されないのです。
666デフォルトの名無しさん:2009/10/09(金) 18:10:34
>別アプリでDirectXで描画している画面に書き込み
なんかこのスレみてたらこんな質問が何回も出てくるけど、
何でこんなめんどくさいことばかりこいつらはやりたがるんだ?

アプリからじかにハードウェアを叩けるのがDirectXのいいところなのに、
横から割り込めるようなチャチな作りだったら意味ないだろ。
667デフォルトの名無しさん:2009/10/09(金) 18:24:16
キーボードとマウスの操作をゲーム画面に重ねて動画に保存したいからです。
なんでそんな動画を保存したいのか?って訊かれたら趣味・・かな。
668デフォルトの名無しさん:2009/10/09(金) 19:31:51
XAudio2のことを解説してる書籍ってありますか?
669デフォルトの名無しさん:2009/10/09(金) 22:27:16
待たせるなよ!
670デフォルトの名無しさん:2009/10/10(土) 00:14:38
【MikuMikuDance】ミクを異世界各地で撮ってみた - Where the Hell is Miku? -ttp://www.nicovideo.jp/watch/sm8447612
671665:2009/10/10(土) 00:23:05
>>670
すごい・・。やりたいことはこれに近いですね。もっとかなり簡易版ですが。
"API Hook"で少し調べてみます。ありがとー。
672デフォルトの名無しさん:2009/10/10(土) 00:23:16
>>667
>キーボードとマウスの操作をゲーム画面に重ねて動画に保存したいからです。
ビジネスアプリでほしい場面はあるけど
それはそれでキャプった後で別でつけたほうが早いよ多分
だってどうせコメントだっていれなきゃいけないんでしょ?
673デフォルトの名無しさん:2009/10/10(土) 00:56:52
>>670
キモッ
674デフォルトの名無しさん:2009/10/10(土) 01:55:50
>>670
ちゃんと影が落ちてたりするし、手調整じゃなくて
オートでやってるなら凄い技術だね。
ただシェーダ主体になってくると、簡単にはいかないだろう。
World変換行列がどれかすら判断する術がない。
675デフォルトの名無しさん:2009/10/10(土) 05:41:55
DirectXにてポリゴンとベクトルの当たり判定をとっているのですがうまくいきません
なにか関数の使い方等間違っていますか?
最適化などは後でやるのでとりあえず動くようにしたいです
676デフォルトの名無しさん:2009/10/10(土) 05:44:52
第1引数:直線始点 第2引数:直線終点 第3引数:ポリゴンの座標1 第4引数:ポリゴンの座標2 第5引数:ポリゴンの座標3
BOOL 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;
}
677デフォルトの名無しさん:2009/10/10(土) 06:28:00
XAudio2でwavファイルの音を鳴らすことって出来ないんですか?
サンプルで見たこともない形式のファイルを読み込んでるんだけど
678デフォルトの名無しさん:2009/10/10(土) 07:08:31
どうして無視するんですか?
679デフォルトの名無しさん:2009/10/10(土) 07:28:27
>>678
誰?お前?
680デフォルトの名無しさん:2009/10/10(土) 09:40:39
>>677
普通に出来る
681デフォルトの名無しさん:2009/10/10(土) 09:57:34
土曜の朝に質問して即レスが来ると思う神経を疑う
682デフォルトの名無しさん:2009/10/10(土) 12:37:35
レイ→命中したポリゴンの3頂点を取得→法線ベクトルと命中点の座標取得
ってやってるんだけど
もしかしてレイによるポリゴン判定ってあまりやらない方がいいんですか?
683デフォルトの名無しさん:2009/10/10(土) 12:51:20
>>682
2Dのシューティングで当たり判定がしばしば矩形になっているように、
当たり判定処理は描画してるポリゴンとは別に考えたほうが簡単になる。
3Dの場合ならいくつかの球体と考えればいいんじゃね?
684デフォルトの名無しさん:2009/10/10(土) 13:27:32
>>682
どうしてもポリゴン単位でないとゲーム性に問題が出るつーならそうするが
そうれないなら速度的な問題を考慮して単純な形状で判定するのが基本。
685682:2009/10/10(土) 13:34:20
地面判定に使って上でボールがはねるように
しようとしたんでこうなったんですが・・・

やっぱり速度的にまずいんですねえ・・・
どーすっかなあ・・・
686デフォルトの名無しさん:2009/10/10(土) 13:49:06
>>658
ありがとうございます。
なんとか打開できました。
687デフォルトの名無しさん:2009/10/10(土) 13:49:45
>>685
ボールなら問題ねぇだろw
688682:2009/10/10(土) 13:54:20
というか地面との当たり判定ってどう言う方法が適しているんでしょ?
689デフォルトの名無しさん:2009/10/10(土) 13:56:44
>>676
ちゃんと確認はしてないけど、

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]のケースがはじかれる。
690デフォルトの名無しさん:2009/10/10(土) 14:29:54
>>688
二分法
移動量ぶんだけ進めて、めりこんでたら半分戻して、まだめりこんでたら半分戻して、
めりこまなくなったら半分進めて・・・

というのを、欲しい精度までやる
691デフォルトの名無しさん:2009/10/10(土) 14:34:50
>>688
マップの構造と用途によるなぁ

箱庭を主人公が歩く程度だったら地形判定用簡易ポリゴンを用意して
レイと簡易ポリゴンでいいと思うよ

箱庭で物理シミュとかやるんだったら球(や必要な形状)とポリゴンの判定とか必要じゃね?
これは大変だな

広いフィールドなら格子状の高さマップから平面の方程式だな

後はすべての地形を幾何学形状にして根性で当たり判定?

俺が知ってるのはこんなもんかなぁ・・・
692デフォルトの名無しさん:2009/10/10(土) 16:21:50
3D空間上でソートを行わず半透明のポリゴン(テクスチャ)を正しく描画することは出来るのでしょうか。
Zバッファを有効にした場合、手前にアルファ値0.0に近い値で描画しているものがあるとその奥に描画されても見えません。
無効にすると当然前後関係が無くなり描画順になってしまいます。
描画しているものは雲や煙、レーザーやその他エフェクトと数が多いです。
雲と煙に関しては白黒なので合成方法を変えてやれば何とかなりますが
様々な色が乗っているエフェクトはどうにも出来ませんでした。
描画方法が個々で違ったり数が多かったりしますが、何とかしてでもソートさせないと駄目なものなんですかね・・・。
693デフォルトの名無しさん:2009/10/10(土) 16:48:49
>>692
逆に半透明なオブジェクトを描画するときにZバッファを切ればいいんじゃね?
というか、いつも描画順でソートした状態で描画してるから、そんなことで悩んだことないな。
694デフォルトの名無しさん:2009/10/10(土) 16:55:54
つかコリジョン関連はコレ1つで全部OK!みたいなものはないから
ゲーム性やデータ構造とか欲しい精度とかにあわせて変更しつつ
さらにそのゲームにあわせた細かい調整が必須。
695デフォルトの名無しさん:2009/10/10(土) 17:04:12
>>693
>いつも描画順でソートした状態で描画してるから
平たく言うと何のソートもしてないってことか
696デフォルトの名無しさん:2009/10/10(土) 17:04:59
>>694
正しいかどうか知らんが
そういう抽象的なアドバイスって
何かの役に立つの?
697デフォルトの名無しさん:2009/10/10(土) 17:06:52
ソート不要の半透明は
不完全なD3D11の技術デモで
俺SUGEEEE!!!してるぐらいだから無理じゃね?
698デフォルトの名無しさん:2009/10/10(土) 17:24:05
>>695
逆だ逆。Zバッファをろくにつかってない。
それで済ませてしまってる。
699デフォルトの名無しさん:2009/10/10(土) 17:25:14
昔懐かしいPowerVRはソート不要で半透明できた気がする
700692:2009/10/10(土) 17:26:09
皆さんありがとうございます。
やはりシンプルには出来ないようですね。
とりあえず描画順をソートする対象を減らすことから対応してみます。
701デフォルトの名無しさん:2009/10/10(土) 17:32:43
Zソートなら問題なし!
PSはそうやってました
702デフォルトの名無しさん:2009/10/10(土) 18:36:08
例えがあれだけど、ドラゴンボールのキャラの周りに出る「気」みたいなのはポリゴン単位でソートしないとまずいのかな
703デフォルトの名無しさん:2009/10/10(土) 19:44:25
>>702
モノによるけどあんなのキャラ描画した上にかぶせるだけじゃね?
704デフォルトの名無しさん:2009/10/11(日) 01:13:47
質問です
2D板ポリゴンを作成してテクスチャを一枚貼り付けることはできたのですが、
マルチテクスチャにしようとするとStage0だけ反映されてStage1以降が反映されません
・テクスチャはグローバル変数にLPDIRECT3DTEXTURE9を2つ作ってそこにファイルから読み込みました
・Stage設定とテクスチャのセットはポリゴンの頂点を決めた後に行っています
・ステージ0の設定は加算合成、色1テクスチャ、色2ディフューズ
・ステージ1の設定はα合成、色1テクスチャ、色2カレント にしてます

順序がおかしいのか、必要な手順が抜けてるのだと思いますが、分かる方お願いします
もしくは簡単なマルチテクスチャのサンプルコードあったら教えてください
705デフォルトの名無しさん:2009/10/11(日) 01:22:31
>>704
シェーダー使え。
というか、シェーダー使って例の本読みながらプログラム書いてたら、基本的な部分で迷うことはほとんど無くなったな。
706デフォルトの名無しさん:2009/10/11(日) 01:36:44
現在文字の表示にGetGlyphOutline等を使ってテクスチャに書き込んで表示してるのですが
これだと文字が太すぎてデバッグ用途に不便なのでデスクトップの文字みたいな
細い文字を使用したいのですがどうすればいいのでしょうか
707デフォルトの名無しさん:2009/10/11(日) 02:18:17
>>705
例の本ってなんですか?
708デフォルトの名無しさん:2009/10/11(日) 02:26:25
>>707
お前馬鹿じゃねーの
例の本って言ったら例の本のことだろーが
709デフォルトの名無しさん:2009/10/11(日) 02:33:56
>>706
フォント変えればいいじゃないか
710デフォルトの名無しさん:2009/10/11(日) 02:55:21
>>707
出ると思った。
会社にあるから書籍名調べるのが面倒だったんだが。

これのことね。
http://www.amazon.co.jp/gp/product/toc/4797344962/ref=dp_toc?ie=UTF8&n=465392

この本があれば、あとはMSDNとSDKのサンプルでほとんど事足りるな。
711704:2009/10/11(日) 05:13:29
>705
すいません、意味がよくわかりません
シェーダを使わないとマルチテクスチャは使えないんでしょうか?
2D板ポリゴン(三角形×2)の上に、2枚目のテクスチャを貼り付けたいだけなんですが
712デフォルトの名無しさん:2009/10/11(日) 05:29:12
俺はDirectX9シェーダプログラミングのほうがいいと思うけどな
今切れ氏の本
>>711
その方法もこの本に書いてある

あとシェーダで書けばテクスチャステージとかレンダーステートとか
そういう面倒な設定をしなくても、普通にテクスチャ2つサンプリングして
サンプリングした色を足すなり乗算するなり簡単に出来る
713デフォルトの名無しさん:2009/10/11(日) 07:30:26
>>704
言葉じゃなくて、その部分のコードを正確にそのまま書かないと
何が悪いか分からん。

固定機能でも8枚までテクスチャは貼れる。
714デフォルトの名無しさん:2009/10/11(日) 10:32:06
>>711
>>712が書いてるけどシェーダで組めるようになれば色々楽。
まぁそれまでが大変かもしれないけど、何れ覚えないといけないことなので早いに越したことはない。
715デフォルトの名無しさん:2009/10/11(日) 11:33:55
>>711
ソースも出さずに分かりませんは良くないと思うけど
あまりにかわいそうなので情報だけ

http://marupeke296.com/DXG_TextureStage.html
716デフォルトの名無しさん:2009/10/11(日) 11:42:04
まぁWindows7がそこそこ成功してDirectX11の時代になったら
固定機能パイプラインが無くなるからなぁ・・・。

Vista以降をターゲットでいいならDirectX11は古いビデオカードでも使えるしな。
717デフォルトの名無しさん:2009/10/11(日) 12:16:28
くだらない質問なんだけどシェーダーって一回読み込んだら何回でも使えるんだよな?
LPD3DXEFFECTをクラスに組み込んでオブジェクト数に応じた数をそろえるのって無駄だよな?
718デフォルトの名無しさん:2009/10/11(日) 12:16:53
>>716
無くなったら過去の大量のゲーム類が動かなくなるんだが、
無くなると言うソースはどこにあるんだ?
719デフォルトの名無しさん:2009/10/11(日) 12:21:34
>>718
いやとりあえず動くんじゃね?
だってあの機能ってエミュだろ?
720デフォルトの名無しさん:2009/10/11(日) 12:21:53
>>717
そう無駄。
COMは参照カウンタ付きなんだから
普通にそれぞれ参照を持たせるのが吉。

>>718
Win7でD9D9以前が動けばモーマンタイだろ。
実際どうだかは知らんが。
721デフォルトの名無しさん:2009/10/11(日) 12:25:22
>>718
実際、そういう環境の差異で動かなくなってしまう場合は多い
昔、Cドライブにデータを保存してたアプリなんてセキュリティが厳しくなったせいで
まったく動かなくなってしまったの多いしな
722デフォルトの名無しさん:2009/10/11(日) 12:35:06
固定昨日のエミュレーションなんてげふぉ3の時代からやってる
723デフォルトの名無しさん:2009/10/11(日) 13:19:06
>>722
>げふぉ3
これなんか差異がなかったっけ?
724デフォルトの名無しさん:2009/10/11(日) 14:07:51
>>718
DirectX10から固定機能パイプラインはないぞ。

単にWindowsVsitaやWindows7上でも
過去のDirectX自体は動くから過去のゲームはそのまま動く。
725デフォルトの名無しさん:2009/10/11(日) 15:16:41
2枚テクスチャがあったとして
それがオブジェクトの違う部分に貼ってあるとします

でシェーダーを実装して表示してみたら
なんでかテクスチャの位置が入れ替わっているのですが
これは何でなんでしょうか?
ただ単にSetTextureの部分がおかしいのでしょうか?
726デフォルトの名無しさん:2009/10/11(日) 15:18:51
>>725
1枚貼って様子見て、ついで2枚目を貼るという普通の開発手順を踏んでるよな? な?
そしたらそんな疑問は出ないはずなんだが。
727デフォルトの名無しさん:2009/10/11(日) 15:41:34
すいません参考にしたサンプルから間違ってたようです

でもトゥーンシェーダー組み込もうとしただけなのになんでこんな・・・
728デフォルトの名無しさん:2009/10/11(日) 15:59:46
>>727
おい……板ポリに対してトゥーンシェーダーかけるなんて……冗談だよな……?
冗談と言ってくれ……。
729デフォルトの名無しさん:2009/10/11(日) 16:28:45
マビノギに謝れ!
730デフォルトの名無しさん:2009/10/11(日) 16:37:43
法線マップ用意すればもしかしたらちょっとは絵になるかもしんねー
731デフォルトの名無しさん:2009/10/11(日) 16:59:39
板ポリならアニメ調の絵はって終わりだろ。
どこにトゥーンシェーダー介する余地があるんだ。
732デフォルトの名無しさん:2009/10/11(日) 17:00:04
>>728
そのくらいつくってんだからわかるわw
車の形だよ
したらば上が青でタイヤが黒なのに逆になってんだよ

今調査中
733デフォルトの名無しさん:2009/10/11(日) 17:07:13
>>731
なにいってるの?
バンプなら板ポリでもお日様の位置で陰が微妙に変わるだろ?
変なこというな
734デフォルトの名無しさん:2009/10/11(日) 17:28:49
オンラインゲームを始める前にいろいろと調べてたのですが、
少しわからないことがあるので相談お願いします。

現在グラフィックカードHD4850の512MBをしています。
OSが、VISTAの64BITなのですが、ダイレクトXを導入することにより
グラフィック(ベンチマーク)は向上するのでしょうか?
735デフォルトの名無しさん:2009/10/11(日) 17:30:19
ここはプログラミングの質問をするスレですよ
736デフォルトの名無しさん:2009/10/11(日) 17:33:50
>>735 スレ違いすみませんでした。
737デフォルトの名無しさん:2009/10/11(日) 17:46:44
>>733
ただの板ポリにバンプマップするのかよw
738デフォルトの名無しさん:2009/10/11(日) 18:25:00
>>737
例え板ポリといえど、法線や深度など
必要な情報がそろっていれば、十分意味はある。
単にそれらを頂点で持つか、テクスチャとして持つかの
違いでしかない。
アンタの考え方は一昔前のもの。
739デフォルトの名無しさん:2009/10/11(日) 18:43:48
>>737
デザイナの勝手だろ
奴等がそう作ればそう表示されるようになってるだけだ
ていうかちょっと使い方に驚くけど結構板ポリバンプ使うぞ奴等
740デフォルトの名無しさん:2009/10/11(日) 18:59:44
そもそもの話が板ポリにトゥーンだった気が。
741デフォルトの名無しさん:2009/10/11(日) 19:13:42
>>740
それもデザイナの勝手
742デフォルトの名無しさん:2009/10/11(日) 19:17:38
そもそも板ポリって質問と関係あるのか?
743デフォルトの名無しさん:2009/10/11(日) 19:20:54
てゆか
>>711>>725を同一人物なの?
おれは違うと思ったんだけど
744デフォルトの名無しさん:2009/10/11(日) 19:22:43
違うだろ
車のオブジェクトって言ってるし
745デフォルトの名無しさん:2009/10/11(日) 19:24:20
>>743
馬鹿は頭に血が上ってるから自分と違う意見は全部同一人物なのさ
746デフォルトの名無しさん:2009/10/11(日) 20:54:55
float4x4 matWVP;

float4 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による読み込みの
段階で弾かれるんです、どこを直すべきなのかご教授願えませんか?
747デフォルトの名無しさん:2009/10/11(日) 20:56:30
エラーメッセージの提示もなしで何をご教授なのだろうか
748デフォルトの名無しさん:2009/10/11(日) 20:58:54
いやあ
if( FAILED( D3DXCreateEffectFromFile(pDevice, _T("aaa.fx"), NULL, NULL,
0, NULL, &g_pEffect, NULL)))
{
MessageBox( NULL, "シェーダーファイル読み込み失敗", "", MB_OK);
return E_FAIL;
}
とやってみるとダイアログが出るので読み込んでいないとしか・・・
こういうのってなにか足りないと読み込まないもんなんじゃないんですか?
749デフォルトの名無しさん:2009/10/11(日) 20:59:06
(和訳)エラーメッセージはなんてでてるの?
750デフォルトの名無しさん:2009/10/11(日) 21:06:44
>>748
printfか何かで出力されてるはず
751デフォルトの名無しさん:2009/10/11(日) 21:11:36
HRESULTから文字列を取得できませんかそうですか
752デフォルトの名無しさん:2009/10/11(日) 21:11:50
そもそも返り値ちゃんと見ろって話だろう。
HRESUT型でわざわざ返してくれるんだから。
753デフォルトの名無しさん:2009/10/11(日) 21:13:47
>>746
とりあえず、関数名のPixelShader、VertexShaderは
予約語とかぶるから、別な名前にしたら?

つーかD3DXCreateEffectFromFileの最後の引数をNULLにすんな。
754デフォルトの名無しさん:2009/10/11(日) 21:14:01
とりあえず
D3DXCreateEffectFromFileの戻り値を調べるとか
シェーダー内でコンパイルエラーが出てるなら
怪しいところ
いったん全部コメントアウトしてどこで死んでるのか絞り込むとか
特別な知識がなくてもそれくらはできそうなものだけど
755デフォルトの名無しさん:2009/10/11(日) 21:20:32
初心者スレでフルボッコかよwwwwwwwwww
756デフォルトの名無しさん:2009/10/11(日) 21:21:32
戻り値・・・は-2147467259?
757デフォルトの名無しさん:2009/10/11(日) 21:23:55
>>753
それだ!
VS PSにしたら動きました

馬鹿正直に英語にするんじゃなかった・・・
758デフォルトの名無しさん:2009/10/11(日) 21:24:39
HRESULT: 0x80004005 (2147500037)
Name: E_FAIL
Description: An undetermined error occurred
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4005 (16389)

だそうだ
759デフォルトの名無しさん:2009/10/11(日) 21:27:47
会社でやったら恥かしくて失禁してるレベル
760デフォルトの名無しさん:2009/10/11(日) 21:31:34
fxcに食わせれば直ぐにわかる内容ではあったな。
761デフォルトの名無しさん:2009/10/11(日) 21:33:28
初心者スレだからしかたねえさ
762デフォルトの名無しさん:2009/10/11(日) 21:33:49
ID3DXBuffer *compilation_errors = NULL;
HRESULT 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();
}

763デフォルトの名無しさん:2009/10/11(日) 21:35:23
VC++ならOutputDebugStringAのほうがいいけどね
764デフォルトの名無しさん:2009/10/11(日) 21:39:14
XAudioのXAPOを使っていて、xapobase.libだけがリンクが通らないんだけど、
自分のアプリと関係する全部のライブラリをDLL版のランタイムを使うように直すしかないものでしょうか?
765デフォルトの名無しさん:2009/10/13(火) 15:29:34
>>764
VSのディレクトリ参照でDirectXのディレクトリ参照を最優先にした段階で全体をビルドしてる?
DirectInput関係だったかでPlatformSDK側と干渉することがあるよ。
766デフォルトの名無しさん:2009/10/14(水) 22:01:52
DXUTのサンプル、CutomUIで質問があります
IMEを使いたくてこのサンプルを弄ってるのですが、
以下のようにソースを改変しました
http://www1.axfc.net/uploader/Sc/so/45629.zip
(変更したソース、実行ファイルが入ってます)

大まかにはF8キーが押されたときに
一旦終了処理を行い、再度スクリーンモードの全画面、窓を切り替えて
立ち上げなおすという処理を加えました。
これが問題なく動作する環境もあるのですが、
一部でフルスクリーンのとき限定でIMEに全角文字を打ち込むと??と表示されてしまいます
終了の処理等に問題あったらアドバイスいただければと思います。
767デフォルトの名無しさん:2009/10/14(水) 22:38:40
詳しく見てないが、Comic Sansのフォントって日本語じゃないから、日本語部分をそのフォントで表示したら化けるの必須じゃね



768デフォルトの名無しさん:2009/10/14(水) 22:45:28
説明不足してました、すみません
最初にフルスクリーンで起動すると、問題なく日本語全角入力することができます。

ウィンドウモードで起動し、フルスクリーンに切り替えた場合、
フルスクリーンで起動し、再度フルスクリーンで再起動させた場合
に入力がおかしくなってしまいます。

Comic Sansのフォントはサンプルがそれを使ってたのでそのまま使っていますが
全角で入力した部分だけゴシックっぽい文字で表示されるようです。
またMS ゴシックなどに明示的に変えても症状はかわりませんでした。
769デフォルトの名無しさん:2009/10/14(水) 23:35:00
つーかまず、改変前はちゃんと動いてるのかどうか。
770766:2009/10/15(木) 02:07:32
改変前は問題なく動いています
ソースを見てもらうのと分りやすいのですが、
WinMainの中でDXUTを使ってる部分を終了させ、再度DXUTを初期化して立ち上げ直すという処理を行っていて
この立ち上げ直した際に、フルスクリーン限定でIMEに全角文字が入力できないという症状です。
771デフォルトの名無しさん:2009/10/15(木) 10:20:22
>>770さんとは関係ないけど
大量のポリゴン出すとDXUTのUI系テクスチャがバグる事があるんですが、同じ人いますか?
772デフォルトの名無しさん:2009/10/15(木) 10:31:06
>>771
本当にテクスチャがバグっているのか、
Zバッファやステンシルバッファが汚染されて正しくかけないのか、
あるいはそれ以外の原因なのかによって話が変わってくるな。
773デフォルトの名無しさん:2009/10/15(木) 11:28:46
>>772
う〜む・・確かに試した時にGOMプレイヤーだか何か起動していた気がするし
その関係かも知れません。
もう再現できないので分からない・・。
ご助言ありがとうございます。
774デフォルトの名無しさん:2009/10/16(金) 10:15:48
今までプログラミングやってて、再現しにくいバグは全て読み込んだリソースがおかしいとかだったな
775デフォルトの名無しさん:2009/10/16(金) 10:19:45
へぇ〜、そりゃあ狭い範囲のプログラミングだな。
776デフォルトの名無しさん:2009/10/16(金) 10:27:07
バグのでるようなコーディングしてるからでござるの巻
777デフォルトの名無しさん:2009/10/16(金) 20:29:26
はいはい バグじゃなくて仕様です
778デフォルトの名無しさん:2009/10/17(土) 02:58:57
なにもオブジェクトを置いてないときの
背景の色ってどこでかえんの?

青一色なんだけど・・・
779デフォルトの名無しさん:2009/10/17(土) 04:12:07
IDirect3DDevice9::Clear
780デフォルトの名無しさん:2009/10/17(土) 16:55:03
DirectInputを使って、XBoxコントローラの左右トリガーの値を独立して取得するにはどうすればいいですか?
XInputだと別々の値としてあるんですが、現状DirectInputだと一軸の+-としてしか取れなくて、
左右トリガーを同時に使うと相殺して0とかの値になってしまいます。
781デフォルトの名無しさん:2009/10/17(土) 17:00:07
>>780
それはMSの嫌がらせ的仕様。
XBoxコントローラーのドライバをサードパーティー製に入れ替えれば取れないことも無い。
782デフォルトの名無しさん:2009/10/17(土) 17:05:07
わりと有名なクソ仕様だよな。
783781:2009/10/17(土) 17:14:45
結局配布する場合は、ドライバをインストールさせるわけにもいかないし、
XBoxコントローラを検出したら、XInput使えってことになるんですかね。
784780:2009/10/17(土) 17:15:42
すみません。間違えました。783は781ではなく780です。
785デフォルトの名無しさん:2009/10/17(土) 17:24:29
XInputはなぜかボタン数が10固定の制限があったりと
いろいろXBox360型のコントローラー以外認めないですよ仕様があって鬱陶しいな。
786デフォルトの名無しさん:2009/10/17(土) 18:49:23
頂点バッファだけでD3DPOOL_DEFAULTで
インデックスバッファをD3DPOOL_MANAGED
あるいはその逆とか
複数ストリームに頂点バッファをモデルとインスタンスとに分けて
描画したりする時もモデルだけMANNGEDでインスタンスを
D3DUSAGE_DYNAMIC | D3DUSAGE_WRI-TEONLYのD3DPOOL_DEFAULT
にするのはありですか?
787デフォルトの名無しさん: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;
}
788デフォルトの名無しさん:2009/10/17(土) 18:55:37
DirectXと関係ないです
789デフォルトの名無しさん:2009/10/17(土) 18:59:21
>>787
少なくとも後者はどのモードで起動しているのか分からない。
デバッグを容易にするためにも前者のほうがいい。
ただ、前者もここまで行数が増えるならカッコでくくらないと視認性に欠ける。

790デフォルトの名無しさん:2009/10/17(土) 19:00:08
見苦しいからフラグを配列にブチ込んでfor文で回せば?
4時間前からDirectXの勉強始めた人間なんでテキトー発言だけど。
791デフォルトの名無しさん:2009/10/17(土) 19:01:27
>>787
別にC言語としちゃあ間違ってないが、オレならそもそもそういったダダ書きは嫌だな。
引数を変えたい部分だけを残して残りを固定化したラッパー関数をまず用意する。
で、順にチェックしていって失敗したらエラー処理してreturnするように書く。

void InitD3dDevice() {
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 //全部失敗したのでエラー終了
}
792デフォルトの名無しさん:2009/10/17(土) 19:30:49
DX11で作ろうぜ。どうせ趣味でやるなら楽なほうがいい。
793デフォルトの名無しさん:2009/10/17(土) 19:34:45
俺ならまず処理内容と評価優先度を表すenumを作ったりする。
enum D3DDeviceConfig {
D3DDEVCNF_HAL_MIXED = 0,
D3DDEVCNF_HAL_HARDWARE,
D3DDEVCNF_HAL_SOFTWARE,
D3DDEVCNF_REF,
D3DDEVCNF_MAX, // ループカウント
};
794786:2009/10/17(土) 19:41:12
現実逃避するな
795デフォルトの名無しさん:2009/10/17(土) 20:39:09
で、結局DirectX11はいつ出るの?
796デフォルトの名無しさん:2009/10/17(土) 20:48:31
>>795
もうとっくにDirectX SDKに入ってるよ。
ただベータ版と違って正式版はどうもVistaでは動かない模様。
ちゃんと確認はしてないけど。
少なくともSlimDX経由では動かなかった。
797デフォルトの名無しさん:2009/10/17(土) 21:37:45
>>789
>>790
>>791
参考になります。
こういった記述の多い条件分岐だと、書く人によって結構変わるんですね。

ひとつわからないことがあるのですが、>>789のモードとはなんでしょうか?
視認性の事ばかり考えていて、デバッグに関しては考えていなかったのですが
「モード」というものがわかると前者の方がデバッグしやすくなるんですか?
798デフォルトの名無しさん:2009/10/17(土) 22:06:33
間にDXTRACE_ERRとか挟んだことないの?
失敗したときに何故失敗したのか分からないと
困ると思うんだけど
799デフォルトの名無しさん:2009/10/17(土) 22:54:57
モードはHALなのかなんなのか、つまりどの呼び出しが成功したかってことだろ
800デフォルトの名無しさん:2009/10/18(日) 01:11:28
>>796
さぁ早くDirectX11の解説サイトを開くんだ。
801デフォルトの名無しさん:2009/10/18(日) 01:13:46
Dx10の話題ってあんまり聞かないけど
おめーら使ってる?
802デフォルトの名無しさん:2009/10/18(日) 01:25:08
DirectX11が出たから10は既に空気。
DirectX11で9以降に対応しているハードは動く。
803デフォルトの名無しさん:2009/10/18(日) 02:16:45
俺はXPなんで10なんて使ったことあらへん。
つーかこのまま永遠にD3D9でいーよもう。
んで、ららびーが出たら完全ソフトレンダ化でD3D廃棄、
3D初心者総挫折っと。
804デフォルトの名無しさん:2009/10/18(日) 02:31:18
むしろ、パイプラインがどんどん増えていってHLSLやらCompute Shaderやらで複雑化する一方の
今のDirectXの方が初心者総挫折だと思うけどな。
ソフトレンダ化でD3D廃棄なら、当然MSが代替SDKを出すだろうし。
805デフォルトの名無しさん:2009/10/18(日) 02:51:23
というか、HLSLはきれいにまとまったchmヘルプやらはないのか!
806デフォルトの名無しさん:2009/10/18(日) 03:12:17
DirectX3くらいのころ、Direct3DIMもRMも駄目だと息巻いて
ソフトウェア3Dレンダー作ってた奴って世界で一人くらい生き残ってないの
807デフォルトの名無しさん:2009/10/18(日) 10:11:51
>>804
パイプラインは複雑化したけど、頂点シェーダーとピクセルシェーダーだけで描画は出来るから
別にアレもこれもやろうとしなければAPI自体はいたってシンプルになってるとおもうぞ。

>>805
August2009にグラフィックだけに特化したchm入ってたぜ。

>>806
ある程度の年代以上ならいくらでもいるだろうけど、今はみんなD3Dでシェーダー書いてるんじゃないかね。
若い奴らの方がそういうのまったく出来ないんじゃね。
808デフォルトの名無しさん:2009/10/18(日) 10:47:44
つーか、ComputeShaderなんて必要?
GPUの仮想化が出来てるなら、
今までみたいに、何でもかんでもDX通さなきゃ駄目って
訳じゃなくなったんだろ。

809デフォルトの名無しさん:2009/10/18(日) 10:50:19
まだビデオカードの性能に太刀打ちできる時代ならやろうとも思うが、
今となっては竹槍でB29と戦うようなものだからな。
810デフォルトの名無しさん:2009/10/18(日) 11:56:54
ゲームの物理演算や乱立するGPGPU規格のまとめ役として必要だろ。
Win32APIにインターフェイスを用意したらDirectXとのデータの遣り取りが冗長になる。
GPGPUはCUDAやらBrookやら各社俺が俺が状態で一向に纏まらないし、
おかげでGPU物理演算が普及しないし。
Compute Shaderがあれば、BulletのGPUメーカーに依存しないGPUアクセラレーションの可能性が見えてくる。
811デフォルトの名無しさん:2009/10/18(日) 12:31:10
あと5年ぐらいすれば淘汰されてどれ学べばいいかはっきりするんじゃね
それまではCUDAとCompute ShaderとOpenCLを平行してやるしかないだろ。
まぁBrook+は要らんとしても。
812デフォルトの名無しさん:2009/10/18(日) 17:25:52
XFILEからのアニメーションデータの読み込みが時間がかかるんで
既に読み込んであるアニメーションデータをバイナリデータでテキストに
吐き出しておいて、実行時に読み出そうと思ってるのですが、そういうのって
可能でしょうか?

割りとこういう質問すると「独自形式やれよカス」とレスがつけられるんですが
俺の力じゃ無理だ。
813デフォルトの名無しさん:2009/10/18(日) 17:37:46
可能だろうけどあんまり変わらないのでは?
モーションが一種類で同じ動きをするオブジェクトが複数あるって事?
814デフォルトの名無しさん:2009/10/18(日) 17:44:58
それならバイナリデータのまま出力してそれを読み込まないと速度かわらなくね?
815812:2009/10/18(日) 18:05:13
>>814
ああ、そっかXFILEってバイナリデータ書き出しがサポートされてましたね。
訳の分からない質問してごめんなさい。

XFILEのテキストモードでの書き出し見る限り階層構造とかロード時に内部で
動的にくみ上げてるものだと思いましたが、バイナリモードのXFILEでやりとりすれば
自分が質問したことは普通にやってくれちゃってるのかも。
(つまりDirectXで扱いやすいように展開された状態でバイナリデータ書き出しされていると)

という事はXFILEの書き出しや読み込み時にバイナリさえ指定してしまえばこれ以上早くアニメーションをロードするのは難しいって事ですかね。
うーん。
816デフォルトの名無しさん:2009/10/18(日) 18:24:55
アニメーションデータは、全部必要なのかな?
補間される事、表示同期のコマ数と同じか?
最適化される部分が色々あると思う。
817デフォルトの名無しさん:2009/10/18(日) 18:29:17
バイナリデータでテキストに吐き出しってなんじゃそりゃ
818デフォルトの名無しさん:2009/10/18(日) 20:05:02
間違っても行列でサンプリングされたモーションデータなんて使うなよ。
モーションブレンドが阻害される上に、無駄にでかくなるだけだから。
819デフォルトの名無しさん:2009/10/18(日) 20:42:50
>間違っても行列でサンプリングされたモーションデータなんて使うなよ。
>モーションブレンドが阻害される上に、無駄にでかくなるだけだから。

これってどういうこと?
大抵LightWaveから書き出してるけど、その際はファイルサイズを抑えるために行列(Matrix)で書き出してる。

行列データだから拡大や移動なんかの普段使われないデータも入ってるから
無駄って事でFAなんだろうか?
820デフォルトの名無しさん:2009/10/18(日) 21:07:39
要素をキーフレームではき出せば、サンプリングしなくても途中は補完出来るだろ。
821デフォルトの名無しさん:2009/10/18(日) 21:44:12
影の描画ってどうすんの?
光源からオブジェクトを貫通した光が次に命中する部分を
黒くするようにすれば良いんだろうけど
どうすればいいんだろ?
822デフォルトの名無しさん:2009/10/18(日) 22:05:00
┌―――――――――┐  ┌――┐
|DirectX 影      |  |検索|
└―――――――――┘  └――┘
823デフォルトの名無しさん:2009/10/18(日) 22:05:12
お前のケツを貫通させてくれたら
教えてやってもいい
824デフォルトの名無しさん:2009/10/18(日) 22:06:48
オブジェクトのZ位置をステンシルバッファに書き込んで、
影が必要なオブジェクトをライトの方向に拡大してステンシルバッファにみに書き込み、
交差した位置のバッファを対象に、その位置を暗く塗りつぶす。
825デフォルトの名無しさん:2009/10/18(日) 22:08:21
ただしオブジェクトは隙間がでないように、接合部分にポリゴンを追加しておく。
826デフォルトの名無しさん:2009/10/18(日) 22:12:38
今時ステンシルは無いわ
827デフォルトの名無しさん:2009/10/18(日) 22:13:34
>>824-825
半端な説明なら無い方がいいです
828デフォルトの名無しさん:2009/10/18(日) 22:14:17
とりあえず氏ね
829デフォルトの名無しさん:2009/10/18(日) 22:16:25
>>827
だれだよ
スプライト厨だろおめー
830デフォルトの名無しさん:2009/10/18(日) 22:16:45
831デフォルトの名無しさん:2009/10/18(日) 22:19:52
>>827
Teapotのサイト見ればいい
832デフォルトの名無しさん:2009/10/18(日) 22:27:09
コードを貼ってもらえなきゃ実装できませんてか
833デフォルトの名無しさん:2009/10/18(日) 22:31:04
これってあれだろ
「分からないなら書き込まないでください」
とかいって情報を引き出そうとする下等テックニック

ぐぐれカスと答えればおk
834デフォルトの名無しさん:2009/10/18(日) 22:35:06
初心者スレ全否定ww
835デフォルトの名無しさん:2009/10/18(日) 22:42:23
自分が何を分かってないかすら解ってない人間にものを教えるのは不可能
こういうアプローチで試して見ましたがうまくいきませんでした、なぜですか?
という質問ならいつでも歓迎
836デフォルトの名無しさん:2009/10/18(日) 22:46:52
テクスチャ描画用の板ポリ複数枚を一つの頂点バッファとインデックスバッファでまとめて
DrawIndexedPrimitiveというのは普通だと思うのですが
その際、任意の板ポリを描画しないだとかのオンオフはどのようにしていますか?
私は動的なバッファの場合、ポジションを画面外にするか0にするかとかしか思いつかんです。
静的なバッファならどうにもならないような・・・。
837デフォルトの名無しさん:2009/10/18(日) 22:54:07
まだ初心者の頃はオブジェクトと光源位置からベクトルだして
その方向にぶっつぶして黒くすることでやってたわ
ただ角度のある物体には出来なくて悩んだなあ

ところで二つのオブジェクトが近いとポリゴンが縞々に
なるって見えるんだがこれはなにが原因なの?
一応配置を何とかしてるけど出来るなら解決したい
どうすべきか?
838デフォルトの名無しさん:2009/10/18(日) 22:58:49
>ところで二つのオブジェクトが近いとポリゴンが縞々に

誤差範囲内に入っているとしかたない。近くないようにデータを工夫する
839デフォルトの名無しさん:2009/10/18(日) 23:00:09
>>835
物を教えるのは不可能と偉そうに言う前に
>>824に突っ込んでやれよ
Z位置をステンシルに書き込むって
シャドウマップとステンシルシャドウをごっちゃにしてるんですか?ってよ
お前ら本当につかえないカスだな
840デフォルトの名無しさん:2009/10/18(日) 23:10:03
ググって勉強してきたのかえらいぞ
841837:2009/10/18(日) 23:10:18
>>838
あーやっぱ無理か
調整で何とかすることにするわ
842デフォルトの名無しさん:2009/10/18(日) 23:17:40
>>837
Zファイティング (Z-fighting) という現象
Zバッファの精度不足でZ値が丸められてしまい、
場所によって実際より手前になったり (Z値が切捨てられたり) 奥になったり (Z値が切上げられたり) して縞々になる
なるべく近クリップ面を遠くにして遠クリップ面を近くにすると、1個のZ値が担当する範囲が狭くなって精度が上がるので、
少しマシになるかもしれない (ならないかもしれない)
843デフォルトの名無しさん:2009/10/18(日) 23:39:15
↓影ならGPGPUでレイトレやれと初心者に言う高飛車な回答者
844デフォルトの名無しさん:2009/10/18(日) 23:46:56

null
845デフォルトの名無しさん:2009/10/18(日) 23:49:12
ブラックライトでええねん
846デフォルトの名無しさん:2009/10/18(日) 23:57:29
テクスチャに投影してプロジェクションシャドウとかでいんじゃねぇの
847デフォルトの名無しさん:2009/10/19(月) 00:05:51
>>836
基本的に、ON/OFFは毎フレームIndexBufferを書き直すことで表現する。
そのためのIndexBufferだ。
また、描画順を入れ替えても問題ない場合なら、切り替えたいメッシュを前側なり後ろ側なり集めて
DrawIndexedPrimitiveの描画Primitive数を変更するという方法でもいい。
848デフォルトの名無しさん:2009/10/19(月) 00:09:43
初心者だったら
シャドウマップかシャドウボリュームでぐぐって
自分で使いやすいほうを使えばいいと思うよ
どっちも一長一短だからどっちが良いとはいえないし
849デフォルトの名無しさん:2009/10/19(月) 03:13:54
>>847
ありがとうございます。良く分かりました。
850デフォルトの名無しさん:2009/10/19(月) 09:25:18
普通にシャドウマップしか選択肢ないだろ
他の方法はソフトシャドウが出来なかったりしてだめすぎる
シャドウマップなら指数シャドウマップとかバリアンスシャドウマップとか
あとPCFもあるし

ていうか最近のゲームでシャドウマップ以外はほとんど使われてないだろ
851デフォルトの名無しさん:2009/10/20(火) 01:36:26
いまはGPUパワーでごり押しできるからシャドウマップが主流ではあるけど
DirectX11が主流になればシャドウボリュームが盛り変えすかも知れない
テッセレータとジオメトリシェーダで影の負荷を大分減らせそうな気がしてるんだが
852デフォルトの名無しさん:2009/10/20(火) 02:38:49
シャドウボリュームはデータ作成の時点で面倒だからもう流行らない
853デフォルトの名無しさん:2009/10/20(火) 03:03:07
データで持つんじゃなくて
頂点の生成をジオメトリシェーダで動的にやるって話じゃ?
DX10が流行らなかったからあまり認知されてないみたいだけど
854デフォルトの名無しさん:2009/10/20(火) 03:04:50
閉じたモデリングが面倒
855デフォルトの名無しさん:2009/10/20(火) 06:59:05
閉じていない中途半端なモデリングなんかしたら、
影の生成以前に角度によってあり得ない穴が開いているように見えるだろ。
856デフォルトの名無しさん:2009/10/20(火) 08:51:02
仮にシャドウボリュームを今のGPUでやるとしたら
どれだけGPUにやらせることが出来るのかな?

@境界エッジの抽出
Aシャドウボリュームの作成
Bシャドウボリューム描画x2

@〜BまでCPUの介入無しに行えたら、結構いいかも
857デフォルトの名無しさん:2009/10/20(火) 09:57:48
シャドウボリュームがカメラにめり込んでる状態が非常にメンドイ
858デフォルトの名無しさん:2009/10/20(火) 10:31:09
基本的な質問で悪いが、ちょっと教えてくれ。
フルスクリーンモード(Windowed=FALSE)のときに、モーダルダイアログを表示したいと思っている。
そのまま表示させるとフレームが塗りつぶされちゃってダイアログが見えなくなるんだが、
(マウスの反応そのものはしているようだ)
フレーム描画をやめるだけで普通に表示できるようになるんだろうか?
859デフォルトの名無しさん:2009/10/20(火) 11:36:54
>>857
カーマックが考案した方法なら、カメラがシャドウボリュームの中に入っても平気だよ。
逆にファークリップでシャドウボリュームが切られるとおかしくなるが。
860デフォルトの名無しさん:2009/10/20(火) 11:49:50
>>858
GDI surfaceとFlipの問題があるので、たんに描画をやめるだけでは駄目。
IDirect3DDevice9::SetDialogBoxModeを使えばいい。
861デフォルトの名無しさん:2009/10/20(火) 12:21:53
スキンメッシュで手足の部分に当たり判定がある
オブジェクトがあるじゃないですか
あれの実装って手足のメッシュコンテナのOBBを作って
メッシュの動きにあわせてOBBを回せばいいんでしょうか?
それとも他の方法があるんでしょうか?
862デフォルトの名無しさん:2009/10/20(火) 12:29:31
別にOBBじゃなくて回転を考えなくていい球でやるのが簡単
ただ、確かセガだかが特許とってるはずだから商用利用の場合は注意
863デフォルトの名無しさん:2009/10/20(火) 12:35:13
>>861
それでもいいとおもうが
細かい動きをするメッシュだと全部に作られちゃうから
そこんとこ考慮した方が良いと思う

前にロボの指にまで作っちゃったことあったからな・・・
864デフォルトの名無しさん:2009/10/20(火) 14:02:39
>>859
思考実験すると、ファー以外にもビューボリューム全面でクリップが必要な気がするが
そのカーマックの方法ってどういうの?

>>862
多関節なら、球を使っても回転を考えなきゃならん気がするが。
つーか、そんなしょうもないもんで特許なんて取ってるの?
(VRシステムとかで取れるぐらいだから普通にありそう)
ちょっとセガが嫌いになった。
865デフォルトの名無しさん:2009/10/20(火) 14:06:41
カーマックリバースとか懐かしすぎるだろ
てか今更ステンシルシャドウか
866デフォルトの名無しさん:2009/10/20(火) 14:11:00
>>864
スキンメッシュを行ってる以上すでに
各ボーンのワールド行列は全て計算済みのはず
あとはこの位置に球があると仮定して当たり判定を行うだけ

この程度の特許まだましな方
セガは調べるともっとどうでもいいことに特許はいっぱいとってる
あと、これは別にセガに限った話ではないので
特定社を中傷する意味で書いたわけでないのであしからず
867デフォルトの名無しさん:2009/10/20(火) 14:19:09
>>864
カーマックの方法は、Z failでステンシルを更新する方法。
更新の仕方も逆で、シャドウボリュームの裏面でインクリメント、表面でデクリメント。

普通の方法では、シャドウボリュームの手前側の面がステンシルを更新した部分に
影ができるが、カーマックの方法は手前の面が更新しなかった部分に影ができる。
だから、ボリュームの中に視点が入っても大丈夫。

詳しくは「カーマック シャドウボリューム」「カーマックリバース」あたりでググるか、
DOOM3の技術解説でも読んで。
868デフォルトの名無しさん:2009/10/20(火) 14:24:54
>>866
>>867
どちらもよくわかりました。ありがとう。
869デフォルトの名無しさん:2009/10/20(火) 17:38:32
>>860
ありがとう。そのメソッドを呼んでみたけど、それ自体でInvalidCallが帰ってきちゃうなぁ。
デバイスの初期化周りを再検討中……。
870デフォルトの名無しさん:2009/10/21(水) 01:17:00
( ^ω^)むほほ
871デフォルトの名無しさん:2009/10/21(水) 15:40:58
質問です
2Dの、例えばオセロの盤面のような画面を作る場合、
マスごとにポリゴンを作るのと、一枚の大きなポリゴンにするのと、どちらがいいのでしょうか
872デフォルトの名無しさん:2009/10/21(水) 15:43:03
一枚
873デフォルトの名無しさん:2009/10/21(水) 16:20:34
常識的に考えて、処理する頂点は少ないほうがいいだろ
874デフォルトの名無しさん:2009/10/21(水) 16:35:58
はじめまして、DirectXの参考書のサンプルコードを入力して、動作確認行っています。

ビルドはできるのですが、実行時エラーが出て動作しません。

サンプルは以下の部分でエラーでとまります。原因は何が考えられるでしょうか?
875デフォルトの名無しさん:2009/10/21(水) 16:36:58
エラーは?
876874:2009/10/21(水) 16:36:59
// ビューイング行列の初期化
D3DXMatrixIdentity(&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 を読み込み中にアクセス違反が発生しました。
877デフォルトの名無しさん:2009/10/21(水) 16:40:29
シェーダー側のプログラムにミスがあるんじゃないの?
fxc.exeで試してみろ
878874:2009/10/21(水) 16:59:15
fxc.exeの使い方はわかったのですが、HLSLファイルとはそのファイルでしょうか?
それらしきファイルとして、下記コードでbasic.fxというファイルがあるのですが、
これでしょうか?

879デフォルトの名無しさん:2009/10/21(水) 17:05:06
>>876
「0x00000000 を読み込み中」ってことはm_pFXがNULLになってるっぽいね。
D3DXCreateEffectFromFileは本当に成功してるのか?
errorsじゃなくて戻り値のHRESULTも見たほうがいいと思うよ。
880デフォルトの名無しさん:2009/10/21(水) 17:07:32
// グローバル変数
float4x4 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();
}
}
881デフォルトの名無しさん:2009/10/21(水) 17:08:10
ぬるぽ
882874:2009/10/21(水) 17:20:22
>>881
サンプルプログラムを入力して、ビルド、実行させているだけで、
中身はあまりよくわからないです。

具体的に原因を指摘をお願いします。
883デフォルトの名無しさん:2009/10/21(水) 17:35:34
そのサンプルをうpするか書いた本人人に聞けよ
884デフォルトの名無しさん:2009/10/21(水) 17:37:36
>>882
どれを聞いてるのかな。
>>880はHLSLだよ。
basic.fxは実行時どこに置いてる?
885デフォルトの名無しさん:2009/10/21(水) 17:39:08
>>874
その動かないサンプルコードとやらをこの場ではお前しか持ってないのに
その挙動を人に尋ねるというのか?

そんなコンセンサスが得たいなら聖書でも読んでろ。

助言を得たいなら助言が得られるだけの詳しい情報を書け。
886デフォルトの名無しさん:2009/10/21(水) 18:53:41
単純にfxファイルの置き場所がおかしいんでないの
887デフォルトの名無しさん:2009/10/21(水) 19:06:35
だな。errorsに何も返ってないってことはコンパイル処理まで達してない。
888874:2009/10/21(水) 20:19:19
>>884
>>886

助言ありがとうございます。

fxファイルの置き場も、参考書のとおりにやっています。
Visual Studio 2008を使ってますので、その画面で説明します。

「ソリューションエクスプローラ」のプロジェクト名の直下にファイルを
置いています。

サンプルプログラムのcppファイルは「ソースファイルフォルダ」に
hファイルは「ヘッダファイル」に入れました。「リソースファイルフォルダ」
には何も入っていません。

889デフォルトの名無しさん:2009/10/21(水) 20:22:31
ファイルの位置ってのは、普通にエクスプローラで見た時のファイルの場所のことだぞ
890デフォルトの名無しさん:2009/10/21(水) 21:16:18
とりあえず参考書名とやってる章とプログラム名書きやがれ
891デフォルトの名無しさん:2009/10/21(水) 21:28:09
>>882
>中身はあまりよくわからないです。
>具体的に原因を指摘をお願いします。
何?その横柄な態度
自分で考えるつもりがないならさっさと止めろよ
892874:2009/10/21(水) 21:29:35
>>889

basic.fxをC:\にありました。

よろしくお願いします。
893デフォルトの名無しさん:2009/10/21(水) 21:34:49
>basic.fxをC:\にありました。
日本語でOK
894デフォルトの名無しさん:2009/10/21(水) 21:36:54
"C:\\basic.fx"でD3DXCreateEffectFromFile呼び出せばいいんじゃね
つか戻り値見れば、何が問題か特定できるだろ
895デフォルトの名無しさん:2009/10/21(水) 21:38:15
日本人じゃなさそうだなぁ・・・
896デフォルトの名無しさん:2009/10/21(水) 21:38:53
オレンジ君・・・?
897デフォルトの名無しさん:2009/10/21(水) 22:05:01
要は.vcprjとか.slnとかのファイルと同じとこに.fxがあれば、ファイルパスの問題は無いと思う
(ファイルパスに全角文字が含まれると問題あるけど)
898874:2009/10/21(水) 22:35:08
>>890

書籍名;DirectXシェーダプログラミング
仕組みからわかるゲームエフェクトテクニック

ページ:008から024まで
開発環境の準備とプロジェクトの作成

P18のサンプルプログラムの実行ができない。

よろしくお願いします。

899デフォルトの名無しさん:2009/10/21(水) 22:43:20
>>879>>894をやればいいんだよ
後、errorsはRelease()しないとリークすんぞ
900874:2009/10/21(水) 22:44:42
D3DXCreateEffectFromFileの引数を"c:\\basic,fx"にすると
実行時エラーはなくなりました。
ただ、この関数でエラーが帰り、次の行でreturnされました。

該当のコードは>>876

使っている参考書は、VS2003,VS2005を前提に書かれていますが、
私はVS2008でサンプルプログラムの実行しています。

それが原因でエラーがでることはないでしょうか?
901デフォルトの名無しさん:2009/10/21(水) 22:47:39
>>900
errorsに、エラーの詳細が書いてあるよ。
902デフォルトの名無しさん:2009/10/21(水) 22:48:08
>D3DXCreateEffectFromFile 関数
>戻り値

> 成功した場合は、D3D_OK を返す。

> 失敗した場合は、次のいずれかの値を返す。
> D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドの引数に無効な値が設定されている場合などである。
> D3DXERR_INVALIDDATA データが無効である。
> E_OUTOFMEMORY MicrosoftR Direct3DR が呼び出しを完了するための十分なメモリを割り当てることができなかった。
903デフォルトの名無しさん:2009/10/21(水) 22:48:59
>"c:\\basic,fx"にすると
「,」
  _,._
 ( ゚Д゚)   ガシャ
 ( つ O __
 と_)_) (_()、o:。
       ゚*・:。
904デフォルトの名無しさん:2009/10/21(水) 22:58:11
DirectX初心者質問スレであってプログラミング初心者質問スレじゃないんだけど
905デフォルトの名無しさん:2009/10/21(水) 23:12:16
日本語初心者のスレでもないしな
906874:2009/10/21(水) 23:16:23
>>904
>>905

もう少しプログラムを勉強してから質問します。
ありがとうございました。
907デフォルトの名無しさん: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 )

何か教えてもらえると助かります。よろしくお願いいたします。
908デフォルトの名無しさん:2009/10/22(木) 00:08:54
>>907
>880のシェーダーって頂点の色そのまま出すだけのシェーダーに見えるけど
909デフォルトの名無しさん:2009/10/22(木) 00:28:25
>>908
説明不足でした。
実際には>>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();
}
}
910デフォルトの名無しさん:2009/10/22(木) 00:34:38
>>909
HLSL使うならピクセルシェーダーは2.0以上でコンパイルするべきじゃないの?
911デフォルトの名無しさん:2009/10/22(木) 00:37:24
1_1なんてもうサポートされてないだろ
912デフォルトの名無しさん:2009/10/22(木) 00:45:18
>>910, >>911ありがとうございます。
一応、2.0や3.0も試してるのですが、さっぱりなんです。
VSからの色出力には、.fxファイルの変更に応じて反応があるのですが…。

SetRenderStateとかで何か重要なパラメータを設定してないのか?
とかもいろいろ考えてますが…なかなかそれらしいものが見つからずです。
913871:2009/10/22(木) 00:52:12
>872-873
回答どうも
そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
シングルパスで描画できるんでしょうか?
それともやはりマルチパスでやった方が良いのでしょうか?
914デフォルトの名無しさん:2009/10/22(木) 00:54:41
>>912
REFモードのサンプルもねー状態でやってんの?
あったらまずそれを動かせよ
915デフォルトの名無しさん:2009/10/22(木) 01:51:43
>>913
> 2Dの、例えばオセロの盤面のような画面を作る場合、

オセロ盤はテクスチャ1枚、板ポリ1枚で済むでしょ?

>そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、

どういうこと?
916デフォルトの名無しさん:2009/10/22(木) 01:57:09
ゲーム進行に合わせて盤面を書き換えていかないといけないから、ってことじゃないの?
917デフォルトの名無しさん:2009/10/22(木) 01:58:17
MultiSampleTypeにD3DMULTISAMPLE_4_SAMPLES等の値を指定してやることで
アンチエイリアスがかかるのですが、露光表現等のピクセルシェーダの
エフェクトを使うために一度モデルをテクスチャに描画する必要がある場合に
これらの設定でのアンチエイリアスが無効になってます。
これって解決の方法があるんでしょうか?
できれば露光表現もアンチエイリアスも併用したいのですが。

分かりやすくいうと。
バックサーフェイスにモデルを描画するとアンチエイリアスがかかる。
テクスチャにモデルを描画するとアンチエイリアスがかからん。
918デフォルトの名無しさん:2009/10/22(木) 02:06:28
>>917
もしNVだったらバグでAAされない事がある。XPで発生する。
コピー先とコピー元のサイズを違うようにすれば何故か回避される。
同一サイズの場合なんらかの、インチキスケジューリングが発動する模様。
やってるとは思うがレンダ後の映像を得たいなら非マルチサンプリング化も忘れずに。
919871:2009/10/22(木) 02:08:21
>915
オセロの盤面がマスごとに白丸や黒丸を置かれるように、
マスごとに状況に応じてテクスチャを貼り付けたいわけです
その場合の描画処理はどういう手順にするのが効率が良いのかを聞きたくて質問しました
わかりにくくてすいません
920デフォルトの名無しさん:2009/10/22(木) 02:11:38
●ごとにポリゴン置けばいいじゃないか?
自由に置けるしアニメーションもできる。
わざわざ一体化させる意味がわからん。
921871:2009/10/22(木) 02:16:54
つまり、複数のポリゴンを作って描画した方がいいということですね
わかりました
922デフォルトの名無しさん:2009/10/22(木) 06:29:38
全マスに置いたときを考えると
○●□をマスごとおいたほうが描画処理軽いなたしかに
923デフォルトの名無しさん:2009/10/22(木) 07:43:02
テクスチャのアルファ部分だけをフェースカラーで塗りつぶしたいときは、
ピクセルシェーダでアルファ値で条件分けして出力を変えればいいんでしょうか?
(テクスチャの透明でない部分はテクスチャの色をそのまま出力したい)
もっと簡単な方法はありますか

SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
でやればできるのかと思ったら、テクスチャの透明でない部分がフェースカラーと混ざってしまうので
924デフォルトの名無しさん:2009/10/22(木) 08:32:29
素直に二回プリみれよ
925デフォルトの名無しさん:2009/10/22(木) 08:33:45
>>917
テクスチャにMSAAの指定があるのはDirectX10からだぞ。
DirectX9でやりたいならMSAA指定のサーフェイスと深度バッファ作って
レンダリング後にStrechRectでテクスチャに転送ってやらないとダメだぞ。

デバイス生成時のMSAAの設定は「バックバッファサーフェイス」への設定でしかないぞ。
926917:2009/10/22(木) 10:20:14
>>925
テクスチャへのMSAAはDirect10からなのですね。
ありがとうございました。
927デフォルトの名無しさん:2009/10/22(木) 13:50:56
    / ̄\ 
  r ┤    ト
  |.  \_/ \
  |   __( ̄  |      彡
  |    __)_ノノハ@     < >>ゲッツ!!!
  ヽ___) ノ‘д‘.) / ̄\        
      . >  ⌒ヽ  |    ├ r   
       /    へ/ \_/  .|
       /    /  |   ̄)__   |  ))
      レ  ノ   ヽ_(__    | 
     /  ミ         (___/
     /  /|  
    /  /( 
   (   、 \   
    |  |  、 \   サッ !
    |  |  \ \
.    | /    \ ⌒l
     | |      ) / 
    ノ  )゛゛゛゛゛゛ し'゛゛゛゛゛゛゛゛゛゛゛゛゛゛゛     
   (_/
928デフォルトの名無しさん:2009/10/22(木) 15:05:31
すみません関数の引数で2D座標を1つの変数で受け取りたいんですが
D3DVECTOR2とすると定義されていない識別子と警告が出ます。

DirectX9でd3d9.hとd3dx9.hをインクルードしているのですが・・。
2D座標を1つの変数で受け取るにはどうすれば良いでしょうか?
929デフォルトの名無しさん:2009/10/22(木) 15:15:14
D3DXVECTOR2
930デフォルトの名無しさん:2009/10/22(木) 15:24:24
>>929
Xが抜けてたんですね・・ありがとうございました。
931デフォルトの名無しさん:2009/10/22(木) 16:30:38
せめてヘルプくらいダウンロードしようよ・・・
932デフォルトの名無しさん:2009/10/22(木) 18:46:19
MSDNじゃだめなん?
933デフォルトの名無しさん:2009/10/22(木) 18:50:42
ドキュメントブラウザじゃなくて、普通のWebブラウザで見れる形式でDLってできる?
MSDNライブラリ
934デフォルトの名無しさん:2009/10/22(木) 23:12:05
DirectSoundを使いたいんだけど
IDirectSound8 *g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
ってのと
LPDIRECTSOUND8 g_pDSound;

のどっちが正しいんですか?
なぜか下の方は
g_pDSound->SetCooperativeLevel(hWnd,DSSCL_NORMAL);
でエラーが出るんです
これはもしかして持ってる資料が古い・・・?
935デフォルトの名無しさん:2009/10/22(木) 23:17:55
エラーコードを書きたくない理由は?
936デフォルトの名無しさん:2009/10/22(木) 23:19:02
面倒くさい
937デフォルトの名無しさん:2009/10/22(木) 23:26:53
だるい
938デフォルトの名無しさん:2009/10/22(木) 23:27:10
えーとエラーは
0x00416858 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。

あとは・・・hWndに式を評価できないとでているんですが
妙だな他のは問題ないはずなんだが・・・
939デフォルトの名無しさん:2009/10/22(木) 23:28:07
眠い
940デフォルトの名無しさん:2009/10/22(木) 23:28:37
IDirectSound8* = LPDIRECTSOUND8

LPDIRECTSOUND8 g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);

が正しい
941934:2009/10/22(木) 23:30:55
あーそうなんですか
ちょっと資料調べてみます
もしかするとかなりショボイミスをしてる気がしてきた

すいませんでした
942デフォルトの名無しさん:2009/10/22(木) 23:40:09
もしかして、”下の方”ってのは、宣言文を置き換えただけじゃなくて、
DirectSoundCreate8を呼ばないってことなのか
943デフォルトの名無しさん:2009/10/22(木) 23:51:41
シャドウマップに収めるZ値って
普通の透視変換のやつじゃ駄目かな?
ライトに近いほど精度高くなるって意味なさそう。
みんなはどうしてる?
944デフォルトの名無しさん:2009/10/22(木) 23:59:36
普通にLSPSM使えばいいじゃん
945デフォルトの名無しさん:2009/10/23(金) 12:58:47
すみませんDirectX9でなのですが、
バウンディングボックスからD3DXVec3Projectでメッシュに対応する2D座標を作っているのですが
バウンディングボックスのmin max値は正常に出力できていて
そこからカメラ横回転を4分割(90度毎)。 縦を水平以上か以下かで2分割の計8分割し
どの3D頂点が2D座標のどの最大/最小値になるかリストを作って計算しているのですが、
2Dのxの最大値と最小値が入れ替わっていたり
2Dのy座標が角度によって入れ替わったりとアベコベな状態になってしまいます。

2日程無理やり数値が合うようにならないかあれこれ試しているのですが上手く行きません;
バウンディングボックスから正しい2D座標を割り出す計算式は有ったら紹介して下さると助かります orz
もしかしてD3DXVec3Project使ってるのは自分くらいで他の方法で実現するのが定番だったりするのでしょうか;
946デフォルトの名無しさん:2009/10/23(金) 13:22:29
正直日本語が分からん
お前の頭の中ではそれで完結してるのかもしれんが
他人に理解してもらうにはもう少し努力が必要
947デフォルトの名無しさん:2009/10/23(金) 13:52:54
言葉が抜けてますね・・すみません orz
なんとか無理矢理補正する方法を見つけたので
ブラックボックスが出来たような嫌な気分ですが・・実装は出来ました。
失礼しましたー・・ orz
948858:2009/10/23(金) 14:13:00
SetDialogBoxMode()を正常に呼び出せるようになった。
なんとD3DDeviceの初期化時に画面モードをA8R8G8B8にしていたのが原因だった!
X8R8G8B8にしたら問題なし。

ただ描画を止めている間、再描画が行われないので他のウィンドウで隠れた部分がつぶれてしまうな。
WM_PAINTのハンドラを実装するのが面倒に感じたので、
いったんビットマップでゲーム画面のキャプチャを作成して
PixtureBoxに貼り付けて表示させることにした。

Win32APIで直接書いてるならここまでやらなくてもいいけど、
さしあたりこれでも速度上の問題はないのでよしとする。
949デフォルトの名無しさん:2009/10/23(金) 15:43:12
すみません。
メッシュコンテナからバウンディングボックスを生成する関数は無いでしょうか?
D3DXFrameCalculateBoundingSphere()なら見つかるのですが・・。
950デフォルトの名無しさん:2009/10/23(金) 16:21:42
D3DXComputeBoundingBox
951デフォルトの名無しさん:2009/10/23(金) 16:53:32
>>948
SetDialogBoxModeをTRUEにすると、Presentでダイアログが上書きされなくなるから
描画を止める必要はないよ。
952デフォルトの名無しさん:2009/10/23(金) 17:22:39
>>950
やっぱりメッシュコンテナから直接ボックスってのは無いんでしょうね。
ありがとうございました。
953デフォルトの名無しさん:2009/10/23(金) 17:51:57
リソースの作成に関してヘルプにほとんどのアプリケーションはD3DPOOL_MANAGEDが
良いみたいな事を書いてあったので疑問に思ったことを質問させてください。
D3DPOOL_MANAGEDを指定するとビデオ メモリーとシステム メモリーの両方にメモリが確保されるようですが
これを使うメリットってデバイスリセット時の自動復旧だけなんですか?
だとするとデバイス失効時の対処が苦にならない場合は静的なバッファであっても
D3DPOOL_DEFAULTで作成した方が速度の面でもメモリの面でも
有利という事ですか?
954デフォルトの名無しさん:2009/10/23(金) 18:26:22
MANAGEDにしておけばビデオメモリが足りなくなっても何とかしてくれるかもね。
955デフォルトの名無しさん:2009/10/23(金) 18:29:18
>>953
色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
それが分かっているなら好きにすればいい。
プログラミングは自由なものなんだから。
956デフォルトの名無しさん:2009/10/23(金) 20:27:41
D3DPOOL_MANAGEDはIDirect3D9Ex以降で使えない
957デフォルトの名無しさん:2009/10/23(金) 20:50:31
D3D9では素直にD3DPOOL_MANAGEDを使っておく方がいいよ。
頑張って作っても複雑怪奇なシステムに仕上がるし、どうせ将来性がない。

D3d9前提ののシステムをVista以降に向けてリファクタリングする過程で9Exを通過し、
そこでMANAGED不要になっておくのが吉。
958デフォルトの名無しさん:2009/10/23(金) 20:59:51
>>955
>色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
確実に使い方が分かっていない。
出直してこい。
959デフォルトの名無しさん:2009/10/23(金) 21:28:55
色々とレスありがとうございます。
>>954
今までビデオメモリが足りなくなるという状況は考えていませんでした・・・。
そういう場合、普通は確保時に失敗するんでしょうね。
仮にMANAGEDが自動で何とかするとしても描画毎にシステムメモリとビデオメモリを
往復しないといけないので毎回デバイスをリセットするのと同じように重くなる気はします。
>>955
MANAGEDには制限がありますが、DEFAULTはそれに比べフリーですよね。
>>956
まじっすか?レガシー気味?
>>957
将来性がないっていうのは、複雑奇怪なシステムを作った場合の話ですよね?
私はリソース管理をDXUTを通して行なう予定なので
リソース管理におけるMANAGEDとDEFAULTの複雑さは変わらないし
描画シーンの管理としては動的なバッファを多用するほうが楽な気がします。


960953:2009/10/23(金) 22:15:46
皆様のレスに答えながらHELPを読み直した結果を、
自問自答っぽいくなりますが、まとめてみます。

>静的なバッファであってもD3DPOOL_DEFAULTで作成した方が
>速度の面でもメモリの面でも有利か?

DEFAULTで作成したバッファはMANAGEDで作成したバッファより
速度重視の領域に置かれやすい。
逆に言えば動的なバッファ用にその領域を残しておくのが吉。
もしも動的なバッファを作らなければMANGEDがその領域を使うだろうし。

そしてMANAGEDが使うシステムメモリもRAMを奪うわけではないので
メモリの面でMANAGEDがネックになるとも思えない。
961デフォルトの名無しさん:2009/10/23(金) 22:16:18
結局、DEFAULTのリソースがひとつでもあれば
それ用の管理機能が必要になるし、
その管理機能があればMANAGEDはいらないし。
多少凝ったことをすればDEFAULTは外せないし。
962デフォルトの名無しさん:2009/10/23(金) 23:20:48
エフェクトファイルが複数ある場合、1つのテクニックで書き直さないといけないのでしょうか?
トゥーン+映り込み(環境マッピング)+バンプの3つのエフェクトファイル(.fx)があってそれぞれ単体では正常に動くのですが、
同時に2つ以上を使いたい場合どうなるのかと思いまして。
963デフォルトの名無しさん:2009/10/23(金) 23:32:31
>>958
MSDN読め。
http://msdn.microsoft.com/ja-jp/library/bb172584%28VS.85%29.aspx

「D3DPOOL_DEFAULT プールに配置されたテクスチャーは、ダイナミック テクスチャーか、プライベートな FOURCC ドライバー フォーマットでない限り、ロックすることはできません。」
964デフォルトの名無しさん:2009/10/23(金) 23:33:13
質問させてください。
VC++2008ExpressEditonを使ってDirect3Dを触っているのですが、
.ddsファイルを点灯表示するプログラムを作りました。
しかし、exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
exeに.ddsファイルを組み込む方法はないのでしょうか?
965デフォルトの名無しさん:2009/10/23(金) 23:36:57
>>964
普通にexeにリソースとして放り込んでおけばいいんじゃね?
D3DXでリソースを読み込むAPIだってあるんだし。
966デフォルトの名無しさん:2009/10/23(金) 23:39:22
DirectX関係ないし?

>exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
意味が分からん
exeと同じフォルダにddsがないと落ちるって意味なのか?
967デフォルトの名無しさん:2009/10/24(土) 00:01:59
関係ないかも
DirectX使う上で外部にあったらじゃまなファイルを
exe内に取り込むVC++的技があるんじゃないかな〜・・・と思いまして
968デフォルトの名無しさん:2009/10/24(土) 00:08:06
あーHSPみたいに必要なファイルをまとめたいのね
シェーダーをソースに書くってのは出来るけど・・・
969デフォルトの名無しさん:2009/10/24(土) 00:19:58
リソースで埋め込む方法も知らないなんてどんだけ素人なんだよ!
970デフォルトの名無しさん:2009/10/24(土) 00:34:13
埋め込むのはいいけど
データが増えると数100MBとか数GBのexeが出来上がるけどいいの?
971デフォルトの名無しさん:2009/10/24(土) 00:36:22
EEだとリソースの管理できないのでテキストで.rcファイル作ってビルド時にrc.exeを外部プログラムの実行できるようにすればいい
作るほうはDirectX関係ないのでここじゃ説明しない
972デフォルトの名無しさん:2009/10/24(土) 00:53:24
二つに分ければ50MBだな
973デフォルトの名無しさん:2009/10/24(土) 00:57:44
左様ですか
お作法的には外だしが基本ということですかね。
974デフォルトの名無しさん:2009/10/24(土) 02:12:47
>>962
2つのエフェクトファイルを同時に使うということ?
それは無いな。include使えばいい。
975デフォルトの名無しさん:2009/10/24(土) 06:22:34
DirectXでリストボックスの代わりに使えるようなものがSDKのサンプルの中にあるでしょうか?
あったら実装する方法を教えてください
976デフォルトの名無しさん:2009/10/24(土) 07:43:58
大抵のサンプルのデバイス設定はリストボックスになってるだろ
お前の目は節穴か
977975:2009/10/24(土) 10:30:10
設定のとこはプルダウンメニューっぽいですが、
ボタンを押さずリストボックスだけ利用する方法があるのでしょうか?
あるのなら実装方法を教えて欲しいのですが
DXUTguiとDXUTsettingsdlgにあるのだろうとは思いますが、
どこが使われているのか分かりません
978デフォルトの名無しさん:2009/10/24(土) 10:32:53
あ、プルダウンメニューじゃなくてドロップダウンリストぽい、でした
979デフォルトの名無しさん:2009/10/24(土) 10:57:48
よく分からないけどCDXUTListBox classってのが見つかったので、
多分これですよね
詳しく見てみます
980デフォルトの名無しさん:2009/10/24(土) 18:28:39
DirectSoundでwavを再生しようと思うんですが
LPDIRECTSOUNDBUFFERに音楽データーを書き込むわけですから
音一つにつきバッファは一つずつ用意した方が良いんでしょうか?
981デフォルトの名無しさん:2009/10/24(土) 18:33:54
はい
982デフォルトの名無しさん:2009/10/24(土) 18:35:16
>>980
オンメモリ再生したいのかストリーミング再生したいのかで話が変わってくるんじゃね?
ていうか今時ならXAudio2使ったらどうよ。
983980:2009/10/24(土) 18:38:00
オンメモリって一回全部読むやつですよね
じゃあそれです

Xaudio2か・・・健闘してみます
984デフォルトの名無しさん:2009/10/24(土) 18:39:08
985デフォルトの名無しさん:2009/10/24(土) 23:55:09
何度も実行しているうちにテクスチャが表示されなくなるんですけど
これはもしかして終了時に解放してない部分があるって事なんでしょうか?
986デフォルトの名無しさん:2009/10/24(土) 23:59:28
何度も実行してるのかコードの一部なのかプログラム自体なのかで話が変わってくるだろ常考。

なんで質問する子は舌っ足らずなのばかりなのか……。
987デフォルトの名無しさん:2009/10/25(日) 00:08:37
わかってりゃしつもんしねーよあほ
988985:2009/10/25(日) 00:13:18
毎度毎度出現する貴様はだれだ?
>>986
はあ
プログラムのスタート時にXファイルを読み込んで
終了時にデータを破棄しているんですが

実行→終了を繰り返しているうちにオブジェクトのテクスチャが消え
真っ白になってしまうんです
やはり何か解放忘れがあるからこのような症状が出るんでしょうか?
989デフォルトの名無しさん:2009/10/25(日) 00:15:05
>>985
とりあえず、リソースの開放と取得のタイミングでログを書き出して眺めてみたら?
リソースリークはトレースして解析するのが基本。
990デフォルトの名無しさん:2009/10/25(日) 00:16:06
>>989
うぃ
なんとかやってみます
991デフォルトの名無しさん:2009/10/25(日) 00:21:26
でも毎回思うんだけど
この辺に関してVCが役立たずすぎる
リークにしてもせめて確保したソースの場所ぐらい
newやdelete、createやreleaseに仕組みを入れてもいんじゃねぇか?
デバッグバージョンぐらいにはよ
992デフォルトの名無しさん:2009/10/25(日) 00:31:04
Managed DirectXでも使えばいいじゃないか。

見捨てられてるけど
993デフォルトの名無しさん:2009/10/25(日) 00:38:44
>>992
すでにそれがなにもんかすらわからねぇよw
994デフォルトの名無しさん:2009/10/25(日) 00:41:09
それは無知なだけ
995デフォルトの名無しさん:2009/10/25(日) 00:43:40
>>994
じゃあ、これからManaged DirectXって流行るの?
996デフォルトの名無しさん:2009/10/25(日) 00:45:16
>>988
Xファイルのテクスチャが複数あるのに1つしか解放していないとかよくあるミスはまさかね。
テクスチャを読み込んでいる部分がメモリ破壊されていて、偶然上手く動いているという面倒な原因もあるから注意ね。

まぁ、テクスチャやXファイルなんかは管理するクラスを作っておいて、
最悪実行終了時に全解放する関数を走らせるのが無難かな。
Xファイルだとそこらの解説サイト通りに組み込むと使用するテクスチャが同じなのに別々に読み込む無駄が出るし。
997デフォルトの名無しさん:2009/10/25(日) 00:47:17
与謝蕪村って誰? → お前無知だな → え、この人って流行るの?

そんな時代もありました。
998デフォルトの名無しさん:2009/10/25(日) 01:34:41
DirectInputでジョイスティックの軸入力の分解能とか取得できますか?
999デフォルトの名無しさん:2009/10/25(日) 01:51:13
>>991
そういう機能ってVC6の頃からあるよ。
VCは悪くない。
1000デフォルトの名無しさん:2009/10/25(日) 02:07:18
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。