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

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

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

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

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
2デフォルトの名無しさん:2010/03/16(火) 00:18:12
前スレ
【C++】 DirectX初心者質問スレ Part27 【C】
http://pc12.2ch.net/test/read.cgi/tech/1263024805/
3デフォルトの名無しさん:2010/03/16(火) 19:16:58
質問です。

立方体をポイントリスト、ラインリスト、トライアングルリストで描画しようとしているのですが、
ポイントもラインもポリゴンも真っ黒になってしまいます(背景は青色)
頂点フォーマットは
(D3DFVF_XYZ | D3DFVF_PSIZE | D3DFVF_DIFFUSE | D3DFVF_SPECULAR )
の形式で、描画直前に頂点バッファをロックしてdiffuseの値を確認してもちゃんと入ってます。

カラーは0x44ff00ffのような感じで入れて、色々変えてテストしてるんですが、
半透過で表示した場合、最初の44の所を色々変えると、ちゃんと透過の濃度は変化しているので、
カラーは確実に読んでると思います(ただし真っ黒からどんどん薄くなる感じです。赤や青に出来ません)

こういう状況を見て、「あー、これは多分あそこがおかしいんだな」と推測がつく方おられますでしょうか?
現状詰んでます。宜しくお願いします。
4デフォルトの名無しさん:2010/03/16(火) 20:11:43
>>3
SetRenderState(D3DRS_LIGHTING, FALSE)

あと、D3DFVF_PSIZEがなんで入ってるの?
5デフォルトの名無しさん:2010/03/17(水) 01:01:51
質問です。

板ポリのUV座標(画像内座標)の指定をピクセル単位でやりたいのですが、
何か上手い方法はありませんか?
6デフォルトの名無しさん:2010/03/17(水) 01:25:20
>>5
そう言うピクセルシェーダーを書けばいいじゃん
板ポリの大きさとテクスチャの大きさを渡せば、シェーダー内でUV値出せるだろ
73:2010/03/17(水) 02:55:50
>>4

有難うございます。色が表示されるようになりました。
PSIZEはポイントスプライト表示の時の大きさ格納用に入れてます。
8デフォルトの名無しさん:2010/03/18(木) 00:00:50
こんちには
サウンド系の質問です

どなたかオーディオインターフェースのマイク入力を
読み込んだ方はいます?
オーディオインターフェースとは こんな感じの製品です
http://www.kurosawagakki.com/items/detail/54714.html

16chのマイク入力を持っているのですが
単純にチャンネルを指定すれば波形として
読めるのでしょうか?
9デフォルトの名無しさん:2010/03/18(木) 12:14:33
質問です

DirectX9cを使っています
画像表示、文字表示、キーボード入力をしようとしました
コンパイルは通りましたがメイクをすると
外部シンボル ×××が未解決(・・・・MAIN.OBJ が参照)と表示されます
×・・・D3DXCreateSprite、D3DXCreateTextureFromFileA、D3DXCreateFontA
   の3つです

キーボード入力を除くとメイクは問題なし
またに画像表示、文字表示を除くとメイクは問題なし
ですがキーボード入力+画像表示 or 文字表示でメイクが通らなくなり困っています

ソースファイルはmain.cppのみです
どなたかご教授お願いします
10デフォルトの名無しさん:2010/03/18(木) 12:33:50
キーボード入力を除いた版は実行すると画面に画像は出る?
コンパイラが最適化して根こそぎ削られてたりして
11デフォルトの名無しさん:2010/03/18(木) 12:40:25
どれもd3dx9.libが必要だけど、ちゃんとリンクしてる?
12デフォルトの名無しさん:2010/03/18(木) 12:58:55
いったんクリーンしてリビルドで治るやも
13デフォルトの名無しさん:2010/03/18(木) 13:44:01
プロジェクトごとうpした方が早くないか
14デフォルトの名無しさん:2010/03/18(木) 20:50:50
変な質問すみません、
3Dの着せ替えシステムを実装したくて、現在モデルをそれ用に加工しているのですが、
「着せ替え時はメッシュコンテナのポインタを入れ替える事でできる」
と以前お答えを頂いたのですが、スキンメッシュの話で
「ボーン構造と頂点数が同じじゃないと駄目」といった話を聞き不安に…。

つまり、入れ替えるモデルは全て頂点数が同じじゃないと駄目なのでしょうか?
別にそんな事はないのでしょうか?
159:2010/03/18(木) 20:59:35
>10
>キーボード入力を除いた版は実行すると画面に画像は出る?
>コンパイラが最適化して根こそぎ削られてたりして
表示されています
BCC Developerのプロジェクト設定で「最適化しない」にしています

>11
必要な*.libは*.dllに変換しリンクしています
#pragma comment( lib, "d3d9.dll" );
#pragma comment( lib, "d3dx9.dll" );
#pragma comment( lib, "dinput8.dll");
#pragma comment( lib, "dxguid.dll" );

>12
クリーンというのは、以前作られている*.obj等を削除する事でしょうか?
削除して試してみました

>13
BCC Developerの環境でもアップしていいのでしょうか?
16デフォルトの名無しさん:2010/03/18(木) 21:41:42
#pragma comment( lib, "d3d9.lib" )
17デフォルトの名無しさん:2010/03/18(木) 21:58:50
>>14
そんなの実装する側次第だから、自分で何とかすれば良いだけの話。
18デフォルトの名無しさん:2010/03/18(木) 22:14:32
>>15
BCCはよくしらんけど、どゆこと?
>必要な*.libは*.dllに変換しリンクしています
19デフォルトの名無しさん:2010/03/18(木) 22:19:01
18ですが、↑は自分で調べられそう。いろいろあるんですね。無視してください
2014:2010/03/18(木) 22:55:49
>>17
ありがとうございます。実装次第で大丈夫なんですね。
知らない仕様かと思いあせってました。感謝っ
219:2010/03/18(木) 23:05:54
解決しようと色々いじってたら
環境が変になった

DirectX SDKから落しなおしてきます
229:2010/03/19(金) 01:34:26
環境の再インスコ(バージョンアップ)+環境再設定で無事解決しました。

解決内容
・DirectX 9.0 SDK October 2004 → DirectX 9.0 SDK October 2005に変更
・October 2004では*.lib→*.dllの変換ができたができなかった
明日PC起動後もう一度試してみます
・変換できなかった為、おそらくロシア人の方が用意してくれている
BCC Developerに変換しなおした*.libと配布用*.dllをDLし配置
※変換されているのはDirectX 9.0 SDK Update (April 2007)後日再度SDKをアップ予定
ttp://www.clootie.ru/cbuilder/index.html#DX_CBuilder_SDKs
・BCC Developerのデフォルトライブラリ先・インクルード先設定を修正
・コンパイル→メイクで問題なく実行ファイル生成し、動作も問題ありませんでした

質問に答えてくださった数名の方ありがとうございました
後日、変換に関してとDirectX 9.0 SDK Update (April 2007)に変更後に関して記述します
23デフォルトの名無しさん:2010/03/19(金) 05:38:51
>>14
アニメーションは同じままってことだよね?
その場合、ボーンは同じじゃないと、アニメーション時に破綻しちゃうのでは?
さすがに頂点数は違っても、スキン情報もちゃんと連動して変更すれば大丈夫だと思う。
24デフォルトの名無しさん:2010/03/19(金) 14:45:30
スキンメッシュにシェーダーをかけたいんですが
これはスキンメッシュの各部分に普通のシェーダーをかけるようにすればいいのけ?
25デフォルトの名無しさん:2010/03/19(金) 15:04:09
>>24
そうそう
フラグメントリンカ使えば動的にスキンメッシュの部分だけ作れるよ
26デフォルトの名無しさん:2010/03/20(土) 10:31:15
質問です。

Direct3Dでゲームを作っているのですが、
デバイスロスト対策部分を現在開発中です。
※テクスチャをレンダリングターゲットにしています

一応、基本的なロスト対策は出来ている状態です。
・フルスクリーン⇔スクリーン
・フルスクリーンAlt+Tab

が、ここでCtrl+Alt+Delを押すと、
デバイスの再生成に失敗します。

いろいろ試した結果、Ctrl+Alt+Delで表示されるウィンドウ表示中に
デバイスを生成すると、失敗するようです。

Ctrl+Alt+Delで表示されるウィンドウ表示中は処理を保留したいのですが、
このウィンドウが表示されていること検出する方法を教えて下さい。


27デフォルトの名無しさん:2010/03/20(土) 12:20:58
そんなん問題になったことないけどな。
D3DERR_DEVICELOST
  ・いったんメッセージループへ戻り(必須)、TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すのを待つ。
  ・D3DPOOL_DEFAULTリソースの破棄は可能
D3DERR_DEVICENOTRESET
  ・Resetする。
の手順は守ってるか?
2826:2010/03/20(土) 13:03:39
>>27
返信ありがとうございます。
自分のソースを確認したところD3DERR_DEVICELOSTになった後、
TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すのを待たずに
再生成していました。

回答の通りにソースを書き直したところ、解決しました。
ありがとうございました。







29デフォルトの名無しさん:2010/03/21(日) 00:16:20
自分で、簡単なモデラーを作ろうと思っているのですが、頂点の選択部分がうまくいきません。
実際の頂点と WM_LBUTTONUPから取得したマウス座標(lefttopとrightbottomのx、y)から変換したlefttopなどの変数とずれが生じてしまいます。
自分の考えとしてはビュー変換→プロジェクション変換し、スクリーン座標系にに頂点、マウス位置を変換すれば単純に比較が可能だと思ったのですが、
どうしたらうまく選択できるのでしょうか。
bool verManage::IsSelectV(D3DXVECTOR3 lefttop,D3DXVECTOR3 rightbottom,int num){
D3DXVECTOR3 pos(verX[num],verY[num],verZ[num]);
D3DXMATRIXA16 matProj,matView,matWorld;
D3DXMatrixIdentity(&matWorld);
pDevice->GetTransform( D3DTS_PROJECTION,&matProj);
pDevice->GetTransform( D3DTS_VIEW,&matView);
D3DXVec3TransformCoord(&pos,&pos,&matView);
D3DXVec3TransformCoord(&pos,&pos,&matProj);
D3DXVec3Unproject(&lefttop,&lefttop,&Viewport, &matProj,&matView, &matWorld);
D3DXVec3Unproject(&rightbottom,&rightbottom,&Viewport, &matProj,&matView, &matWorld);
D3DXVec3TransformCoord(&lefttop,&lefttop,&matView);
D3DXVec3TransformCoord(&lefttop,&lefttop,&matProj);
D3DXVec3TransformCoord(&rightbottom,&rightbottom,&matView);
D3DXVec3TransformCoord(&rightbottom,&rightbottom,&matProj);
if(pos.x>lefttop.x&&pos.y>lefttop.y&&pos.x<rightbottom.x&&pos.y<rightbottom.y)return 1;
return 0; }
30デフォルトの名無しさん:2010/03/21(日) 00:36:01
デバイスロストについての質問です
デバイスロストが起こった場合、
発生前に使っていたリソース(D3DPOOL_MANAGEDが使えないもの)を再構築しなければならない とのことなのですが

動的に生成、破棄されるクラスの中にリソースを入れてある場合、
デバイスロストが発生した時点で、再構築しろというメッセージを各オブジェクトごとに送らなければなりません

素人の私の考え方だと、
「現在生成されているオブジェクトのリスト(いくつかのポインタ)を作っておいて、
それで各オブジェクト(すべてが同じクラスのオブジェクトとは限らない)に再構築しろというメッセージを送る」
こんなイメージが漠然と描かれるのですが、

もっと楽、または適切、または効率が良い方法があれば教えていただきたいです
31デフォルトの名無しさん:2010/03/21(日) 00:44:53
>>29
まさかと思うが、浮動小数点型を float == float 見たくしてないよな?
違うならば、ズレとはどの程度かを言いたまえ
32デフォルトの名無しさん:2010/03/21(日) 01:17:42
>>29
そのコードが何をしたいのか意味が分からない。
3歩進んで2歩戻るようなことしてるし。
33デフォルトの名無しさん:2010/03/21(日) 02:02:09
D3DXVec3Unprojectいらんだろ。頂点をD3DXVec3Projectで画面座標に変換しろよ。
349:2010/03/21(日) 22:46:05
遅くなりましたが報告

*.lib → *.dllの変換は不可
DirectX 9.0 SDK Update (April 2007)に換えてみたが
今の所問題はなさそう

以上、 名無しに戻ります
3529:2010/03/21(日) 22:47:50
D3DXVec3TransformCoord(&pos,&pos,&matView);
D3DXVec3TransformCoord(&pos,&pos,&matProj);
D3DXVec3Unproject(&lefttop,&lefttop,&Viewport, &matProj,&matView, &matWorld);
D3DXVec3Unproject(&rightbottom,&rightbottom,&Viewport, &matProj,&matView, &matWorld);
D3DXVec3TransformCoord(&lefttop,&lefttop,&matView);
D3DXVec3TransformCoord(&lefttop,&lefttop,&matProj);
D3DXVec3TransformCoord(&rightbottom,&rightbottom,&matView);
D3DXVec3TransformCoord(&rightbottom,&rightbottom,&matProj);

D3DXVec3Project(&pos,&pos,&Viewport, &matProj,&matView, &matWorld);
に買えただけでうまくいきました。
>>32,33 マウスクライアント座標と頂点の比較のし方が分からなかったので、
一度ワールド座標に変換、その後D3DXVec3Unprojectでスクリーン座標にするという
方法にしました。ただそれだと、1.0fほどX座標に違いが生じてしまっていました。
とりあえず、うまくいきましたので、お礼をさせていただきます。
36デフォルトの名無しさん:2010/03/21(日) 23:59:56
D3DXVec3ProjectとD3DXVec3Unprojectを真似してみた。
SSE2を無効化してもD3DXVec3Unprojectに誤差が出る。完全に同じは無理だった。残念。
で、これをみるとわかるが、D3DXVec3Unprojectの結果をD3DXVec3Projectしても元には戻らないね。

D3DXVECTOR3 * MyD3DXVec3Project(D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV,
CONST D3DVIEWPORT9 * pViewport, CONST D3DXMATRIX * pProjection,
 CONST D3DXMATRIX * pView, CONST D3DXMATRIX * pWorld)
{
D3DXMATRIX matWVP = *pWorld * *pView * *pProjection;
D3DXVECTOR3 vTmp;
D3DXVec3TransformCoord(&vTmp, pV, &matWVP);
pOut->x = pViewport->X + (1.0f + vTmp.x ) * pViewport->Width * 0.5f;
pOut->y = pViewport->Y + (1.0f - vTmp.y ) * pViewport->Height * 0.5f;
pOut->z = pViewport->MinZ + vTmp.z * ( pViewport->MaxZ - pViewport->MinZ);
return pOut;
}
D3DXVECTOR3 * MyD3DXVec3Unproject(D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV,
CONST D3DVIEWPORT9 * pViewport, CONST D3DXMATRIX * pProjection,
 CONST D3DXMATRIX * pView, CONST D3DXMATRIX * pWorld)
{
D3DXMATRIX matViewport(
pViewport->Width * 0.5f, 0, 0, 0,
0, -(pViewport->Height * 0.5f), 0, 0,
0, 0, pViewport->MaxZ - pViewport->MinZ, 0,
pViewport->X + pViewport->Width * 0.5f, pViewport->Y + pViewport->Height * 0.5f, pViewport->MinZ, 1.f);
D3DXMATRIX matWVPVp = *pWorld * *pView * *pProjection * matViewport;
D3DXMatrixInverse(&matWVPVp, NULL, &matWVPVp);
D3DXVECTOR3 vTmp;
D3DXVec3TransformCoord(&vTmp, pV, &matWVPVp);
*pOut = (D3DXVECTOR3&)vTmp;
return pOut;
}
37デフォルトの名無しさん:2010/03/22(月) 08:24:32
右手座標系のデータを読み込んでスキニングしようとしたんですけど
うまくアニメーションされません。スキニングしない場合は正常に表示されます。

もしかしてボーン行列の掛け算の順序とかも変えないといけないんでしょうか?
38デフォルトの名無しさん:2010/03/22(月) 08:39:35
読み込み時に左手座標系に変換して何が間違っているのか確認しろ。
39デフォルトの名無しさん:2010/03/22(月) 08:50:21
>>38
ヘルプに書いてあるように、
三角形の頂点の順序を反転し、システムが前から見て時計回りにたどれるようにする。つまり、頂点が v0、v1、v2 であるとすると、Direct3D に v0、v2、v1 として渡す
をすればいいんですよね?
40デフォルトの名無しさん:2010/03/22(月) 13:57:44
>>36
>>D3DXVec3Unprojectの結果をD3DXVec3Projectしても元には戻らないね。 
俺も自分のライブラリで作ってみたが、別に元に戻るみたいだが。
戻らない理由も特に見当たらないし。
まあただ、逆行列の精度が悪くて誤差は凄いけど。
41デフォルトの名無しさん:2010/03/22(月) 14:09:03
>>39
頂点そのものもひっくり返せ
42デフォルトの名無しさん:2010/03/23(火) 10:27:06
以下のように初期化をした後でD3DPOOL_MANAGEDフラグを付けてVertexBufferやTextureを作ろうとすると
必ず失敗(hr = -2005530516 D3DERR_INVALIDCALL)します。D3DPOOL_DEFAULTでは失敗しません。
サンプルサイトの通りにやっているつもりだったのですが、どこが悪いかご指摘願います。

環境は Win7 Ultimate x64 開発ターゲット x86(32bit)
VGA Radeon 5870 1GB

VertexBufferやTextureの作成コードは

InitD3D9Ex(hwnd);
m_pDevice9Ex->CreateVertexBuffer(sizeof vertices1, D3DUSAGE_WRITEONLY, m_FVF1, D3DPOOL_MANAGED, &m_pVB1, NULL);
m_pDevice9Ex->CreateTexture(640, 480, 0, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &m_pTX1, NULL);

DirectX Caps Viewerでは、D3DCAPS2_CANMANAGERESOURCEがNoとなっていますが、これは関係ありますでしょうか?
43デフォルトの名無しさん:2010/03/23(火) 10:27:47
CComPtr<IDirect3D9Ex> m_pD3D9Ex;
CComPtr<IDirect3DDevice9Ex> m_pDevice9Ex;

bool InitD3D9Ex(HWND hwnd)
{
 try
 {
  THROW_IF_FAILED( Direct3DCreate9Ex(D3D_SDK_VERSION, &m_pD3D9Ex) );

  if (createDevice9Ex(hwnd, D3DDEVTYPE_HAL, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED))
  {
   return true;
  }
  else if (createDevice9Ex(hwnd, D3DDEVTYPE_HAL, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED))
  {
   return true;
  }
  else if (createDevice9Ex(hwnd, D3DDEVTYPE_REF, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED))
  {
   return true;
  }
  else if (createDevice9Ex(hwnd, D3DDEVTYPE_REF, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED))
  {
   return true;
  }
 }
 catch (std::runtime_error& e)
 {
  ::OutputDebugStringA(e.what());
 }
 return false;
}
44デフォルトの名無しさん:2010/03/23(火) 10:28:28
bool createDevice9Ex(HWND hwnd, D3DDEVTYPE DeviceType, DWORD BehaviorFlags)
{
 UINT ct = m_pD3D9Ex->GetAdapterCount();
 for (UINT i = 0; i < ct; i++)
 {
  D3DPRESENT_PARAMETERS pp = getD3DPresentParameters(i, DeviceType);

  HRESULT hr = m_pD3D9Ex->CreateDeviceEx(i, DeviceType, hwnd, BehaviorFlags, &pp, NULL, &m_pDevice9Ex);
  if (hr == D3D_OK)
  {
   return true;
  }
 }
 return false;
}

D3DPRESENT_PARAMETERS getD3DPresentParameters(UINT Adapter, D3DDEVTYPE DeviceType)
{
 D3DCAPS9 caps;
 THROW_IF_FAILED( m_pD3D9Ex->GetDeviceCaps(Adapter, DeviceType, &caps) );
 D3DDISPLAYMODEEX dm = { sizeof D3DDISPLAYMODEEX };
 D3DDISPLAYROTATION rot;
 THROW_IF_FAILED( m_pD3D9Ex->GetAdapterDisplayModeEx(Adapter, &dm, &rot) );
 D3DPRESENT_PARAMETERS pp = {0};
 pp.BackBufferWidth = ::GetSystemMetrics(SM_CXSCREEN);
 pp.BackBufferHeight = ::GetSystemMetrics(SM_CYSCREEN);
 pp.BackBufferFormat = dm.Format;
 pp.SwapEffect = caps.Caps3 & D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD ? D3DSWAPEFFECT_DISCARD : D3DSWAPEFFECT_COPY;
 pp.Windowed = TRUE;
 return pp;
}
4542:2010/03/23(火) 11:00:13
http://www1.axfc.net/uploader/Sc/so/95463.zip&key=d3d9x

ソースを削ってろだにアップしました。
お願いします。
46デフォルトの名無しさん:2010/03/23(火) 12:56:14
失敗して何の問題があるんだ?
それで正常動作だろ。
47デフォルトの名無しさん:2010/03/23(火) 13:35:05
>>45
http://msdn.microsoft.com/ja-jp/library/bb172584(VS.85).aspx


Direct3D 9 と Direct3D 9Ex の違い
D3DPOOL_MANAGED は、IDirect3DDevice9 の場合は有効ですが、IDirect3DDevice9Ex の場合は無効です。
4842:2010/03/23(火) 13:37:02
>>46-47
すみません、ありがとうございます。
使い勝手のがいいので、DX9C日本語chmを見て使っていたので、乗ってませんでした。
初歩的なミスでした、ありがとうございました。
49デフォルトの名無しさん:2010/03/23(火) 14:12:41
Exすっ飛ばして10に行ったから調べてないんだが
ExはWDDM?動作だからデバイスロストなんてしないしリソースもうまいこと管理してくれるけどVista以降って認識でいいのかな
50デフォルトの名無しさん:2010/03/23(火) 15:17:45
ちょっと調べれば分かることをなんて聞くの?
51デフォルトの名無しさん:2010/03/23(火) 16:50:05
DXUTのコントロールって重いですか?
52デフォルトの名無しさん:2010/03/23(火) 17:00:42
2kgくらいだったかな
53デフォルトの名無しさん:2010/03/23(火) 17:54:27
>>30
デバイスロストに対応するべきクラスは、
class ICallbackLost{
static list<ICallbackLost*> s_list;
ICallbackLost()
{
s_listに追加;
}
virtual ~ICallbackLost()
{
s_listから削除;
}
virtual void lost() = 0;
virtual void reset() = 0;
}

クラスを継承するといい。
54デフォルトの名無しさん:2010/03/23(火) 17:55:32
>>30 >>53
メソッドをpublicにし忘れた…
他にも色々つっこみどころはあると思うが、概念的として読んでくれ
55デフォルトの名無しさん:2010/03/23(火) 22:49:59
DirectSound8の IDirectSoundBuffer8 で、
WEVデータを短い間隔で連続して鳴らすと途中で聞こえなくなるんだけど
原因分かる方教えていただけないでしょうか。

// バッファ作成
void init(){
desc.dwFlags=DSBCAPS_GLOBALFOCUS;

dsObject->SetCooperativeLevel(hWnd, DSSCL_NORMAL);
dsObject->CreateSoundBuffer(&desc, &s, NULL);
s->QueryInterface(IID_IDirectSoundBuffer8, reinterpret_cast<LPVOID*>(&dsBuffer));
s->Release();
}

// 音を鳴らす
// シューティングの射撃音みたいに短い間隔で連続で呼び出す
void run(){
dsBuffer->SetCurrentPosition(0);
dsBuffer->Play(0,0,0);
}

WAVEFORMATEXの取得とかバッファの書き込みは問題ないはずです
56デフォルトの名無しさん:2010/03/23(火) 23:00:57
10年くらい前、SoundBlasterの糞ドライバが憎まれていた時代の非公式テクニックだが、
DirectSoundのバッファが小さいと問題出るので、バッファの最小限のサイズを決めて
余白は無音で埋めるというのがあった覚えがある。最小サイズは1024byteか4096byteだったような気がする。
57デフォルトの名無しさん:2010/03/23(火) 23:38:46
>>56
ありがとう
試しにバッファサイズを +4096 してみたけど解決しなかった

どうもDirectInputの入力で音を鳴らしたときに途切れる現象が発生する。
普通にループだけで0.2秒おきに鳴らしても問題なかった。
どっかでメモリ壊してるのかも
58デフォルトの名無しさん:2010/03/23(火) 23:39:57
>>57
一回他の音楽データで試してみて
5957:2010/03/23(火) 23:56:47
>>58
差し替えたら問題なく再生できた
ファイルに原因があるのか、WAVEFORMATEXの取り方がおかしいのか・・・
60デフォルトの名無しさん:2010/03/24(水) 00:20:42
Dx9EXって使う人っているんだなぁ。
あれ使うくらいならDx11使う方が遥かにいいと思うけど。
61デフォルトの名無しさん:2010/03/24(水) 00:38:51
最近のゲームって文字表示のシステムってどうなっているんでしょうか?
漢字は当たり前ですが、、、
62デフォルトの名無しさん:2010/03/24(水) 00:39:16
Vista以降でもDXVAやEVRやらの動画系やWPFとかが
いまだにD3D9を要求してくるからねぇ。
仕方なしに使う場面も結構あると思うよ。
63デフォルトの名無しさん:2010/03/24(水) 00:45:37
D3Dのカリングだと、反時計回りのポリゴンを描画しないとあるんですが、
TRIANGLESTRIPの場合、1枚目の頂点を時計回りで定義すると2枚目は反時計回りにならないですか?
64デフォルトの名無しさん:2010/03/24(水) 02:00:51
>>63
別に頂点順にポリゴンを形成しなければならない道理は無いじゃん
0-1-2, 1-3-2, とかで処理してると思えない?
65デフォルトの名無しさん:2010/03/24(水) 02:40:48
>>53
ありがとうございます!
なるほど・・・イメージが沸いてきました
この考え方で試行錯誤してみますっ
6665:2010/03/24(水) 06:39:16
手探りですが、こうしました
#pragma once
//デバイスロストを各オブジェクトに伝える機能を付加する抽象クラス

#include<list>

using namespace std;

namespace DXRenderer{
class ICallbackLost
{
public:
ICallbackLost();//ここでリストに登録
~ICallbackLost();//ここでリストから削除

static void ReleaseResource();//各オブジェクトのリソース開放
static void RestructuringResource();//各オブジェクトのリソース再構築

virtual void Lost() = 0;//開放処理を書く
virtual void Reset() = 0;//再構築処理を書く
protected:
static list<ICallbackLost*> s_list;
};
}//DXRenderer

あとは継承させて2つの仮想関数の中身を書いてあげれば、うまく望んだ動作をしました
ありがとうございました!
67デフォルトの名無しさん:2010/03/24(水) 09:28:15
>>66
念のため言っておくが、デストラクタにvirtualつけ忘れてんぞ
68デフォルトの名無しさん:2010/03/24(水) 09:53:02
何これコンテナとデータが一体になってんのか

リスト持ってる管理側とクラス分けたほうがよくないか?
俺がstatic嫌いなだけかも知れんが
s_listがprotectedなのには理由があるんだろうか



class LostManager
{
class ICallbackLost;
list<ICallbackLost*> s_list;

public:
void AddResource( ICallbackLost *data ){ s_list.push_back( data ); }

void ReleaseResources();//各オブジェクトのリソース開放
void RestructuringResources();//各オブジェクトのリソース再構築

~LostManager(){ ReleaseResource(); }

public:
class ICallbackLost
{
virtual void Lost() = 0;//開放処理を書く
virtual void Reset() = 0;//再構築処理を書く
};
};


見当違いだったら須磨祖
69デフォルトの名無しさん:2010/03/24(水) 10:01:56
ああすまんs_listがprotectedなのは分かった
70デフォルトの名無しさん:2010/03/24(水) 10:07:46
Direct3Dは1アプリケーションで2つ扱うことがない(できなくはないが、やるなとMSが言っている)から、staticで十分かと。
気分の問題程度だよね。
あとs_listはprivateでいいよね。

あと、>>68のはせっかくコンストラクタとデストラクタで登録/削除処理してたのに、自前で登録関数呼ぶことになっちゃうよね。
趣旨理解してないぞ
71デフォルトの名無しさん:2010/03/24(水) 10:10:22
なんでLostManagerのデストラクタでReleaseResource呼んでるんだ・・・?
意味不明すぎる
ReleaseResourceが呼ばれるのは、D3Dがデバイスロストした時だろ…
72デフォルトの名無しさん:2010/03/24(水) 10:14:39
ごめん理解してなかった

余計なお世話でしたね
73デフォルトの名無しさん:2010/03/24(水) 10:43:39
IDirect3DTexture9* tx1 = ...;
IDirect3DTexture9* tx2 = tx1;
tx1->AddRef();

このテクスチャがロストした場合は、tx1で再構築すればtx2では再構築する必要ありませんか?
74デフォルトの名無しさん:2010/03/24(水) 11:15:49
だめ。
ttp://marupeke296.com/DXG_No52_DeviceLost.html

〜CreateTexture関数にポインタのアドレス渡すでしょ?
tx1で再構築すると別の空間に作られてそこを参照しなおすから、tx2とは参照先が異なる

IDirect3DTexture9* tx = 〜;
IDirect3DTexture9** tx1 = &tx;
IDirect3DTexture9** tx2 = &tx;

これならtx1,tx2はそのままで使えるけど、アクセスは面倒なことに・・・
75デフォルトの名無しさん:2010/03/24(水) 17:32:17
ピクセルシェーダーでアルファ値無しのテクスチャの黒成分をアルファ値として出力するにはどう書けばよいですか?
76デフォルトの名無しさん:2010/03/24(水) 20:31:06
>>70
デバイスロストはDirect3D単位で起こるものではなく
Direct3DDevice単位で起こる。
Direct3DDeviceは、例えばビデオカードが2枚刺さってれば
ふたつ作ることもありうる。
つまり、staticのリストはNG。デバイス毎にリストを保持するのが正しい。
77デフォルトの名無しさん:2010/03/24(水) 22:49:10
>>67
指摘ありがとうございます!

virtualなのですが、このクラスでは、
リストの中に入っているポインタを使ってdeleteをせず、

派生させたクラスで個別にdeleteを呼ぶためにリーク類は起きない、
ということでつけていません(確認済み)
なのでデストラクタの実態にはリストから削除という命令を書いているという形です

>>68
>リスト持ってる管理側とクラス分けたほうがよくないか?
たしかにおっしゃる通りかもしれません
もういちど考えてみます!

>>70
>あとs_listはprivateでいいよね。
まったくその通りです 修正します
ご指摘感謝です!
78デフォルトの名無しさん:2010/03/24(水) 22:54:59
>>76
なるほど・・・そのパターンは考えていませんでした
勉強になります
しかしとりあえず今回は一番多いパターンのビデオカード1枚という形で、
組んでいくことにします
79デフォルトの名無しさん:2010/03/25(木) 00:47:56
>>75
意味不明
アルファ値無しのテクスチャの色成分はRとGとBだが
黒とは、RとGとBの値が0の時を指す

カラーキーと同じように、黒の時にアルファ100%とするなら
条件分岐が使えるバージョンなら

out.a = 1;
if ( tex.r == 0 && tex.g == 0 && tex.b == 0 ) {
out.a = 0;
}

こんな感じ
80デフォルトの名無しさん:2010/03/25(木) 00:50:36
ご指摘のあったポイントを参考に修正しました

ttp://down11.ddo.jp/uploader/download/1269445212.zip
パスはaaaa

クラスは2つに分けました
そのほうが機能ごとに分けられ、より整理できました
>>68で指摘のあったとおり、クラスを2つに分けました

・リストを管理するクラス
・ロスト情報を受け取るための抽象クラス

おかしな点ございましたらご指摘をお願いします
8180:2010/03/25(木) 00:52:49
若干文章ミスりましたOTL
82デフォルトの名無しさん:2010/03/25(木) 01:32:11
>>79
レスどうも。。。
RGBを0〜1にしたいということです。
調べたんですがこれで求まるらしいですねG = g*0.59 + r*0.3 + b*0.11;
83デフォルトの名無しさん:2010/03/25(木) 02:38:08
最初からグレースケールって言えよ・・・
84デフォルトの名無しさん:2010/03/25(木) 14:05:30
>>82
それをどう解釈したら「黒成分をアルファ値として出力」になるんだよww
85デフォルトの名無しさん:2010/03/25(木) 14:15:40
>>82
日本語が不自由っていうレベルじゃねえぞwwwwwwwww
精子からやり直せwwww
86デフォルトの名無しさん:2010/03/25(木) 16:45:48
そんなにおかしいかな?
87デフォルトの名無しさん:2010/03/25(木) 16:55:36
黒成分ってのは結構おもしろかった
カラー画像をグレー化する変換式は1通りの決まった正解があるわけじゃないよね
88デフォルトの名無しさん:2010/03/25(木) 16:59:41
「黒成分」ってのは減色混合における黒インク量のことか?
89デフォルトの名無しさん:2010/03/25(木) 17:01:28
CMYKだとKが黒成分だよね
90デフォルトの名無しさん:2010/03/25(木) 19:03:41
黒成分ワロタw
まぁ、言いたいことは分かる。

輝度(Y)、グレースケールなどなど、言い方はいろいろあるね。
91デフォルトの名無しさん:2010/03/26(金) 01:02:25
いずれにしろアルファは全く無関係なのは確か。
92デフォルトの名無しさん:2010/03/26(金) 01:13:09
Direct3D9で2D表示を行っています
現在は頂点をスクリーン座標で指定し、ビューポートの逆変換によって表示しています
Z軸の回転は問題ないのですが、
X軸Y軸の回転の場合縦横に縮小した感じではなく、
奥の辺は短く、手前の辺は長く(画面外に出ると思いますが)なるようにしたいです
スクリーン座標からいったん仮にワールド座標を求めてそこで回転させるとかしかないでしょうか?

なにか良い方法があればよろしくお願いします
XYZ軸の回転が全て0の時は画像とスクリーンのピクセルが一対一になるようにしたいです


