【C++】 DirectX初心者質問スレ Part25 【C】at TECH
【C++】 DirectX初心者質問スレ Part25 【C】 - 暇つぶし2ch1:デフォルトの名無しさん
09/08/25 22:50:20
※回答する人も、質問する人も必ず読んでください

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

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

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

【C++】 DirectX初心者質問スレ Part24 【C】
スレリンク(tech板)

2:デフォルトの名無しさん
09/08/25 22:51:49
前スレ終わりの方だったため質問が流されてしまったので
またお願いします。

SetRenderTarget()で2枚分のテクスチャにDrawSubset()で描画して
2枚のテクスチャをプログラマブルシェーダでミックスして表示させようとしたのですが
背景色が表示されるだけで肝心のDrawSubset()で描画したメッシュが表示されません。
どうすればいいんでしょうか?

3:デフォルトの名無しさん
09/08/25 23:59:15
エスパーでもねぇのにそんな脳内説明だけでわかるわけないだろ・・・。
初心者スレつってもちゃんとした説明くらいしてくれねぇと困る。

というわけでPIXで何が書かれてないか確認しろ。

4:デフォルトの名無しさん
09/08/26 00:02:00
前スレ>>996
Gamefest 2008で口頭のアナウンスがあっただけで正式発表はまだないぞ。
したがってDirectX 11がVistaで動作しうるかについては確度は高いが確定情報ではない。

5:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/08/26 00:39:58
>>5-6が関係ありそうなソースになります。
よろしくお願いします。

8:デフォルトの名無しさん
09/08/26 01:30:42
省略したところでつまらない凡ミスしてて、それが原因だったらどうするの


9:デフォルトの名無しさん
09/08/26 01:32:14
surface0->Release();
surface1->Release();
かなー。

10:デフォルトの名無しさん
09/08/26 01:33:10
そもそも普通にDrawSubsetしてちゃんとモデルはバックバッファにかかれてんのか>

11:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/08/26 02:54:11
>>8
>>11-12が矩形を描画する処理です

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

>>10
メッシュの極一部が異常に拡大されて一色のみ表示されているかのような状態でテクスチャに書き込まれている気がします
あるいはテクスチャに書き込まれてさえいないかも知れません
どちらも自信はありませんが

14:デフォルトの名無しさん
09/08/26 08:56:56
PIXで調べろという最も簡単かつ効果的なアドバイスが出ているのに、なぜガン無視するんだ

15:デフォルトの名無しさん
09/08/26 10:23:09
トゥーンシェーディングをしたいんですが
あれって法線ベクトルをいくつかに分類して
それぞれに色を割り当てれば良いんですか?

16:デフォルトの名無しさん
09/08/26 10:28:45
>>15
テクスチャでライトの強度を変調しろ。

17:デフォルトの名無しさん
09/08/26 16:13:52
現在Directx9でスプライトを使って複数の2D画像の描画をしようとしているのですが、
マリオブラザーズのようなゲームで敵を描画するとき ステージごとに敵の配列を用意して

///
Sprite->Begin( NULL );

関数( 敵情報の配列 );

g_pSprite->End();
///

関数に 位置座標・どの画像を使うか の変数等が入った構造体の配列を渡して、
関数内でfor文により要素全てを描画するという形で、一応描画はされるのですが
要素の二つ目以降がキーボードのキーを押したりマウスカーソルを動かすと描画されない時があり
点滅しているような状態になってしまいます。
ちなみにマウスカーソルに関するプログラムは一切書いていません。
イマイチ原因がわからないので何かアドバイス頂けませんか? 初心者なので根本的に可笑しいとかならば
それを指摘してくださると助かります。


18:デフォルトの名無しさん
09/08/26 16:34:09
関数の説明って何処にあるの

19:デフォルトの名無しさん
09/08/26 16:37:52
どの関数?

20:デフォルトの名無しさん
09/08/26 16:56:27
>>17
根本的におかしいのは
「たった3行の疑似コードで原因が分かるわけないだろう」
ってこと

その僅か3行で指摘できるのは、SpriteのBeginを呼んでいるのに
Endはg_pSpriteのを呼んでいる点くらいだ。

21:デフォルトの名無しさん
09/08/26 18:22:37
>>20
原因それでした!
ばっちり直りました
ありがとうございます

22:デフォルトの名無しさん
09/08/26 19:22:04
>>3 >>14
すいませんでした
PIXで調べてみたらテクスチャ自体には描き込まれていたようで
矩形描画の処理に問題があったみたいです
ありがとうございました

23:17
09/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の方はただの記述ミスでした。

24:17
09/08/26 21:02:40
左詰めになってしまい読み辛くて申し訳ない。

25:デフォルトの名無しさん
09/08/26 22:47:40
動画を再生するプログラムを作ろうとしているんですが、
音量調整をするにはどうすればいいですか?

26:デフォルトの名無しさん
09/08/26 23:02:42
データをいじるかデバイスを操作するか。

27:25
09/08/26 23:07:34
すみません。説明不足でした
プログラム実行中に上下ボタンなどで音量調整するには、どうすればいいですか?

28:デフォルトの名無しさん
09/08/26 23:27:10
だからデータをいじるかデバイスを操作するか。

29:17
09/08/26 23:50:45
すみません自己解決しました。 どうもお騒がせしました。

30:デフォルトの名無しさん
09/08/27 00:14:27
>>28
初心者をいびるために来ているクズは死ねばいいのに。
誰も概論などききたかねーよ。コピペすりゃ動くコードを張れと行ってんだくうきよめ



31:デフォルトの名無しさん
09/08/27 00:26:28
>>29
何が原因だったの?

32:デフォルトの名無しさん
09/08/27 00:59:59
>>31
関数に渡す構造体変数を宣言するときに static を付けるのを忘れてました・・・

33:デフォルトの名無しさん
09/08/27 01:41:50
>>30
われわれは質問者のママではない。
ろくなヒントも環境も説明もなしでエスパー発揮して
やさしく答えてくれるのを期待するならママに聞くべき。

34:デフォルトの名無しさん
09/08/27 07:02:35
>>32
staticを付けなければ動かない時点で、設計ミスだろう

35:デフォルトの名無しさん
09/08/27 10:16:15
地面との当たり判定と高さをとろうと思い
3点測量とベクトルを用いてどの面にいてどのぐらいの高さかを調べようと思ったのですが
この方法だと穴の開いたポリゴンの当たり判定をとれません

穴の部分を識別するなんかいい方法ないですかね?

36:デフォルトの名無しさん
09/08/27 10:38:00
>>35
シミュレーションのような厳密な計算をするんでなければ、
通常当たり判定はポリゴン自体でなく、それを内接するいくつかの点をチェックすれば十分だ。

37:デフォルトの名無しさん
09/08/27 11:25:34
D3DXにあたり判定とるための関数があるが、あれじゃダメなのか?

38:35
09/08/27 11:26:12
え?
もしかしてレイを使う奴?

39:デフォルトの名無しさん
09/08/27 11:34:55
てか穴の開いたポリゴンって何?

40:デフォルトの名無しさん
09/08/27 11:50:00
えっ

41:デフォルトの名無しさん
09/08/27 12:02:34
ポリゴンってのは閉じた多角形のこと。
これには異論はないよな?
それをふまえて穴の開いたポリゴンって何?

ドーナッツポリゴンのこと言ってんの?

42:デフォルトの名無しさん
09/08/27 12:03:54
ポリゴンの面がない部分の事じゃねえの?

43:デフォルトの名無しさん
09/08/27 12:06:01
いやドーナツ状でしょ普通に考えて

44:デフォルトの名無しさん
09/08/27 12:17:39
じゃあこれでいいと思う

if( ドーナッツに該当するポリゴンの当たり判定 && !穴に該当するポリゴンの当たり判定 )
return ドーナッツに該当するポリゴンとの距離;

45:デフォルトの名無しさん
09/08/27 12:23:28
だからその穴があるかどうかの判別法を聞いてんだろ35は

46:デフォルトの名無しさん
09/08/27 12:29:34
>>45
穴もポリゴンだろ
穴を凸ポリゴンとしてレイとの接触判定すればいい

ま、実際聞きたいことは別だろうし
スレ荒らしはここまでにするわ
ではでは

47:デフォルトの名無しさん
09/08/27 13:46:41
質問です
ビルドが成功したプログラムをデバッグしてみると、FLOATに値を代入するところでエラーが発生しました(代入に関しては問題は無いと思ってください)
何も変更せずにもう一度デバッグしてみると、今度は問題なく動作しました。
エスパーさんがいたら、この原因を当ててください。お願いします。

48:デフォルトの名無しさん
09/08/27 13:53:48
スレ違い

49:デフォルトの名無しさん
09/08/27 15:10:12
>>34
いや動きはしますよ、なぜかキー入力をしたりすると描画処理が飛ばされるんです。

50:デフォルトの名無しさん
09/08/27 16:28:05
DirectX9.0c SDK December2004
無印探してるんだけどもう配布されてないの?

51:デフォルトの名無しさん
09/08/27 16:41:33
俺のHDDにある

52:デフォルトの名無しさん
09/08/27 16:49:55
そんな古いバージョン今更何に使うんだ……。

53:デフォルトの名無しさん
09/08/27 19:14:35
あの、ちょっとお聞きしたいんですけどDirectXってライブラリの事なんですか?
本とに初心者なんで変な質問ですみません。

54:デフォルトの名無しさん
09/08/27 19:16:46
帰れ。

55:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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未開放領域の
スタックトレースとかの文がずらずらと表示されます。

開放の仕方や条件があるのでしょうか?
どなたか教えてくださいよろしくお願いします。

57:56
09/08/27 21:59:36
S_FAILじゃなくS_FALSEの間違いでした。
現状ここで詰んでます。よろしくお願いします。

58:デフォルトの名無しさん
09/08/27 22:12:25
そもそも
if(pSurfaceScreen != NULL)
if(pTextureScreen != NULL)
が全くの無意味。

59:56
09/08/28 00:10:59
直接的な関連性は分かりませんが、別の箇所でテクスチャをファイルから二重に読み込んでいた
箇所を直したら開放漏れが無くなりました。

if(pSurfaceScreen != NULL)
は実際は別関数になっており、アプリケーションの構造上何度も呼ばれる可能性があるのでこうなってます。


60:デフォルトの名無しさん
09/08/28 02:01:43
>>59
いつでも使える方法ではないが、
オレはゲームエンジン本体側とスクリプト側で、すべてのリソースのハンドルを保持して
必要なタイミングで全部開放するようなコードを2重に用意しているぞ。
2重になってるのは保険のためと、スクリプト側で使いまわすが
本体側からはその意図が掴めない場合があるためだな。

61:デフォルトの名無しさん
09/08/28 02:36:46
>>59
リファレンスカウンタ、もしくは参照カウンタ
ってググってみ

62:デフォルトの名無しさん
09/08/28 22:37:40
キャラクターのクラスでキャラクターの行動を乱数で決めてるんだが。
このクラスを配列で表示するとみんな同じ動きになるんだ。
どうやって乱数にすればいい?

63:デフォルトの名無しさん
09/08/28 22:40:42
乱数で変化とかいいから、まずそれぞれ個別に別の動きをさせられるようにしろ。


64:デフォルトの名無しさん
09/08/29 00:41:23
何が言いたいのかよく分からんが、スレ違いだと思うぞ

65:デフォルトの名無しさん
09/08/29 01:43:16
DirectMusicをNovember2008で使いたいのですが
dmusici.hその他、DirectMusic関連のファイルを
November2008に移すだけで使えるの?
何か問題が出る?

66:デフォルトの名無しさん
09/08/29 02:38:44
>>64
多分、乱数値が全部いっしょのもんしかとってこれてないんだろ

67:デフォルトの名無しさん
09/08/29 03:11:55
>>65
古いSDKからヘッダ持ってくればビルド可能だから問題は特にないが
DirectMusic自体MSから切られてる動かなくてもいちいち人に聞くなよって程度。

68:デフォルトの名無しさん
09/08/29 05:35:42
配布されているサンプルで、コンパイルは成功するが画面が立ち上がらないことがあるんだが
自分が使っているDirectX SDKのバージョンと配布者が使っているバージョンが違うと
こういうことは起こる?

69:デフォルトの名無しさん
09/08/29 06:57:52
どのバージョンの何のサンプルが動かないか程度の情報を出すのすら面倒くさいのか?

70:デフォルトの名無しさん
09/08/29 07:29:29
>69
申し訳なかった
サンプルはDirectX SDKのではなく個人のもの(○×さんのサイトの)
シェーダ編 「多分必須!頂点変換の基本」のサンプル なんだが
コンパイルは成功するが画面が立ち上がらない
自分が使ってるSDKは2007 August

71:デフォルトの名無しさん
09/08/29 07:43:27
個人の作ったものなら作った本人に聞けよ

72:デフォルトの名無しさん
09/08/29 08:01:06
>71
そうだなw
悪かった 本人さんに尋ねます

73:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/08/29 17:16:54
ステンシルバッファに対して
CPUから直接値を書き込むという発想が間違っている。

DrawPrimitiveでポリゴンを書け。

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

例えば色情報などを書き込めるなら、テクスチャに描画→DrawPrimitive で好きな値にできるのですが…。

76:デフォルトの名無しさん
09/08/29 18:51:12
ステンシルは色じゃねえ。ただのマスクだ。
0~255までの整数しか書き込めねえ。

77:73
09/08/29 19:36:38
>>76
色情報と言うのは、DrawPrimitive で出力される情報の例として書いただけです。
自由に指定できる値なら何でもいいです。

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

単に、ステンシルバッファに好きな値を書き込みたいだけなんです…。

78:デフォルトの名無しさん
09/08/29 19:43:22
むしろ何で普通の色用のバッファを使わないのか問い詰めたい
Youシェーダに手を出しちゃいなYO!

79:デフォルトの名無しさん
09/08/29 19:43:46
>>77
そもそも何をしたいのかが明確じゃないから話がまとまらない。
ステンシルに自由に書きたいってのは手段であって目的ではないだろ。

80:デフォルトの名無しさん
09/08/29 19:47:49
手段を問わずとにかく好きな値を書き込みたいというだけなら、
1ピクセルサイズのポリゴンで1ピクセルずつ固定値で描画すればいいがな。

81:73
09/08/29 19:56:23
>>78-79
おっしゃる通りでした。すみません。
普通にテクスチャに書き込んで、シェーダでごにょごにょ処理すれば上手くいきました。
やりたかったのは、マスク+αです。例えば、ステンシル値が 0 なら描画しない、255 なら描画する、に加えて
128 なら半透明その他色々な効果も持たせて描画したかったのです。

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

後学としてお聞きしたいのですが、元の質問のように、
ステンシルバッファに好きな値を書き込むのはできないのでしょうか?
>>80 さんの指摘のように、半ば無理やり書き込むしかないのでしょうか。
単に興味としての質問で、目的は特にないです。

82:デフォルトの名無しさん
09/08/29 19:57:32
DirectX10なら可能って聞いたような気がするような気がしないかもしれない

83:デフォルトの名無しさん
09/08/29 21:26:26
>>81
というか、ピクセルシェーダで複数のテクスチャを与えて、
そのうちひとつをマスクとして使うようにしたらステンシルバッファいらなくね?
ただしこの場合、テクスチャが複数あってもテクセルはひとつなので、
基本的にテクスチャとマスクの形を合わせないといけないんだけど。

なので、オレは逆にステンシルバッファの方を使ったことがない。

84:デフォルトの名無しさん
09/08/29 23:17:04
>>83
DrawPrimitiveの結果、ピクセル書き込みの成否によって
バッファの値を変化させるのが、ステンシルバッファの肝であって
これは、ピクセルシェーダで代替は出来ないだろう。
Zテストの結果等に左右される訳だから。


85:デフォルトの名無しさん
09/08/30 00:57:35
ステンシルテストでクリップされる場合は
ピクセルシェーダーの処理自体がカットされるから
たいへん高速に処理される。

86:名無しさん@そうだ選挙に行こう
09/08/30 07:24:57
Xファイルのボーンオフセット行列って
親子関係考慮する必要ないよな?

87:名無しさん@そうだ選挙に行こう
09/08/30 16:23:42
プログラムシェーダーって難しいの?
処理を軽くできないかなあと思って挑戦したいんだが・・・

88:名無しさん@そうだ選挙に行こう
09/08/30 16:49:11
実際にやってみたらいいだけの話だろ。

89:名無しさん@そうだ選挙に行こう
09/08/30 18:49:13
シェーダーを使えないガキの環境を気にかけるべきだ
という風潮があるのでゲンナリする
そして気にかけてやってもガキ相手で不毛なのでゲーム制作を辞めたくなる

90:名無しさん@そうだ選挙に行こう
09/08/30 18:57:13
>>89
商業じゃないんだったら、気に入らないのでやらない、でいいじゃないか。

91:名無しさん@そうだ選挙に行こう
09/08/30 19:11:55
商業だってあるていどでかい会社は切り捨ててますし

92:名無しさん@そうだ選挙に行こう
09/08/30 19:41:51
>>91
ゆとりのガキも乞食のくせして同じこと主張するよw

93:デフォルトの名無しさん
09/08/30 21:52:11
シェーダーってユーザーが使用のon/off切り替えられるようにするのって難しいの?

94:デフォルトの名無しさん
09/08/30 21:56:44
シェーダといっても何をやるかによるんだから、自分で組んで試せばいいだろ。

95:デフォルトの名無しさん
09/08/30 22:44:44
そもそも出来ない処理をどうするんだって話だよ。
ジオメトリインスタンシングとか未対応のハード用に
ライブラリもシェーダーも全部用意するのかって話。

96:デフォルトの名無しさん
09/08/30 22:45:27
>>93
それってどうしてユーザーに選択させるの?
頂点シェーダのほうはハードにあるなし関係なくエミュっちまうからわかんねーぞ

97:デフォルトの名無しさん
09/08/30 22:47:14
>>95
やんなきゃいいじゃん
普通にそれっぽいテクスチャで描画
フィルタだったらかけなきゃいい

98:デフォルトの名無しさん
09/08/30 22:51:07
簡単に言ってくれるじゃないの……

99:デフォルトの名無しさん
09/08/30 22:58:17
ただ表示させるだけなら、切り替えなんていくらでも可能。
だけどそんな分かりきった結論に何の意味があるの?

100:デフォルトの名無しさん
09/08/30 23:04:54
>>97
やることによってモデルが10000個60FPSで出るけど
それをしないことによってハイエンドPCですら処理落ちするようになる。

ていうかそもそもジオメトリインスタンスが何かわかってねぇだろ。

101:デフォルトの名無しさん
09/08/30 23:32:03
>>100
エフェクト自体を切っちゃえばいいじゃんってこと