93デフォルトの名無しさん:2010/03/26(金) 07:40:21
>>92
World空間ではなく、View空間まで戻して回転させる

変換行列 = 逆Viewport行列 * 逆Projection行列 * 回転中心まで移動行列 * 回転行列 * 逆回転中心まで移動行列 * Projection行列 * Viewport行列

↑を各頂点に掛ければいい
面倒そうなところは、回転中心まで移動行列だけど、、
これも似たようなプロセスで事前に求めておくしかないかなぁ
94デフォルトの名無しさん:2010/03/26(金) 12:12:46
商用ソフトをPIXでデバッグすると何してるか分かるね
結構プロテクトかかってると思うけど
95デフォルトの名無しさん:2010/03/26(金) 12:54:20
突然流れと関係ないことを喚く馬鹿っていったい何なんだろう?
96デフォルトの名無しさん:2010/03/26(金) 12:59:53
2chに流れもくそもないかと
97デフォルトの名無しさん:2010/03/26(金) 13:08:05
しかも質問スレで何言ってんのかと
98デフォルトの名無しさん:2010/03/26(金) 13:29:23
directxスレここしかないし
99デフォルトの名無しさん:2010/03/26(金) 13:41:47
周りに話す人間がいないから、情報価値がゼロの話でも、
つぶやかずにはいられなかったんだよ。
100デフォルトの名無しさん:2010/03/26(金) 22:08:45
GeForce FX 5000系をバックサポートするときに注意すべき点って分かる人いる?
バーテックス/ピクセルシェーダ2.0で動かしてるんだが、
どうもこのその板では動かないっぽいんだが手元にない。
101デフォルトの名無しさん:2010/03/26(金) 22:31:40
バックサポートってなに?
バックスタブみたいなもん?
102デフォルトの名無しさん:2010/03/26(金) 22:35:08
>>101
後方互換性を維持するためのサポート。
新しい工業製品が旧世代での古い機能を満たすように考慮すること。
103デフォルトの名無しさん:2010/03/27(土) 00:34:49
>>100
ドライバ最新は当り前じゃね?
104デフォルトの名無しさん:2010/03/27(土) 00:45:19
103と5000系動作を保証することの関係性が分からない
105デフォルトの名無しさん:2010/03/27(土) 01:52:52
GeForce FXというとこれを思い出す
http://www.youtube.com/watch?v=WOVjZqC1AE4
106デフォルトの名無しさん:2010/03/27(土) 01:59:35
今常駐ツールを作っていて、ユーザーがゲームをプレイ中だったらポップアップとか出さずプレイの邪魔をしないようにしたいんだけど
アクティブウィンドウがDirectXゲームか否かを判断する方法ってある?
107デフォルトの名無しさん:2010/03/27(土) 02:05:41
>>106
Direct3D/DirectDrawデバイスをエクスプルーシブモードで
開こうとすると失敗することで判定するw

まあ、最近ときどきある、フルスクリーンもどきな動きをする『ウィンドウモード』のゲームだとだめだけど。
108デフォルトの名無しさん:2010/03/27(土) 02:21:20
>>106
アクティブウインドウがゲームでなくても、邪魔になるようなポップアップは
出すべきじゃないと思う。
109デフォルトの名無しさん:2010/03/27(土) 02:37:21
>>104
ハードとプログラムの受け渡しって何がしてると思う?

ドライバによって、同じ古いグラボでも対応する、しない&動く、動かない機能があるが
動作検証って、グラボと各Verのドライバでするわけ?

ドライバ位は最新を前提にしないと、現実的に動作保証なんてしてられないだろ
110デフォルトの名無しさん:2010/03/27(土) 04:07:33
>>107
ウィンドウモードだとDirectX経由のアプローチで何かしらの情報を得るのは難しいですかね

>>108
普段は必要とされてるけど、ゲーム中は黙ってて欲しい微妙なバランスの物があるのです
ポップアップはその一例で、ユーザーのプライオリティ変化に自動的に追従できる所はしたいと言う話です
111デフォルトの名無しさん:2010/03/27(土) 09:59:02
ついったーくらいあんとですねわかります
112デフォルトの名無しさん:2010/03/27(土) 11:45:49
エロゲーをフルスクリーンでプレイしている時にポップアップしてくる
avastには殺意が沸くが、そういうのを目指してると
113デフォルトの名無しさん:2010/03/27(土) 11:51:13
カメラでプレイ中のプレイヤーの顔をとって判断すればいいんじゃない
114デフォルトの名無しさん:2010/03/27(土) 20:09:31
サーフェイスとレイヤーの違いがわかりません。
どういう不に考えればいいのですか?
115デフォルトの名無しさん:2010/03/27(土) 21:02:09
日本語に訳せばわかるだろ
116デフォルトの名無しさん:2010/03/27(土) 21:26:21
J-POPのユニットとアニメの格好をする人・・・?
117デフォルトの名無しさん:2010/03/27(土) 23:25:28
頂点バッファのリストアについて質問です。
デバイスロストしたら頂点バッファも作り直さないといけないですよね、
その場合もういちどファイルから頂点を読んでいって頂点バッファに書き込みという作業が必要になるんですか?
118デフォルトの名無しさん:2010/03/27(土) 23:29:50
>>117
うん
119デフォルトの名無しさん:2010/03/27(土) 23:36:24
>>118
ありがとう
めんどくさいからD3DPOOL_MANAGEDで作ります
120デフォルトの名無しさん:2010/03/30(火) 00:55:10
int許容値までの高速ftoaって需要ある?
とりあえず貼ってみるけど
ttp://asd.if.land.to/code/common.html#r_ftoa
121デフォルトの名無しさん:2010/03/30(火) 16:26:31
>>119
D3DPOOL_MANAGEDが使えるものは全てそれでいい。
俺らが小手先使うより、MSのプログラマが作ったもののほうが優秀だからな
122デフォルトの名無しさん:2010/03/30(火) 17:28:10
昨日
http://msdn.microsoft.com/ja-jp/directx/default.aspx
↑でchm形式DirectX SDK(August 2009)のドキュメント日本語版がダウンロード出来るようになったけど
開くといろいろおかしい、左側のパネル部分がキーワード検索しかないうえに、その検索もうまくいってない
これ他の人はどうだろう?
123デフォルトの名無しさん:2010/03/30(火) 18:04:22
>>122
俺も同じだ
124デフォルトの名無しさん:2010/03/30(火) 21:02:24
>>122
んじゃ俺も同じで
125デフォルトの名無しさん:2010/03/30(火) 21:06:16
>>122
ブロック解除ってやったら表示されたわ
ttp://www.nishishi.com/blog/2009/06/chm_help_tips.html
126デフォルトの名無しさん:2010/03/30(火) 21:23:44
>>122
俺もブロック解除ってやったら表示されたわ
127デフォルトの名無しさん:2010/03/30(火) 22:16:44
お、おれもおれもー
128デフォルトの名無しさん:2010/03/30(火) 22:28:28
おれもいれてー
129デフォルトの名無しさん:2010/03/30(火) 22:43:34
みんなDXUT使ってる?
130デフォルトの名無しさん:2010/03/30(火) 23:13:10
(;´Д`)
131デフォルトの名無しさん:2010/03/30(火) 23:15:25
>>125
右のページはブロック解除すれば表示されるけど、
左側は>>122の言うとおりキーワード検索(機能しない)しか出なくない?
132122:2010/03/31(水) 00:27:14
>>131
そうなんだ、今までのDirectX SDKのマニュアルでは、左側は目次と検索、キーワードなんかがあったけど
今回のは検索しかない、しかも機能がちゃんと動いていない。
検索すると、検索結果に「無題」(たぶん検索語句が含まれるページのタイトル)がいくつかリストアップされる
だけどそのページに移動出来ない。
133デフォルトの名無しさん:2010/03/31(水) 00:28:26
>>132
まあどうでもいいけどね
134デフォルトの名無しさん:2010/03/31(水) 00:38:44
川西さん頑張って!!!
135デフォルトの名無しさん:2010/03/31(水) 01:36:43
ちょっとわからないので質問させてもらいます。
今スロットゲーム的なものを作ってる途中なのですが
流れとしては

『ランダムにスロットに画像表示

キーが押されたら画像がそろっているかの確認処理

そろっていたらその画像に応じて所持コイン増加

はずれだとコイン1枚減少』

のようにしているのですが
コインの増減処理のとき
なぜか2回処理されて(コイン1枚減少が2回行われる
しまいます。
WaitTimerが関連してるような気がして調べてみたものの
わかりません。

↓ソースです。初心者なので汚かったりするかとおもいます
http://uproda.2ch-library.com/lib231205.zip.shtml
136デフォルトの名無しさん:2010/03/31(水) 02:02:19
コインを0.5枚減らすようにすればいいのさ
137デフォルトの名無しさん:2010/03/31(水) 02:07:15
L88のcountを立てる為の条件式は
キーが押されている限りtrueになる。
trueのフローの中にコイン減処理が入っているから、
キーが押されている限り、コインが減っていくんじゃないの?
138デフォルトの名無しさん:2010/03/31(水) 02:31:13
L88のelse文を
f(key & PAD_INPUT_A){
count = 1;
if(ghandle[basyo[0]] == ghandle[basyo[1]] && ghandle[basyo[1]] == ghandle[basyo[2]] ){
hantei = 1;
switch(basyo[0]){
case 0: getc = 50; break;
case 1: getc = 40; break;
default: getc = 10; break;
}
}else{
c = 1;
}
}
if(c == 1)coin = coin-1;
c = 0;
にしてみましたが結果変わらないです
WaitTimer中もキー入力は受け付けるみたいです。
別の方法を考えています
139デフォルトの名無しさん:2010/03/31(水) 03:41:31
まぁ、そのなんだ。その質問は完全にスレ違いだ。

DxLibはDxLibであって、DirectXではない。
gamedevに「DXライブラリ総合スレッド」ってのがあるから、
そっちでも行ってくれ。
140デフォルトの名無しさん:2010/03/31(水) 09:19:32
つーかロジックの問題だろ
141デフォルトの名無しさん:2010/03/31(水) 11:24:18
>>138
そりゃ、その変更じゃ何も変わっていないんだから
結果も当然変わらん。
whileループ1回目でL45のkeyに値が入ってから、
whileループ2回目で改めてkeyに値を入れるまでの時間は殆ど同じだ。
それが原因。対応法としてはL45をL87に移動することだが、
もっと根本的にコードを見直した方が良いと思う。
以上スレチ失礼。
142デフォルトの名無しさん:2010/03/31(水) 23:00:32
アルファチャンネルのある画像Aから画像Bにフェードインさせたいのですが、どうすればいいのでしょうか?
アルファチャンネルが無い画像(四角い画像)なら、BをAの上に頂点色も適用しつつ上書き描画すればいいだけなんですが。
Aをアルファ25%、Bをアルファ75%にすればいいやと最初思いましたが、
それだと背景の色が出てしまい出来ないことに気づきました・・。

シェーダーを使うと古いビデオカードでは動きませんし、テクスチャの内容を書き換えるのも重いようなので避けたいです。
800x600の画像を1024x512のテクスチャの左上に置いているのですが、1fpsになってしまいます。
143デフォルトの名無しさん:2010/03/31(水) 23:10:28
>>142
ttp://platz.jp/~moal/tblend.html
ここで書いてあることとは別なのかな。
基本的に1枚は不透明で描画しておき、フェードイン/アウトを行うものをその上で描画させる。
別にアルファ云々は関係ないはずなんだけど。
144デフォルトの名無しさん:2010/03/31(水) 23:19:44
シェーダも使えないような古いグラボの人は、PCでゲームを買って遊ぶ習慣のない人であり、
顧客になりそうもない人。商売なら相手にする価値が無い。

たぶん趣味の自作ライブラリを鍛えたいという用途だと思うが、だったら
全部ソフトウェアで処理すればいいと思うよ。いまどきのCPUなら
エロゲーの凝ったフェードイン・アウトくらいできちゃうよ。
145142:2010/03/31(水) 23:20:25
>>143
全く同じ形状をしている画像同士なら、それで出来ると思います。
そうではなく、2枚の画像は異なった形状をしていて、
「画像Aをフェードアウトさせつつ画像Bをフェードイン」させたいんです。
146146:2010/03/31(水) 23:29:42
>>144
すいません、レスついてたの気がつきませんでした。

じゃあシェーダーを使って処理するようにしようと思います。
よく考えたら、
自作ライブラリではなくオープンソースのを少し改変して使ってるので
他にOpenGLとソフトウェアのレンダリングエンジンがありました。
スペック低いPCの場合はそっち使ってもらえばいいですね。

RTTが使えるなら
常にレンダーターゲットのテクスチャに画面描画を行っておいて、
それをもとにフェードインすればいいかもしれません。
(でもそこまでしないで素直にシェーダー使った方が楽か)
147デフォルトの名無しさん:2010/03/31(水) 23:32:39

フェードインアウトしている間、画像Aのα+画像Bのα=1を維持して
下の背景を透けさせないようにしたいのか?
148142:2010/03/31(水) 23:35:49
>>147
その通りなんですが、何かいい方法があるんでしょうか
149デフォルトの名無しさん:2010/03/31(水) 23:38:58
Direct3Dを使ったエロゲで、目パチ口パクでアニメがフェードしながら切り替わってるだろ。
あれはテクスチャをロックして、直接書き換えてるんだが。
その方が2枚のテクスチャを重ねて頑張ろうとするより簡単。
150デフォルトの名無しさん:2010/03/31(水) 23:39:33
>>148
片方のアルファ値の減少量を
もう片方の画像の増加量にする
151デフォルトの名無しさん:2010/03/31(水) 23:43:55
画像Aと画像Bをマルチテクスチャブレンディングで合成すりゃいいんでないか?
152デフォルトの名無しさん:2010/03/31(水) 23:45:02
よくよく考えてみると>>142は結構難しい問題かもな
153デフォルトの名無しさん:2010/03/31(水) 23:51:35
つーかロジックの問題だろ
154デフォルトの名無しさん:2010/03/31(水) 23:54:06
何をしたいのかよくわからんが
>>150 で出来るだろ
155デフォルトの名無しさん:2010/04/01(木) 00:03:33
馬鹿は黙っててください
156デフォルトの名無しさん:2010/04/01(木) 00:59:05
>>154
よくわからないのなら、静観していなさい
よいですね?
157デフォルトの名無しさん:2010/04/01(木) 01:01:24
もしかしてマルチテクスチャで出来る?
ステージ0
左 D3DTA_DIFFUSE
右 D3DTA_TEXTURE
COLOR D3DTOP_MODULATE
ALPHA D3DTOP_MODULATE

ステージ1
左 D3DTA_TEXTURE
右 D3DTA_CURRENT
COLOR D3DTOP_BLENDTEXTUREALPHA
ALPHA D3DTOP_BLENDTEXTUREALPHA
158デフォルトの名無しさん:2010/04/01(木) 01:02:00
うん
159デフォルトの名無しさん:2010/04/01(木) 01:55:12
142は
たとえば、テクスチャABで同じ色の場所の場合
ブレンド値が変化しても
A*a + B*(1-a) = A(=B)
になるようにしたいんでは?

それだと157だとできなくない?
シェーダー使うかロックするしかないのでは?
160デフォルトの名無しさん:2010/04/01(木) 02:16:06
>>142の「背景の色が出てしまい」ってところがキモだな。

勝手に意訳すると、AとBはそれぞれ異なる形状でアルファ抜きされているが、
AとBが両方とも不透明な領域ではAからBへのブレンド中に背景を一切透過させたくない、
という要望のようだ。

これは少々トリッキーな処理が必要な気がする。
161デフォルトの名無しさん:2010/04/01(木) 07:55:00
>>160
そもそも何をやりたいのかがいまいち分からん

単純に背景透過させたくないなら、背景の描画を最後にするって方法もある
162デフォルトの名無しさん:2010/04/01(木) 08:04:21
テクスチャのフォーマット変えたり、マスク用意したり、
アルファテスト、ステンシルテストとかでどうにかできないのかな

使用してる画像や書いたコードどんなんだろ
163デフォルトの名無しさん:2010/04/01(木) 08:51:35
別の形状をしているものの
重なってる部分の背景を出したくないとして
じゃあ、重なって無い部分はどいうしたいんだ?
背景が透けてていいのか?
164デフォルトの名無しさん:2010/04/01(木) 08:54:50
背景の見えないフェードっつーのがさっぱり理解不能なんだが
裏が透けないフェードなんて存在し得ないだろ

つーかフェード中にABが重なる部分の背景を白抜きすりゃいいだけの話だろ
難しく考えすぎなんだよ
165デフォルトの名無しさん:2010/04/01(木) 08:57:56
>>163
そこは透けていいんじゃないかね。
重なってない部分はブレンド値の変化とともに「A→背景」または「背景→B」と変化し、
重なっている部分だけは背景を混入させずに「A→B」と変化させたいのではなかろうか。
166デフォルトの名無しさん:2010/04/01(木) 09:42:58
片方の画像が不透明なら不透明画像を後からブレンドすればいいんでない?
完全に正しい結果が欲しいならシェーダー使うしかない希ガス
167デフォルトの名無しさん:2010/04/01(木) 09:46:25
ちなみにAとBのαの変化はどこでやってるんだろう?
頂点カラー?
それともロックして書き換えてるんの?
それによっても違うと思うんだが
168デフォルトの名無しさん:2010/04/01(木) 13:00:36
シェーダー書けば一発な気がするけど
固定機能で一応考えて見た
AとBで重なる部分は透けない
重ならない部分は透けると仮定して

合成用のテクスチャを用意して
レンダリングターゲットに指定しαを0でクリアしておく(重要)
そこに対し
// αとカラーの合成方法を分離する
SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, TRUE);

SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ZERO);//α値は書き込まない
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ZERO);
でBの色情報だけを描画しておく。αは0のままなので描画結果は表示されない
(これをしておかないとたぶん最後にBを描画するときにAの抜きカラーがブレンドされてしまうはず)
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ZERO);
でAをα値aで描画する(Aの色情報とα値を上書きする)
最後に
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ONE);
でBをα値1.0-aで描画する
(AとBの色情報をブレンドしBのα値を加算する)

出来あがったテクスチャを通常描画する
で、どうよ?
169デフォルトの名無しさん:2010/04/01(木) 14:37:28
本当にシェーダーでやれって感じだな

しかし実際問題重なってる部分は透過させないって必須なのか?
クロスフェードにそんなに何秒もかける訳ないし
実際動かして見たら透けててもそんなに気にならんと思うのだが…
背景の後ろでフレーム外の仕事しててユーザーには見せられないとか?
170デフォルトの名無しさん:2010/04/01(木) 16:58:55
本人が>>146でシェーダーでやりますって言ってんだからもういいんじゃね
171デフォルトの名無しさん:2010/04/01(木) 17:37:46
ごめんなさいスルーしてました
172デフォルトの名無しさん:2010/04/02(金) 01:01:28
スペキュラ色付けた後にアルファブレンドすると光にまでアルファかかっちゃうんですけど
どうしたらよいでしょうかね、、、
173デフォルトの名無しさん:2010/04/02(金) 01:05:08
>>146
- AxorB 領域にAとBをアルファ描画
- AandB 領域にAを不透明描画
- AandB 領域にBをアルファ描画
かしら。
マスク処理はステンシルか、Zバッファで代用ね。
174デフォルトの名無しさん:2010/04/02(金) 01:17:13
>>146
シェーダーでやる方法って具体的にどうやるんですか?
気になります
わかる方いれば教えてください
175デフォルトの名無しさん:2010/04/02(金) 01:56:29
それは四則演算がどうたらこうたらのレベルになるんじゃないか?
176デフォルトの名無しさん:2010/04/02(金) 08:14:56
>>174
AのテクスチャとBのテクスチャの両方のアルファ値が0.0より大きい場合にアルファ値の出力を1.0にするだけ。
あとは普通に合成しちゃえばいい。
177デフォルトの名無しさん:2010/04/02(金) 13:13:38
ふと思ったが、AとBのポリゴン(四角形)自体はまったく同一なのだろうか。
>>142にはそういう条件は書かれていないが。

ポリゴンが一致してるなら、シェーダで2つのテクスチャに同時にアクセスして
>>176のような感じで処理すればできそうだね。
AとBのテクスチャ素材のアルファ抜きにアンチエイリアスが入っていたりする場合は
もう少しロジックを工夫する必要がありそうだけど。
178デフォルトの名無しさん:2010/04/02(金) 13:48:46
179デフォルトの名無しさん:2010/04/02(金) 13:51:53
>>178
>>145はアルファ抜きの形状が異なるって意味じゃないの?
ポリゴンの頂点位置まで異なるとは言っていない気がする。
180デフォルトの名無しさん:2010/04/02(金) 13:57:45
もういいじゃん
本人いないんだし
181デフォルトの名無しさん:2010/04/02(金) 14:15:39
固定機能にしろシェーダーにしろ
合成用のレンダリングターゲットは必須じゃね?
そこを省こうとするから面倒なだけで
182デフォルトの名無しさん:2010/04/02(金) 14:23:43
142帰ってきて!!!!!
183デフォルトの名無しさん:2010/04/02(金) 17:01:48
DirectX11で質問です。
DXGIの機能、Alt+Enterで画面のモードの切り替え(フルスクリーン⇔ウィンドウ)を使いたいのですが、うまくいきません。
なぜか、一瞬だけ切り替わってすぐに戻ってしまいます。
全自動でバッファサイズの調整、ウィンドウの変更などをやってくれると思っていたのですが、自分でも変更しなければならない部分があるのでしょうか?
もしくは、開発環境の問題ですか?
わかる方、よろしくお願いします。

ソースコード(一部)
/* 省略 */
SwapChainDesc.Flags=DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
/* 省略 */
result=D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, pD3DFeatureLevel, 6, D3D11_SDK_VERSION, &SwapChainDesc, &g_pSwapChain, &g_pD3DDevice, &D3DFeatureLevel, &g_pD3DDeviceContext);
if(FAILED(result)){ /* エラー処理 */ }
/* 省略 */
result=CreateDXGIFactory((const IID){0x7b7166ec, 0x21c7, 0x44ae, {0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69}}/* IID_IDXGIFactory */, (LPVOID *)(&pFactory));
if(FAILED(result)){ /* エラー処理 */ }
result=pFactory->MakeWindowAssociation(hWnd, 0);
if(FAILED(result)){ /* エラー処理 */ }

開発環境
OS Windows Vista
コンパイラ gcc
184デフォルトの名無しさん:2010/04/02(金) 20:00:07
16進数の羅列で考える気が失せた
185デフォルトの名無しさん:2010/04/03(土) 14:35:35
>>183
Windowsに強く依存するDirectX開発でgccを使うなんてマゾとしか思えん。
ただで済ませたいならVisual Studio 2008 Express Editionに必要なSDKを加えて開発するのが正道。
ソースコードが間違っているのか開発環境に誤りがあるのか判断ができないのでは答えようがない。
186デフォルトの名無しさん:2010/04/03(土) 18:28:35
183です。アク禁の巻き添え食らったので、代行してもらってます。

とりあえず、画面の切り替えに成功したので(たまに失敗するけど)報告
WndProcでAlt+Enterを拾って、
BOOL state;
g_pSwapChain->GetFullscreenState(&state, NULL);
g_pSwapChain->SetFullscreenState(!state, NULL);
return 0;
を実行したらうまくいった。
たまに失敗するのは、これはたぶんDXGIの画面切り替えが始まってから
一定時間内にstateの変更を実行できなかったときだと思う。
187デフォルトの名無しさん:2010/04/03(土) 18:38:12
>>186
DX11ではなくDX9の話だが、
Firefox3.6以降が別に起動している時にフルスクリーン表示に切り替えようとすると失敗する場合があるな。
フルスクリーン表示へのリセットに失敗するのではなく、
そのすぐ後にアプリケーションのフォーカスが失われてしまう。

Firefoxを閉じるとすぐになおる。
188デフォルトの名無しさん:2010/04/03(土) 23:41:34
Xファイルを読み込んでdrawsubsetで描画すると、メッシュが表示されるべき形の部分が
完全な真っ白になってしまいます。

テスト的な描画なのでD3DRS_LIGHTINGはFALSEにしてあります。
ライトはまだ設定していません。
メッシュのマテリアル情報もデバッガで覗きましたが、セットしているD3DMATERIAL9構造体の
中身は
Diffuse(0.8 0.61 0.57 1)
Ambient(0 0 0 1)
Specular(0 0 0 1)
Emisive(0 0 0 1)
Power 5
でテクスチャはありません。
ライトは無いけどライティングをFalseに指定しているし、マテリアルに設定した色ではなく、
真っ白になってしまうのが納得いきません。何故真っ白になるのでしょうか?
189デフォルトの名無しさん:2010/04/04(日) 00:24:40
>>188
とりあえずサンプルのMeshesの
Tiger.xと差し替えてみて表示されるかどうか確かめて見たら?


前に似たような質問で
マテリアルカラーじゃなくて
頂点カラーが頂点フォーマットに含まれててそっちと乗算されてたとかあったな
190デフォルトの名無しさん:2010/04/04(日) 00:35:56
>>188
それじゃあ、Xファイルに問題があるのか
プログラムに問題があるのか分からないから
xファイルかソースをうp
191デフォルトの名無しさん:2010/04/04(日) 00:46:43
>>189
Tigerを表示してみたところ、全く正常に表示されました・・・
が、そもそもTigerはテクスチャを張っているので、マテリアルカラーは関係ないような気がしますが、
一応表示処理はマテリアルカラーを除けば正常だと思います。

>>190
すいません。エロエロなのでアップ出来ません。
192デフォルトの名無しさん:2010/04/04(日) 00:56:42
乳首等をカットしてうpしてください
193デフォルトの名無しさん:2010/04/04(日) 01:02:05
>>191
じゃなくて
Meshesの方で問題のXファイルを表示してみたら、というハナシ
194デフォルトの名無しさん:2010/04/04(日) 01:26:33
>>193
試してみました。ちゃんと肌色や黒やピンクで表示されています。
195188:2010/04/04(日) 01:59:28
解決しました。

D3DRS_LIGHTINGをFALSEにしていた部分をコメントアウトし、
D3DRS_AMBIENTを0xffffffffにしたらサンプルと同じ表示になりました。

D3DRS_LIGHTINGをFALSEにした状態でD3DRS_AMBIENTをいじらなくても、
直接頂点を頂点バッファに入れてDrawIndexedPrimitiveする時には正常に頂点色で表示されていたので、
同じ感覚でやれるはずだと思い込んでいました。

メッシュのdrawsubsetだけは仕様が違うということでしょうか?
196デフォルトの名無しさん:2010/04/04(日) 02:00:35
D3DRS_LIGHTINGを切ったら真っ白になるのは当然じゃ?
ライトをセットしないのとライティングを切るのはまったく違うことだぞ
197デフォルトの名無しさん:2010/04/04(日) 02:06:51
>>195
頂点カラーとマテリアルカラーはまったく違う
頂点カラーはその名の通り頂点の色
マテリアルカラーは光を何色で反射するかの設定

xファイルの場合
頂点カラーがデータに含まれてない場合
デフォルトの頂点色0xffffffffで動作するので
ライト切ったら白のまま
198デフォルトの名無しさん:2010/04/04(日) 02:11:20
>>195
まー使えるAPIがそろってるD3DXもD3DXMesh系だけは自作するって話をよく聞くからなぁ。

とりあえずPIX for WindowsでD3DXMeshの挙動を調べることをおすすめする。
199188:2010/04/04(日) 02:15:14
>>197
分かりやすい説明有難うございます。納得しました。

>>196
>>198
色々なアドバイス有難うございました。
PIX for Windowsについてもググってみます。
200デフォルトの名無しさん:2010/04/04(日) 07:56:18
よりスケベな絵になるようがんばってくれ!
201デフォルトの名無しさん:2010/04/05(月) 16:31:53
質問です。
自分はC/C++でWin32APIを使ったコーディングはそこそこ慣れていて
たまに自分用のソフトを作ったりもするのですがDirectXはまったく初めてです。

とりあえず書籍やググって見つかるサイトなどを参考にテストコードを書いてみたのですが、
BeginScene がFAILEDになってしまい、描画処理が開始出来ません。

この BeginScene、失敗する条件ってなんなんでしょうか。よろしくお願い致します。
環境:WinXPSP3、DirectXSDK Ver9.0c

202デフォルトの名無しさん:2010/04/05(月) 16:37:45
EndSceneを呼ぶ前にBeginSceneを再コールしたとかでもないかぎり失敗はしないと思うが…
203デフォルトの名無しさん:2010/04/05(月) 16:37:54
>>201
device->Present(...)との対応ができていないというのが考えられる。
それから、DirectX初心者ならいきなりコードを書き始めない方がいいよ。
DirectX SDKにサンプルが山ほどあるので、
とりあえず簡単そうなものからビルドして動かして眺めてみるといい。
204デフォルトの名無しさん:2010/04/05(月) 16:41:48
超凡ミスの予感
ソースうp
205デフォルトの名無しさん:2010/04/05(月) 18:37:45
初心者にありがちで
勝手に失敗箇所をBeginSceneに限定ちゃってるだけで
実は全然違うところでミスしてそう
206デフォルトの名無しさん:2010/04/05(月) 18:47:06
まずDeviceがちゃんと作れてるかが気になるなぁ。
207201:2010/04/05(月) 21:13:06
いま帰宅しました。そしていきなり解決しました。
すみません、お察しの通り超凡ミスでした・・・ww

原因は、ウィンドプロシージャ内、WM_SIZE で IDirect3DDevice9 の Reset を実行し、
さらにそこで InvalidateRect 。レンダ処理を WM_PAINT においていた為でした。 ※実行順序
お騒がせしました。

>>205
いえ BeginSceneの結果がFAILEDになっていた事は確認済みで、その理由が不明だったのです。
最初、WM_PAINT にレンダ処理を置いていたのも重ねてミスでした。※現状はメインループ内に移動

お騒がせしました。
208142:2010/04/06(火) 00:13:38
シェーダーでlerpを使用して補間すればいいかと思いましたが、
輪郭部分が汚く見える気がします。こんな安直なやり方ではダメなんでしょうか。
ゲーム画面を常にレンダリングターゲットに描くようにしておいて、
RTT + 画像A、 RTT + 画像Bをクロスフェードさせた方がいいかもしれません。

return lerp(tex2D(Texture0, texCoord), tex2D(Texture1, texCoord), transition);

>>173
画像にはアンチエイリアスがかかってるのでダメです・・。

>>168
申し訳ないんですがまだ試せてません。
2回目の描画で「Aをα値aで描画する(Aの色情報とα値を上書きする)」
となっていますが、D3DBLEND_ONE、D3DBLEND_ZEROの組み合わせだと1.0で描画することになるのでは?
209デフォルトの名無しさん:2010/04/06(火) 00:25:04
>>208
3Dの世界はな、光も陰もアルファも、みんなバラバラに指定するんだ。
シェーダー関数の中だけ見てたって正しいコードは書けないぞ。
210デフォルトの名無しさん:2010/04/06(火) 00:25:19
>>208
なにがしたいのかいまいちわからないから、Aだけ、Bだけ、フェード中、の3つの画像とか示せない?
211デフォルトの名無しさん:2010/04/06(火) 01:00:09
>>208
ソースうp
212デフォルトの名無しさん:2010/04/06(火) 01:03:40
>>208
168じゃなけど
D3DBLEND_ONEは係数1.0の意味だからα*1.0だぞ
なんかブレンドの仕組みを理解してない予感
213デフォルトの名無しさん:2010/04/06(火) 01:52:57
>>208
.xyzに関してはlerpでいいけど
.w(α値)は加算するかどちらか片方が0以上なら1.0にするとしないとだめなんじゃ?
214デフォルトの名無しさん:2010/04/06(火) 06:20:11
テクスチャのA32R32G32B32Fのフォーマットについて質問なのですが
書き込んだ値が勝手が0〜1にクランプされます なぜでしょうか
215デフォルトの名無しさん:2010/04/06(火) 06:25:14
>>214
カラーテクスチャはそういうシロモノだから。
216デフォルトの名無しさん:2010/04/06(火) 06:29:05
>>208
これでどうだ!

float4 A = tex2D(Texture0, texCoord);
float4 B = tex2D(Texture1, texCoord);
float4 result;
result.rgb = (1 - t) * (A.a * A.rgb) + t * (B.a * B.rgb);
result.a = 1 - ((1 - t) * (1 - A.a) + t * (1 - B.a))
return result;

tは遷移用の0〜1のパラメータね。(>>208のtransitionに相当)

このシェーダのあとに通常のフレームバッファブレンディングで
SRCBLEND = ONE, DESTBLEND = INVSRCALPHA として背景とブレンドする感じ。
(result.a の "1 - " を外して DESTBLEND = SRCALPHA としてもいい。)

result.rgb の計算における (A.a * A.rgb) と (B.a * B.rgb) の部分は、
もし元素材のRGB成分にαが既に乗算されている(いわゆるpre-multiplied alpha)なら
それぞれ A.rgb と B.rgb で置き換えてくれ。
(PNGとかTIFFとかフォーマットによってアルファの解釈に流儀があるんだよね。)
217デフォルトの名無しさん:2010/04/06(火) 06:30:22
>>216の続き

シェーダの計算を場合分けしてみると、
A.a == 0, B.a == 0 ⇒ result.rgb = 0,            result.a = 0   (背景そのまま)
A.a == 1, B.a == 0 ⇒ result.rgb = (1-t)*A.rgb,      result.a = 1-t (Aから背景へ遷移)
A.a == 0, B.a == 1 ⇒ result.rgb = t*B.rgb,         result.a = t   (背景からBへ遷移)
A.a == 1, B.a == 1 ⇒ result.rgb = (1-t)*A.rgb+t*B.rgb, result.a = 1   (背景を混ぜずにAからBへ遷移)
となって、おそらく要望を満たしている。
αが0〜1の中間の場合も破綻しない計算式になっているので、
アンチエイリアス部分もたぶん問題ないと思う。

合成の順序が違うからちょっとわかりにくいけど、結果的には、
>>208の言う「RTT + 画像A、 RTT + 画像Bをクロスフェード」させた場合と
まったく同じ計算式になっています。

>>214のブレンディングまで含めた式
(1 - t) * (A.a * A.rgb) + t * (B.a * B.rgb) + ((1 - t) * (1 - A.a) + t * (1 - B.a)) * [背景]

RTTに個別に描画してからクロスフェードの場合
(1 - t) * ((1 - A.a) * [背景] + A.a * A.rgb) + t * ((1 - B.a) * [背景] + B.a * B.rgb)
218デフォルトの名無しさん:2010/04/06(火) 13:53:54
test
219デフォルトの名無しさん:2010/04/06(火) 14:04:47
すみません、現在

http://rina.jpn.ph/~rance/directx8/index

を参考にDirectXの勉強をしています。
上記ホームページの第4章の画像の描画(テクスチャ・マッピング)の項目あたりなのですが、
例えば20×20ピクセルのbmp画像を横200×縦400の範囲に敷き詰めて表示したい場合
どうすればよいのでしょうか?
InitVertex関数と配列を組み合わせるのかとも思ったのですが、
組み合わせ方がわかりません。
考え方が間違っているのでしょうか?
もしいいやり方があったら教えてください。
220デフォルトの名無しさん:2010/04/06(火) 14:50:20
>>219
やりたいことがイマイチ不明
お前さんの頭の中にはイメージあるんだろうけどそれじゃ伝わらない
とりあえず4章の終わりまで進めてから出直したほうがいいんじゃね?


20×20の画像が任意のものであれば
そのInitVertexを横10×縦20回呼べばいいだけだし

まったく同じ画像の繰り返しでいいなら
テクスチャのアドレッシングモードをD3DTADDRESS_WRAPにして
InitVertex内でtu=1.0とかtv=1.0とかになってるところの値を増やせばいい
221デフォルトの名無しさん:2010/04/06(火) 14:52:00
同じサイトに
http://rina.jpn.ph/~rance/directx8/backimage/03.html
ってのがあるじゃん
こういうことがやりたいんじゃなくて?
222デフォルトの名無しさん:2010/04/06(火) 15:01:36
>142は
背景+αチャンネル付き立ち絵Aから、背景+αチャンネル付き立ち絵Bへ奇麗にクロスフェードさせたいって事なんでしょ
エロゲの会話シーンみたいな
223デフォルトの名無しさん:2010/04/06(火) 15:03:14
>>215
t-potではA32R32G32B32Fを使って座標を保持しているプログラムがある
自分のプログラムでも少し前に組んだやつだとクランプされてない
224デフォルトの名無しさん:2010/04/06(火) 15:08:07
>>142は自分の言いたいことだけ言って
聞かれてる条件について完全にスルーだからもう放置でいい希ガス
状況が不明すぎて答えられないし
またこのまま1週間放置とかなんじゃね?
225デフォルトの名無しさん:2010/04/06(火) 15:09:00
>>220
>>221

すみません、
20×20の画像を1個としてこれを繰り返して
横10個×縦20個として同じものを並べて表示したいということです。
とりあえずもう少し調べて考えてみます。お手数おかけしました。
226デフォルトの名無しさん:2010/04/06(火) 15:15:40
>>225
基本的にはUV値を0.0〜1.0の範囲より広げて指定するだけでいい。
テクスチャの拡張はいろんなパターンがあるから必要な方式を指定してあげること。
227デフォルトの名無しさん:2010/04/06(火) 15:32:08
>>226
ありがとうございます。参考にして考えます。
228デフォルトの名無しさん:2010/04/06(火) 19:26:56
HLSLのサンプラー型で、
「sampler」と「sampler2D」の違いって何なんでしょう??
今まで何となしに「sampler」を使っていた(2Dテクスチャのみ)んですが、
「sampler2D」というものもあることを知って不思議に思いました。
今まで「sampler」だったところを「sampler2D」に変えてみても、特に挙動は変わりませんでした。
229デフォルトの名無しさん:2010/04/06(火) 19:48:40
XNAとの互換用とかじゃね?
230デフォルトの名無しさん:2010/04/06(火) 21:38:18
Sampler1Dというのがあってだな
231デフォルトの名無しさん:2010/04/07(水) 18:53:24
Core2 Duoを使ってるんですが、マルチスレッドのプログラミングは一切していないのに、
CPU使用率は100%近くになります。(1コアだけ使用のプログラムはだいたい50%)
これはDirectXのライブラリ内でマルチコアを考慮した動作をしてくれてるからでしょうか?
コア数が多いほど性能は上がる傾向にあるのでしょうか?
232デフォルトの名無しさん:2010/04/07(水) 19:06:54
>>231
ビジーループしてるだけのような予感。
233デフォルトの名無しさん:2010/04/08(木) 00:21:25
>>231
Sleep
234デフォルトの名無しさん:2010/04/08(木) 14:16:20
オープンソースでフリーのゲーム開発してるのですが。
http://sourceforge.jp/projects/freetrain-exav/

自分こないだ開発リーダー引き継いだばかりで、DirectXが全然分からないんです。
C#部分はある程度分かるんですけど。

で、これDirectXの機能としては2DのDirectDrawとDirectAudioを使ってるぐらいで
全然3D機能は使ってないんですけど。
DirectAudioのラッパー部分にバグがあるらしく、しばしばエラーを起こして異常停止
するという報告が上がってきてるのですがどう対処していいのか分からず。

エラー起こしてるのは、
trunk\lib\DirectXWrapper\DirectAudio.cpp
のなかの483行目あたりがHRESULT からの例外: 0x88781165だそうで。
wrapper::SegmentState^ wrapper::Performance::playExclusive( Segment^ seg ) {
IDirectMusicSegmentState* state;
handle->PlaySegment(seg->handle, 0, 0, &state);
return gcnew SegmentState( this,
state, //handle->PlaySegmentEx( seg->handle, 0, 0, nullptr, nullptr ),
GetMusicTime(handle) + GetLength(seg->handle) );
}
わからないでしょうか。
235デフォルトの名無しさん:2010/04/08(木) 14:44:06
HRESULT: 0x88781165 (2289570149)
Name: DMUS_E_TIME_PAST
Description: The time is in the past, and the operation can not succeed.
Severity code: Failed
Facility Code: Unknown (2168)
Error Code: 0x1165 (4453)
236デフォルトの名無しさん:2010/04/08(木) 15:26:45
またおまえか
と思ったら別スレでの出来事だった
237デフォルトの名無しさん:2010/04/08(木) 16:21:52
質問です。
DirectXサンプルのスキンメッシュをいじり倒して、概ね理解はできてきたと思うのですが、1点気になることがあります。

D3DXMESHCONTAINER_DERIVED::pBoneOffsetMatrices
これなのですが、オフセット行列をコピーしているようなのですが、そのコピー箇所を引用すると

// get each of the bone offset matrices so that we don't need to get them later
for (iBone = 0; iBone < cBones; iBone++)
{
  pMeshContainer->pBoneOffsetMatrices[iBone] = *(pMeshContainer->pSkinInfo->GetBoneOffsetMatrix(iBone));
}

こうなっています。
コメントを訳すと「後でこれらが必要にならないように、各ボーンオフセット行列を取得しておく」と読めるのですが、
別にpSkinInfoは解放せず持ち続けるようです。

pBoneOffsetMatrices自体は確かに描画の時に使っているのですが、別にその時
*(pMeshContainer->pSkinInfo->GetBoneOffsetMatrix(iBone))
を使えばいいのではないかと思います。

pSkinInfo->GetBoneOffsetMatrixでとれる行列は、何かしらが原因で変化してしまったりするのでしょうか?
(変化してしまうから、変化する前に控えをとっているのでしょうか?)

それとも、GetBoneOffsetMatrixの呼び出しが超遅いとかでしょうか?
238デフォルトの名無しさん:2010/04/08(木) 17:07:50
>>237
メッシュが複数あるとき使わないボーンもあるからじゃないの?
239デフォルトの名無しさん:2010/04/08(木) 17:29:07
>>235 がそのエラーメッセージなら、多分単にメッセージに書かれている通りだと思うんですけど。
意味がわかりませんか。

DirectXったってただの関数、ただのAPIですから、メッセージをヒントに
いつも開発してる時のように追いかけたら。
240デフォルトの名無しさん:2010/04/08(木) 17:53:05
>>238
レスありがとうございます
ただ、ちょっとご指摘の内容が理解できないのですが…。
すいません。

複数メッシュ時の挙動は、今ちょうどやっているところですが、やはりメッシュ毎にpMeshContainer(の中身)が生成されるため、
pMeshContainer->pSkinInfo->GetBoneOffsetMatrixを必要になるたびに呼べばよさそうな感じです
241234:2010/04/08(木) 19:45:48
>>235 >>239
ありがとうございます
DebugPrint使って値を追いかけてみます
242デフォルトの名無しさん:2010/04/09(金) 00:23:32
エフェクトオブジェクトって描画オブジェクトごとに作っても
そんなにコストかからないですか?1つを使いまわしていちいちSetValue()するのもアレかと思いまして。。。
243デフォルトの名無しさん:2010/04/09(金) 02:48:47
大量のキャラが出るゲームでなければ体感差はでないから
それが無駄や面倒臭くないというならやればいいじゃない。
普通は用途で分けるだろ。キャラ用・地形用・ポストエフェクト用・ビルボード用・etc
244デフォルトの名無しさん:2010/04/09(金) 08:56:28
エフェクトの定数セットは比較的軽い処理だがエフェクト切り替えは重いという事だけは言っておこう
245デフォルトの名無しさん:2010/04/09(金) 14:06:32
すみません質問です。
CDXUTXFileMesh というクラスがどこにあるか、どなたかご存知の方はいらっしゃいますでしょうか

この名前でググった所、多分 DirectX SDK (Novenber 2008) 内にある DXUT 関連だろうという所まではたどり着いたのですが、
これが宣言されているヘッダや lib などが見つかりません。 よろしくお願い致します
246245:2010/04/09(金) 14:18:06
すみません、解決しました。

場所: ※デフォルトのパスでインストールした場合
C:\Program Files\Microsoft DirectX SDK (November 2008)\Samples\C++\DXUT\Optional

ここにある SDKMesh.h / SDKMesh.cpp
247デフォルトの名無しさん:2010/04/09(金) 14:25:13
>>243
>>244
ありがとうございます。
定数セットは比較的軽いんですか、知りませんでした
248デフォルトの名無しさん:2010/04/09(金) 14:49:41
だめだ、DirectX9+Bullet2.76 でサンプルをコンパイルしようとするとどうやっても通らない詰んだ

やった事:
ttp://www.shader.jp/xoops/html/modules/xfsection/article.php?articleid=28
ここにあるサンプルを頂いて VSC++2008Express でコンパイルして動作を見てみようとした所、
Bullet公式に 2.67 はもう存在しなかったので、最新の2.76 を入手してビルドした。

ところがサイトの説明にあるようなディレクトリパスが存在しないので探した所、
Bullet公式に書かれていた3つのLibを探し出し、それをリンクするようにし( BulletCollision.lib, BulletDynamics.lib, LinearMath.lib )
ヘッダもパスを通した

ところが上記サンプルがコンパイル出来ず、調べた所 CDXUTXFileMesh が見つからなかった。
が、探したらそれだけDirectSDKの別のSample中に置き去りにされていたので、それを拾ってプロジェクトに含めた。

ところがそれでコンパイルすると、今度はリンカが、多重リンクになっているとエラーを吐いて死亡。

>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _printf は既に LIBCMTD.lib(printf.obj) で定義されています。
など数件

なのでMSDNにあった対策をしてみた所、 http://msdn.microsoft.com/ja-jp/library/6wtdswk0(VS.80).aspx
今度は Bulletのlib側で acos などが未定義と、700件以上のエラーが出て死亡。

これはもう、あのサンプルはコンパイル出来ないので諦めろ、という事でしょうか
249デフォルトの名無しさん:2010/04/09(金) 14:54:13
250デフォルトの名無しさん:2010/04/09(金) 17:12:12
>>248 それ、俺も通らなかったけど、実はBullet公式じゃなくて、
統合3DCGソフトBlenderに含まれているBullet2をリンクしたら出来たぜ

https://svn.blender.org/svnroot/bf-blender/branches/volume25
これをチェックアウトしてビルドして、

build\msvc_9\libs\extern\mtdll\debug\Bullet.lib
これをリンカに通し、

Blender25\extern\bullet2\src
これをincludeパスに足せばいける。 2.76 だと確かに内容も変わっているし、2.67 だと一部のファイルが無かったと思うが、
そもそもそのサイトの人は BlenderのMonkeyモデルをデモに使ってるくらいだからもしや・・・と思ったらビンゴだった。
なんか色々やってたのかもな。 とりあえず、乙


251デフォルトの名無しさん:2010/04/09(金) 17:17:59
FVFで D3DFVF_XYZRHW | D3DFVF_TEX1 を指定して作った
三角2枚のシングルテクスチャのスプライトを使ってUIを作ろうとしているのですが、
重なりの制御が描画順でしかできなくて困っています。

具体的には、
m_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
でクリアした後、頂点のz座標に 0 より大きい数値を指定したスプライトが描画されません。
0やマイナスを指定すれば描画はできますが、当然前後関係は考慮されずに描画順のみ考慮されます。

何かいい方法はないでしょうか?

なんでこんなことをしたいのかというと、Radeon XPRESS 200のPCで
UI要素200個の描画をするととんでもなく遅くなってしまったので、
ステートの設定を最小限にしたいと思って試したのですが、望む結果が得られませんでした。
252デフォルトの名無しさん:2010/04/09(金) 17:23:05
D3DFVF_XYZRHW は座標変換済み=投影後(つまり2D状態)だから、Z値とか意味無くなるんじゃなかったっけ?
D3DFVF_XYZ じゃないとダメというか、意味無いような
253デフォルトの名無しさん:2010/04/09(金) 17:24:14
254デフォルトの名無しさん:2010/04/09(金) 17:49:25
>>252
トランスフォーム後にZテストしてラスタライズしているのではないのでしょうか?
255デフォルトの名無しさん:2010/04/09(金) 18:14:33
>>251
そもそもZバッファ作ってる?
D3DRS_ZENABLE、D3DRS_ZWRITEENABLE、D3DRS_ZFUNCはどう設定している?
rhwの値をどう設定している?

252はトンチンカンなこと言ってるので無視でいい。
256デフォルトの名無しさん:2010/04/09(金) 18:15:42
>>251
正直ステートを多少減らしたぐらいじゃそんなに変わらないと思う
その200個のUIを一つの頂点バッファにまとめて一回で描画するとか
別のアプローチを考えた方が建設的かと
257デフォルトの名無しさん:2010/04/09(金) 18:27:46
>>251
>m_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

D3DCLEAR_ZBUFFERのフラグが抜けてる
258デフォルトの名無しさん:2010/04/09(金) 18:41:50
>>255-257
ありがとうございました。

原因は
>D3DCLEAR_ZBUFFER

でした。

そして、>>256
実は、UI要素の描画を1000アイテムにしても大して速度低下がなかったので、遅いのはほかに原因がありそうでした。
WM_PAINTでクライアント全アイテムを再描画しているのですが、
リサイズがものすごく遅かったので、描画が遅いものだと勝手に判断してしまっていました。
259デフォルトの名無しさん:2010/04/09(金) 19:27:49
>WM_PAINTでクライアント全アイテムを再描画
ココが問題
260デフォルトの名無しさん:2010/04/10(土) 22:07:45
http://marupeke296.com/DSSMP_No2_GetSoundFromWave.html
↑のソースを使ってDirectSoundで音を鳴らしています
ウィンドウを閉じた時点でたまーに

STOP: 0x000000CB
kmixer.sys

などとブルースクリーンが出ますが、なにが原因でしょうか?
鳴らしてるwavファイルはPCM signed 16bitモノラルで統一してます
261デフォルトの名無しさん:2010/04/10(土) 22:10:25
サウンドドライバが腐ってる
262260:2010/04/10(土) 22:14:01
プログラムのミスでこのエラーはありえないですか?
263デフォルトの名無しさん:2010/04/10(土) 22:18:41
ありえるだろそりゃ
264デフォルトの名無しさん:2010/04/10(土) 22:30:30
ドライバがロックしたメモリページを開放し忘れたってエラーでアプリケーションが何をしろってんだよ
265デフォルトの名無しさん:2010/04/10(土) 22:36:56
いくら解説が豊富だといってもDirectSoundはレガシーです。とくに初心者は問題を解決しようとするより別の手段を探してください。
をFAQにしてくれ
266デフォルトの名無しさん:2010/04/10(土) 22:50:10
>>260
こういう話ですか?
ttp://support.microsoft.com/kb/920872/ja
267デフォルトの名無しさん:2010/04/11(日) 16:09:39
2Dビルボード処理を関数ごとに分けてやっているんだが、
なぜか呼び出す行を変えたり、引数を持たせただけで変な方向に動いてしまう
これってナニが悪いの?
268デフォルトの名無しさん:2010/04/11(日) 16:13:50
たぶん糞設計が悪い。どう悪いかはソースがうpされない以上、他人には分からないので自分を責めてください。
269デフォルトの名無しさん:2010/04/11(日) 16:17:07
>>267
エスパーしてみると
多分、行列計算を理解出来てないと見た
270デフォルトの名無しさん:2010/04/11(日) 16:28:28
>>268
ソースなんて見るまでもないだろ。
呼び出す行を変えたり、とある辺りでほぼ >>269 のエスパー内容で確定
もう一度数学Bからやりなおせば解決
271デフォルトの名無しさん:2010/04/11(日) 17:15:22
よっぽど鈍な子でもない限り計算間違いでそんな動作しないだろ
固定機能でやってて行列のセットの仕方になにか誤解があるんじゃね?
272デフォルトの名無しさん:2010/04/11(日) 19:24:48
>固定機能でやってて行列のセットの仕方になにか誤解

行列は理解してるが、関数仕様が分ってないレベルなら
行列のセットの仕方が間違ってると気が付くのが道理では?

それを気がつけないのを、行列を理解出来てないと言うのでは?

世の中にはよっぽど鈍な子の、遥か斜め上を行く子がいっぱい居るのが現実ですよ
273デフォルトの名無しさん:2010/04/11(日) 21:05:18
DirectX11で開発しているのですが、RasterizerState の生成に失敗する原因がわかりません。
ビデオカードは、HD5870。OSはWindows7 x64。
D3D_FEATURE_LEVEL_9_1 D3D_FEATURE_LEVEL_9_2 D3D_FEATURE_LEVEL_9_3 の時、生成に失敗でその他レベルは成功します。その他の生成フラグを変えても変化はないです。

CComPtr<ID3D11RasterizerState> RasterizerState;
D3D11_RASTERIZER_DESC r_desc;
r_desc.FillMode = D3D11_FILL_SOLID;
r_desc.CullMode = D3D11_CULL_BACK;
r_desc.FrontCounterClockwise = FALSE;
r_desc.DepthBias = 0;
r_desc.DepthBiasClamp = 0;
r_desc.SlopeScaledDepthBias = 0;
r_desc.DepthClipEnable = FALSE;
r_desc.ScissorEnable = FALSE;
r_desc.MultisampleEnable = FALSE;
r_desc.AntialiasedLineEnable = FALSE;
HRESULT hr = m_Device->CreateRasterizerState(&r_desc, &RasterizerState);

hrはE_OUTOFMEMORYが返ります。テストのためにデバイスを生成して、上記のコードだけを実行するようにしても同じ現象が再現します。
レベルの制限の様な気もしますが、それについて書かれている資料を見つけられません。
レベル毎の制限についてのドキュメントか、何か情報があれば教えてください。
274デフォルトの名無しさん:2010/04/11(日) 22:43:04
dx11知らんけどCreateRasterizerStateでググったら
DepthClipEnable must be TRUE.とかなんとか
275デフォルトの名無しさん:2010/04/12(月) 00:40:17
ありがとうございます。DepthClipEnable = TRUE で一応はS_OKになりました。
10Level9 ID3D11Device Methods
10Level9 ID3D11DeviceContext Methods
そのまんま制限仕様が書かれてますね orz
276デフォルトの名無しさん:2010/04/12(月) 03:15:12
質問です。現在 WindowsXPSP3, VisualC++2008Express で開発しています。
下記クラスを作成/利用したコードを、デバッグモードで実行すると、
free のタイミングで 「ヒープが壊れています」 と言う旨の例外が発生し、実行が停止してしまいます。
wcscpy_s の辺りに何か不安を感じるのですが、一体何がいけないのでしょうか。 よろしくお願いいたします。

class Test {
private:
  TCHAR *strBuf;
public:
  Test() { }
  ~Test() {
    if(strBuf) free(strBuf); // ← ここで「ヒープが壊れています」と出て中断してしまう
  }
  void setStr(const TCHAR *lpStr)
  {
    size_t len = (wcslen(lpStr)+1) * sizeof(TCHAR);
    if(strBuf) strBuf = (TCHAR*)realloc(strBuf, len);
    else strBuf = (TCHAR*)malloc(len);
    memset(strBuf, 0, len);
    wcscpy_s(strBuf, len, lpStr);
  }
};
277276:2010/04/12(月) 03:15:56
すみません、誤爆しました。
278デフォルトの名無しさん:2010/04/12(月) 16:57:27
>>277
コンストラクタでNULL突っ込めばなおるよ。

                      ハ_ハ  
               ('( ゚д゚∩ なおるよ!
                ヽ  〈 
                 ヽヽ_)

279デフォルトの名無しさん:2010/04/12(月) 18:40:24
DXTC圧縮されたDDSファイルはどのタイミングで解凍されるのでしょうか?

A:ホストプログラム側でCreateTexture系関数で読み出したとき
B:VRAM上ではまだ圧縮状態で、圧縮のブロック単位でGPUのキャッシュまでロードし、 GPUで解凍しながら処理する
280デフォルトの名無しさん:2010/04/12(月) 21:09:16
>>279
基本的にB
281279:2010/04/12(月) 21:39:47
>>280
おお。
すると、メモリ帯域的にだいぶ負荷が下がりますね。
解凍にかかる負荷以上に、ボトルネックになりがちなメモリアクセス量を少なくできることによる
速度改善が期待できそうですね。
使用テクスチャの圧縮は積極的に行っていこうと思います。
ありがとうございました。
282デフォルトの名無しさん:2010/04/12(月) 22:07:18
でもアルファチャンネル付きの画像でアンチエイリアスとかかかってる部分が
DXT3にしてもDXT5にしてもあんまり綺麗に出ないよね
細部が良く見えないところはどんどん圧縮しちゃってもいいと思うが
283279:2010/04/12(月) 22:15:08
>>282
なるほど・・・
DX11では新しい圧縮がサポートされて、品質がだいぶ改善されるようですね。
DX11が浸透するまでは、ご助言通り、使いどころに注意ですね。
284デフォルトの名無しさん:2010/04/12(月) 23:43:26
D3DXCreateTextureFromFileExでは、読み込む画像のサイズとは異なるサイズで読み込むことができますが、
これを利用して、ユーザーの環境に合わせて読み込む画像サイズを変え、負荷を調整する
といったことは効果的なのでしょうか?
例えば、テクスチャファイルは高解像度のものを1枚だけ用意し、ユーザーが
「テクスチャ品質:高」に設定すれば、そのままのサイズで読み込み、
「テクスチャ品質:低」に設定すれば、縮小して読み込む、といった具合です。
縮小処理のため、ロード時間は増えてしまうかもしれませんが、許容範囲であれば
配布時に複数解像度のテクスチャをいちいち用意しなくてもよくて良いと思うのですが。
285デフォルトの名無しさん:2010/04/12(月) 23:54:12
ジオメトリシェーダでできることは、DX11で追加されるテッセレーションステージでできるように思うのですが、
それでもこのシェーダがパイプライン上にあるのは、DX10との互換を保つためなんでしょうか?
それとも、テッセレーションステージでできなくて、ジオメトリシェーダでできることがあるのでしょうか?
286デフォルトの名無しさん:2010/04/13(火) 00:32:43
加算合成で画像を表示するために下のように書いたのですが、合成されません。
どうすればよいのでしょうか。
g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
g_pD3DXSprite->Draw(img[imgID],&rectImage, &D3DXVECTOR2(1.0,1.0),NULL, 0.0f,&D3DXVECTOR2(imgX, imgY), 0xffffffff);
287デフォルトの名無しさん:2010/04/13(火) 01:29:32
市販・同人合わせて、日本のゲームで高スペック仕様なんてみたことねーですね。
みんな貧乏性なので、標準でも全然ok。帯域がどうとか自己満w。
まあ自己満でよければテクスチャを1/2や1/4に縮小するモードでも付ければって感じです。
288デフォルトの名無しさん:2010/04/13(火) 01:29:53
>>285
別々のレンダーターゲットに別々のカメラから見た絵を
描こうとしたら基本的にはGSを使うしかないわけだが。

テッセレーターは細分化するのが役目であって、
描画先の指定や細かい制御は出来ないよ。

ポストエフェクトはいちいち描画しなくてもCSで出来るようになったのは便利だね。
289デフォルトの名無しさん:2010/04/13(火) 01:48:22
>>286
ID3DXSprite::Beginはレンダリングステートを特定のものに書き換えるぜ
ここで通常合成に変えられちゃってるんじゃ?
BeginとEndの位置はどこよ?
290284:2010/04/13(火) 07:38:30
>>287
カプコンのPC版デビルメイクライ4体験版でテクスチャ解像度の高低を設定できるようになっていました。
個人作成のソフトではそういった設定はあまりないんですね。
必要かどうかよく吟味したいと思います。
ありがとうございました。
291285:2010/04/13(火) 07:40:54
>>288
ディスプレイスメントマッピングなど一部処理は新たに設置されたテッセレーションステージ
でやるほうが良くなったかもしれないくらいで、
基本的にはジオメトリシェーダならではの処理がまだあるということですね。
ありがとうございました。
292286:2010/04/13(火) 18:46:57
>>289
HRESULT Render(void)
{
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(90, 50, 30), 1.0f, 0);
if (SUCCEEDED(g_pD3DDevice->BeginScene()))
{
drawMain();
g_pD3DXSprite->End();
g_pD3DDevice->EndScene();
}
return g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

こんな感じで書いていて
>>286の処理はdrawMain()で行っています。
293デフォルトの名無しさん:2010/04/13(火) 19:25:02
>>292
じゃなくて
g_pD3DXSprite->Begin()はどこ?
294286:2010/04/13(火) 19:34:45
>>289 >>293
g_pD3DXSprite->Begin()使ったら適用されました。
ありがとうございました。
295デフォルトの名無しさん:2010/04/13(火) 19:45:25
なんでそうなるのか分かってなさそうで怖いな
後で同時にスプライトとメッシュを同時に描画すると表示がおかしくなります。とか聞きにくるなよ?
296デフォルトの名無しさん:2010/04/13(火) 20:00:01
パチンコのゲームみたいに単発のSEが多量に流れるようなアプリケーションを作るには
DirectXの場合はDirectSoundになるのでしょうか?
並行してコンポの液晶面や音楽プレイヤーなどでよく見かける
↓のような表示(何ていう名称なんでしょう)を行いたいのですが、流石にこちらはDirectXに頼れないですよね。
     ■       ■
     ■  ■    ■
   ■■  ■  ■■■
■■■■■■■■■■■■■
297デフォルトの名無しさん:2010/04/13(火) 20:51:47
スペクトラムアナライザー
298デフォルトの名無しさん:2010/04/13(火) 21:14:09
DirectAudio(Sound、Music)やXAudio2、XACT、OpenALなど様々なAPIがあるけどどれを使ったらいいですか
サンプルの多さとWAVE、MIDIに対応してるDirectAudioに魅力を感じているのですが既に廃止済みとのことで・・・
DirectAudioは使うなというMSの方針に従うべきなのかどうか
299デフォルトの名無しさん:2010/04/14(水) 09:07:53
>>296
FFT変換でぐぐれ
300デフォルトの名無しさん:2010/04/14(水) 11:44:46
FFT変換
高速フーリエ変換変換
301デフォルトの名無しさん:2010/04/14(水) 13:27:33
>>299-300
ワロタ
302デフォルトの名無しさん:2010/04/14(水) 18:38:07
すみません
テクスチャを256x256 4枚 → 512x512 1枚に押し込めて動作テストし、
2回のQueryPerformanceCounterで経過時間を取得したのですが
誤差程度の変化しか有りませんでした。

マテリアルの切り替えは「非常に重い」と聞きますが、テクスチャをやたらと1枚に押し込めても
結局処理速度の向上は望めないものなのでしょうか?
303デフォルトの名無しさん:2010/04/14(水) 19:23:30
>>302
最適化する前に、マテリアルを一切切り替えず全部同じマテリアルで表示すると明らかに速くなったりするかを見てみる

グラフィックパイプラインのチューニングは、なにが原因で速度が遅いのかを調べてそこを最適化しないと効果は現れない
304デフォルトの名無しさん:2010/04/14(水) 19:52:14
>>302
DrawPrimitiveは描画が終わるまでブロックするわけじゃないから、
その前後で時間を測っても処理時間は測定できないよ。
305デフォルトの名無しさん:2010/04/14(水) 20:03:17
>>302
いまどきのグラボだったら、全部VRAMにのっちゃうから切り替えコストはあんまりかからないような・・・
306デフォルトの名無しさん:2010/04/14(水) 20:11:10
自分もマテリアルの切替が遅いってのを聞いて気にしてるんだけど、
VRAMがたっぷりあって、それの上に乗っかる分には大丈夫なわけ??
VRAMに余裕がなくて、いちいち転送の必要がある場合に遅いと?
シェーダおよびシェーダ変数の切替コストも上記と同じ考えなのかな?
307デフォルトの名無しさん:2010/04/14(水) 23:05:26
同じだよ
308デフォルトの名無しさん:2010/04/14(水) 23:23:28
コンシューマでの開発だったら変わるんだろうけどね
309デフォルトの名無しさん:2010/04/14(水) 23:44:09
深度バッファシャドウ用のシャドウテクスチャ(浮動少数点バッファです)に保存する際のZ値ですが、
ピクセルシェーダに渡されたトランスフォーム後座標をPosとすると、一般的には

(出力) = Pos.z / Pos.w;

としたり、

(出力) = Pos.w / (遠平面距離)

として、シャドウテクスチャを参照するときも同様にして各ピクセルの深度値と比較します。
たしかにこのやり方だとうまくいきます。
しかし、Pos.wを直接出力してもうまくいくと思って試してみたところ、うまく影が出ませんでした。
Pos.wは射影変換前のライトカメラ原点からZ値のはずなので、Pos.w/(遠平面距離)とは
0〜1に正規化するかどうかだけの違いで、影かどうかの判定結果は同じになると思うのですが・・・
310302:2010/04/15(木) 00:08:05
303-308
ありがとうございます。為になりました。
311306:2010/04/15(木) 02:12:19
>>307
>>308
ありがとう、勉強になった。
ユーザーにはできるだけ良いグラボを使ってもらうようお願いしよう(笑)
312デフォルトの名無しさん:2010/04/15(木) 10:11:03
すみません、質問です。
現在 WinXPSP3 + DirectX9 (2008 August) でアプリケーションを作成しているのですが、
Direct3D で描画をする際に、実装予定の機能上の都合で 3D画面が重なったようなレンダリングをしたいと思っています。

具体的には、ポリゴンメッシュを通常通り3Dで描画した後、その上に重なって見えるように
また別のポリゴンメッシュを表示したいのです。
※丁度モデリングソフトで、メッシュ上にボーンや頂点移動のハンドルが重なって=見かけ上、常に手前に表示されているような状態

これらを実現する方法として、例えばデバイスコンパチブルなBitmapを別にバッファとして用意し、
そこに重ねて上に表示したい内容をレンダさせ、それを3D画面上にスプライトとして重ねてしまえばいいのかなと思ったのですが、
そのような方法(実現可能かどうかはこれから調べる)で良いのでしょうか。 あるいはもっとシンプルな方法がありますでしょうか。

よろしくお願いいたします。

313デフォルトの名無しさん:2010/04/15(木) 10:19:36
>>312
一番簡単な方法は、裏になるレイヤを描画した後にZバッファだけクリアして
手前のレイヤを描画。

別々に描画して後から重ねたいなら、RenderTargetTextureに対して描画。
314312:2010/04/15(木) 10:48:00
>>313
早速のレスありがとうございます!レスを頂いてからあっと気づきました・・・
Zバッファクリアだけで無事実現出来ました。ありがとうございました!
315309:2010/04/15(木) 22:55:52
自己解決しました。
出力先の浮動小数点バッファの初期化(クリア)が問題でした。

IDirect3DDevice9::Clearの色指定は0〜255の範囲内でしかできないようですが、
浮動小数点バッファはもっと広い範囲を記録できるにも関わらず、
0〜255の範囲内でしか初期化できないのでしょうか?
深度などを描画するときは、0.0f〜1.0fに正規化すれば良いのですが、
正規化せずに使うような用途のときは、広い数値範囲の初期化が必要になることも
あると思うので気になりました。
316デフォルトの名無しさん:2010/04/15(木) 23:04:21
DirectX9の仕様です。10では改善されました。
317309:2010/04/15(木) 23:08:20
>>316
おお、そうだったんですか!
すっきりしました。
ありがとうございましたm(_ _)m
318デフォルトの名無しさん:2010/04/16(金) 11:42:47
すみません、質問です。 WindowsXPSP3、DirectX9c、VisualC++2008Expressで開発しています。
ウィンドウのリサイズ(WM_SIZE)のタイミングに合わせてデバイスをリセットする処理で詰まりました。

ググって見つかるサイトやMSDNの説明により、そのタイミングで IDirect3DDevice9 の Reset() を
実行する必要がある事はわかりました。またその際に、
事前に各種取得内容を Release() する必要がある事も把握しているのですが、
どうやっても Reset の戻り値が INVALID_CALL となってしまい、完了出来ません。

D3DPRESENT_PARAMETERS などに設定している内容は以下の通りで、

 D3DPRESENT_PARAMETERS dp;
 dp.BackBufferCount = 1; dp.Windowed = TRUE;
 dp.BackBufferWidth = 0; dp.BackBufferHeight = 0;
 dp.BackBufferFormat = d3ddm.Format; // pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm) で得た物
 dp.MultiSampleType = D3DMULTISAMPLE_NONE; dp.MultiSampleQuality = 0;
 dp.SwapEffect = D3DSWAPEFFECT_FLIP;
 dp.hDeviceWindow = hWnd; dp.Flags = 0;
 dp.EnableAutoDepthStencil = TRUE; dp.AutoDepthStencilFormat = D3DFMT_D16;
 dp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
 dp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;

〜 続く
319318:2010/04/16(金) 11:43:28
続き 〜

デバイスから CreateVertexBuffer/CreateIndexBuffer している内容はいずれも D3DPOOL_MANAGED になっています。
※D3DPOOL_DEFAULT としている場合は、これらも Releaseする必要があるが、D3DPOOL_MANAGED である場合
 Releaseしなくても良いとの記載がありましたが、念のため Release試しましたが、どちらでも同じ結果になります。
また D3DXCreateTextureFromFile で作成した LPDIRECT3DTEXTURE9 についても、念のため Releaseしています。

他、まったく使ってはいなかったのですが、念のため GetBackBuffer/GetDepthStencilSurface でLPDIRECT3DSURFACE9 を得て、
これらも Release してみましたが、結果が変わりません。
さらに GetSwapChain で IDirect3DSwapChain9のポインタを得て、これも試しに Releaseしましたが変わりません。

以上を全て デバイスResetの直前に行い、Resetを実行しても INVALID_CALL になってしまうのは、
何が原因として考えられるのでしょうか。 よろしくお願い致します。
320デフォルトの名無しさん:2010/04/16(金) 12:12:31
デバイス生成したスレッドでReset呼び出す必要があった気がする
321デフォルトの名無しさん:2010/04/16(金) 12:48:01
>>320
レスありがとうございます。 はっとして確認していみましたが、
※Win32の GetCurrentThreadId() で値を確認
もともとマルチスレッドにはしていないので、どのタイミングでも同じIDが戻ってきました。
他に何か原因となりそうな事はありませんでしょうか・・ すみません
322デフォルトの名無しさん:2010/04/16(金) 15:07:48
D3DPRESENT_PARAMETERSがデバイス生成した時と同じパラメータになっているか確認しる。つーかバックバッファのサイズが設定されていないようだが?
D3DCREATE_MULTITHREADEDで生成していない場合、絶対に複数のスレッドからアクセスしてはいけない。
323デフォルトの名無しさん:2010/04/16(金) 16:58:16
deviceって何?
サンプルソースで描画に使ったりしてるけど
簡単に教えてください

引数で渡すということは、切り替えることもあるんですよね
切り替えることで出来ることって何ですか?
324名無しさん@Linuxザウルス:2010/04/16(金) 17:20:56
>deviceって何?

デバイスドライバの事かと。

>切り替えることで出来ることって何ですか?

マルチモニタで二つ以上のモニタを使っている場合、
どのモニタでもフルスクリーン表示が出来るようになる。
325デフォルトの名無しさん:2010/04/16(金) 17:50:59
>>318
ちょっと聞きたいんだが、WM_SIZEのタイミングに合わせてデバイスリセットって本気か?
バックバッファから作り直すの?

ウインドウの大きさをマウスドラッグで変えまくったら、ものすごい勢いでデバイスリセット発生させるんか?
326デフォルトの名無しさん:2010/04/16(金) 19:03:46
参考までに、DXUTでは、WM_SIZEを受け取ってもドラッグ中の場合はデバイスリセットしないような実装になってるね。
327デフォルトの名無しさん:2010/04/16(金) 19:34:13
フラグメントリンカでシェーダを生成しようと思うのですが、
これって、AlphaEnableやZEnableといったステート設定はホストプログラム側で固定機能時代のように
SetRenderStateで設定してやる必要があるのでしょうか?
フラグメントでないHLSLではtechnic宣言部で指定できて、ステートの保存、復帰といった面倒もなくて扱い易かったのですが・・・
328デフォルトの名無しさん:2010/04/16(金) 19:48:38
>>325
Windows的には本当はサイズ変更中に来るメッセージはWM_SIZINGで
WM_SIZEはサイズ変更が確定した後に一度だけ来るメッセージなんだけどな。

実際は「ドラッグ中にウインドウの内容を表示する」オプションを有効にしていると、
物凄い勢いで送ってくるが。(有効が普通)
329デフォルトの名無しさん:2010/04/16(金) 20:01:13
>>328
XP以降ではそのオプションは有効がデフォルトだよね
330デフォルトの名無しさん:2010/04/16(金) 20:01:53
>>324
回答ありがとうございます

モニタとかへのハンドルみたいなもんですか?
331デフォルトの名無しさん:2010/04/16(金) 20:38:43
>>327
たしかそうだったような。。。
332デフォルトの名無しさん:2010/04/16(金) 21:05:17
とりあえず質問する時は9、10、11をははっきりさせようぜ
333327:2010/04/16(金) 21:16:14
>>332
すみません、DirectX9です。

>>331
やはりそうですか・・・
柔軟性のためのトレードオフですね。
固定機能処理に依存するので、DX10以降で使えないというのも納得ですね。
334デフォルトの名無しさん:2010/04/16(金) 21:17:35
>>330
そんな感じ
335デフォルトの名無しさん:2010/04/16(金) 22:25:22
DirectX9について、頂点シェーダからピクセルシェーダに、TEXCOORDセマンティクスの変数を受け渡すとき、
ハードウェアでパースペクティブコレクト補間されますが、
このとき、補間のための情報として「w成分が参照される」ということは分かったのですが、
この「w成分」というのは、補間しようとしているTEXCOORDセマンティクスの変数のものなのか、
それとも、POSITIONセマンティクスで出力した、ラスタライズで利用される頂点位置のものなのか、
どちらでしょうか?

TEXCOORD側のw成分はパースペクティブコレクトで参照されないだろうと思って、
w成分だけ頂点シェーダでいじると、どうもピクセルシェーダに達したときに、各成分値がおかしくなっているようなんですが・・・
336335:2010/04/16(金) 22:31:04
すみません、ピクセルシェーダで値がおかしいのは別の問題でした。
ただ、VS -> PS間での動きは気になるので、上記について何か知っていれば教えてほしいです。
337デフォルトの名無しさん:2010/04/17(土) 00:23:31
普通はPOSITIONで出力したもの。
TEXCOORDは他で色々使うし。
338デフォルトの名無しさん:2010/04/17(土) 07:05:21
>>335
結局何が聞きたいのかさっぱりわからないので丸投げ
http://marupeke296.com/DXG_No55_WhatIsW.html



コレにかぎらず、初心者は
素人見立てで勝手にココが悪いんじゃないか、と決め付けないで
何がしたくて
どういうアプローチをしたら
どう上手くいかなかったのかを素直に書いて欲しいな
339335:2010/04/17(土) 09:55:47
>>337
やはりそうですよね。
いろいろいじってみましたが、それの場合に辻褄が合う結果っぽいです。
ありがとうございました。

>>338
ありがとうございます。
そのページはチェック済みでしたが、パースペクティブコレクトについては触れられておらず、
まだ釈然としませんでした。(wの意味についてはとても参考になりました)
340デフォルトの名無しさん:2010/04/18(日) 00:54:18
ゲーム処理部と描画部分けて、ゲーム処理に応じて描画部分で、
事前処理(シャドウマップとか)、不透明描画、半透明描画、ポストエフェクト
みたいな流れになると思うのですが、
こういう描画の管理はどういう手法が一般的なんでしょうか・・?
341デフォルトの名無しさん:2010/04/18(日) 01:10:59
メッシュの重心を求める方法を教えてください。全部三角ポリゴンで構成されているとします
342デフォルトの名無しさん:2010/04/18(日) 02:09:31
メッシュの形にもよるかなぁ
メッシュが原点と各ポリゴンで構成される三角錐の総和であるなら求められると思うが…
人型とかだとちょっと分からん
343デフォルトの名無しさん:2010/04/18(日) 07:38:27
>>341
それもうDirectXだとかメッシュだとかの話じゃなくて
純粋に数学の話じゃないのか
344デフォルトの名無しさん:2010/04/18(日) 07:42:06
>>340
一般的にも何も、そのままじゃね
そしてその時の都合によって、その中のどれかの処理は 「既に処理済みだから、このタイミングでは省く」 のようにして
無駄なコストを省いて効率化するとか。 一般的にも何も、その時作ってる内容によるよ。
お手本もマニュアルも無い。
345デフォルトの名無しさん:2010/04/18(日) 09:57:15
>>344
大量のモデル出したり、描画プロセスが複雑化してきたら
どうやって管理してるのかなぁと・・・。
自分の場合、仮想関数でDraw作って、
それを描画リストに積んで、ソート後にまとめて実行してます。
346デフォルトの名無しさん:2010/04/18(日) 10:21:29
>>345
例えば各モデルの個別の描画内容って、それぞれに
StreamSource や マテリアル、テクスチャ、レンダリングステートが違っているような場合、
多分どういう形で持つにしても結局それらをどこかでまとめて連続実行する必要があるわけなので、

例えば描画処理を行うクラスを多段にするにしても、モデル側にBeginScene後に呼ばれる処理を個別にカプセルしても、
結局そういう形になるとは思うぜ。 なのでそれでいいと思う。 俺も大雑把に言えば

class IModel {
 public:
 virtual ~IModel() {}
 virtual void drawMe(略) = 0;
};
class Player : public IModel { public: void drawMe(略) { 個別のセット } }; // 注:レスの改行の関係で圧縮表記
class Enemy : public IModel { public: void drawMe(略) { 個別のセット } };

こんな感じだ。 で、こいつらのインスタンスを描画専用クラスのメソッド内、 BeginSceneで挟んでループみたいな。
347デフォルトの名無しさん:2010/04/18(日) 10:54:59
>>341
ここじゃなくてCAD関連スレで聞いたほうが速いかも
348デフォルトの名無しさん:2010/04/18(日) 14:26:49
DirectX9について

HLSLのシェーダの入出力記述で、TEXCOORDnセマンティクスを付けてテクスチャ座標値として
扱うことができますが、これって何個まで(nのところ)指定できるんでしょうか?
GPUによって違うのでしょうか?
それとも、PS3.0とか、シェーダのバージョンによって既定されているんでしょうか?
349デフォルトの名無しさん:2010/04/18(日) 16:19:41
>>348
シェーダのバージョン
vs/ps2.0 TEXCOORD0〜TEXCOORD7
vs/ps3.0 TEXCOORD0〜TEXCOORD15
350347:2010/04/18(日) 16:28:19
>>349
ありがとうございましたぁ!!
351デフォルトの名無しさん:2010/04/18(日) 18:09:51
すみません
木などで抜き色(アルファ)テクスチャの板ポリが交差している場合、
1メッシュとしての描画は、ソートしても交差までは正常に描画されない(?)ので
交差分は別メッシュとしてDrawSubsetを別け、
描画済みの結果の上に描画させようと思うのですが、このやり方はマトモ(普通・定番)なのでしょうか?
352デフォルトの名無しさん:2010/04/18(日) 18:15:53
>>351
先に2値でZだけ書いて、後からα部分を重ねるとかは?
フィルレート無駄に消費して大量の木とかには向かないと思うけど・・・。
353デフォルトの名無しさん:2010/04/18(日) 18:16:43
立体視だと手抜き表現は、とても変に見えるんだぜ
354デフォルトの名無しさん:2010/04/18(日) 18:26:49
すみません、初歩的な質問かもしれませんが・・・
D3DXVECTOR3 に D3DMATRIX をかけて新しい D3DXVECTOR3 を得る関数って、ヘルパーで存在しないのでしょうか。
演算子オーバライドかなと思い、変数同士をかけてみたところコンパイルできませんでした。
(行列かける行列は可能な事は知っています)

よろしくお願いいたします。
355デフォルトの名無しさん:2010/04/18(日) 18:42:17
356デフォルトの名無しさん:2010/04/18(日) 18:42:24
D3DXVec3Transformかな?
色々種類があるから注意してね。
357デフォルトの名無しさん:2010/04/18(日) 18:46:26
演算子で用意してないのは、種類があるから誤用を防ぐ為なんだろうか?
358デフォルトの名無しさん:2010/04/18(日) 18:48:59
ゲームのように速度に致命的な問題を抱える可能性のあるものは、
演算子=関数呼び出しを幾らか減らすことでオーバーヘッドを削ることがある。
359デフォルトの名無しさん:2010/04/18(日) 18:49:42
そんな気がするね。
マトリックスは一律4x4なのに対し、ベクトルは要素数が3だったり4だったりして、wの扱い方によって
何種類もの演算の種類が発生してしまう。
360デフォルトの名無しさん:2010/04/18(日) 18:57:31
D3DXVECTOR3::operator * に
( a.x * s, a.y * s, a.z * s )はあっても( a.x * b.x, a.y * b.y, a.z * b.z )がないところとか。
361デフォルトの名無しさん:2010/04/18(日) 19:01:13
自分の場合、4x4と3かけて3取る事が多いから、自前で演算子追加したいけど、
演算子が継承されないから面倒なんだよな・・・。
362351:2010/04/18(日) 19:01:15
>>352 >>353
ありがとうございます。
先にZだけ書いて後から・・そんな方法も有るのですね。
将来的にはそういう事もできるようにはなりたく思います。ありがとうございました。
363デフォルトの名無しさん:2010/04/18(日) 19:01:38
>>360
Vector同士 の掛け算でそんな計算されたら困るだろw
364デフォルトの名無しさん:2010/04/19(月) 13:33:32
質問します。現在 WinXP/VC++/DirectX9環境でアプリケーションを製作しています。
Webを回って、とあるシェーダを使ったサンプルソース見つけたのですが、その中に次のような記述がありました。

D3DVSD_STREAM(0),
D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3 ),
D3DVSD_REG(D3DVSDE_NORMAL, D3DVSDT_FLOAT3 ),
D3DVSD_REG(D3DVSDE_TEXCOORD0,D3DVSDT_FLOAT2 ),
D3DVSD_REG(D3DVSDE_TEXCOORD1,D3DVSDT_FLOAT2 ),
D3DVSD_END()

調べた所、これら D3DVSD_ で始まるマクロはいずれも DirectX8 時代の物だそうですが、
これらに対応する DirectX9 でのマクロ、あるいは内容はどのようになるのでしょうか。
よろしくお願い致します。

あと、>>355-356 ありがとうございました。自分は >>354 です。
365デフォルトの名無しさん:2010/04/19(月) 13:57:17
>>364
8時代のアセンブライクなシェーダの産物だから
HLSLが主流となった9では代替となるものは無いかなぁ
あえて上げれば
D3DVERTEXELEMENT9
IDirect3DVertexDecralation9
辺りをググって情報を集めるべし

でも、素直にそのサイトはあきらめてHLSLで解説してるサイトを参考にした方が良いと思われる
366デフォルトの名無しさん:2010/04/19(月) 14:13:10
>>364
Vertex Declaration(頂点宣言)
DirectX9にもある機能。

DirectX8ではシェーダハンドルに頂点フォーマットも紐付けされていたので
頂点シェーダの作成時に頂点フォーマットも指定する。
DirectX9ではシェーダと頂点フォーマット指定が分離したので、別々にセットする。
ttp://msdn.microsoft.com/ja-jp/library/ee415204(VS.85).aspx#Vertex_Declaration_Changes
367デフォルトの名無しさん:2010/04/20(火) 19:48:45
HLSLの組み込み関数のstepの意義って何なんでしょう?
単に(x>=y)って書くのとどう違うんでしょうか?
ハードウェアの比較器を使うから(有意かは環境によるとして)理論的には速く処理されるのでしょうか??
368デフォルトの名無しさん:2010/04/20(火) 19:57:29
a = a + 1;
a++;

どっちも結果は同じなのに何故あるのか、みたいな話か
369デフォルトの名無しさん:2010/04/20(火) 20:08:08
生成されるアセンブリが違う
どう違うかはハード依存
370デフォルトの名無しさん:2010/04/20(火) 20:14:02
DirectSoundで質問です

December2004のDirectSoundでストリーミングバッファ再生に挑戦しているのですが、

DirectSound8オブジェクト作成
→協調レベル設定
→DirectSound8からDirectSoundBuffer作成
→DirectSoundBuffer->QueryInterfaceでDirectSoundBuffer8作成

とここまでは成功するのですが、次のDirectSoundNotify8をDirectSoundBuffer8のQueryInterfaceで作るところで必ず失敗します
(HRESULTに-2147467262が入っている)

他のサンプル等でもこのように普通に作成しているみたいですが、作成順序がまずいんでしょうか?
371デフォルトの名無しさん:2010/04/20(火) 20:29:52
あれ……。
ひょっとして、テクスチャの初期化(device->CreateTexture())ってかなり重い……?
372367:2010/04/20(火) 20:42:05
>>369
ありがとうございます。
stepのほう使います。
373デフォルトの名無しさん:2010/04/20(火) 20:51:40
>>370
HRESULT: 0x80004002 (2147500034)
Name: E_NOINTERFACE
Description: The requested COM interface is not available
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4002 (16386)

サウンドドライバの問題じゃね?
別PCで試すかソースうpすれば誰かが試してくれるかもしれない
374デフォルトの名無しさん:2010/04/20(火) 21:04:35
>>371
作成自体も重いし、毎フレームテクスチャを作って消して…
なんてやってると断片化を誘発してさらに重くなる
MANAGEDでテクスチャを作ってるとさらにタチが悪い
375デフォルトの名無しさん:2010/04/20(火) 21:29:15
>>374
なるほど……。
画像を800x600のテクスチャとして初期化するのに0.24秒、
1600x1200だと1秒強かかってしまうんだ。(ネットブックにて)

Core i7/RADEON 4850だとこれの大体4倍くらいだけど、
画像ファイルをオンメモリに展開するだけならこれの3〜5倍くらいは早いので、
残りは純粋なテクスチャの初期化とデータ転送ということになりそうなんだが、
どういう方針で高速化を図るべきか……。
376デフォルトの名無しさん:2010/04/20(火) 22:55:16
>>367
stepはマニュアルを読む限り、vectorやmatrixでも使えるのが
特徴ではないのか?

>>369
どういうこと?生成されるアセンブリコードは
ハードが違っても同じじゃないの?
つーかコンパイルにハードは関係ないでしょ。
377367:2010/04/20(火) 22:59:46
>>376
vectorやmatrixも、普通の比較演算子で比較できませんでしたっけ??
378デフォルトの名無しさん:2010/04/20(火) 22:59:47
>>375
0.24secって絶望的なほど重いが。
30FPSで0.03secだぜ、もう一度計測しなおした方がいい。
379デフォルトの名無しさん:2010/04/20(火) 23:12:18
>>377
float4 v2 = v0 >= v1 ? 1.0f : 0.0f;
三項演算子で書くとこうだけど、これでちゃんと
各要素独立して、1or0が入るのか?
試してないんでわからんが、
入るなら同等だと言えそうだ。
380デフォルトの名無しさん:2010/04/20(火) 23:27:11
RadeonでテクスチャLockすると妙に遅くなってたなぁ・・・。
同レベルのGeforceを同じコードで動かすと何故か遅くならなくて謎だった。
381デフォルトの名無しさん:2010/04/20(火) 23:27:14
命令数の消費が違かったきがするけど
昔の話かも
382デフォルトの名無しさん:2010/04/20(火) 23:30:41
ゲフォがメインメモリにテクスチャのコピー持ってて
ラデがロックの度にVRAMから転送とかそんな感じじゃないの
知らんけど
383デフォルトの名無しさん:2010/04/20(火) 23:33:00
暇つぶしにdx11の勉強をしようと思うんだけどいい本ある?
384デフォルトの名無しさん:2010/04/20(火) 23:53:15
DX11の本は見かけないなぁ。
かわりに、GDCの講演資料とかAMDのテクニカルペーパーが今のとこ一番役に立ってる。
ComputeShaderやらHullShaderやらDX11で追加されたもの以外は
DX10と大差ないから、1から勉強しなくてもだいたい分かるっしょ。
385デフォルトの名無しさん:2010/04/21(水) 00:07:30
>>384
d
ずっと9やっててまだ10触ってないからとりあえず10の本買って遊んでみようかな
新しいシェーダも今のとこ興味ないし
386デフォルトの名無しさん:2010/04/21(水) 00:08:25
DX10以降、めっきり本が減ったね・・・
xファイルサポート打ち切ったり、初心者お断り感が増しちゃったっぽいのもあるかも。
387デフォルトの名無しさん:2010/04/21(水) 00:13:50
普通の人にはDX9でほぼ完成してたりDX10のプラットフォーム問題もあったりで
本の需要自体があんまし無いのかもしれない
388デフォルトの名無しさん:2010/04/21(水) 00:22:16
ゲームプログラミングにおいても
日本は衰退の一途をたどっているからな
仕方ない
389デフォルトの名無しさん:2010/04/21(水) 00:23:21
ホビーユースだとDX9は王道だよね。
普及度、扱いやすさ、完成度、どれをとってもピカ一。
390デフォルトの名無しさん:2010/04/21(水) 00:33:51
売れないと分かってる本を刷る出版社は無い
11はWindows7の普及待ちかと
391デフォルトの名無しさん:2010/04/21(水) 00:55:17
DirectX9のリリースが2002年末
2003年中に出た9関連書籍は工学社のいつもの奴くらいで
今出てる関連書籍の半分以上は2005〜2007に発売されたもの
9の本が多いのは単純に9が超ロングセラーだから。
夏か秋くらいに「11実践プログラミング」みたいなのが工学社からでて
その後しばらくは11がどれくらい定着するか様子見って感じかな
392デフォルトの名無しさん:2010/04/21(水) 01:10:58
最近は知らんが、アセンブリレベルで命令違ったりしてたよね
ハードごとというより、cpu gpuごとにと言った方が正確だと思う
393371:2010/04/21(水) 01:40:33
(テクスチャの初期化の高速化の件)
書き忘れたけど、DX9でD3DPOOL_MANAGEDで確保している。

>>378
別に毎フレームごとに初期化してるとは言ってないよ。
初期化に時間がかかりすぎて困ってはいるけど。

>>380,382
そいや、文字描画用に頻繁に書き換えて使うテクスチャの更新も
やたら時間かかってるんだよなぁ。
こいつはD3DPOOL_DEFAULT/D3DUSAGE_DYNAMICで初期化したほうがいいんだろうか?
394389:2010/04/21(水) 01:45:57
>>389
試しにVista上でDirect3DExを使ってみたら鬼のように楽になったりするので、
基本的にDirectX関係は新しいほうが却って楽になると思われ。
そもそもDX10以降じゃReset地獄自体がないわけだし。
395デフォルトの名無しさん:2010/04/21(水) 01:46:40
あ、名前欄にも書いちゃった。ごめんね。
396デフォルトの名無しさん:2010/04/21(水) 07:54:53
>>394
Direct3DExか・・・
聞いたことはあったけど、あまり意識したことはなかったなぁ。
検討してみるよ。
>そもそもDX10以降じゃReset地獄自体がないわけだし。
描画のBegin、Endとかがないとかだっけ?
良くなってるとこもあるよね。
397デフォルトの名無しさん:2010/04/21(水) 08:22:50
>>393
・テクスチャサイズを2の累乗にしてみる(512,1024...)
・D3DPOOL_DEFAULTで確保してみる
・DeviceをMULTITHREADEDで初期化してないか調べる
398デフォルトの名無しさん:2010/04/21(水) 08:54:46
>>397
・テクスチャサイズは2の累乗にしている
・D3DPOOL_DEFAULTで確保するのはこれから試す
・DeviceはMULTITHREADEDで動かしてる。そうじゃないと動作中にテクスチャを読み込めない。
399デフォルトの名無しさん:2010/04/21(水) 08:58:18
11触ると9が糞に見えるくらい使いやすい
もうみんなWindows7に移行した・・・よな?
400デフォルトの名無しさん:2010/04/21(水) 09:03:22
DX10がXP対応だったら普及すると思うが、
XP切り捨てるにはあと3年くらいかかりそう・・・。

今から作り始めたら完成まで3年かかって
丁度いいかもしれないけどw
401デフォルトの名無しさん:2010/04/21(水) 09:09:24
>>398
何もしない空のDX9のアプリ作って、同じサイズのテクスチャ作ってみても同じだけ重いのか確認してみた?
402デフォルトの名無しさん:2010/04/21(水) 10:02:35
>>401
同じだけかかる。
i7/RADEON 4850の環境で1600x1200のテクスチャの初期化に0.21-0.24秒かかる。
・device->CreateTexture()
・texture->GetSurfaceLevel()
・D3DXLoadSurfaceFromFile()
の3段階に分けてみたら、LoadSurfaceで普通にD3DXCreateTextureFromFileExで
初期化するより時間かかってしまった。(0.8秒くらい)

・device->CreateTexture(D3DPOOL_DEFAULT)
・D3DXCreateTextureFromFileEx(D3DPOOL_SYSTEMMEMORY)
・device->UpdateTexture()
に分けてみたら、早くはならないがUpdateTextureそのものは0.02秒程度でいけた。
初期化の高速化にはならないが、テクスチャの切り替えには使えそうだ。
ちなみにdevice->CreateTexture(D3DPOOL_DEFAULT)は0.0006秒と出る(タイマーにそんな精度無いけど)
403デフォルトの名無しさん:2010/04/21(水) 10:04:59
D3DXLoadSurfaceFromFile()でD3DPOOLの違いによってかかる時間はほとんど変わらないし、
D3DCREATE_MULTITHREADEDあるなしでは、
少なくとも無負荷時には初期化の所要時間に変化は見られない。
404デフォルトの名無しさん:2010/04/21(水) 10:05:22
1600*1200って2の累乗じゃねえじゃん、という突っ込みと
テクスチャフォーマットは何なのか、という疑問
405デフォルトの名無しさん:2010/04/21(水) 10:07:43
ていうかCreateTextureが重いんじゃなくてファイルから読んでるところが重いんとちゃうの?
406デフォルトの名無しさん:2010/04/21(水) 10:16:28
>>404
2048x2048で確保して、(0,0)-(1600,1200)の範囲にマッピングしてる。
>>405
どうなんだろ。今までD3DX系でしか読み込み処理やってない。
そういえばlibpngを使ってるゲーム処理系は多いけど、
これ使って自前で読み込んだ方がD3DX系よりも高速なんだろうか?

ちなみにpngの代わりにbmpやddsに切り替えてみたけど、全く早くならない。
D3DUSAGE_AUTOGENMIPMAP使ってMIPMAP生成をショートカットすると
ほんのちょっと早くなるけど、大勢に影響はない。(0.01〜0.02秒くらい減る)
407デフォルトの名無しさん:2010/04/21(水) 10:18:30
>>406
SurfaceFormatをDXT1か5にすれば、劇的に早くなると思われ
408407:2010/04/21(水) 10:19:39
あ,ddsでの話ね
409デフォルトの名無しさん:2010/04/21(水) 10:32:45
>>407
却って遅くなった。0.41-0.45秒(遅くなるとはオレも思わなかった。???)
フォーマットはDXT5。
D3DXCreateTextureFromFileExで2048,2048のテクスチャに読み込ませた。
D3DXCreateTextureFromFileExをやめてEx無し版にしたら劇的に遅くなる(1.57秒)

って、あ!
テクスチャのサイズも1600x1200にしたら劇的に早くなった!(0.006秒)
これはやべえ。改善の余地ありすぎる。
とはいえ、DXT系の劣化を受け入れられる用途じゃないけど。(DXT系を使うくらいならそもそも解像度を下げればいい)
410デフォルトの名無しさん:2010/04/21(水) 10:36:23
409の続き。

あ!
テクスチャのサイズを2048x2048をやめて、テクスチャと同じ1600x1200にしたら
劇的に早くなった!(D3DXCreateTextureEx()で0.09秒)
これくらい早ければ十分実用域だなぁ。
あともう一息なんだが。
411デフォルトの名無しさん:2010/04/21(水) 10:47:19
読み込むファイルを2048x2048にしたらどうなるの?
つか1600x1200ってやたらでかいな
412デフォルトの名無しさん:2010/04/21(水) 10:59:52
D3DXCreateTextureExの拡大フィルタで時間食ってるとかのオチじゃね
413デフォルトの名無しさん:2010/04/21(水) 11:26:46
D3DXCreateTextureExのフィルタ処理は遅いよね。
速度を稼ぎたければDDSでミップマップまで用意しておくといい。
414デフォルトの名無しさん:2010/04/21(水) 11:43:45
あ!
415デフォルトの名無しさん:2010/04/21(水) 13:12:41
>>412,413
1600x1200の場合、
ミップマップ生成なしで0.08-0.11秒、
ミップマップ生成ありで0.14-0.18秒だね。

2048x2048にはめ込む場合、
ミップマップ生成なしで0.21-0.23秒、
ミップマップ生成ありで0.34-0.35秒になる。

たしかにミップマップ生成でいくらかは遅くなるけども、
それよりも2の累乗サイズを確保してはめ込みをする方がペナルティーが大きいようだ。

なんでやねん。
416デフォルトの名無しさん:2010/04/21(水) 13:18:59
D3DXCreateTextureFromFileExのFilterとMipFilterの引数は何にしてる?
417デフォルトの名無しさん:2010/04/21(水) 13:24:38
あ!
418デフォルトの名無しさん:2010/04/21(水) 13:31:57
>>416
それぞれD3DX_FILTER_NONEとD3DX_FILTER_LINEAR。
今、MipFilterをD3DX_FILTER_BOXに変更したら、ミップマップ生成が高速になった。

1600x1200の場合、ミップマップ生成ありで0.08-0.11秒。
2048x2048の場合、ミップマップ生成ありで0.20-0.23秒。
419デフォルトの名無しさん:2010/04/21(水) 18:57:52
ぶっちゃけそんなとこにこだわる前に他にやることが山ほどあるだろうに
420デフォルトの名無しさん:2010/04/21(水) 22:13:51
>>396
なんでReset地獄が、描画のBegin、Endって話になるんだ
421デフォルトの名無しさん:2010/04/21(水) 22:16:09
おい!小池!
422デフォルトの名無しさん:2010/04/21(水) 22:40:14
ワロタw
423デフォルトの名無しさん:2010/04/21(水) 22:48:39
何が面白いんだ?
424デフォルトの名無しさん:2010/04/21(水) 22:51:37
DX9しか知らないと、DX10はあれもこれも出来なくなってて途方にくれるが
そういうのは全部9の悪癖だった過ぎない、いらないものだったと分かる。
425デフォルトの名無しさん:2010/04/21(水) 23:01:52
>>423 俺が知る限り、おそらく都内近郊から毎朝電車で通勤してるやつなら、
一度は目にしてるネタww
426デフォルトの名無しさん:2010/04/21(水) 23:04:15
[D3DXCreateTextureFromFile]
format = D3DFMT_A32B32G32R32F

4096 x 4096 time = 0.653363
2048 x 2048 time = 0.605009
1024 x 1024 time = 0.165639
512 x 512 time = 0.022681
256 x 256 time = 0.024446
128 x 128 time = 0.014270
64 x 64 time = 0.011157

環境は5,6年前のノートPCを考慮しても
確かに遅いな・・
427デフォルトの名無しさん:2010/04/21(水) 23:11:20
4*4*2048*2048=67,108,864

64MBか
428デフォルトの名無しさん:2010/04/21(水) 23:12:23
そりゃ128bit floatテクスチャは重い罠
429デフォルトの名無しさん:2010/04/21(水) 23:15:35
つか、そこが遅いとか不毛なこと気にするより
遅くともあまり気にならないような裏読みのシステム考えた方が建設的なんじゃないの
430デフォルトの名無しさん:2010/04/21(水) 23:30:27
>>425
いやポスターは知ってるが、どこが面白いのかと聞いているんだ
431デフォルトの名無しさん:2010/04/22(木) 00:40:30
DX10だと、スクリーン切り替えとかResetとか簡単になってるの?
432デフォルトの名無しさん:2010/04/22(木) 00:42:20
デバイスロスト対策をしなくてイイのは大きいね。
433デフォルトの名無しさん:2010/04/22(木) 01:49:40
大きいね。
434デフォルトの名無しさん:2010/04/22(木) 08:09:06
面倒だからゲーム中のウインドウモード切り替え機能を廃止した
435デフォルトの名無しさん:2010/04/22(木) 08:34:00
>>429
既に簡単な先読み機構は用意している。
しかしそれでも、テクスチャ1枚の初期化に1秒以上かかるようでは(ネットブック)
間に合わない場合が出てくる。
特にタイトル画面とか本編外のシステムデータとかは同期的処理になってしまわざるをえない。
(先読みしたら相当な枚数になる)
436デフォルトの名無しさん:2010/04/22(木) 09:00:46
ウィンドウ切り替えとか、デュアルモニタ対応とか、ビデオカードの種類による対応辺りを
いい加減SDK側で自動対応して欲しい・・・
437デフォルトの名無しさん:2010/04/22(木) 11:42:01
>>431
Vista以降ではビデオカードのドライバがWindows Driver Model準拠になって
ビデオカードのメモリをOSが管理するから、
アプリ側でReset処理を行う必要が根本的に無くなっている。
WDM版DX9であるDirect3D9Exは
Reset処理そのものは必要だけどLoad/Unload処理が不要になってる。
438デフォルトの名無しさん:2010/04/22(木) 11:44:17
Windows Driver Model→Windows Display Driver Model
439437:2010/04/22(木) 11:57:10
ごめん。嘘が混じってた。
>Reset処理そのものは必要だけどLoad/Unload処理が不要になってる。
じゃなくて、D3DPOOL_MANAGEDがなくなってD3DPOOL_DEFAULTのままで
よきに計らってくれるようになり、D3DPOOL_DEFAULTなテクスチャの破棄が不要になった、ということだね。
さらに複数のd3ddevice間や他のプロセスとでもリソースが共有できるようになった。
440デフォルトの名無しさん:2010/04/22(木) 12:44:58
リセットと言えば directx9で質問なんですが、
FLIPに使うバックサーフェスをリサイズしたい場合って、全部リセットしないとダメなんですか?
例えば デバイスから作り直さなきゃ行けないとか
ウィンドウモードで、どうやるのが常道なのかわかりません
441437:2010/04/22(木) 13:26:05
>>426
D3DFMT_A32B32G32R32Fはゲームだとまだあまり使わないけど、
ロード時間の比較は興味深い。
512x512未満ではテクスチャの大きさで所要時間の差がなく、
1024x1024では7.33倍の時間がかかり、
2048x2048ではほぼ順当に約4倍、
4096x4096ではまた増えなくなっている。
442デフォルトの名無しさん:2010/04/22(木) 14:44:58
そんなのハードのメモリ転送の仕組みが分かってれば自明だろうに
443デフォルトの名無しさん:2010/04/22(木) 21:14:15
んだ
444デフォルトの名無しさん:2010/04/22(木) 22:04:25
>>440
リセットだけでいい。
ウィンドウリサイズでは、リサイズ完了までリセットは避ける。
445デフォルトの名無しさん:2010/04/22(木) 22:06:20
>>442,443
メーカー、製品の世代、GRAMのバス幅、動作クロック等で
様々変わってくる部分なのに、
なぜ自明だと言える?
446デフォルトの名無しさん:2010/04/22(木) 22:13:45
それが分かってるってことは
なんで時間がサイズと比例じゃないのかが分かってるってことじゃん
447デフォルトの名無しさん:2010/04/22(木) 22:42:48
計算云々の前に毎フレームテクスチャの生成と破棄をする設計が根本的におかしいだろw
448デフォルトの名無しさん:2010/04/22(木) 23:00:08
449デフォルトの名無しさん:2010/04/23(金) 01:23:57
DirectX9のHLSLについて質問です。
グローバル変数をいくつか記述(宣言と同時に初期化)するとして、その中で、実際に各シェーダで
一度も使われないものがあった場合、コンパイル時の最適化で消してくれるでしょうか?
それとも、定数レジスタを喰ってしまうのでしょうか?

なぜこのようなことを聞くかというと、シェーダパスによって、グローバルの大きな配列変数のいずれかを
使うようにしようと思っており、もし使わない配列が定数レジスタを喰うようであれば、他のやり方を
検討すべきと思いまして。

float3 Ary1[ 16 ] = {
450449:2010/04/23(金) 01:27:20
すみません、途中で送信してしまいました。

float3 g_Ary1[ 16 ] = { ← Pass0でのみ使用
 float3( ・・・ ),
   ・・・
 float3( ・・・ )
};

float3 g_Ary2[ 8 ] = { ← Pass1でのみ使用
 float3( ・・・ ),
   ・・・
 float3( ・・・ )
};

・・・
451デフォルトの名無しさん:2010/04/23(金) 01:34:07
fxc.exeの/Fcオプションでアセンブラを吐いて比較してみればいい
452デフォルトの名無しさん:2010/04/23(金) 11:43:30
すみません、
透過テクスチャを貼った、2つの「交差」したポリゴンを個別に描画しているのですが、
2番目(後)に描画したポリゴンの一部が、1番目(前)に描画したポリゴンより後ろに有り、そこが描画されません。
Z値の比較で描画する必要なしとみなされ描画が働いていないと思われるのですが、Z比較をナシにすれば距離が完全に崩壊しますし・・。

各種ゲームで当たり前のように木や草で透過付きポリゴンの「交差」を見かけるのですが
あれは全て交差と見せかけた別ポリゴンなのでしょうか? それとも交差しても正しく描画する方法が有るのでしょうか?
453デフォルトの名無しさん:2010/04/23(金) 11:54:31
>>452
透過付きってのがアンチエイリアス等の半透明じゃなくて抜きでいいなら
アルファテストで抜き部分のz値を書き込まないことは可能
454デフォルトの名無しさん:2010/04/23(金) 11:55:37
>>452
マテリアルの順序。透過するテクスチャを最後に
455452:2010/04/23(金) 12:08:08
>>453
アルファテスト、ググって取り込んだらあっさり正常に描画されました。ありがとうございます。

>>454
はい。そっちの方は既に注意を受けてから心がけております。ありがとうございました。
456デフォルトの名無しさん:2010/04/23(金) 18:24:10
Direct3D9の固定シェーダーで、
L8で確保した単色のテクスチャの輝度値を
アルファ値として画面に対してブレンド描画することは可能でしょうか?
描画する色はDiffuseを使います。
A8だと何も問題ないんだけど、GeForce FX 5600がA8フォーマットに対応してないみたいで。
457デフォルトの名無しさん:2010/04/23(金) 19:07:21
無理じゃね?
シェーダーでやれ
458デフォルトの名無しさん:2010/04/23(金) 19:57:24
>>456
固定機能でRGB成分を元にα成分を計算する場合は、
D3DTOP_DOTPRODUCT3を使う。
459デフォルトの名無しさん:2010/04/23(金) 20:39:45
>>458
なるほど……。
それはさきほど試したのですが、うまくいかなかったので諦めてました。
その単語で検索してみたら、こんなログが引っかかりました。
http://74.125.153.132/search?q=cache:iTkQfkYjy44J:bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi%3Flog%3D29%26vew%3D174+D3DTOP_DOTPRODUCT3&cd=2&hl=ja&ct=clnk&gl=jp
どうやらD3DTSS_COLOROPとD3DTSS_ALPHAOPの両方で指定しないといけないみたいですね。
(ALPHAOPだけ指定していた)

今はテクスチャにA8L8フォーマットを使うことで解決させてしまってるけど、
また改良するときに試してみよう。

ところでD3DTA_TEXTUREで指定するテクスチャって、TextureStageごとに固定なんでしょうか?
それからVertexBuffer確定後の2枚目以降のUV値のカスタマイズってできないでしょうか?
460449:2010/04/23(金) 23:27:49
>>451
ありがとうございましたm(_ _)m
461デフォルトの名無しさん:2010/04/23(金) 23:38:54
>>459
ちょっと何を聞きたいのかよくわからんが、テクスチャ座標を複数使いたいという話なら
D3DTSS_TEXCOORDINDEXでステージごとにどの座標を使うのか指定する。
462デフォルトの名無しさん:2010/04/23(金) 23:50:31
未だに固定機能で頑張ろうとする人を見ると素直に凄い努力家だなと思う。
463デフォルトの名無しさん:2010/04/24(土) 00:12:31
>>462
SM2.0ベースでゲーム作ったんだが、
i845やi865以前のオンボードのPCのユーザーが普通に文句言ってくるよ。
464デフォルトの名無しさん:2010/04/24(土) 00:15:55
いい加減切り捨てようぜ
465デフォルトの名無しさん:2010/04/24(土) 00:30:32
>>463
オンボで動くように作ってるのは逆に尊敬に値するわ。
初代PSクラスのグラフィックしか出せないだろ。
466デフォルトの名無しさん:2010/04/24(土) 00:31:51
845はともかく
865なら頂点シェーダをソフトウェア
ピクセルシェーダをハードウェアでギリギリ動くだろ
467デフォルトの名無しさん:2010/04/24(土) 00:39:14
>>466
i865はPS2.0サポートしてないので無理。
468デフォルトの名無しさん:2010/04/24(土) 00:43:10
Intel Extreme Graphics 2って一応DirectX8.0対応じゃなかったっけ?
469デフォルトの名無しさん:2010/04/24(土) 00:45:35
>>461
なるほど……
2枚テクスチャを利用して大きさが違うことがあるので
同じ範囲をさせるようにUVを一次変換する必要があるんだけど、
D3DTSS_TEXCOORDINDEXでステージが使うUVを指定してあげて、
SetTransform(D3DTS_TEXTURE1 )で変換かますMATRIXを設定してあげれば
なんとかなるような気がしてきた。

サンクス!
470デフォルトの名無しさん:2010/04/24(土) 00:50:03
>>468
ピクセルシェーダ対応になったのはIntel GMA 900からかな
471デフォルトの名無しさん:2010/04/24(土) 05:49:41
加算合成って2枚のテクスチャ使ってシェーダーで計算するのと、
D3DBLENDOP_ADD使うのってどっちが良いんですかね
472デフォルトの名無しさん:2010/04/24(土) 05:54:21
あ、意味わかんね ごめん無視してください
473デフォルトの名無しさん:2010/04/24(土) 08:36:37
俺はメインはSM3,0で作ってるけど
PSなしVS1.1でライティングすらしない最低描画モード付けたよ。ゲームが動くだけで良いやつ。
474デフォルトの名無しさん:2010/04/24(土) 11:43:33
シェーダーって普通何種類も作って、
プログラム側でマテリアル毎に割り当てたりするの?

自分で作るときは一種類だけ作って、
パラメーター変更だけ適用してるけど・・・。
475デフォルトの名無しさん:2010/04/24(土) 11:46:46
>>474
そん時の都合次第じゃね
476デフォルトの名無しさん:2010/04/24(土) 11:48:32
パラメーター変更だけで対応できる程度のシェーダーならそれでいいんじゃね?
入ってきたパラメーターで条件分とか切ってるならやめたほうがいいけど
477デフォルトの名無しさん:2010/04/25(日) 13:51:27
>>474
ある程度書いてみて思うに、
用途ごとに分けるといいようだ。
ビルボード描画に限って言えば、
・通常描画用
・合成描画用(2枚以上のテクスチャを使用)
・テキスト描画用

の3つに分けておくといい。
478デフォルトの名無しさん:2010/04/25(日) 17:53:33
バイオハザード5はシェーダーの数が何万種って書いてあったよ
479デフォルトの名無しさん:2010/04/25(日) 18:15:16
そこまでいくと、モデルのマテリアルごとにデザイナーが固有のシェーダーを設定してるの?
プログラマが手動で用意できるもんでは無いと思うけど・・・・
480デフォルトの名無しさん:2010/04/25(日) 18:30:59
コンパイラコンパイラみたいな簡易エディタでもあるんじゃね
あるいはデザイナさんが自由に組み合わせた通りにSLコードを吐くユーティリティでもあるとか
481デフォルトの名無しさん:2010/04/25(日) 18:31:09
それは単に組み合わせ爆発が起こってるだけだと思うんだけど。
482デフォルトの名無しさん:2010/04/25(日) 19:09:46
普通にRenderMonkeyとかFX Composerとかあるじゃん
最近のモデリングソフトはシェーダー付きで吐き出すことも可能だし
483デフォルトの名無しさん:2010/04/25(日) 19:18:05
何万てすげぇな
どうやってデバッグしてるんだろ
484デフォルトの名無しさん:2010/04/25(日) 19:49:00
ただの組み合わせ爆発だろうその数は。
パーツの組み合わせでそうなってるだけで
デバッグ自体は其処まで大変じゃないよ。
485デフォルトの名無しさん:2010/04/25(日) 22:21:41
MFフレームワーク2ではメタシェーダシステムを導入して、組み合わせ爆発が起こらないようにしてるみだいだね。
486デフォルトの名無しさん:2010/04/25(日) 22:31:40
VS/PSをバラバラにして運用するようにすれば
組み合わせ爆発は1段階減少できるようだ。
そういうフレームワークを見たことがある。

まあ自分の作ってるゲームでは必要な機能ではないが。
487デフォルトの名無しさん:2010/04/26(月) 17:43:37
すみません。3Dアクションでのレイを使った衝突判定についてなのですが、
「壁との衝突」「地面との接触と自由落下」「ジャンプ時の頭上接触」
この3つを行いたいのですが、
それぞれ、バウンディングボックスの4隅からレイを飛ばさないと正しく判定できない物なのでしょうか?
何か飛ばすレイの数を減らしつつ上手く処理する方法は無いでしょうか・・?

また、壁(障害物)との衝突判定なのですが、
移動方向にだけレイを飛ばし判定するのは危険なのでしょうか?
一部市販のゲームで、細い所に入るとキャラが振動し始める姿を見、どう衝突判定しているのかかなり気になるのですが・・
488デフォルトの名無しさん:2010/04/26(月) 17:52:27
>>487
剛体運動の物理シミュレーションをやるというのでもないかぎり、
通常は質点とポリゴンの判定だけで十分。
489デフォルトの名無しさん:2010/04/26(月) 19:52:11
振動するのは押し返し、
返された先でまた別の壁が押し返し、が繰り返し発生するからだな
490487:2010/04/27(火) 06:19:44
>>488
そうなのですね・・ありがとうございます。

>>489
なるほど。という事はレイの始点は結構後ろ側に有って
移動不可の判定だけでなく、めり込み具合を判定して距離を確実に取り
めり込みで後ろに移動を起こしたらそれもその方向への移動処理として判定すればそうなる という事でしょうか。
少しコツというか実装の理屈がわかった気がします。
491487:2010/04/27(火) 06:34:23
(続き)そこでもう1つ疑問が浮かんだのですが、
処理落ちによるゲーム速度の変化を起こさないよう、システム時間と比較で進行しているのですが、
高速移動中に処理落ちがおき、
レイの始点そのものが通常のあそび(余裕)を越えて、判定すべき対象を突き抜けてしまう危険が有る場合、
どのような対策をしておく事が妥当・可能でしょうか?

・高速移動の終点を先に予想しておき、もし大きく外れたら終点に無理矢理移動させる。
・常に定期的に正常な「過去位置」を保存し、異常な位置になったらそこに戻る。
ぐらいしか思いつけないのですが、
レイの始点や個数、仕組みを変える事などで対応できたりしますでしょうか・・?
492デフォルトの名無しさん:2010/04/27(火) 06:49:44
俺なら、限度を超えた処理オチは普通に処理オチさせるな
つまりデルタタイムに上限を設けて遊びを超えないようにする
493487:2010/04/27(火) 06:51:07
書いててふと。
処理落ちを検出し、処理落ちした全フレーム分、衝突判定&移動処理を行えば
追加で処理落ちするかもだけど同じルールで正常に判定し続けられる・・のかな。
どちらにしても不測の事態に備えた何かは必要だと思うけど・・ 1人で長々すみません;
494487:2010/04/27(火) 06:59:49
>>492
遊びそのものを越えないようにストッパーをかける?のですね。なるほど・・。ありがとうございます。
495デフォルトの名無しさん:2010/04/27(火) 14:55:00
てか
移動後の位置座標のみで当たり判定してるならともかく
移動前から移動後へのレイと当たり判定取っとけば
どんだけ処理オチしても衝突位置は検出できるだろ
496デフォルトの名無しさん:2010/04/27(火) 15:17:25
つかあたり判定で処理落ちって実行環境によって挙動が変わるかもしれないけどそこはいいのか?

俺なら画面表示以外の処理はどんなに処理落ちしてもスキップしたりしないで、別途オプションにするけど
497デフォルトの名無しさん:2010/04/27(火) 16:00:57
爆発表示中は当たり判定をスルーして壁抜けOK
498デフォルトの名無しさん:2010/04/27(火) 16:14:18
処理部と描画部を完全に分離して描画部のみスキップ

某ゲームみたいに高スペックマシンでやると
多段ヒット起こして即死とかはやめて欲しいが
499デフォルトの名無しさん:2010/04/27(火) 17:49:01
いまふと思ったが、普通、移動その他の処理と描画処理って分けるよな?
同時にとかしないよな?
500デフォルトの名無しさん:2010/04/27(火) 19:09:21
マルチスレッド的に同時にやる場合もあるが、個人製作では普通やらない
501デフォルトの名無しさん:2010/04/27(火) 19:44:43
>>500
あぁ、そういう意味の同時ってのもあるが、ごめん紛らわしい書き方した。
void foo()
{
 // 移動その他処理
 // 描画処理
 // 移動その他処理
 // 描画処理
}
のように、一つの関数内で一緒くたにしてたりしないよな?ってこと
502デフォルトの名無しさん:2010/04/27(火) 21:11:43
あれだ
個人製作以前に オブジェクト指向の言語をつかっているなら
処理をひとつひとつにまとめしたりするのが普通。

更に言うと
void型は返り値がないが、引数を与えて戻り値で処理したりして
なるべく塊?っていうかな
そういう感じにしておくっていえばいいのかな

まぁ、言語はわからないが、C++とかだったら
オブジェクト指向っていう意味をググってみるとコードの書き方とか
考えが少し変わってくるよ
503デフォルトの名無しさん:2010/04/27(火) 21:20:21
>>502
俺は >>499>>501 だが、いや俺はどっちかって言うと
ストラテジパターン的な処理の書き方をしてるぜ。 言語は C++
むしろOOPがクセになってる。 大本の質問者はどうか知らないが、それなので、
「一緒くたにしてたりしないよな?」 と確認してみたわけだ

504デフォルトの名無しさん:2010/04/27(火) 23:22:32
一般で配布されているゲームのように一瞬でDirectXのデバイスを初期化するのってどうするのでしょうか?
私の作成しているコードではどうも1秒ぐらい掛かってしまうようでして…
505デフォルトの名無しさん:2010/04/27(火) 23:32:52
……ビデオメモリ64MBのマシンで
Direct3D使って1024x768を超える解像度のゲームを作るのは
かなり無理っぽい……?
506デフォルトの名無しさん:2010/04/28(水) 00:30:56
もしかして、
処理落ち回数が3回なら3ループをまわすんじゃなく、移動量をx3するのが正しいんでしょうか?
507デフォルトの名無しさん:2010/04/28(水) 01:37:56
WindowsXP sp3, Visual C++ 2008 Expressという環境だけど、DirectX SDKは最新のダウンロードしていいのですか?
DirectX 9.0c用のプログラムを勉強したいのです。
508デフォルトの名無しさん:2010/04/28(水) 01:43:08
正しいも間違ってるもくそもねえよ
放物線を描く移動をループ毎に行っているとして、単純に3倍したらどうなるんだよ
509デフォルトの名無しさん:2010/04/28(水) 01:45:32
>>507
別に特に問題はない。
ただし地味にドキュメントの構成やDXUTやD3DXの様子が変わってたりするので
ネットにある古めのサンプルがそのままで動かなかったりはする。
510デフォルトの名無しさん:2010/04/28(水) 06:00:35
>>509
どうもありがとうございます。
511デフォルトの名無しさん:2010/04/28(水) 10:22:00
ゲームプログラマになる前に覚えておきたい技術って本はDirectX9でプログラミングしてるのですか?
そうだったらAmazonで買いたいんですが。
512487:2010/04/28(水) 10:47:11
>>495-503
ありがとうございます。移動処理と描画は完全に分けております。
大規模な処理落ち時は描画をカットして判定させようと思います。
ありがとうございました。
513デフォルトの名無しさん:2010/04/28(水) 11:34:50
>>511
違う
514デフォルトの名無しさん:2010/04/28(水) 12:25:54
>>513
違うんですか。残念。
教えてくれてありがとう。
515デフォルトの名無しさん:2010/04/28(水) 22:48:35
メインフレームは処理落ち
描画フレームはコマ落ち
516デフォルトの名無しさん:2010/04/28(水) 23:41:08
DirectX11の本が一向に出ないのはやっぱ著者が時代に追いつけなくなったからなんだろうか。
SDKのサンプル見れば本なんていらないだろと言われちゃうとそうなんだけど電車とかで読みたいよな。
517デフォルトの名無しさん:2010/04/28(水) 23:42:59
>>511
Directxの本ではないが、
3Dの根本的な考え方などは
詳しく書いてあったりもするから、
読んで損は絶対にしないはず
518デフォルトの名無しさん:2010/04/29(木) 00:30:55
DirectX10+テッセ=DirectX11みたいなもんだろ
あとシェーダーがちょっと仕様が異なるだけだ
他の機能につっこみはなしでw
519デフォルトの名無しさん:2010/04/29(木) 00:38:50
>>516
SDKを印刷すればいいんじゃね?
520デフォルトの名無しさん:2010/04/30(金) 01:28:37
DirectX9のHLSL(ピクセルシェーダ3.0)の組み込み関数「pow」について質問です。

この関数で、100.0f乗とかしてもFPSが落ちません。
100回掛け算しているとは思えません。
一体、どういうアルゴリズムで100.0f乗(またはその他中途半端な指数乗)を計算しているのでしょうか?
521デフォルトの名無しさん:2010/04/30(金) 01:36:21
D3DXVec3TransformCoord とD3DXVec3Transformの違いを教えてください
522デフォルトの名無しさん:2010/04/30(金) 01:41:32
>>520
CPUでも一瞬だぞ?実装なんて気にするな。
523デフォルトの名無しさん:2010/04/30(金) 01:44:49
524デフォルトの名無しさん:2010/04/30(金) 01:47:36
>>520
大昔にアルゴリズムを別件で見て把握してたが、完全に忘れた
でも一つ言える事は、「100回掛け算」 なんてしない。 2進数での筆算の応用
525デフォルトの名無しさん:2010/04/30(金) 02:06:08
アセンブリコード見れば分かるけどただのビットシフトだよ
526520:2010/04/30(金) 02:10:36
>>522
それは、すばらしいですね・・・

>>524
>>525
えー!!なんと!!
それならガンガン累乗しますw

どうもありがとうございました! m(_ _)m
527デフォルトの名無しさん:2010/04/30(金) 02:23:50
Directx9のキャラだけをディスクトップに表示したいのです。
しかしオフスクリーンサーフェースをウィンドウに直接bitbltで書き写す
ことが出来たのですが、そこから先の段階に進めません><。

Directx9の作画結果をレイヤードウィンドウで透過・半透明で表示させる
にはどうしたらいいでしょうか?

環境 VC++2005 
    DirectX9 SDK (February 2007)
528デフォルトの名無しさん:2010/04/30(金) 02:27:38
>>520
x^2 = x * x
x^4 = x^2 * x^2
x^8 = x^4 * x^4
x^16 = x^8 * x^8
x^32 = x^16 * x^16
x^64 = x^32 * x^32
x^100 = x^64 * x^32 * x^4

何も考えなくても8回の掛け算できる
でも2進数ならではの方法があるなら興味あるな
529デフォルトの名無しさん:2010/04/30(金) 02:28:51
UpdateLayeredWindow 適当にググレ
530デフォルトの名無しさん:2010/04/30(金) 02:35:19
531デフォルトの名無しさん:2010/04/30(金) 02:47:46
UpdateLayeredWindowでググっても背景が透過して
成功というとこまで行けなかったもので・・・。
結局画面には何も表示されないのです。

ネットのサンプルはエラーで動かないですし。
ちゃんとDirectxの画像がbitmapになってるかも
画面に表示できないので確かめる手段がなくて・・・。
参ってます。
532デフォルトの名無しさん:2010/04/30(金) 03:00:04
なんだ。努力しないただの馬鹿か
533デフォルトの名無しさん:2010/04/30(金) 03:06:37
ですよねー
ええ、おっしゃるとおり独りで3ヶ月ほど同じ問題に取り組んでますお。
でもたしかここは初心者質問スレだったような。
534デフォルトの名無しさん:2010/04/30(金) 03:17:03
態度が悪ければどんなスレであれ、叩く
535デフォルトの名無しさん:2010/04/30(金) 03:22:58
できればどんな態度ならいい態度であるのか
教えていただければありがたいです。
可能なかぎり直したいとこです。
536デフォルトの名無しさん:2010/04/30(金) 03:36:43
とりあえず今動かないといってるソースをうpするところから始めようか
537デフォルトの名無しさん:2010/04/30(金) 08:42:16
>ネットのサンプルはエラーで動かないですし。

俺その「背景を透過して表示」 って処理、何気に今までやった事なかったけど
>>530 のリンク先にあった情報だけで普通に出来たぜ? win32 の動作とか理解出来てるかい?
そして一番肝心な、「動かないっていうそのエラー」 の内容は理解出来てる?

三ヶ月も時間過ぎてて、本当に詰まっている大本の原因を特定しないとかありえない。
それじゃまるで、誰かが書いてくれないと何も出来ない = サンプルコピペが出来ないと何も出来ないヒナになっちまうぜ?
538デフォルトの名無しさん:2010/04/30(金) 09:54:27
俺ライブラリとか俺エンジンとか俺フレームワークとか作るの難しいですね
539デフォルトの名無しさん:2010/04/30(金) 09:57:59
>>538
悩む事もあるけど、それがむしろ楽しい
540デフォルトの名無しさん:2010/04/30(金) 10:35:54
車輪の再発名と言われればそれまでだが楽しいのは分かる

自分のためにもなるしな
541デフォルトの名無しさん:2010/04/30(金) 11:01:07
そしていつまでも目的の成果物が出来ないと
542デフォルトの名無しさん:2010/04/30(金) 11:04:30
最初は「ただアルゴリズムを試したいだけなのに・・・」とフレームワーク開発に抵抗があったんですが、
デザインパターン勉強して、作り始めた今は、設計がおもしろくておもしろくてたまりまへんw
みんなどんなふうに組んでるのかなぁ??って気になることはあるけど。
543デフォルトの名無しさん:2010/04/30(金) 11:15:40
あんまり型にはまりすぎないようにね
ちゃんとプログラムやってれば、大抵デザパタと同じもの作るようになるから
その時に本当に使いこなせるって胸はれるよ
544542:2010/04/30(金) 11:29:13
>>543
ありがとう!
最近、自然とコンポジットパターンになっていった例があって、
HDRやSSAOなど、ある程度決まりきった複数のシェーダをコンポジットでまとめておけば、
使う側の記述がすごくすっきりして、しかも単発シェーダとまったく同じように扱えて、さらに使いまわしもできるようになった。
先人の知恵に感動した。
DirectXゲームの場合は、メッシュ何かのリソースの共有を意識したオブジェクト構成にするほうが良かったり、
考慮するところが多いけど、そういった中でできるだけ適切な妥協点を探っていくのがおもしろすぎる。

まだ手探りなところが多いけど、それなりに動くものがキレイな設計で実現できるようやってみる。
545デフォルトの名無しさん:2010/04/30(金) 12:39:54
もうあれだ、作品作らないでエンジン作って提供したらいいんじゃね?
546デフォルトの名無しさん:2010/04/30(金) 13:19:55
D3DXFONTを使って
FPSのフォント表示をしてみたのですが,
60FPSでコマ落ちしてしまいました.

ググる限りだと,もっぱら遅いと評判なのはわかりましたが,
ここまで遅いものなのでしょうか?
547542:2010/04/30(金) 14:18:42
>>545
エンジン提供できるレベルになれたらうれしいなぁ・・・
それぐらいを目標にしてみる。
548デフォルトの名無しさん:2010/04/30(金) 14:30:30
>>546

以前フレームごとにフォントを生成して遅くなっていたケースを見たが、
どうだろうか?
549デフォルトの名無しさん:2010/04/30(金) 14:34:53
fpsを表示するくらいで60fpsを下回るのは明らかにおかしいな。
D3DXFontはそこまで酷いもんじゃない。
550デフォルトの名無しさん:2010/04/30(金) 14:40:12
フォント表示で始めてフレームレート表示したのに遅くなったとか分かるの?

単純に垂直同期してるってことは無いよな
551デフォルトの名無しさん:2010/04/30(金) 15:16:45
536 537 回答ありがとうございます。

C++・DIRECTX・win32APIは初めてさわるので手探り状態です・・・。
背景を透過というのはDirectxの作画結果の透過に成功したのでしょうか?

directx>DIB>ウィンドウに送る部分までは出来たので
今動かそうとしているのはDIBを半透明で表示する部分です

ウィンドウそのものが表示されない状態です

void UpdateLayeredImage( HWND hwnd, HBITMAP hbmp, int x, int y )
{
HDC hdcScreen = ::GetDC( NULL );
HDC hdcMemory = ::CreateCompatibleDC( hdcScreen );

SelectObject( hdcMemory, hbmp );

BLENDFUNCTION bf = { AC_SRC_OVER, 0, 0xff, AC_SRC_ALPHA };


int ret = UpdateLayeredWindow( hWnd, NULL, NULL, NULL, NULL,
NULL, 0, &bf, 0);

assert( ret );

::DeleteDC( hdcMemory );
::ReleaseDC( NULL, hdcScreen );
}
552デフォルトの名無しさん:2010/04/30(金) 15:30:20
>UpdateLayeredWindow( hWnd, NULL, NULL, NULL, NULL,NULL, 0, &bf, 0);
この引数と直前にやっている処理がかみ合っていないことに気がつかない時点でどうしようもない。
553デフォルトの名無しさん:2010/04/30(金) 15:46:50
>>551
ウィンドウそのものが表示されないって・・ とりあえず3ヶ月も時間無為に過ごしたのなら
あとちょっと2日くらい集中して、まずはこれを全部消化してみるといい。

http://wisdom.sakura.ne.jp/system/winapi/win32/index.html

今だけだ。とりあえず全部消化してみて、その後 MSDN・・・ は日本語版はクソだけど関数の仕様を追いかけろ。
多分、DirectXとか派手な方にばかり気がいってて基本的な事がおろそかになり過ぎてる。
なので簡単な事が理解出来ない。 それじゃ多分、自分自身がこれからもずっと辛いはず。 がんばれ
554デフォルトの名無しさん:2010/04/30(金) 15:51:53
>>553
ウィンドウズプログラム始めたばかりのとき、そのサイトにはたいへんお世話になった。
今DirectXプログラムを組めるのも、このサイトで得たウィンドウズプログラミングの基本あってのこと。
感謝、感謝。

というわけで、>>553のサイトはオススメよ。
555デフォルトの名無しさん:2010/04/30(金) 16:49:50
>>550
言葉足らずでしたが,フォント表示から始めてるわけじゃないです.
レンダリングまわりは出来てます.

>>549
おかしいですよね..;

レス拝見して冷静になってみて,
色々コメントアウトしてみた試したところ,
(デバイス)->Present()を,
メッシュの描画とテキストの描画で2回呼んでしまっていて,
それが原因で遅くなっていたようです.
有り難うございました;
556デフォルトの名無しさん:2010/04/30(金) 17:20:20
>>551
まと外してるかもだけど、こういうのもあるよ。
ttp://yokohama.cool.ne.jp/chokuto/urawaza/windowrgn.html
557デフォルトの名無しさん:2010/04/30(金) 17:27:58
>>556
HSPだった。orz
同じようなことはWINAPIでもできるはずなんだが見当たらんなぁ・・・。
558デフォルトの名無しさん:2010/04/30(金) 17:40:14
>>556-557だが、やっぱ外してたので忘れてくれ。すまん!!!!!orz
559デフォルトの名無しさん:2010/04/30(金) 17:40:22
>>557
WIN32でできるはずなのに見当たらんって、それ考え方が違うからじゃね
出来ない訳ないじゃない。

ヒント: そのサイトにあるそのライブラリの中の処理は、きっと中でカラーキーを持った画像を持っている。

560デフォルトの名無しさん:2010/04/30(金) 17:55:54
こういうサイトを見つけた。結構細かく書いてあるきがするから、どうだろう??
ttp://www.yoshibaworks.com/ayacy/inasoft/wpt/ulw.html

>>559
悔い改めます。Orz
561デフォルトの名無しさん:2010/04/30(金) 18:01:52
552,553 回答ありがとうございます。

>>552
ですよね。どうやればかみ合うかよくわからない状態です

>>553
CreateWindowEXにレイヤードを設定しなければ
普通に表示はされるんですよね・・・謎です。

ありがとうございます。
しばらく保留にしてHPの内容やってみますね
562デフォルトの名無しさん:2010/04/30(金) 18:08:13
なんでドキュメントのUpdateLayeredWindowの説明読まないの?
563デフォルトの名無しさん:2010/04/30(金) 20:15:36
読んだお
564デフォルトの名無しさん:2010/05/01(土) 01:35:23
DirectX Viewerでfxファイルを開くことが出来ますが有用な使い方はあるのでしょうか。
パラメータの受け渡しが出来ないので複雑なものは見れないでしょうし、
サンプルのファイルすら開いたところで何を見ていいのか分かりません。
場合によっては白い球体のまま・・
565デフォルトの名無しさん:2010/05/01(土) 01:51:11
あれってそのPCでDirectXが動作するかどうかのチェックする程度のものじゃないのか
566デフォルトの名無しさん:2010/05/01(土) 03:36:26
DirectXUtilitiesに含まれる全てのツールは
バイナリだけでなくソースもサンプルの中に含まれている
後は分かるな?
567デフォルトの名無しさん:2010/05/01(土) 04:00:18
D3DXLibってソース公開しないのはなんでだ
568デフォルトの名無しさん:2010/05/01(土) 04:32:03
中身ほとんどアセンブラだけどな
569デフォルトの名無しさん:2010/05/01(土) 12:29:12
なんらかのライセンスに触れた場合を想定してるんじゃね?とゲスパーしてみる。
570デフォルトの名無しさん:2010/05/01(土) 13:07:21
でも別にたいしたことやってなさそうな気がするけども、、、
571デフォルトの名無しさん:2010/05/01(土) 13:17:19
すみません。
影やエフェクト表現の為に、地面すれすれに半透明テクスチャを貼る別ポリゴンを作りたいのですが、
必要な元(地形)ポリゴンを抜け目なく取得する良い方法はないでしょうか・・?
できれば詳しい解説のあるサイトを教えて頂けますと幸いです・・orz
572デフォルトの名無しさん:2010/05/01(土) 14:25:11
Directx11のD3DXVECTOR3って無いんですか
573デフォルトの名無しさん:2010/05/01(土) 14:49:51

>>571
何がやりたいのか意味不明
○影なら4角形の板ポリを足下に置くだけだ
574デフォルトの名無しさん:2010/05/01(土) 14:57:30
>>571
>必要な元(地形)ポリゴンを抜け目なく取得する良い方法
が世界のx,zを決めると、そのポリゴンの高さを取得?
と解釈するなら
ttp://marupeke296.com/COL_3D_No8_HightOfFloor.html
ここにいくつかの方法が


FindVerticesOnPoly←これをグーグルで入れると
(DirectX逆引き大全500の極意、Directx必携の自作関数の名前)

一応サンプルが見れるようだ
レイとメッシュの交点を調べている

しかしながら俺も初心者なのでもっといいやり方があるような
気もするので、あったら申し訳ない

地形が複雑だと丸影なんかだと不自然にめり込んだり
するような気もするので、
決め打ちで問題ないとも、directxシェーダプログラミングブック
に書いてあった。
575デフォルトの名無しさん:2010/05/01(土) 15:02:20
デコボコした地形に貼り付けたいならシャドウマップを応用すればできそう
平らな地形でいいなら地面チョイ上にポリゴンを置くだけだな
576デフォルトの名無しさん:2010/05/01(土) 15:36:41
>デコボコした地形に貼り付けたいなら
投影テクスチャだろ普通
577デフォルトの名無しさん:2010/05/01(土) 16:10:23
普通、広いフィールドで投影テクスチャの影を付ける場合、
フィールドのマテリアル全てをマルチテクスチャにするの?
578デフォルトの名無しさん:2010/05/01(土) 16:56:56
>>577
まあ普通マルチパスだろう
1回目:普通にフィールド描画
2回目:影を落としたいフィールドのみ投影テクスチャで描画
579デフォルトの名無しさん:2010/05/01(土) 17:08:42
地形が単一メッシュで構成されてるならそれで良いと思うが
580デフォルトの名無しさん:2010/05/01(土) 19:21:47
レイヤードで作画背景が透過できました。
レスくれた方ありがとうございました
581デフォルトの名無しさん:2010/05/01(土) 19:55:54
投影テクスチャでキャラが複数の場合、キャラの数だけ地形を描画するのは馬鹿っぽいので
影の落ちる位置のポリゴンを切り出したりするの? 表示用のポリゴンに対して当たり判定とか
582デフォルトの名無しさん:2010/05/02(日) 11:44:33
>>581
影はキャラ単位で管理すると難しいので、
見た目は落ちるが、光源単位で管理するのがよいと思う。

例えばスポットライトだとすると、スポットライトの形状から
視錘台を作り、キャラ群とフィールドをクリッピングして抽出する。

次に抽出したキャラ群のみライト視錘台で描画し、影用の投影テクスチャを作成する。

次に普通にフィールドとキャラ群を描画。

次に抽出したフィールドのみ投影テクスチャで描画。

ちなみにシャドウマップも同じような方法なので
これをやるなら直接シャドウマップに行ってもいいと思う。
583デフォルトの名無しさん:2010/05/02(日) 23:41:52
今、DirectX9で HLSLの実験を始めてるんだが・・・ MSDNに騙された

D3DXCreateEffectFromFile に渡せるフラグの値を確認したかったんだけど、この記事には

http://msdn.microsoft.com/ja-jp/library/cc372270.aspx
>Flags
>[in] D3DXSHADER で識別されるコンパイル オプション。

としか書いていないんだが、SDKのSampleでは違う値がセットされていた。
???と思い、さらにググった所、一見似た格好のMSDN内別ページを発見

http://msdn.microsoft.com/ja-jp/library/bb172768(VS.85).aspx

該当箇所が大分変更されていた。 ・・・いや本当、関連情報、別リリース版へのリンクくらい付けとこうよと思った。
584デフォルトの名無しさん:2010/05/03(月) 00:05:39
>>583
最近はマシになってるものの、日本語版のドキュメントは翻訳抜けとか情報が古い箇所が散見されるんで
英語版のMSDNを見るクセをつけた方がハマらなくて済むぞ
585デフォルトの名無しさん:2010/05/03(月) 00:35:39
>>583
むしろ上のリンクはわざわざ「過去のバージョン」から辿った先にある
ドキュメントで、そんなところを参照する方が悪い希ガス。
586デフォルトの名無しさん:2010/05/03(月) 01:00:38
自分もこれに昔ハマったw
同じようなのでも二つあるから注意w
587デフォルトの名無しさん:2010/05/03(月) 01:03:42
583氏はわざわざ過去のバージョンからたどったわけじゃなくて、
ググったらたまたまたどり着いちゃっただけでしょ。
関数名で検索すると過去のバージョンがトップに出る確率が高いんだよね。
588デフォルトの名無しさん:2010/05/03(月) 10:32:54
だめだ、どうやっても DirectX9 で頂点シェーダが使えない何も表示されない
ピクセルシェーダは正常で、HLSLに問題が無い事は FX Composer でも動作確認して、C++側各所のHRESULTも確認済み。
しかし頂点シェーダを使おうとすると何も表示されない。
・・・もう少し自力で調べて整理してから、質問します
589デフォルトの名無しさん:2010/05/03(月) 10:39:51
なぜPIXを使わないのかと小一時間
590デフォルトの名無しさん:2010/05/03(月) 10:52:46
PIX?
ちなみにHLSL側の問題じゃなくて、HLSLコードはこれだけなので、
http://codepad.org/LnMY4hoO

多分C++側の問題。何かを忘れてるか、知らないか、勘違いしてると思うので今整理中です
591デフォルトの名無しさん:2010/05/03(月) 10:53:27
ちなみに、シェーダバージョン2.0 で動作する事は、他のサンプルなどでも確認済み
592デフォルトの名無しさん:2010/05/03(月) 10:58:17
COLOR0の値を頂点シェーダから渡してないから0, 0, 0, 0が出力されて
黒い背景に紛れたか、アルファテストかなんかでクリップされて、
表示されてないように見えるだけ、に100ペリカ
593デフォルトの名無しさん:2010/05/03(月) 11:21:57
ほんとだ。
頂点カラーを頂点シェーダからピクセルシェーダに渡してないじゃん。
594588:2010/05/03(月) 11:29:50
すみません、コピペする際にちょっと削り過ぎました。
http://codepad.org/LAUgfxiv

実際にはここに他に diffuse、ambient などの値も渡しています。
しかし↑これであっても状況は同じ。 もうちょい追いかけます
595588:2010/05/03(月) 11:30:51
596デフォルトの名無しさん:2010/05/03(月) 11:47:30
PIXでワイヤーフレーム表示されてる?
597デフォルトの名無しさん:2010/05/03(月) 11:56:29
>>588
>float4 psProc(VSOut In) : COLOR {
PSの入力にVSOutは駄目じゃね?
598597:2010/05/03(月) 12:01:04
>>597は間違いのようだ
失礼すまんこかぱっく
599588:2010/05/03(月) 12:20:56
状況整理します。環境は XPSP2/Geforce8800GT/DirectX9.0c November2008/VC++2008Express
目的は、HLSLでピクセルシェーダだけでなく、頂点シェーダを使いたいだけ。

状況:
D3DCAPS9 caps9;
GetDeviceCaps(0, D3DDEVTYPE_HAL, &caps9);
caps9.VertexShaderVersion >= D3DVS_VERSION(2,0) はTRUEで、サポートはされている状態。

D3DVERTEXELEMENT9 で頂点情報をセットし、CreateVertexDeclaration で
LPDIRECT3DVERTEXDECLARATION9 を取得。HRESULTは S_OK

その後、D3DXCreateEffectFromFile でくだんの HLSLファイルをロード、これも S_OK。
LPD3DXEFFECT を取得し、D3DXPARAMETER_DESC でHLSLのグローバル変数のハンドル取得、

レンダ処理のタイミングで LPD3DXEFFECT::Setほげ系も全て全て S_OK。
SetVertexDeclaration 先の頂点定義を渡す、これも S_OK

BeginSceneの後、Begin(&pass,0); BeginPass(0) 〜 EndPass(0); End(); EndScene() まで全て S_OK

この状態で、HLSL内の VertexShader をコメントアウトした時だけとりあえず表示はされます。
HLSLそのものは、念のため PIXでもFXComposerでも確認しましたが正常に動作しています。

あと気になっているのは・・・
・CreateVertexBuffer のタイミングで、FVFの頂点情報の指定を D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1
 のように指定する必要があるか無いか。(両方試しましたが状況は変わりませんでした)
・DrawPrimitiveでなくDrawIndexedPrimitiveにしているのですがこれで問題が無いか。
・SetVertexDeclaration を行うタイミングはレンダ処理のタイミングに行っていますがこれで問題が無いか。
・HLSLを使う際には SetFVF は実行しないようにしていますが、これでいいのか。
 (これも両方試して状況が変わらない事を確認していますが、何かの兼ね合いがあったりしないか)
・SetMaterial でマテリアルを設定しているのですが、これが不要か否か

などです。いずれも、HRESULTの戻り値でエラーが出ていない事は執拗に確認済みです。長くなってすみません
600デフォルトの名無しさん:2010/05/03(月) 12:35:33
VertexShader無効にしても動くってことは、SetTransform使ってたりしない?
頂点シェーダにちゃんと定数として行列渡してる?
601588:2010/05/03(月) 12:44:09
あ、あとHLSL側、エフェクト->SetMatrix(ハンドル, 行列); で渡す行列として、

デバイス->SetTransform(D3DTS_WORLD, &matWorld);
デバイス->SetTransform(D3DTS_VIEW, &matView);
デバイス->SetTransform(D3DTS_PROJECTION, &matProject);

としている3つの行列をかけた物を渡しているのですが、これで問題無いでしょうか。
※つまり、デバイスにもセット、HLSLにもセットと二重に行列を渡しているような状態。

他、デバイス->SetRenderState の中で、VertexShader を使う際にはセットしてはいけない物など
何かありますでしょうか・・・。
602588:2010/05/03(月) 12:45:27
あ、リロードしてなかった・・・

>>600
まさにそれ、急いで確認します!
603デフォルトの名無しさん:2010/05/03(月) 12:49:02
多重にセットしてもSetTransformは無視されるだけだから問題ないと思うけど。
行列をかける順番が間違ってるとか?
604588:2010/05/03(月) 13:02:19
ええと



なんかすみません。
なんて謝っていいのかわかりません
605588:2010/05/03(月) 13:08:45
一応、結果を書いておくと。動きました。 結論から言うと、自分の凡ミスでした。

>>603 さんのレスを見て、「いやいやww 間違ってないですよww」 と思いながら、
自前のカメラ管理クラスから行列取り出す部分を追いかけ、>>600 さんから頂いた、

>頂点シェーダにちゃんと定数として行列渡してる?

のレスを見て気づきました。
要は、メンバ関数の中でかけて作った自動変数の行列のポインタを投げていたっていう最低なオチです。
ちょっと天気もいいので散歩してきます。 ご迷惑おかけしました。
こんなうんこみたいな事例でも何かの反面になれば幸いです。 ありがとうございました。
606デフォルトの名無しさん:2010/05/03(月) 13:13:22
>>605
氏ね
607デフォルトの名無しさん:2010/05/03(月) 13:15:20
まぁまぁw
608デフォルトの名無しさん:2010/05/03(月) 13:15:33
マジでクソだなこいつ
609デフォルトの名無しさん:2010/05/03(月) 13:16:58
まぁここ初心者質問スレだし、いんじゃね?こういう部分にも気を配れっていう反面教師って事でw
610デフォルトの名無しさん:2010/05/03(月) 13:17:57
コードも見ずにそんなミス指摘できねえよw
611デフォルトの名無しさん:2010/05/03(月) 13:21:30
だよなwwワロタww でも逆にその状態で推理してた数名は凄いなww
俺なんか 588が書いてる内容の半分も理解できない。ググってもなんかよくわからない
612デフォルトの名無しさん:2010/05/03(月) 13:28:30
このスレはツワモノ揃いだからね。
DirectXに対する知識、経験値の深さが違う。
613デフォルトの名無しさん:2010/05/03(月) 15:35:49
高度に経験を積んだプログラマーはエスパーと見分けがつかないからな。
でも上のみたいな例をを見るとDirectX触るの嫌だな
614デフォルトの名無しさん:2010/05/03(月) 18:53:16
ここで話題になる内容は精々中程度のレベル
それは答えている奴が最もわかっていると思う
別にそれが悪いと言っているんじゃないんであしからず
615デフォルトの名無しさん:2010/05/03(月) 20:13:55
「高度に経験を積んだプログラマーはエスパーと見分けがつかない」

ツボに入った、今世紀最大の格言の栄誉を送る
616デフォルトの名無しさん:2010/05/03(月) 20:20:08
これからもこのスレを支えてくれる人たちだ・・・
617デフォルトの名無しさん:2010/05/03(月) 20:26:02
童貞のまま30歳オーバー+
高度に経験を積んだプログラマーはどうなりますか?
618デフォルトの名無しさん:2010/05/03(月) 20:28:54
魔法のようなシェーダが書けるようになります。
619デフォルトの名無しさん:2010/05/03(月) 20:41:39
はいはいウィザードウィザード
620デフォルトの名無しさん:2010/05/03(月) 20:42:54
つまりウィザードなんてなくても魔法のようなコードが書けます、って事ですね
621デフォルトの名無しさん:2010/05/03(月) 20:44:26
誰うま
622デフォルトの名無しさん:2010/05/04(火) 03:45:24
プロのグラマーでいいから経験ぐらい積んどけ
623デフォルトの名無しさん:2010/05/04(火) 03:48:44
審議中........
624デフォルトの名無しさん:2010/05/04(火) 04:40:11
         
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧   
( ´・ω) U) ( つと ノ(ω・` )   
| U (  ´・) (・`  ) と ノ   
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'  

625デフォルトの名無しさん:2010/05/04(火) 06:11:13
【結果発表】
パッ   パッ   パッ    パッ   パッ    パッ
 [つり]  [ヲタ]  [池沼]  [厨房]  [氏ね]  [終了] 
  ‖∧∧  ‖∧∧ ‖∧,,∧ ‖∧,,∧ ‖∧∧  ‖,∧∧
  ∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)
   (    ). (    ). (    ) (    ) (    ) (    )
   `u-u´  `u-u´   `u-u´  `u-u´  `u-u´  `u-u
626デフォルトの名無しさん:2010/05/05(水) 22:35:38
BGMを流したいんですが,
DirectMusicを使うんでしょうか?
DirectShowを使うんでしょうか?
627デフォルトの名無しさん:2010/05/05(水) 22:40:42
その問いだけなら、「好きな方」って答えしか出てこない
628デフォルトの名無しさん:2010/05/05(水) 22:46:41
自分はXAudio2使ってるよ。
簡単で分かり易かったしオススメ。
MSも今後はXAudio2の使用を勧めてなかったっけ??
629デフォルトの名無しさん:2010/05/05(水) 23:28:42
横からなんだけど、XAudio2って触った事無かったんだが
http://msdn.microsoft.com/ja-jp/library/cc308014(v=VS.85).aspx

なんか楽しそう。俺もちょっと何か作ってみる
630デフォルトの名無しさん:2010/05/05(水) 23:30:32
一々報告せんでもいい
ここはお前の日記帳じゃない
631デフォルトの名無しさん:2010/05/05(水) 23:34:24
いやお前のレスの方がいらない
632628:2010/05/05(水) 23:37:57
昔DirectSoundで挫折した(プログラミングに不慣れなところもあったけど)ので、音方面は戦々恐々だったけど、
XAudio2を使ってすんなり鳴らせて拍子抜けだったw
SEみたいに短い音と、BGMのような長い音とで使い分けがいることに注意するくらいかな。
とりあえずオススメ。
633デフォルトの名無しさん:2010/05/05(水) 23:45:49
あの時代のDirectXオブジェクトは、
COMコーポネントの流儀に沿うように作っていたから
無駄に複雑なんだよな。
D3D8ぐらいからキレてシンプルに作るようになったw
634デフォルトの名無しさん:2010/05/06(木) 00:11:49
たしかDirectXはCOMでありながら、だんだんとCOMっぽくなくなっていったそうだねw

>キレてシンプルに作るようになったw
キレたのかw
635デフォルトの名無しさん:2010/05/06(木) 00:22:31
DirectShowだけはいまだにコムコムしてるけど、
だいぶ前にDirectX SDKから外れちゃったしね。
636デフォルトの名無しさん:2010/05/06(木) 00:29:21
DirectShowはむしろCOMであることが活きている。
637デフォルトの名無しさん:2010/05/06(木) 00:36:56
C言語の基本文法とWin32APIの基本事項を覚えただけで
「俺ってすごくね?」と舞い上がってしまった後に、DirectShowで呆然としたのが懐かしいw
638デフォルトの名無しさん:2010/05/06(木) 01:43:24
XAudio2知らなかったです.
聞いて良かったです.
ありがとうございました.
639デフォルトの名無しさん:2010/05/06(木) 01:44:36
がんばれよ!
640デフォルトの名無しさん:2010/05/06(木) 01:56:22
パーティクルに関して詳しく載ってるサイトなり書籍なりありますでしょうか?
641デフォルトの名無しさん:2010/05/06(木) 02:28:23
>>640
ないない
642デフォルトの名無しさん:2010/05/06(木) 12:37:02
>>640
>パーティクルに関して詳しく

詳しくって、どこからどこまでの話?
何をやろうとしていて、何がわからないのか書かないと
>>641 みたいなレスしか出来ないと思うぞw
643デフォルトの名無しさん:2010/05/06(木) 12:45:29
ごめん、XAudio2 のヘッダとスタティックリンクライブラリどこにあるの?・・・ww
とりあえずここを見ると、
http://msdn.microsoft.com/ja-jp/library/bb694515(v=VS.85).aspx

>ヘッダー: XAudio2.h 宣言
>ライブラリ: XAudio2.lib 内容

とあるんだけど自分の環境、DirectX SDK (November 2008)\Lib\x86 以下には
X3DAudio.lib しかそれらしい物が無い。 もしかしてSDKバージョンのせい?
あるいはひょっとして・・・ XNA SDK インストールしないと無い?
644643:2010/05/06(木) 13:07:36
すいません、自己解決しました。
http://forums.xna.com/forums/t/5813.aspx

正解は、
×ライブラリ: XAudio2.lib
○ライブラリ: XAPOBase.lib

実際に上記ライブラリをリンカに指定してテストコードが正常に動いた事も確認しました。
ちなみにこの件については英語版MSDNの方も間違ってる模様。

645デフォルトの名無しさん:2010/05/06(木) 14:33:28
>>573-579 >>581-582
遅れましたが、ありがとうございます。
やはり欲しい物の形としては、レイを飛ばしまくってポリゴン情報抜いて
実装にルールを付けて自分でなんとかする・・しかなさそうですね。
その他の影についての話も参考になりました。ありがとうございました。
646デフォルトの名無しさん:2010/05/06(木) 14:44:34
すみません。変に機能を別けたり纏めたりしてる内に、
1フレーム内で、同じテクスチャを何度も何度もLockRect〜UnlockRectしまくる形になったのですが、
これは重く無駄な事をやっているのでしょうか?

もし重く無駄な事をやっているのでしたら、
・フレーム毎に全テクスチャをLockRectし、テクスチャ操作が終ったら全てUnlockRectする。
という形に全体を書き直そうと思うのですが、もっと良い方法が有ったりしますでしょうか?
647デフォルトの名無しさん:2010/05/06(木) 14:56:33
無駄かどうかはそれで何がやりたいかによるかなぁ
648デフォルトの名無しさん:2010/05/06(木) 16:03:21
>>646
シェーダを使う等の方法でLockを無くせるなら、Lock無しの方がいい。

どうしてもLockが必要なら、D3DLOCK_DISCARDが使えないか検討する。
D3DLOCK_DISCARDを使うとLockした瞬間にテクスチャの内容は全て
無効になるので、必然的に1フレームに1回しかLockできなくなる。

D3DLOCK_DISCARDが使えないケースなら、D3DPOOL_SYSTEMMEMの
テクスチャに対して読み書きして、UpdateTextureで描画用テクスチャを更新。
649デフォルトの名無しさん:2010/05/06(木) 16:35:51
>>646
「読み」「書き」どっちのためのロックなのか教えてくだされ
650デフォルトの名無しさん:2010/05/06(木) 20:43:14
XAudioって対応形式と互換性に難ありじゃなかったっけ?
あとはサンプルの少なさ・・・出来る人はいいんだろうけどわしみたいな初心者には(´・ω・)
そこらへんが改善されればなー
651646:2010/05/06(木) 23:18:34
>>647-649
状況による質問だったのですね。書き込みメインだったのですが
D3DLOCK_DISCARDは参考にした資料そのままに使っておりました。
それでLock〜Unlockがハッキリしてたのですね。
今回自分で言ってた通りに全体を書き換え、FPSが明らかにマシになってくれました。
シェーダを使う方法で無しにできるならその方が良い・・ いつかその意味を理解し
より効率的に組めるようになりたく思います。 ご助言、ありがとうございました。
652デフォルトの名無しさん:2010/05/07(金) 04:12:38
IDirectSoundBuffer8インターフェースの
GetCurrentPositionメソッドで取得した再生位置が
1秒分(44100*2ch*2Byte=176400Byte)ほどずれることがあるんですけど
どなたか、原因についてご存知ありませんか?
ぐぐってもそれらしいサイトが引っかからなくって・・・

Playしてからすぐ(だいたい10ms以内)にGetCurrentPositionすると割と起こります
起こったり起こらなかったりするので原因がよくわからないんです
653デフォルトの名無しさん:2010/05/07(金) 04:35:21
何故ずれてると判断したのかkwsk
654デフォルトの名無しさん:2010/05/07(金) 05:51:27
バッファへの書き込みをマルチスレッドイベントでやってて
タイマーの精度でずれてるだけじゃねぇの?
そのバッファの長さが1秒だったりしてないか?
655デフォルトの名無しさん:2010/05/07(金) 14:44:22
>>654
実はDXライブラリってライブラリ使ってまして
バッファの長さがどれくらいかとかは良く知らないんです・・・
一応wavを全部メモリに読み込んでから再生させるような処理にしてはいるんですが
中身でどういう実装のされ方をしてるのかまでは追えてません
そのライブラリの再生位置取得関数の中身を見たら
IDirectSoundBuffer->GetCurrentPositionで取得した結果を返す処理だったんで
もしや、そういう既知の事象がDirectSound関連であるかな〜と思って
こちらに質問してみたわけなんです
ちょっとスレ違いだったかもしれません

>>653
以下のような感じのテストコードを実行してみたら
>for(int i=0;i<30;i++){
> // wav再生
> // iミリ秒停止
> // IDirectSoundBuffer->GetCurrentPositionの結果を返す関数
> // wav停止
> // 結果表示( i, pos )
>}
こんな感じの結果が出るんす
>0, 196
>1, 0
>2,, 12
>3, 548
>4, 720
>5, 176404
>6, 176404
>7, 892
>8, 364
>9, 176512
>10, 1600
656デフォルトの名無しさん:2010/05/07(金) 15:09:15
>>655
DirectSoundのことはあまり詳しくないから外してるかもしれないけど、

http://msdn.microsoft.com/ja-jp/library/cc370454.aspx
>再生カーソルの位置の報告をできるだけ正確に受けるには、セカンダリ バッファを作成する際に
>DSBCAPS_GETCURRENTPOSITION2 フラグを指定しなければならない。

これ関係ない?
657デフォルトの名無しさん:2010/05/07(金) 15:17:08
>>655
iミリ秒停止って、ちゃんとiミリ秒か確認してる?
まさかSleep(i)とかしてないよね?
658デフォルトの名無しさん:2010/05/07(金) 20:48:08
>>655
ところで、for ループの中で再生と停止を繰り返してるけど、
それ再生のタイミングで必ずカレントポジションがリセットされてる事は確認済みなの?
そんな爆速で繰り返して無事にリセットされてるの? ・・・って、DirectSound系はあんまり詳しくないけども

659デフォルトの名無しさん:2010/05/07(金) 20:51:47
あ、ごめん >>658 だけど変な事言った。 >>658 はスルーで
660デフォルトの名無しさん:2010/05/07(金) 21:06:42
でも、そのテストの仕方はどうかと思う
661デフォルトの名無しさん:2010/05/07(金) 23:31:56
いまさらだけどDirectX SDK (November 2008)って古すぎて話になってないんだが。
662デフォルトの名無しさん:2010/05/07(金) 23:47:16
>>661
どの話をしてて、どこがどう話になってない? なんか正解知ってるなら書いてくれ
663652:2010/05/08(土) 07:36:15
>>656
ライブラリ内部の処理を追ってみましたが
セカンダリバッファを作る時にDSBCAPS_GETCURRENTPOSITION2フラグを指定する場合と
指定しない場合があるようです。ただ、実際の処理でどちらが選択されているのかが
まだよくわからないんで、それが原因なのかはなんとも・・・

>>657
ライブラリで用意された指定ミリ秒停止する関数を使用してます
内部の処理を見るとLARGE_INTEGERとかQueryPerformanceCounter使ってるんで
ミリ秒以上の精度で、ミリ秒停止する処理を実装しているみたいです

>>660
まじすか、どんな感じにするのが普通なんでしょうか・・・
664デフォルトの名無しさん:2010/05/08(土) 07:43:08
そもそもこういう薄いラッパライブラリとか使う意味ってあるの?
どっちみちDirectX直接だって関数呼び出し並べるだけなんだから、
試しに自前で実装してみたら?
665デフォルトの名無しさん:2010/05/08(土) 08:41:42
ぶっちゃけその条件だとライブラリ製作者に聞けとしか言いようが無い

GetCurrentPositionが絶対に成功してる保証が無い
タイマーが正確だという保証が無い
Windowsに制御を戻さないforループ内でのテストの信憑性が無い

どうしてもというなら
話はその辺を全部検証してきたからだな
666デフォルトの名無しさん:2010/05/08(土) 21:14:35
基本的なことですが、分かっていないので教えてください。

WIN32APIで描画する場合、デバイスコンテキストを取得し、LineTo等で描画をおこなうんですが
DirectXの方が高速といわれるのはなぜですか?
667デフォルトの名無しさん:2010/05/08(土) 21:26:25
GPUでやるかCPUでやるかの違い
668デフォルトの名無しさん:2010/05/08(土) 21:28:04
DirectXのシェーダープログラムについて質問ってここでしていいの?
669デフォルトの名無しさん:2010/05/08(土) 21:39:18
かまわん
670デフォルトの名無しさん:2010/05/08(土) 21:50:36
>>667
なぜ、GPUでやったほうが速いのですか?
671デフォルトの名無しさん:2010/05/08(土) 21:52:51
>>670
何故だと思う?
予想してみよう
672デフォルトの名無しさん:2010/05/08(土) 21:54:32
結局、深く突っ込まれると、答えれないのねw
673デフォルトの名無しさん:2010/05/08(土) 21:58:57
struct VS_OUTPUT {
 float4 Position:POSITION;
 float4 Diffuse:COLOR0;
 float3 TextureCoord0:TEXCOORD0;
};
struct PS_OUTPUT{
float4 Color0 :COLOR0;
};

VS_OUTPUT Sky_Sphere_VShader(VS_VERTEXINPUT In){
VS_OUTPUT Out = (VS_OUTPUT)0;
Out.Position = mul(In.Position, WVPMat);
Out.TextureCoord0 = In.TextureCoord0;
Out.TextureCoord0 = In.TextureCoord0;
return Out;
}
PS_OUTPUT Sky_Sphere_PShader(VS_OUTPUT In){
PS_OUTPUT outdata = (PS_OUTPUT)0;
float4 texel = tex2D(NormalSmp, In.TextureCoord0);
float len = saturate(In.Position.x);// ←これだとエラー
float len = saturate(In.Diffuse.x);// ←これだと通る
texel.r = len;
outdata.Color0 = texel;
return outdata;
}
Sky_Sphere_PShaderの所でPositionから値を入れるとエラーでるんですけど何ででしょう?
invalid ps_2_0 input semantic"POSITION"
674デフォルトの名無しさん:2010/05/08(土) 22:08:13
まんまの意味だな。POSITIONセマンティックはPSの入力として無効。
TEXCOORDとかに保存すれば一応PSでも参照できる。
もちろん補完された値だが。
675デフォルトの名無しさん:2010/05/08(土) 22:21:50
VS出力の構造体をそのままPSの入力に流用するのは常套手段だけど、
POSITIONとかFOGとかいくつかのセマンティックはPS側では利用できないから注意しないと駄目だね。
676デフォルトの名無しさん:2010/05/08(土) 22:23:34
入力/出力で使えるセマンティクスのリストってMSDNにあるんだけど
>>673 は見てないのか
677デフォルトの名無しさん:2010/05/08(土) 22:26:32
>>670
671じゃないが、単純に一人で何もかも順番に実行するより、
物理的に他人の頭借りて平行して作業すりゃ早いだろ?って事
で、実際にGPU側で仕上がった内容を取得だけして処理する
678デフォルトの名無しさん:2010/05/08(土) 22:28:59
>>677
あの〜、抽象的ではなく、具体的に教えて欲しいです。
679デフォルトの名無しさん:2010/05/08(土) 22:30:17
>>678
お前質問者じゃないだろ
680673:2010/05/08(土) 22:30:43
入力と出力とで使えないセマンティクスがあるのですね
色々そこを中心に調べて見ます
ありがとうございました
681デフォルトの名無しさん:2010/05/08(土) 22:30:58
682デフォルトの名無しさん:2010/05/08(土) 22:33:30
>>677
単純にCPUとGPUでは処理能力が違う。積和算で見ると100倍ほど異なる。
(Wikipedia:FLOPS)
683デフォルトの名無しさん:2010/05/08(土) 22:41:04
結局、ほとんど奴は、理解できていなくてなんとく使っているんですね
GPUの詳細まで知り尽くしてるわけではないみたいだから
その程度の奴に聞いても仕方なさそうw
684デフォルトの名無しさん:2010/05/08(土) 22:42:38
>>678 逃げるなよw
685デフォルトの名無しさん:2010/05/08(土) 22:44:32
>>684
おめーがだよw
686デフォルトの名無しさん:2010/05/08(土) 22:45:46
>>683
その程度の奴にって、お前自分が何を言ってるのかわかってないだろw
そんな事もわからずにレスしちゃってるんですねw
687デフォルトの名無しさん:2010/05/08(土) 22:47:31
ある程度は知っておいたほうがイイとは思うが、ハードウェアの回路、クロックレベルで知る必要もないと思うよ。(使う側は)
そういった詳細を隠蔽するためにDirectXAPIがあるわけだし。
688デフォルトの名無しさん:2010/05/08(土) 22:50:11
>>687
確かにそうですが、
なぜ、DirectXを使うの?と質問されて、安易に「GPUで処理するから」としか
答えれないのもどうかと思いませんか?
689デフォルトの名無しさん:2010/05/08(土) 22:51:48
>>681の読んだ?感想聞かせてくれ
690デフォルトの名無しさん:2010/05/08(土) 22:53:42
>>689
ただいま、読んでいます。
ただし、やはり難しいため、いろいろ調べるのに時間が掛かります
よって、自分なりに理解できるまでは安易に感想なんていえません
691デフォルトの名無しさん:2010/05/08(土) 22:57:02
>>690
そろそろ読み終わった? 
感想は?
692デフォルトの名無しさん:2010/05/08(土) 22:58:44

こういった奴、って馬鹿でしょ?
693デフォルトの名無しさん:2010/05/08(土) 22:59:14
そういう意味だと元の質問、

>WIN32APIで描画する場合、デバイスコンテキストを取得し、LineTo等で描画をおこなうんですが
>DirectXの方が高速といわれるのはなぜですか?

どこでどんな文脈で言われてるの?って話もあるんだけど。
例えばバックグランドのサーフェスに夥しい量の線を繰り返し描くような時、
そのLineを引くロジックに相当無駄があったとしたら、必ずしも 「絶対にこっちの方が高速です!」 とはならないよね
694デフォルトの名無しさん:2010/05/08(土) 23:00:23
>>690
見上げた根性だな
質問者のレベルからいってとてもすんなり理解できるとは思えんが・・・

まぁ、ここにいる大抵の連中よりはエンジニアっぽいな
695デフォルトの名無しさん:2010/05/08(土) 23:01:21
>>692
ええ〜まだ理解できないの〜?
もしかしてちょっと出来ない子?
696デフォルトの名無しさん:2010/05/08(土) 23:04:06
>>695
はい、正直できない子ですよ
あおるだけの貴方よりは出来るとは思いますけど
697デフォルトの名無しさん:2010/05/08(土) 23:06:50
プログラマはI/O、インタフェイスに対してロジックを書いていく立場だから、
例えば実際に提供されている手段(ドライバやライブラリなど)について何か記述をした時、
そこに望む成果が得られるならばそれを単に利用するだけ。

そういう意味で、例えば望む結果として、DirectXよりもwin32APIの方が良いならばそっちを使うし
逆ならば逆だし。 あと、多分一般的に高速と言われる分野としては、3DCGについては
自前でCPU側の処理としてロジックを書いてGDIに描画するよりも、
専用のハードウェアを利用して書いたほうが早い、かも、しれない。

で、試しにプログラマの立場として実際に提供されているAPIなどを使ってそれを行い、
満足行く結果が得られるなら、そこで先に進む。 何故なら、プログラマは 「何か目的があってプログラミングをする人」 だから。
なので例えば、俺は自分が使っているPC机の脚の長さが何故70cmなのかは知らないし、
なぜモニタのサイズが14inchなのかもしらない。 そんな感じ。
698デフォルトの名無しさん:2010/05/08(土) 23:10:13
鳩山みたいですねあなた
699デフォルトの名無しさん:2010/05/08(土) 23:12:50
必要でない情報ならば不要だって話がなんで鳩山なんだ。
知らないって言葉しか見えてないのか
700デフォルトの名無しさん:2010/05/08(土) 23:13:18
>>697
たとえ、どんなことであろうと、知らないなんて
恥ずかしげもなく言えるような人の意見なんてなんの意味も無い
701デフォルトの名無しさん:2010/05/08(土) 23:16:20
>>700
お前がそう思うんならそうなんだろう




お前ん中ではな
702デフォルトの名無しさん:2010/05/08(土) 23:17:23
>>700
なんで知らないって言葉を言える事が、イコールでなんの意味も無いになるの?
俺には無意味に見えるけど、それ自分の中の定義?
703デフォルトの名無しさん:2010/05/08(土) 23:20:09
知らなかったら沖縄以外に移してもいいんですかそうですか
704デフォルトの名無しさん:2010/05/08(土) 23:20:46
お前誰
705デフォルトの名無しさん:2010/05/08(土) 23:21:15
なぜかと聞いてるのに、知らないでいいなんて、話にならないですね
706デフォルトの名無しさん:2010/05/08(土) 23:21:18
>>703
え? 駄目に決まってるじゃん?
707666:2010/05/08(土) 23:22:35
わたしのために争うのはやめて><
708デフォルトの名無しさん:2010/05/08(土) 23:23:13
もう詳細とかどうでもよくてただ煽りたいだけだろw
709デフォルトの名無しさん:2010/05/08(土) 23:25:01
いいかげんなレスする奴が悪い
710デフォルトの名無しさん:2010/05/08(土) 23:26:55
そろそろいいかげんじゃない、
完璧に理解し切った感想が出てくる頃合か
711デフォルトの名無しさん:2010/05/08(土) 23:27:58
>>705
何故かと言う問いを他人に振る時、前提が曖昧なままじゃ質問にもならないですよ
712デフォルトの名無しさん:2010/05/08(土) 23:30:32
抽象的な質問に完璧な答えを求める、か・・・
出来ない以前にただの屑じゃね
713デフォルトの名無しさん:2010/05/08(土) 23:32:00
知ったかぶってる奴にはキツイ質問だろうな
正直大抵の人は答えれないと思うぞ、GPUの詳細なんて。
そこを知ろうとすることは悪くは無いが、まぁ、質問するのは無駄だな
714デフォルトの名無しさん:2010/05/08(土) 23:32:09
どこが曖昧なんだ
715デフォルトの名無しさん:2010/05/08(土) 23:33:43
後出しで曖昧な質問だったと言うのはダメだろ。
ホント鳩山みたいだ。
716デフォルトの名無しさん:2010/05/08(土) 23:37:05
>>715
いや後だしで曖昧な質問だった、と決め付けてる訳じゃなくて、
ここはプログラム板のDirectXスレなので、プログラミングする側の人間が知ってる範囲ってこのくらいで十分だから、
実際知らねーよって話じゃないの?
逆に、今コンデンサの中にどのくらいの電流が流れているかを知らないと電卓プログラムは作れませんだなんて、
そんな話は笑い話にもならないだろ?って事。 プログラム板なんだよここ
・・・ただ勿論、逆に 「そこを知らないと絶対に無理」 ならば知らない事は恥だろうし、弊害を生むだろうけど。
分業された立場の中で、目的を達成するだけだろ。全能の神じゃないんだから。 違うの?
717デフォルトの名無しさん:2010/05/08(土) 23:37:16
"鳩山みたい" とか言葉がかなり曖昧だな
718デフォルトの名無しさん:2010/05/08(土) 23:37:31
汎用計算ならCPUの方が速いです。
でも線とか絵を描くのはGPUの方が速いです。

理由は僕が阿呆だから答えられませんwww

って言えば満足するのかね。
719デフォルトの名無しさん:2010/05/08(土) 23:38:29
>>716
結局のところ、知らないんじゃんw
720デフォルトの名無しさん:2010/05/08(土) 23:38:36
質問に答えられないのなら、答えなければいいだけだろ
721デフォルトの名無しさん:2010/05/08(土) 23:39:47
>>720
同意

知ったかぶって、いい加減なレスする奴が腹立つ
722デフォルトの名無しさん:2010/05/08(土) 23:41:33
>>719
だからいいだろそれでって。そんな要点が理解できなかったら要件から設計もコードも起こせないぞw
頭悪い小学生かよまったくw
723デフォルトの名無しさん:2010/05/08(土) 23:41:36
「なぜDirecXの方が高速なのですか?」
「なぜGPUで処理する方が速いのですか?」

質問らしきものはこの二つだけなのに
なんでGPUの詳細とかお答えせなきゃならんのかw
724デフォルトの名無しさん:2010/05/08(土) 23:41:45
CPUとGPUの違い。
簡単に言えば、GPUはCPUのSSEユニットの拡張したようなやつをかなりいっぱい持ってるからそれ系の処理が得意。
逆に整数演算はすごいロスがある。

米軍は海の上に住めばいいと思うよ。日本謹製の技術で。
725デフォルトの名無しさん:2010/05/08(土) 23:42:02
質問に答えられないのなら、答えなければいいだけだろ
726デフォルトの名無しさん:2010/05/08(土) 23:42:27
>>720-721
ところで知ったかぶりのレスってどれよ
727デフォルトの名無しさん:2010/05/08(土) 23:42:37
>>718
CPUよりGPUを使った方がいいとされるのは、純粋にGPUの方が処理能力が大きいため。
ただしGPUは元々は画像処理用なので汎用で使えるわけではなく、
並列処理が行えない計算には使えない。
WindowsでGPUを使用するにはDirect3D/OpenGL/Cgなどを利用する必要がある。

詳しい話は後藤さんの記事を読め。

なんでこんなわかりきったことをグダグダと揉めるんだか。
728デフォルトの名無しさん:2010/05/08(土) 23:43:37
むしろ >>723 に同意
729デフォルトの名無しさん:2010/05/08(土) 23:44:21
とりあえず >>666=670=678 なのか?
GDIとDirectXをどこまで知ってるのよ
730デフォルトの名無しさん:2010/05/08(土) 23:44:45
揚げ足とって遊ぶやつが居るからだろう。
じゃぁRivaTNTで処理するよりもCorei7で処理する方が早いんですね、とか言い出しかねない。
731デフォルトの名無しさん:2010/05/08(土) 23:45:18
>>726
「鳩山みたい」ってレスの事じゃね?w
732デフォルトの名無しさん:2010/05/08(土) 23:48:27
>揚げ足とって遊ぶやつが居るからだろう。

すいません。そろそろ止めときます
733デフォルトの名無しさん:2010/05/08(土) 23:49:36
知らなくて構わないはずのレイヤの事まで質問されて答えなければならないなら、
俺はきっと八百屋とか吉野家の事も全て知っていないといけない

てかそろそろコーディングの話に戻りたいぜ
734デフォルトの名無しさん:2010/05/08(土) 23:51:28
質問に答えられないのなら、答えなければいいだけだろ
735デフォルトの名無しさん:2010/05/08(土) 23:52:16
DirectX11の本を出したら今なら売れそうな気がする。
736デフォルトの名無しさん:2010/05/08(土) 23:54:42
質問主(?)は答えられないものからは上手く逃げたな
737デフォルトの名無しさん:2010/05/08(土) 23:59:12
むしろ答えられなかったから逆に煽り返され続ける流れになったけどな
738デフォルトの名無しさん:2010/05/09(日) 00:01:47
すべて鳩山が悪い
739デフォルトの名無しさん:2010/05/09(日) 00:09:06
>>733
答えなければいけないなんて誰も言ってないだろ?
740デフォルトの名無しさん:2010/05/09(日) 00:10:13
>>733
上っ面だけ舐めて、本質を分かってないような奴が書いたプログラムなんて
誰も使ってくれないよ
741デフォルトの名無しさん:2010/05/09(日) 00:12:37
>>739
そりゃそうだw

>>740
そのレスを見ただけならそういう意見も出るよね。同意かな
742652:2010/05/09(日) 02:25:19
>>665
ん〜、たしかにそうですね
そうすることにします

どもでした〜
743デフォルトの名無しさん:2010/05/09(日) 12:39:54
   __(^^) <ペイピッポォ DirectX使い同士仲良くするピー
  /__ \
  | |   |  |
  (_) (__)
愛用ツール:ツクール
744デフォルトの名無しさん:2010/05/09(日) 19:24:02
HLSL書くとき何のエディタ使っていますか
少なくとも構文強調できるものを探しています
745デフォルトの名無しさん:2010/05/09(日) 19:28:07
FX Composer
746デフォルトの名無しさん:2010/05/09(日) 19:42:47
emacsのcg-mode
747デフォルトの名無しさん:2010/05/09(日) 20:18:29
>>744
サクラエディタ
748デフォルトの名無しさん:2010/05/09(日) 20:27:06
自分もサクラエディタ。
強調キーワードを自分で編集できて便利。
749デフォルトの名無しさん:2010/05/09(日) 23:50:12
強調キーワードって,
秀丸とかだとできないの?
750デフォルトの名無しさん:2010/05/10(月) 00:27:06
できるよ
751デフォルトの名無しさん:2010/05/10(月) 00:34:21
xyzzy
752デフォルトの名無しさん:2010/05/10(月) 00:57:43
サクラエディタでタブが10個以上になったら別のウインドウを開くことってできないかな
753デフォルトの名無しさん:2010/05/10(月) 01:41:45
すれちがい
754デフォルトの名無しさん:2010/05/10(月) 20:37:27
ハイトマップってディスプレートマップと何が違うんですか?
また、ハイトマップで衝突判定ってどうやってやるんでしょうか?

755デフォルトの名無しさん:2010/05/10(月) 20:42:27
あ、ただ単にワールドy座標をテクスチャから取得するだけですか?
756デフォルトの名無しさん:2010/05/10(月) 20:52:45
同じだと思うなぁ。
ただ、Y軸だけってだけじゃなくて、法線方向に起伏させるやり方(甲羅から生えるトゲトゲとか)も同じ名称だと思うよ。
757デフォルトの名無しさん:2010/05/10(月) 20:53:04
そうです
758デフォルトの名無しさん:2010/05/10(月) 20:57:02
>756
>757
ありがとうございました
759デフォルトの名無しさん:2010/05/10(月) 23:09:00
DX11の定数バッファについて聞きたいんですが

D3D11_BUFFER_DESC bufDesc = { sizeof(buf), D3D11_USAGE_DYNAMIC,
D3D11_BIND_CONSTANT_BUFFER, D3D11_CPU_ACCESS_WRITE, 0, 0, };
D3D11_SUBRESOURCE_DATA subData = { buf , 0, 0, };
hr = d3d11dev->CreateBuffer( &bufDesc, &subData, &buffer );

bufの部分がD3DXMATRIX*3のときにはうまくいったのですが、
構造体やD3DXVECTOR3*2のときには
hr == E_INVALIDARG になってしまいバッファが作られませんでした。
定数バッファの正しい作成方法やHLSLへの渡し方について教えて下さい。
760デフォルトの名無しさん:2010/05/10(月) 23:20:18
16byteでアラインしろってマニュアルに書いてあるだろ
761デフォルトの名無しさん:2010/05/11(火) 00:00:01
Direct2Dの描画性能について語っているサイトないすかねぇ。
普通の3Dポリと同じで、毎フレームごとに線とか再描画するイメージでいいんですよね?
たとえば秒間何ラインくらいいけるもんなんすかねぇ。

それともクリッピングとかあるみたいですし、DirectDrawみたいな感じなんすかねぇ。
よさそうなら喜んでWindows7買ってくるんですが。
762デフォルトの名無しさん:2010/05/11(火) 00:07:07
>>761
そんなの、自分でテストすればいいじゃないか。
それから、Direct2DはVistaでも動くぞ。
763デフォルトの名無しさん:2010/05/11(火) 03:23:13
XPなんすよ
まぁGoogle先生でも知らないみたいなので、無さそうですかね
764デフォルトの名無しさん:2010/05/11(火) 04:03:41
FBXからロードするソースって需要ある?
作ってる途中だけど
765デフォルトの名無しさん:2010/05/11(火) 04:07:05
なんかどこかで見たかもそれ
ソース丸ごと
766デフォルトの名無しさん:2010/05/11(火) 04:09:39
まじかよ
まだDirectXのメッシュクラスに自作のデータ流す方法分かってないから知りたいです
767デフォルトの名無しさん:2010/05/11(火) 04:22:29
まるぺけでFBX SDKの解説はやってるな
768デフォルトの名無しさん:2010/05/11(火) 07:37:55
まるペケはノードの解析までで描画してなかったはずです
GLであればAutodeskにあるSDKのサンプルならあるんですよね
769デフォルトの名無しさん:2010/05/11(火) 09:45:23
770デフォルトの名無しさん:2010/05/11(火) 11:34:43
SDKが未来に見える。。。
771デフォルトの名無しさん:2010/05/11(火) 13:25:31
むしろFBXをセーブするソースが欲しいなぁ (チラッ
まぁSDKのsampleにあるんだけど、なんか読みづらいのよね
772デフォルトの名無しさん:2010/05/11(火) 16:28:25
俺もソース見てみたいなー
773デフォルトの名無しさん:2010/05/11(火) 16:30:22
ファイルのフォーマットより、モデルをどんなデータ構造にするかが重要だと思うんだがなー
774デフォルトの名無しさん:2010/05/11(火) 18:53:57
Xファイルがサポートされなくなって久しいですが、みなさんはどんなフォーマットを使われてます?
自分はホビーユーザーなので、今もDX9でXファイルです。
775デフォルトの名無しさん:2010/05/11(火) 19:34:36
ps_3_0でトゥーンシェーダをやってみたんですが
ttp://www.dotup.org/uploda/www.dotup.org877873.jpg
右のようにところどころ暗いところができてしまいます。
左の図はPSの
float p = max( dot(In.nor, -LightDir), 0);
p = p * 0.5f + 0.5f;
p = p * p;

//float4 Col = tex2D(Samp1, float2( p, 0.1f ));
float4 Col = p;
return Col;
のようにPをそのまま色として出力してみた図です。
左では普通に表示されるので法線はおかしくないと思うのですが
他におかしくなる原因として何が考えられるでしょうか
776デフォルトの名無しさん:2010/05/11(火) 19:41:23
>>775
トゥーンシェーダというかハーフランバートだね。

//float4 Col = tex2D(Samp1, float2( p, 0.1f ));

ここが臭うなぁ・・・
ここで参照してるテクスチャ見せて。
777デフォルトの名無しさん:2010/05/11(火) 19:43:35
>>775
ベタ塗り一色のテクスチャで試してみるといいかも
778デフォルトの名無しさん:2010/05/11(火) 19:56:51
>>775
Samp1のAddressUはClampにしてる?
779デフォルトの名無しさん:2010/05/11(火) 19:58:03
右側は精子かかってるだけだろ
もう一度落ち着いてレンダリングしてみろ
780775:2010/05/11(火) 19:58:36
>>776,777
ありがとうございます。
2色で試してみましたが、変化ありませんでした。
ttp://www.dotup.org/uploda/www.dotup.org877897.jpg

775で使用したテクスチャ
ttp://www.dotup.org/uploda/www.dotup.org877908.jpg

2色のテクスチャ
ttp://www.dotup.org/uploda/www.dotup.org877910.jpg
781デフォルトの名無しさん:2010/05/11(火) 20:00:35
tex2D(Samp1, float2( p, 0.1f ));

テクスチャ座標にp(拡散係数?)が絡んでるのはなぜ??
782デフォルトの名無しさん:2010/05/11(火) 20:04:48
>>778に一票。
計算誤差で内積がわずかに1.0を超えてリピートしてる気がする。
783781:2010/05/11(火) 20:06:12
ああ、ごめん、分かったw
784775:2010/05/11(火) 20:08:52
すいません、Clampにしたら正常に描画されました。
以前テクスチャのテストで使った
AddressU = Wrap;
AddressV = Wrap;
をコピペしたのが間違いだったのですね
みなさんありがとうございました。
785デフォルトの名無しさん:2010/05/11(火) 20:12:40
よかったよかった^^
786デフォルトの名無しさん:2010/05/11(火) 20:34:30
スレ違いだけど
FBX SDKに関する話題はどのスレいけば良い?
787デフォルトの名無しさん:2010/05/12(水) 00:14:19
乳首か具が見えてないので答える気になれません
788デフォルトの名無しさん:2010/05/12(水) 00:19:38
>>786
CG板かまるぺけさんのとこ
でもたぶんマイナーなのでみつからない
789デフォルトの名無しさん:2010/05/12(水) 00:34:52
>>761
テクスチャをレンダーターゲットにすれば
2D描画に関しては必要な時にだけ更新すればよい。
ただ2D描画時に同期とる設定をしなければならないのでメンドイ。
790デフォルトの名無しさん:2010/05/12(水) 00:52:13
FBXって日本語のページが更新されてないだけで
SDKのバージョン自体は定期的にあがってたんだな・・・
791デフォルトの名無しさん:2010/05/12(水) 02:46:37
質問失礼します。
IMFVideoMixerBitmapとIDirect3DSurface9を用いた、EVRでの
オーバーレイ表示を考えています。
このとき、IDirect3DSurface9はどのように準備すればよいのでしょうか?
大まかな流れで結構ですのでご教授のほどよろしくお願い致します。

なお、言語はC++/CLI、Managed DirectX未使用です。
792デフォルトの名無しさん:2010/05/12(水) 03:40:10
MediaFoundationのサンプル自体滅多に見ないが、kodersやkrugleで検索したらいくつかあるっぽい。
793デフォルトの名無しさん:2010/05/12(水) 08:22:37
やったこと無いが普通にレンダーターゲットのを渡すだけじゃ失敗するのけ?
794デフォルトの名無しさん:2010/05/12(水) 08:39:23
つまりこれって
Win32プログラムの経験はあるけど
DirectXでプログラム組んだことありませんって質問なのか?
795デフォルトの名無しさん:2010/05/12(水) 10:19:58
>>773
スキン無しならただの頂点の配列でいいし
スキン有りなら単純な木構造でよくね?
796デフォルトの名無しさん:2010/05/12(水) 10:26:24
>>769
遅くなりましたがありがとうございます。
描画は頂点配列をデバイスに流してるだけでした。

これじゃクオータニオン作らないといかんな…
797デフォルトの名無しさん:2010/05/12(水) 10:39:02
なんてことはなかった
勘違い
798デフォルトの名無しさん:2010/05/12(水) 11:21:38
最近流行りのモーフィング!
799791:2010/05/12(水) 17:54:07
>>792-793
回答ありがとうございます。
しかし当方では問題を解決できなかったためもう少しいじってみたいと思います。
800791:2010/05/12(水) 17:55:29
>>792-794です。
アンカーミス失礼いたしました。
801デフォルトの名無しさん:2010/05/13(木) 19:05:04
Visual Studio 2010買う価値ある?
今使ってるのは2005
802デフォルトの名無しさん:2010/05/13(木) 19:08:25
>>801
とりあえず無料のExpressで試せして判断しろ
なんならそのまま使い続けろ
803デフォルトの名無しさん:2010/05/13(木) 20:13:54
2010Expressの日本語版ってまだじゃなかったっけ?
トライアル版なら使ってるけど
2005からならそろそろ移行しないとサポート打ち切り始まってるライブラリ出始めてるだろ
804デフォルトの名無しさん:2010/05/13(木) 20:28:43
>>801
C++しか知らんが、使う価値はある。
インテリセンスでフリーズするとか、
デバッグランタイムじゃないと落ちるとか
2008では不明な不具合が結構あったが
全部直った。
ただ、重くなる。
2008はWinXP1.4GHzセロリンPCでギリギリ使えてたんだが
2010は重くて無理だった。
805デフォルトの名無しさん:2010/05/13(木) 20:31:59
>>804
そんなロートルマシンは窓から投げ捨てろ!
いや、まじで。
そろそろCore 2 DuoやAthlon 64 X2くらいが当たり前な世の中になってほしいです。
806デフォルトの名無しさん:2010/05/13(木) 20:44:11
>>803
いやとっくに出てる。日本語版。
WebインストーラもISOイメージフル版も。
http://www.microsoft.com/express/downloads/#2010-All
807デフォルトの名無しさん:2010/05/13(木) 23:00:49
>>805
愛機なんで捨てたりは出来ないが
2010が動かないのを機に、Win7機を買ったぜ。
これで俺もDX11プログラマの仲間入りさ。
ただしグラボが無いんで、サンプルの類はまったく動かないがな!
808デフォルトの名無しさん:2010/05/13(木) 23:09:19
DX11戦士がここにまた一人誕生した
809デフォルトの名無しさん:2010/05/14(金) 00:38:17
2010インストールしてみたが・・・
インテリセンスやらコードチェックやら超優秀になってやがる・・・
優秀だから、たよりすぎてダメになりそうだぜ
おっとスレチか
810デフォルトの名無しさん:2010/05/14(金) 00:45:28
サクラエディタが好きすぎてVC++はただのコンパイラ+リンカになってるぜ・・・
VC++のエディタは検索キーワードのハイライトができないのがイタイ・・・
811デフォルトの名無しさん:2010/05/14(金) 00:45:56
ゲーム戦士っていたな。地球を守るためにスペースインベーダーや平安京エイリアンで宇宙人と戦ったりするやつ。
812デフォルトの名無しさん:2010/05/14(金) 01:05:56
サクラエディタで
インテリセンスとか「宣言へジャンプ」とかどうやってんの?
813デフォルトの名無しさん:2010/05/14(金) 02:16:29
サクラエディタもタブを数十個開くと重くなる。。。
814デフォルトの名無しさん:2010/05/14(金) 03:33:44
Directxを使用してゲームプログラミングをし、現在は複数のメッシュを表示させつつ主人公を移動させるところまでたどり着きました。
ただ現在は実行中に、「の形をした白いものが画面にちらつくことがあります。
(同じソースを使っていても出たりでなかったり、出る場所が違ったりします)
メッシュの描画処理やカメラの座標設定をコメントアウトしても真っ暗な画面に白いものがちらつき、何が原因なのかわかりません。
なお使用しているのはDirectX SDK (February 2010)および、Visual C++ 2008 Express Edition SP1です。
心当たりはないでしょうか?
815デフォルトの名無しさん:2010/05/14(金) 04:47:27
>現在は複数のメッシュを表示させつつ主人公を移動させるところまでたどり着きました。

よくわからんけどすげぇじゃねぇかぁ!
816デフォルトの名無しさん:2010/05/14(金) 07:32:14
MSの社員さんもこんなところ覗くんだな
817デフォルトの名無しさん:2010/05/14(金) 09:58:55
とりあえずビデオカードのドライバを最新にするとこから初めてみたら?
あとは、できればそのノイズの写ったスクリーンショットかな
818デフォルトの名無しさん:2010/05/14(金) 10:00:24
>>814
PIXでフラッシュが出るまで全FPSをスキャンしてじっくりと解析してみれ。
819814:2010/05/14(金) 13:15:59
ビデオカードのドライバを更新したら症状が解消しました。
わかってみれば簡単なことだったのですが、言われるまでは気付きませんでした。ありがとうございます。

>よくわからんけどすげぇじゃねぇかぁ!
描画してるものは単なるテクスチャを貼り付けただけの板なので……すごくはないと思います。
これからも頑張ってもうちょっと前進したいです。
820デフォルトの名無しさん:2010/05/14(金) 13:27:54
>>815
お前も頑張れよww
821デフォルトの名無しさん:2010/05/14(金) 20:03:43
心霊の可能性はないと思います。
それは網膜に映るミジンコ状の電気ノイズ刺激に過ぎません。
822デフォルトの名無しさん:2010/05/14(金) 20:05:02
みじんこぴんぴん現象
823デフォルトの名無しさん:2010/05/14(金) 20:32:45
桜玉吉を思い出した
824デフォルトの名無しさん:2010/05/15(土) 00:17:47
初歩的な質問ですが、
マップチップで構成された背景をスクロールさせるとき、
一枚のチップ(32*32とか)ごとにスプライトを1つ作り、そこにチップテクスチャ
を1枚貼るのですか?
それともある程度の数のチップテクスチャをその数の大きさ分のスプライト1枚に貼るのですか?
825デフォルトの名無しさん:2010/05/15(土) 00:39:40
空のテクスチャを用意してそれに一度だけマップチップを描画するといいかも
何十枚もマップチップを描画するよりも処理は軽いはず。
わかりにくかったらすまない。
826デフォルトの名無しさん:2010/05/15(土) 00:42:29
>>824
小さいのだと、動くスピードばらばらにして近感作ることもできる

単にスクロールさせたいだけならでかいの一枚でもいい
827デフォルトの名無しさん:2010/05/15(土) 00:50:07
>>824
とりあえずお前の言うスプライトの定義が曖昧なのでそこをはっきりさせよう


ゲームを管理する上では1セル1データで管理した方が圧倒的に楽
しかしそれを安易に実行すると32x32のチップで640*320を埋めようとすると
20x15回のDrawPrimitiveとテクスチャ切り替えが発生する
この程度では最近のマシンではたいしたネックにはならないだろうが
簡単にこの回数を減らす方法としては

チップマップを1枚のテクスチャに突っ込む
20*15*4個の頂点からなる1個の頂点バッファを作成する
あとは各頂点のテクスチャ座標を移動するなり書き換えるなりすれば
1回のDrawPrimitiveで描画が完了する
828デフォルトの名無しさん:2010/05/15(土) 00:52:56
>>827
とりあえずなんで640 480じゃないのかってね
829デフォルトの名無しさん:2010/05/15(土) 01:13:35
そこは640*480だろうけど、スクロールするなら21*16だよね
830デフォルトの名無しさん:2010/05/15(土) 01:17:05
>>824
例えば、1チップ32x32ピクセルで、表示領域が例えば320x320だとすると、
一度に表示されるチップは10x10チップ。
で、スクロールすると両端がまたがる格好になるので右と下に1列づつプラスして、
330x330ピクセル幅のビットマップを用意して、そこに一度、11x11分を描画しておく。

で、画面をスクロールする際、マップ上の位置(ピクセル単位)を32で割った商が直前と同じなら
描画処理はせず、剰余の分だけ位置をずらす。
商が変わった時、ビットマップを11x11分再描画するんだが、その際チップの種別が同じ部分は描かなくても構わない訳だから飛ばす。
・・・みたいな処理を繰り返す。 ・・・表示される内容や位置によって処理負荷が変わってしまうけど、
そこはタイミングを別に合わせてどうにかする、みたいな
831デフォルトの名無しさん:2010/05/15(土) 15:11:35
技術的な質問ではないのですが、教えてください。
現在DirectX SDKに入っているサンプル-チュートリアルをいじっているのですが、
これらの内容について、みなさんはコピペでなく、処理の内容を理解して使っているのでしょうか。
それとも、適当に把握してるだけで、コピペして使っているのでしょうか。
そして、コピペ使用だと後々問題になってくるのでしょうか?

不躾な質問ですが、回答お願いします・・・。心が折れそうで。
832デフォルトの名無しさん:2010/05/15(土) 15:18:51
内容理解しなかったら使えなくね
いやマジで。

わかりきってるようなベタなパラメタセットや、あ、こんな値セット出来たのかって発見でもあれば
コピペする事はあるけど、少なくとも俺は応用をしたいのでそんな感じ
833デフォルトの名無しさん:2010/05/15(土) 15:24:05
あと >>831
ほんとにこんなの全部覚えるの?だとか心が折れそうになるのは
結果を急いで一度に全部覚えようなんてするからじゃね

やらねばならない事は多いし腰据えて一つ一つ潰していきな

そこにあるのはただのライブラリ関数の使い方であって、実際に自分で作るのはそれらの中で
必要な物を選んで使うだけで、メインとなる処理は自分で考えて作るはずだから
834デフォルトの名無しさん:2010/05/15(土) 15:30:24
内容を分かっててコピペするのと
ただ闇雲にコピペするのとの間には大きな隔たりがある

しかしこの壁を越えるのに必要なのは
「今の努力」より「継続の経験」によるものが大きい
今は何も分からずにコピペしてても4-5年もDirectXに触ってれば
そこで何が行われてるのか普通に分かってくる

「理解してから使う」のではなく「理解しながら使う」のがよろしかろう
835デフォルトの名無しさん:2010/05/15(土) 16:36:21
コピペってw宿題の丸写しじゃないんだから、やりたいコードは自分で書かないと実装できないんだよ。
836デフォルトの名無しさん:2010/05/15(土) 16:38:20
うんうん、そうやって車輪の再発明を何度もするわけですね、わかります
837デフォルトの名無しさん:2010/05/15(土) 17:16:04
理解と応用の為の追体験すら無駄な車輪の再発明と言い訳する奴は
大抵大した技術者じゃない

好奇心に従ってただスキル増やせばいいのに
838デフォルトの名無しさん:2010/05/15(土) 17:17:57
そうやってコピってくれば終了の仕事を何日もかけてバグだらけの独自仕様のクソプログラムを量産するわけですね、わかります
839デフォルトの名無しさん:2010/05/15(土) 17:19:59
他人に書かせてコピペで済ますバカはプログラミング自体していない訳だから
放っておいても消えるよ。技術無くてもプライドだけ高いから、屁みたいな言い訳しながら消えていく。
放っておけばおk
840デフォルトの名無しさん:2010/05/15(土) 17:24:03
>>838
いやお前はわかってない
「〜わかります」とか、レスすらまさにコピペとかウケるww
頭良くない事は罪じゃないから、せいぜいがんばってニート脱出しなw

自分が何でこんな事言われてるか、本当はわかってるんだろ?ww
841デフォルトの名無しさん:2010/05/15(土) 17:25:29
コピペしない=車輪の再発明
は酷いな
ある意味すごい発想だな
842デフォルトの名無しさん:2010/05/15(土) 17:43:14
ここは釣堀ですか?
843デフォルトの名無しさん:2010/05/15(土) 17:48:28
まぁ、ここにいる連中の大半はライブラリ厨だからな
とにかくなんでもかんでも自分のお手製でないと気がすまないし
何故かそれを誇りに思ってる

使えるものは何でもつかって最終的なゲームの完成だけを目指すクリエイター型と
最終完成そっちのけでライブラリ製作に没頭するエンジニア型の論争は
いつまでたっても平行線で決着が付かない
844デフォルトの名無しさん:2010/05/15(土) 17:51:47
釣り堀にすると質問者に迷惑かける
それがわかってて行うならそれは誰かの悪意
発端が上の流れで今更「釣り堀」とか言うのは悪意を誤魔化す言い訳
いいから逃げずに何かしてろ
845デフォルトの名無しさん:2010/05/15(土) 17:52:17
話がコピペの話から車輪の再発明に変わってるぞw
846デフォルトの名無しさん:2010/05/15(土) 18:00:24
初心者だったら俺も最初はコピペで良いと思うけどな
最初はそうでもいずれステップアップして行けば
改造なり改良したくなってくるしその頃にはどこを弄れば良いか分かってるハズ
何でもかんでも最初から理解した上で1から全部書けというのは酷すぎる
847デフォルトの名無しさん:2010/05/15(土) 18:05:54
いきなり自分でハードル上げて挫折していった初心者のなんと多いことか
ここに質問に来る人って基本
DirectXを極めたい人ではなくてゲームとか作りたい人でしょ?
だったらまずやるべきことは分かるだろう
848デフォルトの名無しさん:2010/05/15(土) 18:11:54
服を脱ぎます
849デフォルトの名無しさん:2010/05/15(土) 18:27:53
最近、DirectXの使い方自体は重要でないってことに気付きました

850デフォルトの名無しさん:2010/05/15(土) 19:19:22
おれ東方厨だけど東方が大好きすぎてまじやべぇんだけど東方みたいな凄いゲームを簡単に作って一儲けしたい
だからおまえら凄いゲームの作り方を教えろ
851デフォルトの名無しさん:2010/05/15(土) 19:27:53
プログラム組め。以上。
852デフォルトの名無しさん:2010/05/15(土) 19:33:25
「〜みたいなゲームを作りたい」とか表現が曖昧なのは
初心者にありがちだな
853デフォルトの名無しさん:2010/05/15(土) 19:46:50
しかし視点を変えると、「〜みたいなゲームで行きませんか」 とか直球な例えで企画するのは
二匹目のどじょう狙う会社にもありがち。   とか言って
854デフォルトの名無しさん:2010/05/15(土) 22:18:07
前の会社だけどPS3のゲームのソースで三角関数テーブルあって感激した。
855デフォルトの名無しさん:2010/05/15(土) 22:50:36
>>854
涙ぐましいな・・・
856デフォルトの名無しさん:2010/05/15(土) 23:16:04
>>854
固定小数点で計算してる場合、
0〜90°を180分割もしておけばゲーム用としては十分だからなぁ。
まあテーブルにしておくところじゃね?
スレ違いだけどね。
857デフォルトの名無しさん:2010/05/15(土) 23:31:30
キャッシュヒットの都合上
なんでもテーブルから読んだ方が速くなるわけじゃないけどな
858デフォルトの名無しさん:2010/05/16(日) 02:43:39
っcordic method
859デフォルトの名無しさん:2010/05/16(日) 03:24:09
sinとかインラインアセンブラでfsin呼んでるソース見たんだけど意味あるんですか?
860デフォルトの名無しさん:2010/05/16(日) 03:35:08
使う側でどうとでもなる話ですが、法線マップは基本的に平らな部分が青となるのでしょうか。
HLSLで法線マップの色を 赤:X軸 緑:Y軸 青:Z軸 として使用した場合、
ZX面に置かれている地面のポリゴンにそのまま当てると期待した色が出ずに困っていました。
ZX面に置かれた地面のポリゴンに全て平らという意味合いで青いテクスチャを法線として使用すると
2行目の使い方だと光源が真上より傾いたほうが明るく表示されることがあります。
一般的にはこういった場合はどのようにするものなのでしょうか。
現在HLSLで緑と青を入れ替えて 赤:X軸 緑:Z軸 青:Y軸 という風に使用しています。
地面だとこれで問題ないけど回転するものに対して適応出来ないしなぁ・・・・と思いつつ。
861デフォルトの名無しさん:2010/05/16(日) 03:52:40
>>860
「法線マップ 接空間」あたりでググれ
862デフォルトの名無しさん:2010/05/16(日) 04:32:36
現世代のCPUのPCだと

double sin ( double x ) > float sinf ( float x ) > long double sin ( long double x ) = float sin ( float x )

の順で速いよね
たまにfloatの方がdoubleより速いと勘違いしてる人結構いるけど
863デフォルトの名無しさん:2010/05/16(日) 05:07:07
>>862
float sin(float x) と float sinf(float x) の速度が違うのはなぜ?

sin(double) と sin(float) が混在しているってことはC++の話だと思うけど、
普通C++用のmath.hでは sin(float) は sinf をインラインで呼び出してるだけでしょ。
864デフォルトの名無しさん:2010/05/16(日) 05:50:22
それはコンパイラの最適化次第
実行速度優先で最適化されればすべて等しくなるはずだけど
開発環境によるんじゃね?
865デフォルトの名無しさん:2010/05/16(日) 07:42:07
floatよりdoubleのが早いのはx87のFPUレジスタが80Bitになってて
float演算の場合は計算ごとに毎回32Bitに丸めなおすから処理が入るからだっけ?

でも実際には大量に演算させる場合メモリアクセスの問題でfloatのが速かったりするんだよね。
866デフォルトの名無しさん:2010/05/16(日) 10:47:22
>>862
たまに勘違いしてる人がいるって言うより、>>865 も書いてるけどそれは
単にFPUの動作だけをカタログスペックなどで見ている場合、double の方が早いって話で、
実際の処理で考えたらメモリから Read するマシンサイクルが余分にかかるから
やっぱ float の方がって話じゃね
勘違いじゃないと思うよ
867デフォルトの名無しさん:2010/05/16(日) 11:56:19
>>856
先に計算しておいてテーブルにしておくということですか...
勉強になります.
868デフォルトの名無しさん:2010/05/16(日) 14:21:10
実測したら
double sin ( double x ) = float sinf ( float x ) = long double sin ( long double x ) = float sin ( float x )
だったんだけど
869デフォルトの名無しさん:2010/05/16(日) 14:43:52
実測したソース晒そうぜ
870デフォルトの名無しさん:2010/05/16(日) 14:53:21
同じになるわけが無い
基本は全部double sin ( double x )で残りはそれを型キャストしてるだけなんだから。
まぁ、俺が計った限りじゃ3%程遅くなるだけだったのでそれほど気にするほどのものじゃないが
871デフォルトの名無しさん:2010/05/16(日) 17:26:53
実測した
環境はWin7 32bit、Visual Studio 2008、Celeronノート

#include <stdio.h>
#include <time.h>
#include <math.h>
#define N (30000000)

float proc1(float *v)
{
float f = *v; // ここを書き換える
for (int i = 0; i < N; i++) f = sin((double)f); // ここを書き換える
return f;
}

int main(int argc, char **argv)
{
clock_t start, end, tm;
float v = 0.5, r;
printf("最適化無効のため %d\n\n", v);

start = clock();
r = proc1(&v);
end = clock();
tm = end - start;
printf("最適化無効のため %d\n\n", r);
printf("time %d\n\n", tm);

return 0;
}

改行多すぎで怒られたので続く
872デフォルトの名無しさん:2010/05/16(日) 17:28:28
float sin ( float x ) == float sinf ( float x ) < long double sin ( long double x ) == double sin ( double x ) になった
つまりfloatかそれ以外か
左と右の速度差は8%くらい
逆アセンブラで確認したら、全部_CIsin()を呼びに行った
速度差の理由は>>865にある通りで、doubleやlong doubleはレジスタだけで演算している
それに追加してfloatはループの最後に無意味なメモリロードとストアが1つずつある…なんだこれ

arch:sse2とfp:fastにしてテストしたけど、やはり順序は同じ
ただ速度差は10%になった
全部__libm_sse2_sin()を呼びに行った
速度差の理由は、>>870にある通り、キャスト(cvtsd2ssとcvtss2sd)有り無しの差で、無駄なメモリアクセスは消えた

単純にsinの引数がdoubleなせいで、flaotだとオーバーヘッドがある、という面白くない結果になってしまった
早くしたければfloatとかdouble以前に、SSE2に絞って_libm_sse2_sin()を直で呼ぶほうが良さそう(VSExpressはソースないから無理かも)
64bitとかgccとかXBox360とかの結果も気になるところ
>>806
スペック上ならはfloatの方が速いよ、特に除算やルート計算
それにSSEやAVXなら1命令でdoubleの2倍の演算が出来てお得
873デフォルトの名無しさん:2010/05/16(日) 17:31:50
で、標準ライブラリのsin使わないでインラインアセンブラでfsin呼ぶのは速いの?
874デフォルトの名無しさん:2010/05/16(日) 18:09:56
趣味でそういうことにこだわる人が多いのは分かりますが、
現実逃避はやめて、あなたのゲームを完成さる作業に移ってください。
875デフォルトの名無しさん:2010/05/16(日) 18:47:43
超初心者なんですが、最初は本買って勉強したほうがいいですよね?
876デフォルトの名無しさん:2010/05/16(日) 19:44:58
>>872
>floatはループの最後に無意味なメモリロードとストアが1つずつある
それは無意味ではないので、もっと勉強してくれ。
877デフォルトの名無しさん:2010/05/16(日) 19:56:27
store reloadなんてものが必要なx87は地獄
878デフォルトの名無しさん:2010/05/16(日) 20:54:01
まぁ最適化を考え出したらSSE使うようになるから気にしてもなぁって感じだし、
そういうのをやるのが楽しいのは分るけどまずはゲームなりなんなりを完成させるのが先だよな。
879デフォルトの名無しさん:2010/05/16(日) 20:56:26
>>876
store-reloadの話ではなくて,store-reload後にも追加して1組のロードとストアがあるからわからない
こんなコード
fld dword ptr [esp+3Ch]
fstp dword ptr [esp+3Ch]
Debugなら分かるけどReleaseでやってるし意味ないと思うけど
880デフォルトの名無しさん:2010/05/17(月) 00:05:25
頂点ペイントというのがよくわかりません。教えてください
たしかfxファイルか何かをいじる奴ですよね?
頂点間の辺の太さや色を弄るようなものなのでしょうか?
881デフォルトの名無しさん:2010/05/17(月) 01:08:48
それで自分の意図が相手に伝わると考えてるなら
DirectXよりまず日本語との勉強から始めた方がいいとも思われる
882デフォルトの名無しさん:2010/05/17(月) 02:33:37
>>880
頂点カラーのことを言っているのだろうか?
そもそも辺に太さなどないが
883デフォルトの名無しさん:2010/05/17(月) 02:41:56
俺の勘だけど、多分丸ごとよくわからないんだと思う。丸ごと。

>>880 具体的に何をしたくて、どこでわからなくなった。
本当に丸ごとなら、まずググって自分なりに整理してみてくれ。
例えば、その用語で望むような内容が出てくるのか、とか
884デフォルトの名無しさん:2010/05/17(月) 02:50:45
ありがとうございます
したいことは、モデリングツールで頂点ペイントと言うのがあるのでやったらどうなるのかなと思いまして
今はマテリアルやテクスチャはあるのですが、何か金属に色を塗ったような感じに見えるので
頂点カラーを使ったらアニメっぽいオブジェクトを作れると前聞いたような気がしまして
でも頂点カラーってオブジェクトのファイルじゃなくて、fxファイルかなにか、特殊なもので設定するんじゃなかったかなあと思いまして
結局頂点カラーってどういう処理なのかを理解してないものですから、簡単にまとめて頂けたら良いなあと思ったのです
885デフォルトの名無しさん:2010/05/17(月) 03:49:01
マテリアルカラーとは
その「面」が何色の光をどのように反射するかを設定するパラメーターである
よってライトが存在しないとまったく意味の無いものである
一般に初心者レベルのメッシュの描画では
このマテリアルカラーとテクスチャーカラーの乗算で色を決定する

頂点カラーとは
ポリゴンの頂点そのものの色でありライトに依存しない
素ポリゴンの描画でもないかぎりたいてい無視される値であり
通常は0xffffffff(白)になっており色に影響を与えないようになってる
これを設定し反映させることでライトに依存しない陰影を表現したり
透明度を変化させたりすることもある

一般にモデリングソフトは頂点カラーの出力のON/OFF設定が付いており
普段はあまり使われないものであるのでデータ削減のためにたいていOFFにしてある
上記のような使い方をするときのみONにして頂点情報に色のデータを含めることになる

ただしモデルデータに頂点カラーのデータがあるからといってデフォルトで反映されるわけではない
当然プログラム側で頂点カラーが反映されるようにプログラムする必要がある
またモデルデータに頂点カラーが含まれてない場合でも
プログラム側から頂点カラーを制御して各種演出を行う場合もある



アニメっぽいオブジェクトと頂点カラーはまったくの無関係
おそらくそれは、スキンメッシュファイルの作成時に
各頂点に対するボーンの影響度をグラフィカルに設定するために
見かけ上頂点に色をぬってるようにみえるものがあって
それを「頂点のペイント」と言ってるものもあるのでそれで勘違いしてるのでは?
886デフォルトの名無しさん:2010/05/17(月) 04:03:31
ありがとうございます
シェーダーとごっちゃになってました
これからシェーダーの書き方を勉強しようとしてたのでした
そしてたら頂点シェーダーか何かと、頂点カラーがごっちゃになって、頂点カラーさえできればアニメ絵の3Dオブジェクトを作れると思ってました
887デフォルトの名無しさん:2010/05/17(月) 04:23:25
いわゆるアニメっぽい表現は例えばプログラマブルシェーダ(=頂点シェーダ/ピクセルシェーダ)で
トゥーンシェーディングなどのロジックを組んで表現したりするけど、
別に他の方法で再現したっていい。それは自分の都合次第。
逆に、ライト無しで頂点カラーで色を塗る形でアニメっぽくみせようとする事も別に出来ないって事は無いけど
多分あえてそうする理由も無いと思うので、とりあえずシェーダ書いて色々やってみれ
888デフォルトの名無しさん:2010/05/17(月) 04:26:37
てか >>886 はそもそもDirectXを使ってプログラミング自体した事あるんだろうか
頂点情報の構造体とか設定する場面で、頂点カラーにしろなんにしろ見てるはずなんだけど。
他にもSetMaterialにしろ、色々と



889デフォルトの名無しさん:2010/05/17(月) 04:31:46
プログラム始めて2年しか経ってないからな
マルチアニメのサンプルいじって3Dゲーム作ってるだけだし
890デフォルトの名無しさん:2010/05/17(月) 04:42:37
その2年間は言語の基礎とサンプルコピペで過ごしてしまったか
頑張れとしか言えないなw
891デフォルトの名無しさん:2010/05/17(月) 04:58:41
いいんだよ趣味グラマーだから
DirectX11の方に行く気ないし
892デフォルトの名無しさん:2010/05/17(月) 05:02:27
なんでそこでDirectX11が出てくるのか意味フ
893デフォルトの名無しさん:2010/05/17(月) 05:10:12
うるせーバーカ
894デフォルトの名無しさん:2010/05/17(月) 05:13:34
DirectX9でゲーム作れる→DirectX11に行くって普通のことなんじゃないの?
895デフォルトの名無しさん:2010/05/17(月) 07:06:09
何も知らん初心者ほどDirectSoundとかD3D9固定機能とかのレガシーなものを使いたがる例を
我々はずっと見てきているじゃないか。
896デフォルトの名無しさん:2010/05/17(月) 07:12:03
別に固定機能はいいだろ...w
897デフォルトの名無しさん:2010/05/17(月) 07:26:09
DirectX11とか仕事でプログラムしてる人とか3Dのエンジン?作ってる人は基本からやった方が良いけど
車輪の再開発だしパソコンが高機能化するからDXUTで十分ってばっちゃがいってた
898デフォルトの名無しさん:2010/05/17(月) 09:55:33
ステージ毎に必要なモデルを追加で読み込むゲームを作っているのですが、
不要になったモデル(特に風景やモンスターなど)はどれくらいの頻度でデータを解放するのが好ましいでしょうか?
使いまわすモデルも結構有るのですが、やはり全部解放して読み込んでとするべきなのでしょうか。(´・ω・`)
899デフォルトの名無しさん:2010/05/17(月) 10:11:37
ステージ毎に必要なモデルを追加で読み込むゲームを作っているのですが、
不要になったモデル(特に風景やモンスターなど)はどれくらいの頻度でデータを解放するのが好ましいでしょうか?
使いまわすモデルも結構有るのですが、やはり全部解放して読み込んでとするべきなのでしょうか!…(´・ω・`)
900デフォルトの名無しさん:2010/05/17(月) 10:15:49
(´・ω・`) …
901デフォルトの名無しさん:2010/05/17(月) 10:17:22
(´・ω・`) ←これウザいから教えてやんない
902898:2010/05/17(月) 10:29:20
最近BBIQで頻繁にアクセス規制を受けており 批判要望板の ★★問答無用でレス代行します78スレッド に代行依頼をしたのですが
>>898を代行して貰いお礼を書き込んだ後に、本文の文末だけ改変した>>899を誰かに勝手に投下されてしまいました。
ふざけているかのような内容になり申し訳ありません。(※今回は同板 アク禁になった人の為にレス代行するスレ★210 に依頼させて頂きました。)
903デフォルトの名無しさん:2010/05/17(月) 11:55:53
「不要になったモデルはどれくらいの頻度でデータを解放するのが好ましいか」 だとか、
「使いまわすモデルが沢山有るが、全部解放して読み直すべきか」 だとか、
なんでそんな事を他人に質問してるのか良くわからない。

そのソフトの内部仕様(都合)として、使いまわす=使ってる内容は捨てられないんだろ?
なら使っていない内容を解放しましょう、みたいなバカな答えが聞きたいの?
904898:2010/05/17(月) 13:17:04
>>903
変な質問になりすみません。
ステージ内に出てくるモデルが固定ではなくランダムで、将来的には同ステージ内でもプレイし続けると2〜400MBのメモリを食う恐れが有るのです。
これをステージ切り替え時に全部解放して必要なのを読むと待ち時間が増大し、再読み込みする物の読み込み負担が増えるのではないだろうか? と
そして
できれば効率的にメモリを管理できるシステムにして、シームレスとまではいかなくてもそれに近しい環境にできないだろうか? という願望から
曖昧な質問をしてしまいました。 もっと自分なりにどうすれば効率的に管理できるのか考えてみようとおもいます。
ありがとうございました。
905デフォルトの名無しさん:2010/05/17(月) 15:12:58
質問スレで、真面目な質問にまで説教ってどうよ

>>899
理想を言えば、全て自前でメモリ管理するのがベストだろうけど、夢から醒めなさい。

想定しているビデオメモリが潤沢ならば、自前で解放のタイミングを
管理するのが、読み込み時間短縮の点で最良だろう。
シームレスなシーンを想定したゲームはこれが多い。「そろそろ」VRAMが
足りないなって時に、使ってない領域を必要なだけ解放すればいい。

しかしこのやり方だと当然メモリフラグメントの問題が生じてくる。
つまり「メモリは空いているはずなのに、確保できない…」状態だ。なので、
想定しているビデオメモリが厳しいならば、シーンごとにメモリをフラッシュすべき。
むしろゲームのデザインをそれに合わせるべき。

ゲームデザインや自分の腕を考え、可能ならば両者を折衷するのが良いだろう。

なんだかんだ言ったが、PCならDirectXのメモリ管理機能使っておきなさいな。
必ず使うシーンデータをDEFAULTで、動的なデータをMANAGEDで確保。この時
メモリフラグメントを防ぐため、DEFAULTの方を全て先に確保すること。
DirectX11ならまた違ってくるけどな。
906デフォルトの名無しさん:2010/05/17(月) 16:05:45
>>560
>>905
ありがとうございます。
メモリフラグメント。初めて知りました。恐ろしい現象ですね;

>必ず使うシーンデータをDEFAULTで、動的なデータをMANAGEDで確保。この時
>メモリフラグメントを防ぐため、DEFAULTの方を全て先に確保すること。
勉強になります。メモリのフラッシュと合わせてそうさせて頂こうと思います。
本当にありがとうございました。 自前の管理もいつかできるようになりたいものです。
907デフォルトの名無しさん:2010/05/17(月) 23:05:48
クォータニオンでz軸周りの回転方向だけ逆にしたいのですがどうすれば良いですか?
908デフォルトの名無しさん:2010/05/17(月) 23:28:48
どの軸での回転を表すクォータニオンで?
※ちなみに逆回転はサンドイッチ算を逆にするだけ
909デフォルトの名無しさん:2010/05/17(月) 23:52:48
ありがとうございます
もうちょっと頑張ってみます
910デフォルトの名無しさん:2010/05/18(火) 08:08:04
(´・ω・`)
911デフォルトの名無しさん:2010/05/18(火) 19:01:23
DirectXってWINAPIを知らないと無理ですか?
912デフォルトの名無しさん:2010/05/18(火) 19:09:23
>>911
無理です。 最低限、普通にCreateWindowしてウィンドプロシージャ書いて、
DirectX関係ない部分の処理は書けないと無理。