102:デフォルトの名無しさん
09/08/31 00:14:10
はぁ……、実際自分でやってから言えよ。

103:デフォルトの名無しさん
09/08/31 00:16:40
しっかしHLSLのスクリプトは管理しづらいな。
従来のAPI+エフェクトを表す列挙値のやり方と相性が悪すぎる。
みんなどうやって管理してるの?

104:デフォルトの名無しさん
09/08/31 00:48:00
全部の可能な組み合わせに対応しようと思わず、実際にゲームで使うものだけ作れば数は爆発しない。



105:デフォルトの名無しさん
09/08/31 01:12:16
>>102
は?やるかやらないかの話だけだろ?
他に問題があるなら言えよ
こんな簡単なこともできないなんてアフォじゃねーの?
止めて普通に描画(もしくは消す)もできない程度のアフォが俺に意見たれてんじゃねーよ

106:デフォルトの名無しさん
09/08/31 02:08:52
HLSLなんてプログラムで動的に作成して使う時にコンパイルすれば数なんて問題ないけどな

107:デフォルトの名無しさん
09/08/31 08:21:27
Xファイル表示させてるんだけど
Meshの法線って単位ベクトルにしといたほうがいいよな?
デフォだと単位ベクトルじゃないんだが一般的には単位ベクトルにすべきか?

108:デフォルトの名無しさん
09/08/31 08:50:20
>>107
単位ベクトルかどうかは吐き出すツールしだいだろ

109:デフォルトの名無しさん
09/08/31 09:10:34
>>108
そうなんだがなんで単位ベクトルじゃないんだ?
単にこちら側でNormalizeすれば済む話だけど
ツール側が単位ベクトルで吐き出さない理由って何があるんだ?

110:デフォルトの名無しさん
09/08/31 14:26:26
ツール製作者に聞けば良いんじゃね

111:デフォルトの名無しさん
09/08/31 17:19:50
ツールに何かしら都合がいいんじゃないの。わからんけど
どうせ拡大縮小したらNormalizeせざるをえないわけで、やっとけやっとけ

112:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/08/31 19:34:55
>>112
とりあえず、DirectSoundの初期化で使いもしないフラグを指定していないか調べる。

114:デフォルトの名無しさん
09/08/31 19:36:57
けどマジでツール制作者はどうしてるんだろうな
MetasequoiaがどうしてるかとかPIXで監視しようかとしたらみれねーし

115:デフォルトの名無しさん
09/08/31 19:53:01
単位ベクトルにしたら、
正規化で精度が失われるからじゃねーの
何にしても気にするとこじゃないよ

116:デフォルトの名無しさん
09/08/31 21:05:15
>>113
レスありがとうございました。
DSBCAPS_CTRLVOLUME等全部消して22.05kHz/8bitでも発生してしまいました。
お手上げです。

117:デフォルトの名無しさん
09/08/31 21:23:32
>>116
まずOSを書け。Vista以降と以前でハードウェアの取り扱いがまったく違うぞ。
それからRealtek以外にサウンドデバイスが無いかどうかも書くこと。
複数あるならBIOSの設定が必要な場合がある。

118:デフォルトの名無しさん
09/08/31 21:28:28
>>116
URLリンク(www.computing.net)
ここに、Windowsを再インストールするかセーフモードでサウンド関係のデバイスを全部削除して、
再起動してWindowsにデバイスを再認識させてドライバを入れなおすと直ると報告があるな。

119:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/01 09:24:33
質問
D3DXMATRIXA16とD3DXMATRIXって混同して問題になったりしないの?

121:デフォルトの名無しさん
09/09/01 09:28:14
俺は一度混同した

122:デフォルトの名無しさん
09/09/01 10:04:26
A16のほうが精密なんだっけか?
その程度の認識しかない

123:デフォルトの名無しさん
09/09/01 10:14:31
16byteアラインでSSEウマスだよ

124:デフォルトの名無しさん
09/09/01 12:25:52
D3DXIntersectって2番目で針を出す位置を決めて3番目でどの位置が針の末端かを書くの?

125:デフォルトの名無しさん
09/09/01 22:00:32
>>124
始点と方向じゃね?

126:デフォルトの名無しさん
09/09/02 19:30:50
質問です。
DeferredShadingてなんでカメラ空間の法線を書き出しているんですか?
ワールド空間の法線じゃだめなんですか?
また半透明はなぜだめで、透明は大丈夫なんですか?


127:デフォルトの名無しさん
09/09/02 19:40:52
>>126

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


>>また半透明はなぜだめで、透明は大丈夫なんですか?
質問がおかしいです。
透明って100%透明てこと?なら見えないよね。

128:408
09/09/02 19:54:41
DeferredShadingがよく理解できない俺のために
解説へのポインターを教えてください。

129:デフォルトの名無しさん
09/09/02 21:10:00
そんなに難しい話じゃないよ。
解説ならDeferredShadingでググって出てくる先で十分だ。

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

やっぱ面倒くせえ、次の人続きよろしく

130:デフォルトの名無しさん
09/09/02 21:41:19
Deferred Renderingの方がいっぱいヒットすると思う。

131:デフォルトの名無しさん
09/09/02 22:58:39
物凄い初歩的な質問ですがどなたか教えてください。

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

またマップを作成する場合、物凄い広大なマップのデータを作ったとして、原点から遠く離れた場所の描画(ビュー変換など)ほど
処理が重くなったりするんでしょうか?
もしそうであれば広大なマップではある程度原点から離れた場所にカメラが行くたびに、
マップ自体を原点へ戻すような処理をすべきなんでしょうか?

132:デフォルトの名無しさん
09/09/02 23:12:09
カメラ空間なら奥向きの法線を格納せず、1-R^2-G^2で求められるから?

133:デフォルトの名無しさん
09/09/02 23:32:00
しいて言うなら決まりはない。
好きなようにデータをサーフェイスに格納して好きなように使えばいい。

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

半透明が出来ない理由はやってみれば馬鹿でもすぐわかる。


134:デフォルトの名無しさん
09/09/02 23:42:32
DirectX11は10と違ってCaps見たいなのがあって
別にDirectX11対応のビデオカードじゃなくても動かすことができるらしいな
これからは11の時代だぜひゃっほー

135:デフォルトの名無しさん
09/09/03 00:22:56
それって、またDirectX9以前みたいにビデオカードごとに
動くか動かないかを自力で判定しないといけないんじゃ。

136:デフォルトの名無しさん
09/09/03 00:24:40
イエス

137:デフォルトの名無しさん
09/09/03 00:28:21
何の為にD3D10でバッサリ切ったのか
わからんよな。
ウロチョロしてんなよって感じ。

138:デフォルトの名無しさん
09/09/03 04:01:39
>>131
浮動小数点数 は、原点( 0.0000000 )から遠ざかると、精度が落ちてゆく。
重さより精度の問題。

同じく、あまり小さくしすぎると、アンダーフロー(桁落ち?)がおきる。
適度なスケールを使うのがよいと思う。

139:126
09/09/03 05:44:52
>>127
>ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。
言っている意味がよくわからないです。
テクスチャはただのバッファでは?空間はなんでもいいはずです。

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

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

カメラ空間なら奥行きの法線はいらないのはわかるのですが、どうやってポイントライト
でライティングできるのか謎です。


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

ただし、テクセル計算(ピクセルシェーダ)では画面に占めるメッシュ描画の大きさで負荷が変わる。

141:デフォルトの名無しさん
09/09/03 08:49:03
>>139

>>ワールド空間を2Dテクスチャ内に収めることを考えれば自明だろ。 
>言っている意味がよくわからないです。 
>テクスチャはただのバッファでは?空間はなんでもいいはずです。
ワールド空間はXYZの3軸、一方2Dテクスチャ座標はXYの2軸。
ワールド座標の法線を書き込むというが、そのままじゃ軸が一個多いのはわかるだろ。
3Dから2Dへなんらかの射影変換が必要になる。
だからワールド空間座標をそのまま書き込めばいいという考えはおかしいと書いた。

>でも、座標を書き出さないでライティングできているのはカメラ空間の法線が何かキーを 
>握っているのではと思うのですが、よくわかりません。 
実際のところはわからないが、動的ライティングはカメラ空間(Proj座標系)ではやっていないんじゃないか?
Proj座標系ではいろいろ不都合があるし、URLリンク(game.watch.impress.co.jp)
のスライドの図はView座標系のものだ。

142:デフォルトの名無しさん
09/09/03 09:02:57
つーかプロジェクション空間のzがあれば
ピクセルの位置からワールド座標が逆算できるだろ。

143:デフォルトの名無しさん
09/09/03 09:14:34
>>142
x' = x / w
y' = y / w
z' = z / w

x'y'z'から、どうやってwを得るんだ?
別途wバッファがあるなら別だが。