・・・単にライブラリをテスト的に使うだけなら、あるいは出来る事が限られてもいいなら
DXUTなどのラッパライブラリを使うことで、"あまり"直接触らなくても書けるかもしれないけど、
そもそもわかってないと多分何も出来ないので、そういう意味で無理です。
というか、当たり前レベル
913デフォルトの名無しさん:2010/05/18(火) 19:12:42
DirectXはあくまでただのライブラリ。描画、サウンドその他の、あくまでライブラリ、関数群なので
それだけ使って何かするって言うような物じゃないので、
そもそも知らないと多分意味のある物なんて作れない。それ以前に、まったく何も知らない状態なら
DirectXとか全然関係ない基本的な部分でウィンドウすら作れない。 普通のマウスイベントもハンドルできない。
そんな訳で、DirectXってどういう関数群/ライブラリなのか普通に把握してれば、そもそもそんな質問も出ないと思う

914デフォルトの名無しさん:2010/05/18(火) 19:43:44
>>911
まーそうだけど詰まったら調べりゃいいんだし便利ライブラリとかもあるから、難しく考えずやってみれば
915デフォルトの名無しさん:2010/05/18(火) 19:45:16
マウス関連の操作とか、ファイル入出力、場合によってはGDIの力を
借りることもあるから、簡単なWin32アプリは作れる人が前提
916デフォルトの名無しさん:2010/05/18(火) 20:20:44
無理ではないんが厳しいとも思う

SDKに入ってるもっとも簡単なサンプルだと
全体の半分くらいがWindowプログラムの領域になるわけで
経験者であれば残り半分を見れば良いだけの所だが
初心者はどこまでがWin32の領分でどこからがDirectXの領域か判断が付かないから
最初に直面しなければならない情報量が極端に増える

しかし、ステップアップしていけば
Windowsで処理する部分なんて全体の数%にも満たなくなるわけだから必須ではない
Win32APIを極める必要はまったく無いので
スケルトンウィンドウが作れて簡単なメッセージ処理が出来ればあとはDirectXの勉強に専念してOKだと思われる
917デフォルトの名無しさん:2010/05/18(火) 20:35:07
winプログラミングもやるのが面白いんじゃないの...
918デフォルトの名無しさん:2010/05/18(火) 20:56:34
開発に自作ツールとか作り始めたら本格的に勉強すればいいんじゃね?
919デフォルトの名無しさん:2010/05/18(火) 20:56:48
みんなありがトン
猫本読破してくるぜ
920デフォルトの名無しさん:2010/05/18(火) 21:11:32
ウィンドウとメッセージループ、メインループさえ作れれば、
あとは適宜必要になったら調べればいいかな
さっさと済ませてDirectxに入ったほうが楽しめるかもしれん
921デフォルトの名無しさん:2010/05/18(火) 21:28:55
XAudio2について質問です
SDKサンプルのXAudio2BasicStreamを見ながら勉強中です
サンプルではメインスレッドでwavデータをロードしていますが、