144:デフォルトの名無しさん
09/09/03 09:39:35
プロジェクション空間ならw=1に射影されてんだろ。
プロジェクション行列の逆行列をピクセルごとに(ry

145:デフォルトの名無しさん
09/09/03 17:07:51
>>144
意味わかんね
適当なこと書くなよ

146:126
09/09/03 20:54:55
>>141
>ワールド空間はXYZの3軸、一方2Dテクスチャ座標はXYの2軸。
>ワールド座標の法線を書き込むというが、そのままじゃ軸が一個多いのはわかるだろ。
何を言っているかホントによくわからないんですが。
2Dテクスチャには普通に射影変換して書き込みますよ。
その2Dのテクスチャの座標に何を書き込むかが問題なのではないですか?
ワールド空間の座標かカメラ空間の座標か。
ワールド空間の法線かカメラ空間の法線か。

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

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

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

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

です。

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




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



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

>Proj空間、射影座標系でライティングしているとは一言も言っていません。 
>カメラ空間(View空間、カメラ座標系) です。
だから、これらは全部認識が誤ってるんだよ。

149:148
09/09/03 21:56:05
いや、わかった。
勘違いしていたのは、俺だったかも。
すまんすまん。

150:デフォルトの名無しさん
09/09/03 22:33:47
>>147
法線データの圧縮が出来るのは
ベクトルの長さが1であるからであって
ビュー空間云々は関係ないと思うが

151:147
09/09/03 23:40:15
>>150
そう思うだろうけど、実はz=±√(1-x^2-y^2) だから z の正負がわからない
ビュー空間なら zが[0 - 1] に限定される

152:131
09/09/04 01:26:49
>>138
>>140
回答ありがとうございます。
精度の問題ですか、とあるFPSの現象を思い出しました。
(スナイパーライフルで遠距離の人間の顔を見ると目玉が顔のポリゴンを飛び出して
 見えてゾンビみたいになってしまってる)
あまり原点から距離が離れてしまうところに細かい構造のオブジェクトを描かない方が良いということですね。
その辺りの調整可能な作りにすることにします。

153:デフォルトの名無しさん
09/09/04 01:28:39
Z値がバッファに書かれていればXY=ピクセル座標、W=1でXYZWが求まるから
それにカメラの逆行列をかけてWで割ればワールド座標に戻る。

154:デフォルトの名無しさん
09/09/04 01:53:33
>>152
それは全く別の問題。

普通に作る分にはfloatの精度なんて、あんまり気にしなくていいよ。

155:デフォルトの名無しさん
09/09/04 02:17:28
>>153
検算したら、確かにビュー座標に逆変換出来た。
射影空間では、wは不定(ビューのz)だから変換は出来ないけど
ビュー以前なら、w=1だから変換出来るんだな。目から鱗。

156:デフォルトの名無しさん
09/09/04 02:38:07
メッシュの描画に使用した、行列をかけた変換後のメッシュ頂点情報って取得できるんですか?
もし可能であればご教授ください。

157:126
09/09/04 04:51:12
>147
>150
なるほど!ありがとうございます!!
自分も目から鱗です

158:デフォルトの名無しさん
09/09/04 14:48:22
質問です。
ピクセルシェーダで

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

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

色々ぐぐって、同時に使っている例を探そうとしてみたのですが、1つも見つからないので、やってはいけない方法なのかと心配になりまして

159:デフォルトの名無しさん
09/09/04 15:10:35
>>156
やろうと思えば出来なくはないが、というレベル。
普通は代わりに、IDirect3DDevice9::ProcessVerticesを使う。
もっと言えば、こんなメソッド使うより自前でやった方が
いろいろと楽。

160:158
09/09/04 15:27:32
失礼しました。
どうも原因は別にあったようです。

161:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/04 15:59:58
>>161
両方とも同じ
結果が異なるとしたら別の要因

163:158
09/09/04 16:09:47
すいません。名前抜けてました。

別の要因ですか・・・。
デバッグDLLでも再現するので何かしら「ちゃんとミス」っぽいですね。
また質問をまとめなおします。


164:158
09/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;
}

165:158
09/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:デフォルトの名無しさん
09/09/04 16:18:45
また、陰のカラー値を頂点シェーダから受け取らず、
固定値としてoutColor = 1;
とした場合もうまくいきます。

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

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

以上です。
何か「お前こんなことすれば当たり前じゃん」といった部分があれば、ご指摘いただけると幸いです。

167:158
09/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を使った時だけ異常になるようです。
(とはいうものの、他の成功例も「成功したように見える」だけで、実際狂っている可能性はありますが)

168:158
09/09/04 16:52:51
追加情報です。
まず、>>167は、Depthの「値を入れていない要素」については0を代入していました。

(5)のパターンであっても、Depth.x と Depth.y にPos.zの値を入れておくと、正常に動作するようです。
最初、割り算の子の部分を Depth.zにしていなかったのかと思って再確認しましたが、間違い無く
z / w になっていました。
TEXCOORDは、それぞれの要素xyzw が個別に補間されるものだと思っていたのですが…。


169:158
09/09/04 17:31:42
しつこいようですが、追加情報です。
(5)の場合ですが、

outColor = Color;
outColor.y *= Depth.x;
outDepth = (Depth.z + 0.01) / Depth.w;

と、ほぼ無意味でもいい(完全に無意味だと、コンパイラが省略してしまうのでダメ)のでDepth.xを参照すると、正常化することがわかりました。
コンパイラの吐いたアセンブラ風シェーダのほうを読んでみましたが、
Depth.xに参照したからといって、特にDepth計算まわりの挙動が変わっていることはありませんでした。
(コンパイラのバグというのを期待?していたのですが)

何なんだろうこれ・・・

170:158
09/09/04 17:51:16
どうも、一番の原因は
TEXCOORD0
を使っていることのようです。
TEXCOORD1
に変えると、さまざまな不具合が解消されます。

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

このあたりが何か悪さをするのでしょうか?
試しに無意味でもと思って
, float2 Tex : TEXCOORD0
を頂点シェーダの引数に加えた(使わない)ところ、また少し違った「おかしな現象」が置きました。
意味がわからない・・・

171:158
09/09/04 17:52:05
失礼しました。
>>170の最後3行は無視してください。これはこちらのミスでした。

172:デフォルトの名無しさん
09/09/05 11:42:55
他のPCもしくはリファレンスラスタライザの結果をみて
環境の不具合か自分のミスか切り分けるしかなさそうだね。
俺の場合、こういうときはハードの不具合と思いがちだったけど、
実際は自分のミスだったことが多かった気がする。

173:デフォルトの名無しさん
09/09/05 23:58:33
>>172
アドバイスありがとうございます。
REFでも結果同じですね。

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

今改めて考えてみると、頂点データの流し込みの時点では存在しないTEXCOORD1などを、
頂点シェーダ>ピクセルシェーダ時に新設してるのは合法なのでしょうか?
(今更合法でないといわれても困ってしまいますがw)

174:デフォルトの名無しさん
09/09/06 00:01:47
ん、すいません。REFでも結果が同じというのはいったん撤回です。
月曜日にもう一度再現含めて試してみます。

175:デフォルトの名無しさん
09/09/06 02:03:43
Xファイルでボーンアニメーションやってるんですが
頂点はいい具合に動くんですが光源計算がうまく行きません。

法線も頂点と同様に行列かける以外違いってあるんですか?

176:デフォルトの名無しさん
09/09/06 02:12:46
正規化しないと駄目だった希ガス

177:デフォルトの名無しさん
09/09/06 03:56:20
>頂点シェーダ>ピクセルシェーダ時に新設してるのは合法なのでしょうか?
合法って・・別に法律に触れたりしないぞ・・・。

まぁ実際問題普通に頂点シェーダーで作ったデータをピクセルシェーダーに送るので
CPU→VSとVS→PSはまったく関係ないとおもっとけ。

178:175
09/09/06 07:17:22
正規化はちゃんとしてあるんだけどなぁ
変換する行列に平行移動の成分があったらダメとか
Xファイルの法線は特別とかそういうのはないですよね?


179:デフォルトの名無しさん
09/09/06 09:09:52
>>177
>合法って・・別に法律に触れたりしないぞ・・・。
お前の馬鹿さ加減に爆笑した
コーヒー返せ

180:デフォルトの名無しさん
09/09/06 09:35:12
>>178
スキンメッシュ変換しおわった後に正規化だよ?

181:175
09/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;

182:175
09/09/06 09:52:46
↑はバーテックスシェーダーの中身です
アニメーション自体は正常に動作しており、
またメッシュの法線は正規化されております

183:デフォルトの名無しさん
09/09/06 10:51:13
ワールドもっていってから正規化じゃね?(いや、テキトーだけどw)

184:デフォルトの名無しさん
09/09/06 12:27:35
>変換する行列に平行移動の成分があったらダメ
法線の変換なら駄目だろ、3x3の回転行列にしてみ

185:175
09/09/06 12:29:06
>>184
float3x3にする事で移動成分ってなくならないんですか?

186:デフォルトの名無しさん
09/09/06 12:32:26
ワールドのライティングをしてるって事は
シェーダー変数のライトディレクションはワールドの値だよね?
後は、ライトディレクションの向きは反対じゃないよね?
(内積取れる方向って意味)

187:デフォルトの名無しさん
09/09/06 12:34:00
ウエイトを100.0fで割ってる意味が激しく分らん
シェーダー定数に100倍したウエイト値を入れてるの?

188:デフォルトの名無しさん
09/09/06 12:36:10
ワールド変換行列に拡縮入ってたらワールド変換してから正規化しないと駄目だな

189:デフォルトの名無しさん
09/09/06 12:38:39
俺はワールドライトをローカル変換する派だから
なんかキモイ処理に見えたw

190:デフォルトの名無しさん
09/09/06 12:49:25
>>189
頂点はワールドに変換しなきゃいけないのに
ライトだけローカルにもってきてるお前のがレアじゃね?

191:デフォルトの名無しさん
09/09/06 13:24:00
接空間のことじゃね?
まあ頂点ライティングでそれを使うのはレアだとは思う