これは実際にゲームなどで使う場合、
自ら_beginthreadex などして再生スレッドを生成する必要があることを
意味しますか?
922デフォルトの名無しさん:2010/05/18(火) 21:34:40
>>921
なんでヘルプ読まないの?
http://msdn.microsoft.com/ja-jp/library/bb924665(v=VS.85).aspx
923デフォルトの名無しさん:2010/05/18(火) 21:46:29
コールバック内にファイルロード処理を書けばいいということでしょうか?
924デフォルトの名無しさん:2010/05/19(水) 00:37:59
敵キャラを描画する時って、全く同じモデルの敵が居るなら、ソートして一括描画した方が良いでしょうか?
マテリアル切り替えが重いと聞いていて当然やるべきだと思っていたのですが、
今時のパーツはそこまで重くならない等と聞いて、そこまでしなくて良いのかな? と疑問に。

描画時だけソートするか、ゲーム全体をソート前提にあれこれ工夫するか悩んでいます。
どう思われますでしょうか?
925デフォルトの名無しさん:2010/05/19(水) 00:46:18
SetMaterialのオーバーヘッドを削るよりも、
見やすいコードにしたほうがいいのではないだろうか〜
926デフォルトの名無しさん:2010/05/19(水) 00:48:16
スマン 見やすいって変な表現だな
ソートしなきゃパフォーマンス落ちる!
とは聞いたことがないなぁ
927デフォルトの名無しさん:2010/05/19(水) 01:22:21
ソートと同じモデルの関連性が分からん