192:デフォルトの名無しさん
09/09/06 13:32:08
なるほどバンプマップはたしかにそうだな
それとは別に法線は法線でワールドにもってきてるわw俺のソースw

193:175
09/09/06 13:46:17
>>186
あ すいませんコメントが間違ってました
ここがマイナスでもプラスでもライティングは失敗します

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

>>188
やってみたらうまくいきました
ワールド空間座標に縮小はないんですがなんでだったんだろう…。


194:デフォルトの名無しさん
09/09/06 13:47:42
>>193
あるんだろ多分
そんなのロードされるモデル次第じゃね?

195:デフォルトの名無しさん
09/09/06 13:59:47
>言われてみれば最初から100で割っておけば余計な手間が省けますね
えっ・・・

196:デフォルトの名無しさん
09/09/06 14:02:24
スキニングウエイトを%単位にしているのか?

197:デフォルトの名無しさん
09/09/06 14:15:18
・単位をcmにしている。
・固定小数点と三角関数テーブルで高速化、という10年前の知識を紹介してる5年前の本を読んだ


198:デフォルトの名無しさん
09/09/06 14:26:04
組み込みではまだ有効なテクです

199:デフォルトの名無しさん
09/09/06 14:53:27
組み込みでは有効だがWindowsでは無駄な処理だろう・・
そもそもそれなら乗算除算じゃなくてビットシフトしろっていう。

200:デフォルトの名無しさん
09/09/06 15:05:34
PSPとかDSは組み込みに含まれるの?

201:158
09/09/07 13:28:13
>>158です。
問題の出た環境で再度、REFとそうでない状況でテストしてみたところ、
・REFでは正しく描画される
・REFでないとおかしくなる
のを確認しました。

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

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

何かツッコミどころがあればご意見いただけると幸いです。

202:デフォルトの名無しさん
09/09/07 22:11:50
サウンドノベルのようなものではなく、とにかく高速に文字列がスクロールなどし、表示されなければならないような
ゲームの場合、文字列を描画するにはどういった方法が用いられるのでしょうか?
動的テクスチャの方法でしょうか?それとももっといい方法があるのでしょうか?

203:デフォルトの名無しさん
09/09/07 22:25:04
>>202
ないよ
やることわかってんじゃん
さっさとやれ

204:デフォルトの名無しさん
09/09/07 22:35:39
巻物を模したオブジェクトを作って、そこに全ての文字列を貼っておく

205:デフォルトの名無しさん
09/09/07 22:47:29
>>202
そこでDirectWriteですよ。

206:デフォルトの名無しさん
09/09/08 00:35:25
DxLib3.0誕生

207:デフォルトの名無しさん
09/09/09 09:42:28
D3DXColorNegativeって負のカラーを生成するって書いてあるけど
負のカラーとはなんですか?

208:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/09 14:12:29
あーあれか
ショッキングな演出か

210:デフォルトの名無しさん
09/09/09 15:18:02
板ポリで2Dゲームを作ろうと思っているんですが座標は3D座標で管理したいので、
頂点フォーマットをD3DFVF_XYZにして正射影でスクリーンに写して完全に表示を2Dにしたいのですが、
どうもサイズの調整がうまくいかなく読み込む画像自体のサイズとスクリーンに表示されるサイズが一致しません。
調整の仕方は画像の縦幅をスクリーン座標→ワールド座標へ変換した値でポリゴンの頂点を決めてやっています。
が、これだと変に画像が歪んで小さくなっちゃいます。
D3DFVF_XYZRHWは使いたくないので悩んでいます、どうすればいいでしょうか?

211:デフォルトの名無しさん
09/09/09 15:22:54
>>210
おお! オレもちょうど同じ疑問に行き当たってる。
もっとも、2D画像に関してはスクリーン座標を使う形で対処できてはいるが。
まだZ値の管理をぜんぜんやってないんだな。(だから描画順で完全制御してる)

212:デフォルトの名無しさん
09/09/09 15:37:03
○×に似たようなのがあった気がする

213:デフォルトの名無しさん
09/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'使ってる?



214:213
09/09/09 16:06:37
っていうかD3DXVec3Unproject()使えばいいか
これの結果と自前の結果、比較すればいいんじゃねーの

215:デフォルトの名無しさん
09/09/09 16:30:31
よく分からん
馬鹿でも分かるように説明してよ

216:デフォルトの名無しさん
09/09/09 21:31:17
ViewMatrixは単位行列
ProjectionMatrixは正射影行列
WorldMatrixはキャラクターの座標で

World*View*Projectionでうつらなかったっけ

217:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/09 22:04:57
DirectXと何の関係もない

219:デフォルトの名無しさん
09/09/09 22:06:04
>>217
あたりまえじゃねーか。自分の書いたコードをよく見てみろ。

220:デフォルトの名無しさん
09/09/09 22:59:26
>>219
なぜ?

221:デフォルトの名無しさん
09/09/09 23:01:51
0123456789

222:デフォルトの名無しさん
09/09/09 23:07:09
>>220
Windows7ってタイトルバーとかウィンドウの枠が無くなるんだっけ?

223:デフォルトの名無しさん
09/09/09 23:09:40
オレぁWindows7でもちゃんとクライアントサイズ640x480でウィンドウ作れてるが

224:デフォルトの名無しさん
09/09/09 23:21:49
WS_OVERLAPPEDWINDOWのフラグをCreateWindowと同じにしてなかった。
同じにしたら作れた

225:デフォルトの名無しさん
09/09/10 07:25:47
Download details: DirectX SDK - (August 2009)
URLリンク(www.microsoft.com)
Download details: DirectX Redist (August 2009)
URLリンク(www.microsoft.com)


226:デフォルトの名無しさん
09/09/10 07:55:20
SDKのアイコンが青い椎茸からXNAみたいな今風に変わってる

227:デフォルトの名無しさん
09/09/10 08:55:11
サンプル山盛り追加だな


228:デフォルトの名無しさん
09/09/10 09:12:26
しかし大半がDirectX11用なので起動すらしない

229:デフォルトの名無しさん
09/09/10 10:03:10
やっと11きたか

230:デフォルトの名無しさん
09/09/10 10:20:15
KB971644のリンクも今の段階では機能していないな。
Win7だとDX11用サンプルもある程度動くんだろう。

231:デフォルトの名無しさん
09/09/10 14:01:29
すみません、Web上でいくらかDirectXの勉強をし始めたのですが、
いまいち要領を得ないので、本を一冊買ってそれで勉強しようと思うんですが、
おすすめの良書とかないでしょうか?

232:デフォルトの名無しさん
09/09/10 14:04:55
directx逆引き大辞典

てにはいらんと思うけど

233:デフォルトの名無しさん
09/09/10 14:47:57
前回のSDKからか、
fx2.0のコードがコンパイル通らなくなったんだよね
今回の入れるか迷う

234:デフォルトの名無しさん
09/09/10 16:32:38
>>231
付属のHelpを地道に覚えるのお勧め
遠いようで近道だったり
他にwebや参考書を使う場合でも、あくまでHelpのここが
分からないけどどういうことなのかな?っ手感じで
調べる時に使うのがいいと思う
そうするとHelpを中心としたDirectX脳内マップが出来上がります

235:233
09/09/10 16:49:49
直ってた
杞憂だったみたい

236:デフォルトの名無しさん
09/09/10 21:12:07
>>232
絶版のようですね・・・

>>234
Helpですか。わかりました、ヘルプ覚える所からまた始めてみようと思います。

237:デフォルトの名無しさん
09/09/11 00:46:08
>>234
日本語のHELPください><

238:デフォルトの名無しさん
09/09/11 03:34:15
>>237
オンライン(こっちのが内容が2008年と新しい)
URLリンク(msdn.microsoft.com)
オフライン(2004年のは多分ここ)
URLリンク(www.microsoft.com)

日本語だと分かりづらい事もあるから、そういう場合は同じ箇所の英語のHELPを探したり
逆に英語主体で読んでて分からなかったら日本語を見てみたりとかも有効かと

あと時々、全体を見渡してどの項にどういう事が書いてあるのかつかんで置くといいよ。
あと、サンプルブラウザから適当なサンプル探して解析するのが重要だよ。
勿論ここでも質問汁!

239:デフォルトの名無しさん
09/09/11 04:08:23
>>231
何をやりたいかが明確なら他に参考書も挙げやすいかも

240:デフォルトの名無しさん
09/09/11 09:24:33
KB971644+FW190.38betaでとりあえずサンプルが起動まではする様になった


241:デフォルトの名無しさん
09/09/11 13:51:36
無料C++総合環境DirectXゲームプログラミング ってサイトを参考にシューティングゲーム
つくってたんですが、URLリンク(lacc.biz)このページの