ソートするんだったら全部をZソートして
手前から順に描画することでそれより奥にあるものの描画を省くことで
パフォーマンスを上げようと試みるものじゃ

Z値で大まかにグループ分けして
手前のグループから順にさらのその中でマテリアル単位で描画するとかでもない限り
そんな大幅なパフォーマンスアップは無いような…
928デフォルトの名無しさん:2010/05/19(水) 07:18:10
エスパーだけど、マテリアルの切り替え減らすためにソートしなきゃって話は、多分
自分でそうしなきゃ行けないような状態で管理してるからだと思う
予め種類ごとになんらかのリストに分けて管理を単にしてないとか。

あるいはモデルをまたいで同じマテリアルがある時、どのモデル達にどのマテリアルが含まれてて
それらをマテリアル単位に描画したいって事なら、それでもソートなんてせず、
自分で決めたそのマテリアルのIDなりなんなりで頂点範囲のリストを予め参照できる作りにしておけばいいだけ

自分のロジックを都合にあわせて書けばおkってだけの話
929デフォルトの名無しさん:2010/05/19(水) 07:28:43
そもそもシェーダーつかってれば
マテリアルなんてメモリ上のデータを定数レジスタに突っ込むだけじゃん?
930デフォルトの名無しさん:2010/05/19(水) 07:39:45
Zソートが要るのは、アルファチャンネルで透過させるときだな。
931デフォルトの名無しさん:2010/05/19(水) 07:53:47
透過の有無に関わらず、手前を先に描画しておけば、その背後がムダに描画されないし、
Zソートはあったほうがイイんでないの??
932デフォルトの名無しさん:2010/05/19(水) 08:01:14
いやこの場合のソートってマテリアルソートじゃないの・・・
シェーダー・テクスチャ・ステートの切り替えを極力減らして高速化を図るって話だろ。
933デフォルトの名無しさん:2010/05/19(水) 08:23:53
結局マテリアルソートって有効なの?
本にはやるべしとか書いてあるけど、
実際の所労力に見合った効果はある?
934デフォルトの名無しさん:2010/05/19(水) 08:51:36
ちゃんと作れば効果は高い。ちゃんと作るのは大変。
このスレのレベルに沿ってアドバイスするなら「そんなことより完成させるのが先」
935デフォルトの名無しさん:2010/05/19(水) 09:12:27
モデルもエフェクト(マテリアル)も同じならそれをグループ化してソートしつつインスタンシングするといいと思う
エフェクトグループ単位でソートして、どのエフェクトから書くか決めるのもありかもな
936デフォルトの名無しさん:2010/05/19(水) 09:20:03
並列処理を考えれば、全部そろってソートしてから描画するより、準備が出来たのからどんどん描画してゆきたいけど。
あらかじめ近・中・遠でわけておくくらいでいいんじゃないか
937デフォルトの名無しさん:2010/05/19(水) 12:50:55
一番重いのはシェーダーの切り替えだっけ?
938デフォルトの名無しさん:2010/05/19(水) 12:57:02
最近はどうなんだろうな
939デフォルトの名無しさん:2010/05/19(水) 14:23:46
どうなんだろうなっていってんだろ...w......
940デフォルトの名無しさん:2010/05/19(水) 15:28:42
エフェクトで管理してあればそんなでも無いはず
941デフォルトの名無しさん:2010/05/19(水) 19:20:50
>>937
何か前のほうの書き込みで、VRAMが潤沢になった昨今では、よほどでない限りは
(CPU->GPU転送レベルの)シェーダ切替は発生しないみたいだから、
あまり気にしなくてもイイってあったよ。
942デフォルトの名無しさん:2010/05/19(水) 19:54:41
シェーダーに限らずマテリアルの変更はパイプラインのフラッシュが必要だから
今でも遅いと思うな。ソートして目に見える違いがあるかどうかはよく分からない。
943デフォルトの名無しさん:2010/05/20(木) 04:03:59
マリオ64みたいなカメラにしたいのですがどうすれば良いですか?
そういうタイプの名前とか、雛形があったらうれしいです
944デフォルトの名無しさん:2010/05/20(木) 04:18:13
うろ覚えだが、つまり二つのカメラを切り替えたいってことか?
945デフォルトの名無しさん:2010/05/20(木) 04:25:12
自分もうろ覚えですが、なんというか、ある範囲内では自由に動けるけど、その範囲を出たらピーっと追って行くみたいな
頭を整理しながら書いてたらなんかすごく簡単そうに思えてきたけど
946デフォルトの名無しさん:2010/05/20(木) 04:33:42
質問するなら、もう少し他人が理解できるように努力してくれ
947デフォルトの名無しさん:2010/05/20(木) 04:35:24
ごめんねごめんねー
948デフォルトの名無しさん:2010/05/20(木) 04:42:23
サンプルクレクレ厨の臭いがする
そんな都合のいい物は存在しないから
とりあえず自分で実装を試みてうまくいかなかったら
改めてどうダメだったのかを質問しに来い
949デフォルトの名無しさん:2010/05/20(木) 04:46:18
しってる
950デフォルトの名無しさん:2010/05/20(木) 05:20:23
Game Programing Gems 2
4.11 古典的なスーパーマリオ64の三人称コントロールとアニメーション
951デフォルトの名無しさん:2010/05/20(木) 05:25:34
>>950
これ本だろ持ってねえぞ
内容晒せよ
952デフォルトの名無しさん:2010/05/20(木) 05:26:43
ぐぐったらあった
953デフォルトの名無しさん:2010/05/20(木) 05:29:18
4までなかった
954デフォルトの名無しさん:2010/05/20(木) 06:31:55
○.xの絶対値が△以下とかどうやって表せばよいですか?
955デフォルトの名無しさん:2010/05/20(木) 06:41:10
しねばいいのに
956デフォルトの名無しさん:2010/05/20(木) 06:42:01
浜田さんおしえてください
957デフォルトの名無しさん:2010/05/20(木) 06:50:16
>>954
fabs
958デフォルトの名無しさん:2010/05/20(木) 06:53:31
>>957        (⌒⌒)
             V
            / ⌒`"⌒`ヽ、         
           /,, / ̄ ̄ ̄ ̄\    大変失礼なことを致しました。
          /,//::         \     何とぞ、ご容赦くださいませんか。
         ;/⌒'":::..            |⌒ヽ     
       /  /、:::::...           /ヽ_ \    
     __( ⌒ー-ィ⌒ヽ、   /⌒`ー'⌒  )    
    ━━━`ー──ゝィソノー‐ヾy_ノー─"
959デフォルトの名無しさん:2010/05/20(木) 13:37:46
マジキチ
サイト見たら数週間掛かるとか書いてあった>ゴムひも視点oz
960デフォルトの名無しさん:2010/05/20(木) 15:12:24
適当にやってたらそれっぽいのできてワロタ
961デフォルトの名無しさん:2010/05/20(木) 18:57:13
スーマリ64のキャメラってたしかジュゲムが撮影してるんだよね
962デフォルトの名無しさん:2010/05/20(木) 20:12:02
立ってなかったので次スレ立てました
http://pc12.2ch.net/test/read.cgi/tech/1274353792/1-100
963デフォルトの名無しさん:2010/05/20(木) 20:48:55
そういやここって次スレ立ての番号がテンプレに入ってないね
あまり速度ないから970か980くらいかと思ってたけど
964デフォルトの名無しさん:2010/05/20(木) 23:04:35
どーでもいーでーす
965デフォルトの名無しさん:2010/05/21(金) 03:16:14
なんか池沼が1人紛れ込んでるみたいだな
966デフォルトの名無しさん:2010/05/21(金) 06:09:32
DrawPrimitiveUPでラインを引きたいのですが思った場所に表示されません
いくつか物体があるのですが、最後に描画される物体のローカル座標?でおそらく表示されてしまいます
それらのメッシュはg_pEffect->セットマトリクス、テクスチャ、FVF、ビギンなどの後、
for( UINT p = 0; p < Passes; ++p )
{
V( g_pEffect->BeginPass( p ) );
V( ほげ->DrawSubset( 0 ) );
V( g_pEffect->EndPass() );
}V( g_pEffect->End() );
というような感じで表示しているのですが
それぞれ閉じているので、ライン自体がどこで表示されてるかわからない上に、どのローカル座標に入ってしまったのかわかりません
教えてください。
967デフォルトの名無しさん:2010/05/21(金) 06:18:26
>>966
とりあえずメッシュはシェーダーつかって座標の行列変換して描いてるってことは分かるけど
DrawPrimitiveUPで描くラインは
シェーダー使って描いてるの?固定機能で描いてるの?
968デフォルトの名無しさん:2010/05/21(金) 06:43:33
>>967
わかりません。ある物体の座標をラインのための頂点の配列に入れてDrawPrimitiveUP( D3DPT_LINELIST,4, vert, sizeof(VERTEX));としただけです。
適当なところでDrawPrimitiveUPして試してるかんじです。一番上でDrawPrimitiveUPすると最後の物体からラインが生える。
一番上でDrawPrimitiveUPとして最後の物体で↓にすると
//V( g_pEffect->BeginPass( p ) );
V( ほげ->DrawSubset( 0 ) );
//V( g_pEffect->EndPass() );
とすると上手くいく部分もあります。でも理由が良くわかりません。

969デフォルトの名無しさん:2010/05/21(金) 06:55:27
どこから説明していいのか分からないくらい基本から理解してない事は分かった
埒が明かないのでソースうpしる
970デフォルトの名無しさん:2010/05/21(金) 07:02:35
ソースは無理でつ
エスパーでなんとかおねがいしまつううう
971デフォルトの名無しさん:2010/05/21(金) 07:06:35
ラインは3D空間上に配置したいのか?
それともスクリーン座標で2D的に引きたいのか?
VERTEX構造体とvertの中身だけでも書いてくれ
972デフォルトの名無しさん:2010/05/21(金) 07:12:56
>>971
3D空間でつ
VERTEX vert[] =
{ {0,0,0,0xffff0000},{物体A.x,物体A.y,物体A.z,0xffff0000},
{物体A.x,物体A.y,物体A.z,0xffff0000},{物体A.x + 2.0f,物体A.y,物体A.z,0xffff0000},
{物体B.x,物体B.y,物体B.z,0xffff0000},{物体B.x,物体B.y+0.4f,物体B.z,0xffff0000},
};
これだけでつ(`・ω・´)
ラインに色が付く時とか付かない時とかあって意味わからんお。
973デフォルトの名無しさん:2010/05/21(金) 07:21:37
じゃあ、とりあえず
DrawPrimitiveUPの前に

SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE)

してくれ
974デフォルトの名無しさん:2010/05/21(金) 07:25:21
すでにしてあります(`・ω・´) ゝ
975デフォルトの名無しさん:2010/05/21(金) 07:35:48
まさかとは思うけど
SetTransformで行列の設定はしてるよね?
メッシュは(たぶん)シェーダーで行列変換してるからいいけど
ラインを固定機能でかくならちゃんとデバイスに行列を指定しないとだめだぞ?
976デフォルトの名無しさん:2010/05/21(金) 07:47:30
g_pEffect->SetMatrixでワールド行列やプロジェクション行列を設定していますがこれのことですよね?
今D3DXFX_DONOTSAVESAMPLERSTATEにしてみたりしているのですが意味ありますかね?
元々全てD3DXFX_DONOTSAVESTATEだったのですが
977デフォルトの名無しさん:2010/05/21(金) 07:51:18
>>976
意味わかっててパラメーターを変更したのか?
DXUTを使用したSDK標準のサンプルはビルドして動かしてみたか?
正常に動いてるなら自分のコードと比較してどこが違うか確かめられないか?

人に質問する前に一人で確かめられることはいろいろあるぞ。
978デフォルトの名無しさん:2010/05/21(金) 07:51:39
g_pEffect->SetMatrixはシェーダーに行列を送ってるだけ
メッシュ描画用とは別に
ライン描画用のシェーダーを書いてるとかでもない限り意味無いぞ
979デフォルトの名無しさん:2010/05/21(金) 07:56:20
すいません
文字が間違ってました
説教ありがとうございました
980デフォルトの名無しさん:2010/05/21(金) 07:58:03
え?w
981デフォルトの名無しさん:2010/05/21(金) 08:07:44
とりあえずDrawPrimitiveUP
をシェーダーで書いてるのか固定機能で書いてるのかだけでもはっきりさせてくれよ

DrawPrimitiveUPは
g_pEffect->BeginPass( p ) ;

g_pEffect->End() ;
の内側にあるのか?外側にあるのか?
982デフォルトの名無しさん:2010/05/21(金) 08:14:28
>>979
もう解決ってことでいいのか?
983デフォルトの名無しさん:2010/05/21(金) 08:25:12
>>982
うん(`・ω・´) ゝ
984デフォルトの名無しさん:2010/05/21(金) 10:13:14

 V V
(´・ω・`) うさちゃんピース

985デフォルトの名無しさん:2010/05/21(金) 10:19:41
さっさと埋めようぜ
986デフォルトの名無しさん:2010/05/21(金) 10:21:35
そうだな
987デフォルトの名無しさん:2010/05/21(金) 10:23:46
Mesh管理は自前埋め
988デフォルトの名無しさん:2010/05/21(金) 19:04:38
D
989デフォルトの名無しさん:2010/05/21(金) 19:42:11
よりによって最後の質問が地獄のようなバカ質問だった埋め
990デフォルトの名無しさん:2010/05/21(金) 19:54:35
まだ最後と決まったわけではないよ!梅
991デフォルトの名無しさん:2010/05/21(金) 20:03:30
I Love DirectX API !!
992デフォルトの名無しさん:2010/05/21(金) 21:00:56
みんな最初はバカな疑問を一つ一つ解決して上達するもんじゃねぇか 埋め
993デフォルトの名無しさん:2010/05/21(金) 21:04:35
そう。
そうやって大人の階段を登っていくんだよ。
994デフォルトの名無しさん:2010/05/21(金) 21:15:35
君はまだシンデレラさ
995デフォルトの名無しさん:2010/05/21(金) 22:01:26
Direct○○X
996デフォルトの名無しさん:2010/05/21(金) 22:04:14
>>995
MAX?
997デフォルトの名無しさん:2010/05/21(金) 22:37:55
   __(^^) <ペイピッポォ DirectXスレのマスコット、ペイピッポォ君だピー
  /__ \
  | |   |  |
  (_) (__)
愛用ツール:ツクール
998デフォルトの名無しさん:2010/05/21(金) 22:48:13
DirectXは永遠に不滅です
999デフォルトの名無しさん:2010/05/21(金) 22:59:07
うめ
1000デフォルトの名無しさん:2010/05/21(金) 23:01:18
あ、そういえば
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。