{
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:デフォルトの名無しさん
09/09/11 14:08:11
>>241
デバッガで止めて様子を見る。

243:デフォルトの名無しさん
09/09/11 14:10:45
これDXライブラリ?

244:デフォルトの名無しさん
09/09/11 15:14:20
>>241
>PAD_INPUT_A // A(1)ボタンチェックマスク(Zキー)
まずはZキーを押してみる

245:デフォルトの名無しさん
09/09/11 15:43:30
>>244
Z押したら出ました・・・
Aって書いてあっても。
対応キーが違うなんて、なんという罠。

とにかくありがとうございました!

246:デフォルトの名無しさん
09/09/11 16:04:10
>>245
JOY PADのAボタンという意味で、
キーボードのAキーという意味ではない

247:デフォルトの名無しさん
09/09/11 16:45:17
常に起動しているDirectX 3Dで描画しているアプリに、文字や絵などを割り込み絵画させたいのですが、どのような方法があるでしょうか?

(DxtoryのFPSや録画ステータスが表示されているように、DirectX描画に割り込み描画する方法が知りたいです)

248:デフォルトの名無しさん
09/09/11 17:19:06
>>247
それが自分の書いたアプリかそうでないかで話は全然変わってくる。

249:247
09/09/11 17:24:17
自分が書いたアプリではないです。ソースコードも不明です
>>248

250:デフォルトの名無しさん
09/09/11 20:38:55
無理に決まってんだろカス

251:デフォルトの名無しさん
09/09/11 21:00:51
モンスターハンターフロンティでモンスターのHPをクライアント内に描画するチートあったけどあんな感じのがやりたいんだろうな


俺もやりたい

252:デフォルトの名無しさん
09/09/11 21:16:19
普通に考えて、COMコーポネントにラッパーかますか
フック使うんじゃねーの

253:デフォルトの名無しさん
09/09/11 21:26:06
VisualStdio2008で、
三角ボタンの隣のソリューション設定で、
debugからreleaseに切り替えたら、

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

こんなのこってあるんのだろうか・・・
#ifdef _DEBUG
とかはつかっていないんだがOTL

254:デフォルトの名無しさん
09/09/11 22:00:41
どうせ関数の戻り値を確認してねーんだろ
しろカス

255:デフォルトの名無しさん
09/09/11 22:01:01
目の前で起きてるんなら、あるんじゃね

256:デフォルトの名無しさん
09/09/11 22:16:13
>>253
ありまくるに決まってるだろがw

257:デフォルトの名無しさん
09/09/11 22:18:22
>>253
まあ大抵は変数の初期化忘れなわけだが。


258:デフォルトの名無しさん
09/09/11 22:22:34
>>256
そうなのか初心者でdebugとreleaseの違いが
パスくらいしか思い浮かばなくてOTL

たとえばどんなときに起こるでしょう?


259:デフォルトの名無しさん
09/09/11 22:23:44
>>257
なるほど!
急いでチェックしてみまする


260:デフォルトの名無しさん
09/09/11 22:31:20
デフォルトではreleaseとdebugでは違うプリプロセッサが付いてるよ

261:デフォルトの名無しさん
09/09/11 22:46:40
>>257
本当にありがとう!
まさに変数の初期化忘れだった!

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

レス付けてくれた方、ありがとう


262:デフォルトの名無しさん
09/09/11 23:59:47
UTF-8の文字列処理が多量にあるプログラムをするのですが、
シフトJISとUnicodeは普通にCライブラリがありますが、UTF-8はそういうのあるんでしょうか?


263:デフォルトの名無しさん
09/09/12 00:04:32
>>262
なぜその質問をここで聞くの? もっとしかるべきサイトやスレがあるでしょっ!
UTF-8とUTF16は同じ文字セットでエンコード方式が違うだけだから機械的に変換できるのよ。
計算の仕方は調べてね。
って、アンタに言ったんじゃないわよ! さっさと行きなさいよ!

264:デフォルトの名無しさん
09/09/12 06:59:58
そもそもUTF8もUNICODEの一種な訳だが

265:デフォルトの名無しさん
09/09/12 17:31:23
モデルを作るときにパーツを分けてモデルを作れるけど
普通に読み込むと全部同時によみこむよなあ
パーツだけ別に読み込んで操作って出来ないのかなあ?

266:デフォルトの名無しさん
09/09/12 18:34:35
出来る出来ないもなにも、自分がやるかやらないかでしかないんだが、
お前は操り人形か何かなのか?

267:デフォルトの名無しさん
09/09/12 19:17:47
D3DXLoadMesh~()に出来るか出来ないかを聞いてるに決まってるだろうが
お前がスレタイを百遍読み直せ

268:デフォルトの名無しさん
09/09/12 19:19:25
決まってねぇよどこのバカだよ

269:デフォルトの名無しさん
09/09/12 19:21:22
>>268
決まってないなら他に何があるか書いてみろよ

270:デフォルトの名無しさん
09/09/12 19:23:52
考えたことなかったが
たぶんメッシュアニメーションを参考にしてみるのといいのかこういうの・・・

271:デフォルトの名無しさん
09/09/12 19:42:24
xファイルの操作法とかっしょ
俺は知らん

272:デフォルトの名無しさん
09/09/12 19:43:50
SDKを今さっきインストールしたらDirect 2Dのd2d1.hとかのファイルがありませんでした
どうやって入手するのが良いのですか?

273:デフォルトの名無しさん
09/09/12 19:45:36
正式リリースまで待つのが良いです。
どうせDirectX11対応のビデオカードまだねえし。

274:デフォルトの名無しさん
09/09/12 19:47:58
DirectX11ってDx10や9と比べて使い心地どうよ?

275:デフォルトの名無しさん
09/09/12 23:56:28
>>267
DirectXを使うこととD3DXに頼り切ることは全くの別
勝手に決めつけるな

276:デフォルトの名無しさん
09/09/13 00:11:15
昔このスレで、メッシュやらアニメーションコントローラーについて色々教えてもらったけど、
そこで言われた一言

「自作したほうがいい」

正しかった。
(でも、D3DXをいじくりまわして理論を学ぶのは有用だと思う)

277:デフォルトの名無しさん
09/09/13 00:29:39
ゆとりの知ったかぶりが痛い
D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
それ前提で自作する事も考える
プログラムできれば当たり前の事だ
まったく何も解らないのに、詳しそうに見えるように書いて悦にはいってるんじゃねーよ

278:デフォルトの名無しさん
09/09/13 00:47:14
>>272
最新版は入ってるはずだよ

279:デフォルトの名無しさん
09/09/13 01:53:25
>>265,267,277
質問する側がそんな態度でどうする。お里が知れるというものだ。

280:デフォルトの名無しさん
09/09/13 02:17:52
じゃあ俺のお里を行ってみろ。
生まれは海無し県だ。
学校は青山にあったが今はない。


281:デフォルトの名無しさん
09/09/13 03:07:46
>>280
>生まれは海無し県だ。
埼玉県民かよw
神奈川県民よりランク下になった感想はどうなんだよこのクズw

282:デフォルトの名無しさん
09/09/13 07:37:27
誤: じゃあ俺のお里を行ってみろ。
正: じゃあ俺のお里に来てみろ。

283:デフォルトの名無しさん
09/09/13 09:09:02
>>277
だったら最初からD3DXで出来るかどうか聞けば良かったのに、
他人に責任転嫁とはどれだけ甘やかされて育ったんだろう?

284:デフォルトの名無しさん
09/09/13 09:10:50
答えとしては出来るけど、細かい機能を実装していくなら自前で組んだ方が楽という話。

285:デフォルトの名無しさん
09/09/13 09:26:43
粘着必死すぎ
モデルデータ分割するだけで実現出来ることの為に自作しろとかアホだろw

286:デフォルトの名無しさん
09/09/13 09:34:11
>>285
>D3DXで出来ないと一言書けば、用意するモデルデータを分割するだけだし
>それ前提で自作する事も考える

287:デフォルトの名無しさん
09/09/13 15:09:17
スプライト厨がいなくなったと思ったら何この状況

288:デフォルトの名無しさん
09/09/13 15:32:23
Xファイル厨も同根だからなあ
根絶やしにせねばいつまでも初心者がはびこったままだ

289:デフォルトの名無しさん
09/09/13 15:33:53
まあな
でもパーツだけ動かすってのはちょっと興味が湧いたな

Xファイルから特定のメッシュを取り出すようなのを作ってみるとするか

290:デフォルトの名無しさん
09/09/13 15:45:15
どうせDrawSubsetで描画していくんだから、全体読み込んだって別に問題ないような気がするんだが。

291:デフォルトの名無しさん
09/09/13 16:04:09
Xファイルほど、色々なツールでサポートされ、仕様がわかりやすいフォーマットはないだろ?
勉強用には最適だよ。

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

いくら拡張性やらに気を使われているとはいえ、遅すぎだぞXファイル。

292:デフォルトの名無しさん
09/09/13 16:08:51
自作の人は自前でモデラソフトの保存用プラグイン書くの?

293:デフォルトの名無しさん
09/09/13 16:09:49
そういう時もあるし、Xファイルのようなわかりやすいフォーマットで出力してから、変換かける場合もある

294:デフォルトの名無しさん
09/09/13 16:13:56
seleneにも独自形式あるし、
ゲームデータのリッパーとかもソース公開されてるから
書けなくは無い

295:デフォルトの名無しさん
09/09/13 16:33:30
自前フォーマットってどうやんの?
圧縮とかするの?

296:デフォルトの名無しさん
09/09/13 16:35:35
圧縮はしないな。
例えば頂点データをmemcpyでいっきにVRAM上にコピーできるようにする。
これだけでも速度が圧倒的に違う。

Xファイルは、ファイルフォーマットエラーに対処するためかデータをかなり細かく読んでる。
自前なら「エラーがないことを前提に」高速化が可能なわけさね

297:デフォルトの名無しさん
09/09/13 16:36:46
ほー
ちょっとやってみるかな

でもPシェーダーとかやったけど
何にも利用してねえなあ・・・

298:デフォルトの名無しさん
09/09/13 16:47:52
>>297
俺は今作ってるゲームで、
モデルデータはXファイル
アニメーションデータは自前にして、ID3DXAnimationControllerを作成

ってやってる。
アニメデータが大量にあると、Xファイルの読み込みが超遅かったんでな。
モデルデータの読み込み速度は0.1~0.3秒くらいなので不満はない。

299:デフォルトの名無しさん
09/09/13 16:48:40
>>298
追記。
ID3DXAnimationControllerは、ちょっと複雑なことやるとバグ満載なんで
次回作ではぜってー使わないって心に決めてる。
もう理屈はわかったので、頼る必要もないしな。

300:デフォルトの名無しさん
09/09/13 17:15:48
>>298
それは行列でアニメーションデータを並べているせいでは?
きちんと位置、回転、スケールでキーフレームを作っておけばデータがそんなにでかくなることはない。
読み方云々以前にデータそのものを見直した方がいい。

301:デフォルトの名無しさん
09/09/13 17:26:43
ID3DXAnimationControllerを変な風に使おうとして動作不良起こさせてるんじゃないの。


302:デフォルトの名無しさん
09/09/13 17:53:54
正しく使うのが大変で、自分で作った方がマシ。

303:デフォルトの名無しさん
09/09/13 18:27:29
あれよりヒエラルキーのほうがめんどい
なんで最初から積んでないんだ?

304:デフォルトの名無しさん
09/09/13 19:35:40
ロード時間が長いのは別にXファイルの形式のせいじゃなくね?
DXライブラリ(だっけ?)で読んでいるからじゃないかな。
他の3Dフォーマットと比べても、さして特殊な形式とは思わないし(古いけど)。
ちなみにXファイルはバイナリ圧縮形式もあるよ。

今は色々なツールでサポートされているんだな。俺の頃はどの3Dモデラも
中途半端な扱いしかしてなくて、速攻で候補から外されちゃったよ。

305:デフォルトの名無しさん
09/09/13 20:18:16
Xファイル使ってる人って、ロード後に境界級のサイズも計算するんでしょ?
ゲームの起動時に毎回それやるって、アホらしくならない?


306:デフォルトの名無しさん
09/09/13 20:25:18
じゃあ何かに記録するようにして最初だけ計算しては?

307:デフォルトの名無しさん
09/09/13 20:32:57
・・・と、そうやって追加情報を加えていけば結局自前フォーマットに行き着く

308:デフォルトの名無しさん
09/09/13 21:00:29
そもそも境界級など存在しない。
存在しないものは計算しようがない。

309:デフォルトの名無しさん
09/09/13 21:10:36
xファイルやd3dx.h使ってる奴をおとしめて、俺tueeeしてるだけ

310:デフォルトの名無しさん
09/09/13 21:29:16
古いDirectXのサンプルにファーみたいなやつを実装したのがあったと思うんだけど
あれってテクスチャ重ねてるだけなの?

311:デフォルトの名無しさん
09/09/13 21:42:42
サンプルなんだからソースを確認しろよ

312:デフォルトの名無しさん
09/09/13 21:47:41
そんなことよりラブプラスやろうず

313:デフォルトの名無しさん
09/09/13 21:49:54
ラブプラスの悪魔

314:デフォルトの名無しさん
09/09/13 22:26:53
きちがいのフリしなくても元から頭おかしかったろ

315:デフォルトの名無しさん
09/09/14 00:14:31
>>300
ああ、データは膨大だよ。
BVHからとり込んだりして、かなり動きを細かく作ってるからね
これでも一応無意味な中間データの削除とかはしてるんだぜ

316:デフォルトの名無しさん
09/09/15 15:47:47
D3DXIntersectのレイって二つの一番近い面しか判定されないの?

317:デフォルトの名無しさん
09/09/15 15:48:52
間違った
2つの面があった場合近い方の面しか判定されないの?

318:デフォルトの名無しさん
09/09/15 17:11:01
カーソルがウィンドウの端でとまるんだけどfpsみたいに無限に右に動かしたりできないの?

319:デフォルトの名無しさん
09/09/15 17:43:55
>>318
おめえ円周率はいくつって習った?
言ってみろ

320:デフォルトの名無しさん
09/09/15 17:46:31
>>318
ちゃんと、DirectInputなりで「相対値でのマウス移動量」を取得すると、FPSみたいなこともできるぞ。
絶対値でやろうとすると、デスクトップからマウス飛び出ちゃったら困るだろ?

321:デフォルトの名無しさん
09/09/15 20:19:06
>>319
3.1415926535

322:デフォルトの名無しさん
09/09/15 23:41:17
>>319
3

323:デフォルトの名無しさん
09/09/16 18:32:31
>>319
3.2

324:デフォルトの名無しさん
09/09/16 20:21:05
>>319
2.2360679

325:デフォルトの名無しさん
09/09/16 23:02:29
ダイレクトインプット使わなくても、毎フレーム
マウスを中心に移動させてやればいいだろ

326:デフォルトの名無しさん
09/09/16 23:06:38
ウィンドウモードだとどうするの?
毎フレーム戻そうが、画面外でボタン押したら入力とられちゃうよ


327:デフォルトの名無しさん
09/09/16 23:09:21
D3DXFontでMSゴシックを指定して文字を出したら
どんなに文字を大きくしてもアンチエイリアスがかかりません
どうやったらいいですか?

328:デフォルトの名無しさん
09/09/16 23:10:14
>>326
クリッピングすればいいだけだろ
WinAPIの基本的なことはDirectXやる前に少しぐらい知っとけ

329:デフォルトの名無しさん
09/09/16 23:13:48
>>327
フォントが不適切ではないか。オプション(使い方)が間違ってないかを中心に再調査する。

330:デフォルトの名無しさん
09/09/16 23:36:27
わかった
よく見るとアンチエイリアスはかかってた
でもアンチエイリアスの質が悪すぎて、かかってないように見える
PROOF_QUALITYでも同じだった
仕方ないから2倍のサイズに表示してリニアフィルタで縮小して使うか
でもフォントのサイズを2倍にしても大きさって2倍にならないんだよな
くそったれ

331:デフォルトの名無しさん
09/09/17 00:45:18
マウスカーソルを真ん中に戻すのは、ネガティブアクセルの原因になるからやめた方がいい。
DirectInputを使う場合も、バッファを十分に用意しておかないとネガティブアクセルが発生する。

XP以降ならRawInputが一番いい。
SDKのヘルプにRawInputでマウスを扱う説明あるから、それを参考にするといいかと。

332:デフォルトの名無しさん
09/09/17 01:04:43
>>330
D3DXCreateFontだったかでフォントの大きさを指定するときに
高さを基準に大きさを指定できるだろ
だからフォントサイズがどうとか関係ない

333:デフォルトの名無しさん
09/09/17 14:07:41
ポリゴンの平面に沿うように物を配置したいんだけど
どうすればいいんでしょうか?

法線の傾きとって回せばいいのかなあと思いましたが
その方法がわかりませんご教授願います

334:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/17 16:00:48
>>・R軸は変わらない。 
>>・S軸は平面の法線と平行 
>>・T軸はR軸と平面の法線の外積 
ごめんごめん、これちょっと違うわ。
新しいR軸は、S軸と直交する範囲で、任意に決めてね、

336:デフォルトの名無しさん
09/09/17 16:40:46
○×に似たような記事があった気がする

337:デフォルトの名無しさん
09/09/17 17:25:49
>>335
ウィ
方向性が見えたんでなんとかしてみます

338:デフォルトの名無しさん
09/09/21 07:42:59
任意の3D座標(x,y,z)をカメラから見た2D座標(x,y)に変換するにはどうすれば良いですか?

339:デフォルトの名無しさん
09/09/21 07:48:19
>>338
ワールド変換 → ビュー変換 → 射影変換 → ビューポート変換

ワールド変換でワールド座標(ワールド座標)
ビュー変換でカメラ座標(カメラのローカル座標)
射影変換で同次クリップ空間(xyが-1~1になるzは0~1)
ビューポート変換でスクリーン座標(スクリーンの座標になる)

340:デフォルトの名無しさん
09/09/21 07:51:14
スクリーン座標の数値を取り出せる関数はありますか?

341:デフォルトの名無しさん
09/09/21 07:55:39
画像を動かせるすごい関数はありますか?

342:デフォルトの名無しさん
09/09/21 07:56:53
DirectXというのは画像表示できるんですか?

343:デフォルトの名無しさん
09/09/21 07:59:52
DirectXとC言語ではどちらの方が優秀なのでしょうか?
ご教授お願いいたします。

344:デフォルトの名無しさん
09/09/21 08:08:38
>>340
D3DXVec3Projectこれかな?

345:デフォルトの名無しさん
09/09/21 08:55:57
>>344
DirectXって何?

346:デフォルトの名無しさん
09/09/21 09:01:44
>>345
Microsoft DirectX は Windows プラットフォームでハイパフォーマンス、ハイクオリティ グラフィックスを実現するための業界最高のテクノロジーです

347:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/21 15:38:05
よくわからんけど、NULLアドレス渡しても大丈夫なの?

349:デフォルトの名無しさん
09/09/21 15:43:22
scanf("%d", &n)のnのように、&ptmpBufの値から何かをするのではなく、CreateSoundBufferによって作られたデータを格納するのがptmpBufなので
恐らく問題は無いと思います。第3引数は、NULLでなければいけないようです

350:デフォルトの名無しさん
09/09/21 15:55:05
>>347
動くコードをコピーしろよ
そんなので悩むのは駄目
自分で書いて動かないなんてはプロでも結構アリガチ
そんなのどうせライブラリ作った人間しかわからないんだからはじめから動くコードを入れるしかない

お前のやりかただと一生かかってもゲームなんて完成しない

351:デフォルトの名無しさん
09/09/21 16:13:36
>>347
というかまずCreateSoundBufferが返してるエラーコードを調べるべきでは・・・

352:デフォルトの名無しさん
09/09/21 16:29:53
>>347
まず350が言ってるように他人が書いてチェックされた(できればDirectX公式の)サンプルコードをそのままビルドして確かめること。
サンプルが存在しないような世界ならともかくDirectXならいくらでもサンプルがある。

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

この2つをやらないと、いつまで経っても能率も品質も上がらないよ。

353:デフォルトの名無しさん
09/09/21 16:34:23
エラーコードを調べたところ、DSERR_INVALIDPARAMが返されているようでした
無効なパラメータが関数に渡されたようです
つまりm_DSBDの値がおかしい可能性があるようですが、これはmsdnのリファレンスを丸々写しただけなのでこのままでは問題箇所が分かりません
とりあえず、ちゃんと動くサンプルプログラムを探して、そこから何が悪かったのかを調べてみることにします

354:347
09/09/21 17:27:04
すいません、原因が分かりました
DSBUFFERDESCの設定がおかしかったようです
m_DSBD.dwSize = sizeof(DSBUFFERDESC);
と書くところを
m_DSBD.dwSize = sizeof(DSCBUFFERDESC);
と書いていました
コンパイルは通ってしまっただけにこんな単純なミスで5時間以上悩んでいたのが悔しいっ…ビクビク
皆さん、助言どうもありがとうございました


355:デフォルトの名無しさん
09/09/21 17:45:48
>>354
DirectXに限らず、プログラム動かしててエラーが発生したら、
まずはエラーメッセージどおりに物事を考えること。
最初からDSERR_INVALIDPARAMというエラー内容にしたがって
引数がどうなってるかチェックしたらそんなに時間食わなかったはず。

プログラムは思ったとおりに動かない。
書いたとおりに動く。

356:デフォルトの名無しさん
09/09/21 18:27:24
DirectSoundとXAudio2ってどちらを学ぶべきですか?

357:デフォルトの名無しさん
09/09/21 18:37:48
>>356
断然XAudio2。
実装が圧倒的に簡単な上に、VistaだとどうせDirectSoundアクセラレーションが効かないので。


358:デフォルトの名無しさん
09/09/21 19:19:39
XAudio2はすばらしいのになぜXInputはあんなにガッカリなのか

359:デフォルトの名無しさん
09/09/21 20:35:46
XAudioはハードウェアに依存しないけどXinputはハードが対応しないと使えないからでは

360:デフォルトの名無しさん
09/09/21 21:01:13
いやそれはそうなんだけどなんで古いハード丸ごと切り捨て。
さらに現状はXBOX360のコントローラーしか対応パッドないとか論外すぎるだろ。

361:デフォルトの名無しさん
09/09/21 21:03:04
>>359
いや、だからなぜそういう仕様にしてしまったのか、ってことだろ
まあXBOX360コントローラーをPC用の標準コントローラー的な位置づけにしたいってとこだと思うけど

362:デフォルトの名無しさん
09/09/21 22:04:46
あれ10ボタン縛りだけどどうなんかね。
ゲームによってはあまったボタンをショートカットにふれたりして便利なんだが。

363:デフォルトの名無しさん
09/09/21 22:23:27
direct3d9でD3DXSPRITEを作成し、D3DXMatrixScalingをつかって行列を作成し
テクスチャを張り付けて、縮小をしてるんですが
xのみ縮小すると問題なくx軸方向に縮小できる、同様にy軸のみ縮小でも問題ありません
ですがxとyを同時に縮小しようとするとなぜか画像が暗くなります(小さければ小さいほど暗くなる)
拡大では全く問題ありません、解決策をしってる方がいたら教えていただけると助かります

364:デフォルトの名無しさん
09/09/22 00:04:02
D3DXSpriteなんか使うなよ
普通に変換済みの頂点で描画したほうが楽だろ

365:デフォルトの名無しさん
09/09/22 06:56:17
>>362
昔PS2でキーボードマニアというゲームのUSB接続の専コンがあってだな

366:デフォルトの名無しさん
09/09/22 09:41:41
>>364以外の方に答えて頂きたいです

367:デフォルトの名無しさん
09/09/22 09:45:40
そもそもD3DXSPRITEは列挙子であって作成するものではない。

368:デフォルトの名無しさん
09/09/22 09:54:13
自分が使っているインタフェイスの名前すら確認しないような馬鹿は、
そもそもプログラムには向いていない。

369:デフォルトの名無しさん
09/09/22 10:10:56
>>363
通常の3Dメッシュを描画する場合なら、
トランスフォーム行列を適用した結果、頂点法線の長さが変わって
暗くなるというのはある。
ただし、D3DXSpriteは基本的にライティングをOFFにするので
これは起こりえないようだ。

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

>>367-368
そう言うな。ここは初心者板だし、
なかなか面白い事象じゃないか。

370:363
09/09/22 10:25:42
>>364
ふつうに4角形ポリゴン作ってテクスチャはっつけたらできました
ありがとうー

>>369
どっかで見たソースほぼそのまま
pSprite->Begin(0);
pSprite->Draw( pTex, NULL, NULL, NULL, 0xffffffff );
pSprite->End();
だったと思うけどもう書き換えちゃたんでわからないです

371:デフォルトの名無しさん
09/09/22 10:30:07
あ、pSpriteはID3DXSpriteです

372:デフォルトの名無しさん
09/09/22 10:55:45
無理だな
描画ステータスに内部で何が設定されてるのかわからんし
spriteなんて使うなってのは原因不明な事象にぶち当たったときに全く検討が付かないからだけどな
固定シェーダもこういうの多い

自分で研究しろw

373:デフォルトの名無しさん
09/09/22 10:59:07
ぐぐったらあったw
D3DXSprite使ってるようなのにこれはきついなw

以下、BBXから転載

>いろいろ作業していましたが、
>どうやら、MIPMAPの設定で縮小時にMIPMAPの切り替えで、
>約半分の設定(縮小)の時にMIPMAPの小さいときの設定がされていなく、
>フィルターでLINEARを指定しているので、
>設定なしの(黒)のものとのフィルター処理をしていて、だんだん
>暗くなっていってしまっていたようです。

374:デフォルトの名無しさん
09/09/22 11:13:23
>>373
なるどね~そういうことか。

375:デフォルトの名無しさん
09/09/22 11:38:06
>>374
×なるどね~
○なるほどね~

376:デフォルトの名無しさん
09/09/22 12:01:34
: | ェェ  ェェ |: :

377:デフォルトの名無しさん
09/09/22 15:41:33
SetviewPortって四角限定?
円とか三角は無理?

378:デフォルトの名無しさん
09/09/22 16:16:18
>SetviewPort
そもそもそんな物はない

379:デフォルトの名無しさん
09/09/22 16:21:40
>>377
ステンシルバッファ使ったらどうよ。

380:デフォルトの名無しさん
09/09/22 19:01:46
他の使いたいなあ

381:デフォルトの名無しさん
09/09/23 13:24:51
d3dx10_41.dllがないと表示されて実行できないのですが何をインストールすればよいのでしょうか?

382:デフォルトの名無しさん
09/09/23 15:24:34
自分の開発環境に合わせて再コンパイルすればエラーは出なくなるよ。

383:デフォルトの名無しさん
09/09/23 15:54:10
>>381
ここはプログラミングのスレなので、ゲーマー用のスレは別だぞと言っておく。
その上で、d3dx10_41.dllは特定のバージョンのDirectX(年数回配信される)にあるD3DXライブラリのDLLだ。
それくらいのバージョンだったら普通に2009年以降の最新のDirectX再頒布パッケージをインストールすればいいと思うよ。
だめだったらファイル名でぐぐってどのバージョンに入ってるか調べてくれ。

384:デフォルトの名無しさん
09/09/23 16:19:11
わかりました。最新のDirectX再頒布パッケージをインストールしてみます。

因みにゲームではなく、マルペケつくろーどっとコムというサイトで、
DirectX10版高速フォント表示サンプルが動かなかったんです。


385:デフォルトの名無しさん
09/09/23 23:54:51
ポリゴンの外周部分にアンチエイリアスかけるのってどうやんの?

386:デフォルトの名無しさん
09/09/24 00:08:58
D3D7ぐらいなら、エッジアンチエイリアスあっただろうから
それ使えば?

387:デフォルトの名無しさん
09/09/24 01:01:37
糞レス入りました


388:デフォルトの名無しさん
09/09/24 01:06:44
2速に入ってるな

389:デフォルトの名無しさん
09/09/24 01:10:25
エッジアンチはソートが必要だから
使い物にならないとおもうんだが。

390:デフォルトの名無しさん
09/09/24 01:19:03
何不思議発言してんの?
アンチエイリアス使う時点で後ろの絵が必要に決まってんだろw

391:デフォルトの名無しさん
09/09/24 01:33:20
ここで華麗にDirectXのバージョンをアンチエイジング

392:デフォルトの名無しさん
09/09/24 01:34:04
>>390
MSAAとかFSAAとエッジアンチの違い分かってないだろ・・・

393:デフォルトの名無しさん
09/09/24 03:14:44
シェーダーで描画しようとしている色が透明のときは
処理が無駄なので飛ばしたいんですけど
どうやればいいですか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch