【C++】 DirectX初心者質問スレ Part28 【C】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/03/16(火) 00:16:48これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
0002デフォルトの名無しさん
2010/03/16(火) 00:18:12【C++】 DirectX初心者質問スレ Part27 【C】
http://pc12.2ch.net/test/read.cgi/tech/1263024805/
0003デフォルトの名無しさん
2010/03/16(火) 19:16:58立方体をポイントリスト、ラインリスト、トライアングルリストで描画しようとしているのですが、
ポイントもラインもポリゴンも真っ黒になってしまいます(背景は青色)
頂点フォーマットは
(D3DFVF_XYZ | D3DFVF_PSIZE | D3DFVF_DIFFUSE | D3DFVF_SPECULAR )
の形式で、描画直前に頂点バッファをロックしてdiffuseの値を確認してもちゃんと入ってます。
カラーは0x44ff00ffのような感じで入れて、色々変えてテストしてるんですが、
半透過で表示した場合、最初の44の所を色々変えると、ちゃんと透過の濃度は変化しているので、
カラーは確実に読んでると思います(ただし真っ黒からどんどん薄くなる感じです。赤や青に出来ません)
こういう状況を見て、「あー、これは多分あそこがおかしいんだな」と推測がつく方おられますでしょうか?
現状詰んでます。宜しくお願いします。
0004デフォルトの名無しさん
2010/03/16(火) 20:11:43SetRenderState(D3DRS_LIGHTING, FALSE)
あと、D3DFVF_PSIZEがなんで入ってるの?
0005デフォルトの名無しさん
2010/03/17(水) 01:01:51板ポリのUV座標(画像内座標)の指定をピクセル単位でやりたいのですが、
何か上手い方法はありませんか?
0006デフォルトの名無しさん
2010/03/17(水) 01:25:20そう言うピクセルシェーダーを書けばいいじゃん
板ポリの大きさとテクスチャの大きさを渡せば、シェーダー内でUV値出せるだろ
00073
2010/03/17(水) 02:55:50有難うございます。色が表示されるようになりました。
PSIZEはポイントスプライト表示の時の大きさ格納用に入れてます。
0008デフォルトの名無しさん
2010/03/18(木) 00:00:50サウンド系の質問です
どなたかオーディオインターフェースのマイク入力を
読み込んだ方はいます?
オーディオインターフェースとは こんな感じの製品です
http://www.kurosawagakki.com/items/detail/54714.html
16chのマイク入力を持っているのですが
単純にチャンネルを指定すれば波形として
読めるのでしょうか?
0009デフォルトの名無しさん
2010/03/18(木) 12:14:33DirectX9cを使っています
画像表示、文字表示、キーボード入力をしようとしました
コンパイルは通りましたがメイクをすると
外部シンボル ×××が未解決(・・・・MAIN.OBJ が参照)と表示されます
×・・・D3DXCreateSprite、D3DXCreateTextureFromFileA、D3DXCreateFontA
の3つです
キーボード入力を除くとメイクは問題なし
またに画像表示、文字表示を除くとメイクは問題なし
ですがキーボード入力+画像表示 or 文字表示でメイクが通らなくなり困っています
ソースファイルはmain.cppのみです
どなたかご教授お願いします
0010デフォルトの名無しさん
2010/03/18(木) 12:33:50コンパイラが最適化して根こそぎ削られてたりして
0011デフォルトの名無しさん
2010/03/18(木) 12:40:250012デフォルトの名無しさん
2010/03/18(木) 12:58:550013デフォルトの名無しさん
2010/03/18(木) 13:44:010014デフォルトの名無しさん
2010/03/18(木) 20:50:503Dの着せ替えシステムを実装したくて、現在モデルをそれ用に加工しているのですが、
「着せ替え時はメッシュコンテナのポインタを入れ替える事でできる」
と以前お答えを頂いたのですが、スキンメッシュの話で
「ボーン構造と頂点数が同じじゃないと駄目」といった話を聞き不安に…。
つまり、入れ替えるモデルは全て頂点数が同じじゃないと駄目なのでしょうか?
別にそんな事はないのでしょうか?
00159
2010/03/18(木) 20:59:35>キーボード入力を除いた版は実行すると画面に画像は出る?
>コンパイラが最適化して根こそぎ削られてたりして
表示されています
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の環境でもアップしていいのでしょうか?
0016デフォルトの名無しさん
2010/03/18(木) 21:41:420017デフォルトの名無しさん
2010/03/18(木) 21:58:50そんなの実装する側次第だから、自分で何とかすれば良いだけの話。
0018デフォルトの名無しさん
2010/03/18(木) 22:14:32BCCはよくしらんけど、どゆこと?
>必要な*.libは*.dllに変換しリンクしています
0019デフォルトの名無しさん
2010/03/18(木) 22:19:0100219
2010/03/18(木) 23:05:54環境が変になった
DirectX SDKから落しなおしてきます
00229
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)に変更後に関して記述します
0023デフォルトの名無しさん
2010/03/19(金) 05:38:51アニメーションは同じままってことだよね?
その場合、ボーンは同じじゃないと、アニメーション時に破綻しちゃうのでは?
さすがに頂点数は違っても、スキン情報もちゃんと連動して変更すれば大丈夫だと思う。
0024デフォルトの名無しさん
2010/03/19(金) 14:45:30これはスキンメッシュの各部分に普通のシェーダーをかけるようにすればいいのけ?
0025デフォルトの名無しさん
2010/03/19(金) 15:04:09そうそう
フラグメントリンカ使えば動的にスキンメッシュの部分だけ作れるよ
0026デフォルトの名無しさん
2010/03/20(土) 10:31:15Direct3Dでゲームを作っているのですが、
デバイスロスト対策部分を現在開発中です。
※テクスチャをレンダリングターゲットにしています
一応、基本的なロスト対策は出来ている状態です。
・フルスクリーン⇔スクリーン
・フルスクリーンAlt+Tab
が、ここでCtrl+Alt+Delを押すと、
デバイスの再生成に失敗します。
いろいろ試した結果、Ctrl+Alt+Delで表示されるウィンドウ表示中に
デバイスを生成すると、失敗するようです。
Ctrl+Alt+Delで表示されるウィンドウ表示中は処理を保留したいのですが、
このウィンドウが表示されていること検出する方法を教えて下さい。
0027デフォルトの名無しさん
2010/03/20(土) 12:20:58D3DERR_DEVICELOST
・いったんメッセージループへ戻り(必須)、TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すのを待つ。
・D3DPOOL_DEFAULTリソースの破棄は可能
D3DERR_DEVICENOTRESET
・Resetする。
の手順は守ってるか?
002826
2010/03/20(土) 13:03:39返信ありがとうございます。
自分のソースを確認したところD3DERR_DEVICELOSTになった後、
TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すのを待たずに
再生成していました。
回答の通りにソースを書き直したところ、解決しました。
ありがとうございました。
0029デフォルトの名無しさん
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; }
0030デフォルトの名無しさん
2010/03/21(日) 00:36:01デバイスロストが起こった場合、
発生前に使っていたリソース(D3DPOOL_MANAGEDが使えないもの)を再構築しなければならない とのことなのですが
動的に生成、破棄されるクラスの中にリソースを入れてある場合、
デバイスロストが発生した時点で、再構築しろというメッセージを各オブジェクトごとに送らなければなりません
素人の私の考え方だと、
「現在生成されているオブジェクトのリスト(いくつかのポインタ)を作っておいて、
それで各オブジェクト(すべてが同じクラスのオブジェクトとは限らない)に再構築しろというメッセージを送る」
こんなイメージが漠然と描かれるのですが、
もっと楽、または適切、または効率が良い方法があれば教えていただきたいです
0031デフォルトの名無しさん
2010/03/21(日) 00:44:53まさかと思うが、浮動小数点型を float == float 見たくしてないよな?
違うならば、ズレとはどの程度かを言いたまえ
0032デフォルトの名無しさん
2010/03/21(日) 01:17:42そのコードが何をしたいのか意味が分からない。
3歩進んで2歩戻るようなことしてるし。
0033デフォルトの名無しさん
2010/03/21(日) 02:02:0900349
2010/03/21(日) 22:46:05*.lib → *.dllの変換は不可
DirectX 9.0 SDK Update (April 2007)に換えてみたが
今の所問題はなさそう
以上、 名無しに戻ります
003529
2010/03/21(日) 22:47:50D3DXVec3TransformCoord(&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座標に違いが生じてしまっていました。
とりあえず、うまくいきましたので、お礼をさせていただきます。
0036デフォルトの名無しさん
2010/03/21(日) 23:59:56SSE2を無効化しても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;
}
0037デフォルトの名無しさん
2010/03/22(月) 08:24:32うまくアニメーションされません。スキニングしない場合は正常に表示されます。
もしかしてボーン行列の掛け算の順序とかも変えないといけないんでしょうか?
0038デフォルトの名無しさん
2010/03/22(月) 08:39:350039デフォルトの名無しさん
2010/03/22(月) 08:50:21ヘルプに書いてあるように、
三角形の頂点の順序を反転し、システムが前から見て時計回りにたどれるようにする。つまり、頂点が v0、v1、v2 であるとすると、Direct3D に v0、v2、v1 として渡す
をすればいいんですよね?
0040デフォルトの名無しさん
2010/03/22(月) 13:57:44>>D3DXVec3Unprojectの結果をD3DXVec3Projectしても元には戻らないね。
俺も自分のライブラリで作ってみたが、別に元に戻るみたいだが。
戻らない理由も特に見当たらないし。
まあただ、逆行列の精度が悪くて誤差は凄いけど。
0041デフォルトの名無しさん
2010/03/22(月) 14:09:03頂点そのものもひっくり返せ
0042デフォルトの名無しさん
2010/03/23(火) 10:27:06必ず失敗(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となっていますが、これは関係ありますでしょうか?
0043デフォルトの名無しさん
2010/03/23(火) 10:27:47CComPtr<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;
}
0044デフォルトの名無しさん
2010/03/23(火) 10:28:28{
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;
}
004542
2010/03/23(火) 11:00:13ソースを削ってろだにアップしました。
お願いします。
0046デフォルトの名無しさん
2010/03/23(火) 12:56:14それで正常動作だろ。
0047デフォルトの名無しさん
2010/03/23(火) 13:35:05http://msdn.microsoft.com/ja-jp/library/bb172584(VS.85).aspx
Direct3D 9 と Direct3D 9Ex の違い
D3DPOOL_MANAGED は、IDirect3DDevice9 の場合は有効ですが、IDirect3DDevice9Ex の場合は無効です。
004842
2010/03/23(火) 13:37:02すみません、ありがとうございます。
使い勝手のがいいので、DX9C日本語chmを見て使っていたので、乗ってませんでした。
初歩的なミスでした、ありがとうございました。
0049デフォルトの名無しさん
2010/03/23(火) 14:12:41ExはWDDM?動作だからデバイスロストなんてしないしリソースもうまいこと管理してくれるけどVista以降って認識でいいのかな
0050デフォルトの名無しさん
2010/03/23(火) 15:17:450051デフォルトの名無しさん
2010/03/23(火) 16:50:050052デフォルトの名無しさん
2010/03/23(火) 17:00:420053デフォルトの名無しさん
2010/03/23(火) 17:54:27デバイスロストに対応するべきクラスは、
class ICallbackLost{
static list<ICallbackLost*> s_list;
ICallbackLost()
{
s_listに追加;
}
virtual ~ICallbackLost()
{
s_listから削除;
}
virtual void lost() = 0;
virtual void reset() = 0;
}
クラスを継承するといい。
0054デフォルトの名無しさん
2010/03/23(火) 17:55:32メソッドをpublicにし忘れた…
他にも色々つっこみどころはあると思うが、概念的として読んでくれ
0055デフォルトの名無しさん
2010/03/23(火) 22:49:59WEVデータを短い間隔で連続して鳴らすと途中で聞こえなくなるんだけど
原因分かる方教えていただけないでしょうか。
// バッファ作成
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の取得とかバッファの書き込みは問題ないはずです
0056デフォルトの名無しさん
2010/03/23(火) 23:00:57DirectSoundのバッファが小さいと問題出るので、バッファの最小限のサイズを決めて
余白は無音で埋めるというのがあった覚えがある。最小サイズは1024byteか4096byteだったような気がする。
0057デフォルトの名無しさん
2010/03/23(火) 23:38:46ありがとう
試しにバッファサイズを +4096 してみたけど解決しなかった
どうもDirectInputの入力で音を鳴らしたときに途切れる現象が発生する。
普通にループだけで0.2秒おきに鳴らしても問題なかった。
どっかでメモリ壊してるのかも
0058デフォルトの名無しさん
2010/03/23(火) 23:39:57一回他の音楽データで試してみて
0060デフォルトの名無しさん
2010/03/24(水) 00:20:42あれ使うくらいならDx11使う方が遥かにいいと思うけど。
0061デフォルトの名無しさん
2010/03/24(水) 00:38:51漢字は当たり前ですが、、、
0062デフォルトの名無しさん
2010/03/24(水) 00:39:16いまだにD3D9を要求してくるからねぇ。
仕方なしに使う場面も結構あると思うよ。
0063デフォルトの名無しさん
2010/03/24(水) 00:45:37TRIANGLESTRIPの場合、1枚目の頂点を時計回りで定義すると2枚目は反時計回りにならないですか?
0064デフォルトの名無しさん
2010/03/24(水) 02:00:51別に頂点順にポリゴンを形成しなければならない道理は無いじゃん
0-1-2, 1-3-2, とかで処理してると思えない?
0065デフォルトの名無しさん
2010/03/24(水) 02:40:48ありがとうございます!
なるほど・・・イメージが沸いてきました
この考え方で試行錯誤してみますっ
006665
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つの仮想関数の中身を書いてあげれば、うまく望んだ動作をしました
ありがとうございました!
0067デフォルトの名無しさん
2010/03/24(水) 09:28:15念のため言っておくが、デストラクタにvirtualつけ忘れてんぞ
0068デフォルトの名無しさん
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;//再構築処理を書く
};
};
見当違いだったら須磨祖
0069デフォルトの名無しさん
2010/03/24(水) 10:01:560070デフォルトの名無しさん
2010/03/24(水) 10:07:46気分の問題程度だよね。
あとs_listはprivateでいいよね。
あと、>>68のはせっかくコンストラクタとデストラクタで登録/削除処理してたのに、自前で登録関数呼ぶことになっちゃうよね。
趣旨理解してないぞ
0071デフォルトの名無しさん
2010/03/24(水) 10:10:22意味不明すぎる
ReleaseResourceが呼ばれるのは、D3Dがデバイスロストした時だろ…
0072デフォルトの名無しさん
2010/03/24(水) 10:14:39余計なお世話でしたね
0073デフォルトの名無しさん
2010/03/24(水) 10:43:39IDirect3DTexture9* tx2 = tx1;
tx1->AddRef();
このテクスチャがロストした場合は、tx1で再構築すればtx2では再構築する必要ありませんか?
0074デフォルトの名無しさん
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はそのままで使えるけど、アクセスは面倒なことに・・・
0075デフォルトの名無しさん
2010/03/24(水) 17:32:170076デフォルトの名無しさん
2010/03/24(水) 20:31:06デバイスロストはDirect3D単位で起こるものではなく
Direct3DDevice単位で起こる。
Direct3DDeviceは、例えばビデオカードが2枚刺さってれば
ふたつ作ることもありうる。
つまり、staticのリストはNG。デバイス毎にリストを保持するのが正しい。
0077デフォルトの名無しさん
2010/03/24(水) 22:49:10指摘ありがとうございます!
virtualなのですが、このクラスでは、
リストの中に入っているポインタを使ってdeleteをせず、
派生させたクラスで個別にdeleteを呼ぶためにリーク類は起きない、
ということでつけていません(確認済み)
なのでデストラクタの実態にはリストから削除という命令を書いているという形です
>>68
>リスト持ってる管理側とクラス分けたほうがよくないか?
たしかにおっしゃる通りかもしれません
もういちど考えてみます!
>>70
>あとs_listはprivateでいいよね。
まったくその通りです 修正します
ご指摘感謝です!
0078デフォルトの名無しさん
2010/03/24(水) 22:54:59なるほど・・・そのパターンは考えていませんでした
勉強になります
しかしとりあえず今回は一番多いパターンのビデオカード1枚という形で、
組んでいくことにします
0079デフォルトの名無しさん
2010/03/25(木) 00:47:56意味不明
アルファ値無しのテクスチャの色成分はRとGとBだが
黒とは、RとGとBの値が0の時を指す
カラーキーと同じように、黒の時にアルファ100%とするなら
条件分岐が使えるバージョンなら
out.a = 1;
if ( tex.r == 0 && tex.g == 0 && tex.b == 0 ) {
out.a = 0;
}
こんな感じ
0080デフォルトの名無しさん
2010/03/25(木) 00:50:36ttp://down11.ddo.jp/uploader/download/1269445212.zip
パスはaaaa
クラスは2つに分けました
そのほうが機能ごとに分けられ、より整理できました
>>68で指摘のあったとおり、クラスを2つに分けました
・リストを管理するクラス
・ロスト情報を受け取るための抽象クラス
おかしな点ございましたらご指摘をお願いします
008180
2010/03/25(木) 00:52:490082デフォルトの名無しさん
2010/03/25(木) 01:32:11レスどうも。。。
RGBを0〜1にしたいということです。
調べたんですがこれで求まるらしいですねG = g*0.59 + r*0.3 + b*0.11;
0083デフォルトの名無しさん
2010/03/25(木) 02:38:080084デフォルトの名無しさん
2010/03/25(木) 14:05:30それをどう解釈したら「黒成分をアルファ値として出力」になるんだよww
0085デフォルトの名無しさん
2010/03/25(木) 14:15:40日本語が不自由っていうレベルじゃねえぞwwwwwwwww
精子からやり直せwwww
0086デフォルトの名無しさん
2010/03/25(木) 16:45:480087デフォルトの名無しさん
2010/03/25(木) 16:55:36カラー画像をグレー化する変換式は1通りの決まった正解があるわけじゃないよね
0088デフォルトの名無しさん
2010/03/25(木) 16:59:410089デフォルトの名無しさん
2010/03/25(木) 17:01:280090デフォルトの名無しさん
2010/03/25(木) 19:03:41まぁ、言いたいことは分かる。
輝度(Y)、グレースケールなどなど、言い方はいろいろあるね。
0091デフォルトの名無しさん
2010/03/26(金) 01:02:250092デフォルトの名無しさん
2010/03/26(金) 01:13:09現在は頂点をスクリーン座標で指定し、ビューポートの逆変換によって表示しています
Z軸の回転は問題ないのですが、
X軸Y軸の回転の場合縦横に縮小した感じではなく、
奥の辺は短く、手前の辺は長く(画面外に出ると思いますが)なるようにしたいです
スクリーン座標からいったん仮にワールド座標を求めてそこで回転させるとかしかないでしょうか?
なにか良い方法があればよろしくお願いします
XYZ軸の回転が全て0の時は画像とスクリーンのピクセルが一対一になるようにしたいです
0093デフォルトの名無しさん
2010/03/26(金) 07:40:21World空間ではなく、View空間まで戻して回転させる
変換行列 = 逆Viewport行列 * 逆Projection行列 * 回転中心まで移動行列 * 回転行列 * 逆回転中心まで移動行列 * Projection行列 * Viewport行列
↑を各頂点に掛ければいい
面倒そうなところは、回転中心まで移動行列だけど、、
これも似たようなプロセスで事前に求めておくしかないかなぁ
0094デフォルトの名無しさん
2010/03/26(金) 12:12:46結構プロテクトかかってると思うけど
0095デフォルトの名無しさん
2010/03/26(金) 12:54:200096デフォルトの名無しさん
2010/03/26(金) 12:59:530097デフォルトの名無しさん
2010/03/26(金) 13:08:050098デフォルトの名無しさん
2010/03/26(金) 13:29:230099デフォルトの名無しさん
2010/03/26(金) 13:41:47つぶやかずにはいられなかったんだよ。
0100デフォルトの名無しさん
2010/03/26(金) 22:08:45バーテックス/ピクセルシェーダ2.0で動かしてるんだが、
どうもこのその板では動かないっぽいんだが手元にない。
0101デフォルトの名無しさん
2010/03/26(金) 22:31:40バックスタブみたいなもん?
0102デフォルトの名無しさん
2010/03/26(金) 22:35:08後方互換性を維持するためのサポート。
新しい工業製品が旧世代での古い機能を満たすように考慮すること。
0103デフォルトの名無しさん
2010/03/27(土) 00:34:49ドライバ最新は当り前じゃね?
0104デフォルトの名無しさん
2010/03/27(土) 00:45:190105デフォルトの名無しさん
2010/03/27(土) 01:52:52http://www.youtube.com/watch?v=WOVjZqC1AE4
0106デフォルトの名無しさん
2010/03/27(土) 01:59:35アクティブウィンドウがDirectXゲームか否かを判断する方法ってある?
0107デフォルトの名無しさん
2010/03/27(土) 02:05:41Direct3D/DirectDrawデバイスをエクスプルーシブモードで
開こうとすると失敗することで判定するw
まあ、最近ときどきある、フルスクリーンもどきな動きをする『ウィンドウモード』のゲームだとだめだけど。
0108デフォルトの名無しさん
2010/03/27(土) 02:21:20アクティブウインドウがゲームでなくても、邪魔になるようなポップアップは
出すべきじゃないと思う。
0109デフォルトの名無しさん
2010/03/27(土) 02:37:21ハードとプログラムの受け渡しって何がしてると思う?
ドライバによって、同じ古いグラボでも対応する、しない&動く、動かない機能があるが
動作検証って、グラボと各Verのドライバでするわけ?
ドライバ位は最新を前提にしないと、現実的に動作保証なんてしてられないだろ
0110デフォルトの名無しさん
2010/03/27(土) 04:07:33ウィンドウモードだとDirectX経由のアプローチで何かしらの情報を得るのは難しいですかね
>>108
普段は必要とされてるけど、ゲーム中は黙ってて欲しい微妙なバランスの物があるのです
ポップアップはその一例で、ユーザーのプライオリティ変化に自動的に追従できる所はしたいと言う話です
0111デフォルトの名無しさん
2010/03/27(土) 09:59:020112デフォルトの名無しさん
2010/03/27(土) 11:45:49avastには殺意が沸くが、そういうのを目指してると
0113デフォルトの名無しさん
2010/03/27(土) 11:51:130114デフォルトの名無しさん
2010/03/27(土) 20:09:31どういう不に考えればいいのですか?
0115デフォルトの名無しさん
2010/03/27(土) 21:02:090116デフォルトの名無しさん
2010/03/27(土) 21:26:210117デフォルトの名無しさん
2010/03/27(土) 23:25:28デバイスロストしたら頂点バッファも作り直さないといけないですよね、
その場合もういちどファイルから頂点を読んでいって頂点バッファに書き込みという作業が必要になるんですか?
0118デフォルトの名無しさん
2010/03/27(土) 23:29:50うん
0119デフォルトの名無しさん
2010/03/27(土) 23:36:24ありがとう
めんどくさいからD3DPOOL_MANAGEDで作ります
0120デフォルトの名無しさん
2010/03/30(火) 00:55:10とりあえず貼ってみるけど
ttp://asd.if.land.to/code/common.html#r_ftoa
0121デフォルトの名無しさん
2010/03/30(火) 16:26:31D3DPOOL_MANAGEDが使えるものは全てそれでいい。
俺らが小手先使うより、MSのプログラマが作ったもののほうが優秀だからな
0122デフォルトの名無しさん
2010/03/30(火) 17:28:10http://msdn.microsoft.com/ja-jp/directx/default.aspx
↑でchm形式DirectX SDK(August 2009)のドキュメント日本語版がダウンロード出来るようになったけど
開くといろいろおかしい、左側のパネル部分がキーワード検索しかないうえに、その検索もうまくいってない
これ他の人はどうだろう?
0123デフォルトの名無しさん
2010/03/30(火) 18:04:22俺も同じだ
0124デフォルトの名無しさん
2010/03/30(火) 21:02:24んじゃ俺も同じで
0125デフォルトの名無しさん
2010/03/30(火) 21:06:16ブロック解除ってやったら表示されたわ
ttp://www.nishishi.com/blog/2009/06/chm_help_tips.html
0126デフォルトの名無しさん
2010/03/30(火) 21:23:44俺もブロック解除ってやったら表示されたわ
0127デフォルトの名無しさん
2010/03/30(火) 22:16:440128デフォルトの名無しさん
2010/03/30(火) 22:28:280129デフォルトの名無しさん
2010/03/30(火) 22:43:340130デフォルトの名無しさん
2010/03/30(火) 23:13:100131デフォルトの名無しさん
2010/03/30(火) 23:15:25右のページはブロック解除すれば表示されるけど、
左側は>>122の言うとおりキーワード検索(機能しない)しか出なくない?
0132122
2010/03/31(水) 00:27:14そうなんだ、今までのDirectX SDKのマニュアルでは、左側は目次と検索、キーワードなんかがあったけど
今回のは検索しかない、しかも機能がちゃんと動いていない。
検索すると、検索結果に「無題」(たぶん検索語句が含まれるページのタイトル)がいくつかリストアップされる
だけどそのページに移動出来ない。
0133デフォルトの名無しさん
2010/03/31(水) 00:28:26まあどうでもいいけどね
0134デフォルトの名無しさん
2010/03/31(水) 00:38:440135デフォルトの名無しさん
2010/03/31(水) 01:36:43今スロットゲーム的なものを作ってる途中なのですが
流れとしては
『ランダムにスロットに画像表示
キーが押されたら画像がそろっているかの確認処理
そろっていたらその画像に応じて所持コイン増加
はずれだとコイン1枚減少』
のようにしているのですが
コインの増減処理のとき
なぜか2回処理されて(コイン1枚減少が2回行われる
しまいます。
WaitTimerが関連してるような気がして調べてみたものの
わかりません。
↓ソースです。初心者なので汚かったりするかとおもいます
http://uproda.2ch-library.com/lib231205.zip.shtml
0136デフォルトの名無しさん
2010/03/31(水) 02:02:190137デフォルトの名無しさん
2010/03/31(水) 02:07:15キーが押されている限りtrueになる。
trueのフローの中にコイン減処理が入っているから、
キーが押されている限り、コインが減っていくんじゃないの?
0138デフォルトの名無しさん
2010/03/31(水) 02:31:13f(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中もキー入力は受け付けるみたいです。
別の方法を考えています
0139デフォルトの名無しさん
2010/03/31(水) 03:41:31DxLibはDxLibであって、DirectXではない。
gamedevに「DXライブラリ総合スレッド」ってのがあるから、
そっちでも行ってくれ。
0140デフォルトの名無しさん
2010/03/31(水) 09:19:320141デフォルトの名無しさん
2010/03/31(水) 11:24:18そりゃ、その変更じゃ何も変わっていないんだから
結果も当然変わらん。
whileループ1回目でL45のkeyに値が入ってから、
whileループ2回目で改めてkeyに値を入れるまでの時間は殆ど同じだ。
それが原因。対応法としてはL45をL87に移動することだが、
もっと根本的にコードを見直した方が良いと思う。
以上スレチ失礼。
0142デフォルトの名無しさん
2010/03/31(水) 23:00:32アルファチャンネルが無い画像(四角い画像)なら、BをAの上に頂点色も適用しつつ上書き描画すればいいだけなんですが。
Aをアルファ25%、Bをアルファ75%にすればいいやと最初思いましたが、
それだと背景の色が出てしまい出来ないことに気づきました・・。
シェーダーを使うと古いビデオカードでは動きませんし、テクスチャの内容を書き換えるのも重いようなので避けたいです。
800x600の画像を1024x512のテクスチャの左上に置いているのですが、1fpsになってしまいます。
0143デフォルトの名無しさん
2010/03/31(水) 23:10:28ttp://platz.jp/~moal/tblend.html
ここで書いてあることとは別なのかな。
基本的に1枚は不透明で描画しておき、フェードイン/アウトを行うものをその上で描画させる。
別にアルファ云々は関係ないはずなんだけど。
0144デフォルトの名無しさん
2010/03/31(水) 23:19:44顧客になりそうもない人。商売なら相手にする価値が無い。
たぶん趣味の自作ライブラリを鍛えたいという用途だと思うが、だったら
全部ソフトウェアで処理すればいいと思うよ。いまどきのCPUなら
エロゲーの凝ったフェードイン・アウトくらいできちゃうよ。
0145142
2010/03/31(水) 23:20:25全く同じ形状をしている画像同士なら、それで出来ると思います。
そうではなく、2枚の画像は異なった形状をしていて、
「画像Aをフェードアウトさせつつ画像Bをフェードイン」させたいんです。
0146146
2010/03/31(水) 23:29:42すいません、レスついてたの気がつきませんでした。
じゃあシェーダーを使って処理するようにしようと思います。
よく考えたら、
自作ライブラリではなくオープンソースのを少し改変して使ってるので
他にOpenGLとソフトウェアのレンダリングエンジンがありました。
スペック低いPCの場合はそっち使ってもらえばいいですね。
RTTが使えるなら
常にレンダーターゲットのテクスチャに画面描画を行っておいて、
それをもとにフェードインすればいいかもしれません。
(でもそこまでしないで素直にシェーダー使った方が楽か)
0147デフォルトの名無しさん
2010/03/31(水) 23:32:39フェードインアウトしている間、画像Aのα+画像Bのα=1を維持して
下の背景を透けさせないようにしたいのか?
0149デフォルトの名無しさん
2010/03/31(水) 23:38:58あれはテクスチャをロックして、直接書き換えてるんだが。
その方が2枚のテクスチャを重ねて頑張ろうとするより簡単。
0150デフォルトの名無しさん
2010/03/31(水) 23:39:33片方のアルファ値の減少量を
もう片方の画像の増加量にする
0151デフォルトの名無しさん
2010/03/31(水) 23:43:550152デフォルトの名無しさん
2010/03/31(水) 23:45:020153デフォルトの名無しさん
2010/03/31(水) 23:51:350154デフォルトの名無しさん
2010/03/31(水) 23:54:06>>150 で出来るだろ
0155デフォルトの名無しさん
2010/04/01(木) 00:03:330156デフォルトの名無しさん
2010/04/01(木) 00:59:05よくわからないのなら、静観していなさい
よいですね?
0157デフォルトの名無しさん
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
0158デフォルトの名無しさん
2010/04/01(木) 01:02:000159デフォルトの名無しさん
2010/04/01(木) 01:55:12たとえば、テクスチャABで同じ色の場所の場合
ブレンド値が変化しても
A*a + B*(1-a) = A(=B)
になるようにしたいんでは?
それだと157だとできなくない?
シェーダー使うかロックするしかないのでは?
0160デフォルトの名無しさん
2010/04/01(木) 02:16:06勝手に意訳すると、AとBはそれぞれ異なる形状でアルファ抜きされているが、
AとBが両方とも不透明な領域ではAからBへのブレンド中に背景を一切透過させたくない、
という要望のようだ。
これは少々トリッキーな処理が必要な気がする。
0161デフォルトの名無しさん
2010/04/01(木) 07:55:00そもそも何をやりたいのかがいまいち分からん
単純に背景透過させたくないなら、背景の描画を最後にするって方法もある
0162デフォルトの名無しさん
2010/04/01(木) 08:04:21アルファテスト、ステンシルテストとかでどうにかできないのかな
使用してる画像や書いたコードどんなんだろ
0163デフォルトの名無しさん
2010/04/01(木) 08:51:35重なってる部分の背景を出したくないとして
じゃあ、重なって無い部分はどいうしたいんだ?
背景が透けてていいのか?
0164デフォルトの名無しさん
2010/04/01(木) 08:54:50裏が透けないフェードなんて存在し得ないだろ
つーかフェード中にABが重なる部分の背景を白抜きすりゃいいだけの話だろ
難しく考えすぎなんだよ
0165デフォルトの名無しさん
2010/04/01(木) 08:57:56そこは透けていいんじゃないかね。
重なってない部分はブレンド値の変化とともに「A→背景」または「背景→B」と変化し、
重なっている部分だけは背景を混入させずに「A→B」と変化させたいのではなかろうか。
0166デフォルトの名無しさん
2010/04/01(木) 09:42:58完全に正しい結果が欲しいならシェーダー使うしかない希ガス
0167デフォルトの名無しさん
2010/04/01(木) 09:46:25頂点カラー?
それともロックして書き換えてるんの?
それによっても違うと思うんだが
0168デフォルトの名無しさん
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のα値を加算する)
出来あがったテクスチャを通常描画する
で、どうよ?
0169デフォルトの名無しさん
2010/04/01(木) 14:37:28しかし実際問題重なってる部分は透過させないって必須なのか?
クロスフェードにそんなに何秒もかける訳ないし
実際動かして見たら透けててもそんなに気にならんと思うのだが…
背景の後ろでフレーム外の仕事しててユーザーには見せられないとか?
0170デフォルトの名無しさん
2010/04/01(木) 16:58:550171デフォルトの名無しさん
2010/04/01(木) 17:37:460172デフォルトの名無しさん
2010/04/02(金) 01:01:28どうしたらよいでしょうかね、、、
0173デフォルトの名無しさん
2010/04/02(金) 01:05:08- AxorB 領域にAとBをアルファ描画
- AandB 領域にAを不透明描画
- AandB 領域にBをアルファ描画
かしら。
マスク処理はステンシルか、Zバッファで代用ね。
0174デフォルトの名無しさん
2010/04/02(金) 01:17:13シェーダーでやる方法って具体的にどうやるんですか?
気になります
わかる方いれば教えてください
0175デフォルトの名無しさん
2010/04/02(金) 01:56:290176デフォルトの名無しさん
2010/04/02(金) 08:14:56AのテクスチャとBのテクスチャの両方のアルファ値が0.0より大きい場合にアルファ値の出力を1.0にするだけ。
あとは普通に合成しちゃえばいい。
0177デフォルトの名無しさん
2010/04/02(金) 13:13:38>>142にはそういう条件は書かれていないが。
ポリゴンが一致してるなら、シェーダで2つのテクスチャに同時にアクセスして
>>176のような感じで処理すればできそうだね。
AとBのテクスチャ素材のアルファ抜きにアンチエイリアスが入っていたりする場合は
もう少しロジックを工夫する必要がありそうだけど。
0178デフォルトの名無しさん
2010/04/02(金) 13:48:46>>145
0179デフォルトの名無しさん
2010/04/02(金) 13:51:53>>145はアルファ抜きの形状が異なるって意味じゃないの?
ポリゴンの頂点位置まで異なるとは言っていない気がする。
0180デフォルトの名無しさん
2010/04/02(金) 13:57:45本人いないんだし
0181デフォルトの名無しさん
2010/04/02(金) 14:15:39合成用のレンダリングターゲットは必須じゃね?
そこを省こうとするから面倒なだけで
0182デフォルトの名無しさん
2010/04/02(金) 14:23:430183デフォルトの名無しさん
2010/04/02(金) 17:01:48DXGIの機能、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
0184デフォルトの名無しさん
2010/04/02(金) 20:00:070185デフォルトの名無しさん
2010/04/03(土) 14:35:35Windowsに強く依存するDirectX開発でgccを使うなんてマゾとしか思えん。
ただで済ませたいならVisual Studio 2008 Express Editionに必要なSDKを加えて開発するのが正道。
ソースコードが間違っているのか開発環境に誤りがあるのか判断ができないのでは答えようがない。
0186デフォルトの名無しさん
2010/04/03(土) 18:28:35とりあえず、画面の切り替えに成功したので(たまに失敗するけど)報告
WndProcでAlt+Enterを拾って、
BOOL state;
g_pSwapChain->GetFullscreenState(&state, NULL);
g_pSwapChain->SetFullscreenState(!state, NULL);
return 0;
を実行したらうまくいった。
たまに失敗するのは、これはたぶんDXGIの画面切り替えが始まってから
一定時間内にstateの変更を実行できなかったときだと思う。
0187デフォルトの名無しさん
2010/04/03(土) 18:38:12DX11ではなくDX9の話だが、
Firefox3.6以降が別に起動している時にフルスクリーン表示に切り替えようとすると失敗する場合があるな。
フルスクリーン表示へのリセットに失敗するのではなく、
そのすぐ後にアプリケーションのフォーカスが失われてしまう。
Firefoxを閉じるとすぐになおる。
0188デフォルトの名無しさん
2010/04/03(土) 23:41:34完全な真っ白になってしまいます。
テスト的な描画なので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に指定しているし、マテリアルに設定した色ではなく、
真っ白になってしまうのが納得いきません。何故真っ白になるのでしょうか?
0189デフォルトの名無しさん
2010/04/04(日) 00:24:40とりあえずサンプルのMeshesの
Tiger.xと差し替えてみて表示されるかどうか確かめて見たら?
前に似たような質問で
マテリアルカラーじゃなくて
頂点カラーが頂点フォーマットに含まれててそっちと乗算されてたとかあったな
0190デフォルトの名無しさん
2010/04/04(日) 00:35:56それじゃあ、Xファイルに問題があるのか
プログラムに問題があるのか分からないから
xファイルかソースをうp
0191デフォルトの名無しさん
2010/04/04(日) 00:46:43Tigerを表示してみたところ、全く正常に表示されました・・・
が、そもそもTigerはテクスチャを張っているので、マテリアルカラーは関係ないような気がしますが、
一応表示処理はマテリアルカラーを除けば正常だと思います。
>>190
すいません。エロエロなのでアップ出来ません。
0192デフォルトの名無しさん
2010/04/04(日) 00:56:420193デフォルトの名無しさん
2010/04/04(日) 01:02:05じゃなくて
Meshesの方で問題のXファイルを表示してみたら、というハナシ
0194デフォルトの名無しさん
2010/04/04(日) 01:26:33試してみました。ちゃんと肌色や黒やピンクで表示されています。
0195188
2010/04/04(日) 01:59:28D3DRS_LIGHTINGをFALSEにしていた部分をコメントアウトし、
D3DRS_AMBIENTを0xffffffffにしたらサンプルと同じ表示になりました。
D3DRS_LIGHTINGをFALSEにした状態でD3DRS_AMBIENTをいじらなくても、
直接頂点を頂点バッファに入れてDrawIndexedPrimitiveする時には正常に頂点色で表示されていたので、
同じ感覚でやれるはずだと思い込んでいました。
メッシュのdrawsubsetだけは仕様が違うということでしょうか?
0196デフォルトの名無しさん
2010/04/04(日) 02:00:35ライトをセットしないのとライティングを切るのはまったく違うことだぞ
0197デフォルトの名無しさん
2010/04/04(日) 02:06:51頂点カラーとマテリアルカラーはまったく違う
頂点カラーはその名の通り頂点の色
マテリアルカラーは光を何色で反射するかの設定
xファイルの場合
頂点カラーがデータに含まれてない場合
デフォルトの頂点色0xffffffffで動作するので
ライト切ったら白のまま
0198デフォルトの名無しさん
2010/04/04(日) 02:11:20まー使えるAPIがそろってるD3DXもD3DXMesh系だけは自作するって話をよく聞くからなぁ。
とりあえずPIX for WindowsでD3DXMeshの挙動を調べることをおすすめする。
0199188
2010/04/04(日) 02:15:14分かりやすい説明有難うございます。納得しました。
>>196
>>198
色々なアドバイス有難うございました。
PIX for Windowsについてもググってみます。
0200デフォルトの名無しさん
2010/04/04(日) 07:56:180201デフォルトの名無しさん
2010/04/05(月) 16:31:53自分はC/C++でWin32APIを使ったコーディングはそこそこ慣れていて
たまに自分用のソフトを作ったりもするのですがDirectXはまったく初めてです。
とりあえず書籍やググって見つかるサイトなどを参考にテストコードを書いてみたのですが、
BeginScene がFAILEDになってしまい、描画処理が開始出来ません。
この BeginScene、失敗する条件ってなんなんでしょうか。よろしくお願い致します。
環境:WinXPSP3、DirectXSDK Ver9.0c
0202デフォルトの名無しさん
2010/04/05(月) 16:37:450203デフォルトの名無しさん
2010/04/05(月) 16:37:54device->Present(...)との対応ができていないというのが考えられる。
それから、DirectX初心者ならいきなりコードを書き始めない方がいいよ。
DirectX SDKにサンプルが山ほどあるので、
とりあえず簡単そうなものからビルドして動かして眺めてみるといい。
0204デフォルトの名無しさん
2010/04/05(月) 16:41:48ソースうp
0205デフォルトの名無しさん
2010/04/05(月) 18:37:45勝手に失敗箇所をBeginSceneに限定ちゃってるだけで
実は全然違うところでミスしてそう
0206デフォルトの名無しさん
2010/04/05(月) 18:47:060207201
2010/04/05(月) 21:13:06すみません、お察しの通り超凡ミスでした・・・ww
原因は、ウィンドプロシージャ内、WM_SIZE で IDirect3DDevice9 の Reset を実行し、
さらにそこで InvalidateRect 。レンダ処理を WM_PAINT においていた為でした。 ※実行順序
お騒がせしました。
>>205
いえ BeginSceneの結果がFAILEDになっていた事は確認済みで、その理由が不明だったのです。
最初、WM_PAINT にレンダ処理を置いていたのも重ねてミスでした。※現状はメインループ内に移動
お騒がせしました。
0208142
2010/04/06(火) 00:13:38輪郭部分が汚く見える気がします。こんな安直なやり方ではダメなんでしょうか。
ゲーム画面を常にレンダリングターゲットに描くようにしておいて、
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で描画することになるのでは?
0209デフォルトの名無しさん
2010/04/06(火) 00:25:043Dの世界はな、光も陰もアルファも、みんなバラバラに指定するんだ。
シェーダー関数の中だけ見てたって正しいコードは書けないぞ。
0210デフォルトの名無しさん
2010/04/06(火) 00:25:19なにがしたいのかいまいちわからないから、Aだけ、Bだけ、フェード中、の3つの画像とか示せない?
0211デフォルトの名無しさん
2010/04/06(火) 01:00:09ソースうp
0212デフォルトの名無しさん
2010/04/06(火) 01:03:40168じゃなけど
D3DBLEND_ONEは係数1.0の意味だからα*1.0だぞ
なんかブレンドの仕組みを理解してない予感
0213デフォルトの名無しさん
2010/04/06(火) 01:52:57.xyzに関してはlerpでいいけど
.w(α値)は加算するかどちらか片方が0以上なら1.0にするとしないとだめなんじゃ?
0214デフォルトの名無しさん
2010/04/06(火) 06:20:11書き込んだ値が勝手が0〜1にクランプされます なぜでしょうか
0215デフォルトの名無しさん
2010/04/06(火) 06:25:14カラーテクスチャはそういうシロモノだから。
0216デフォルトの名無しさん
2010/04/06(火) 06:29:05これでどうだ!
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とかフォーマットによってアルファの解釈に流儀があるんだよね。)
0217デフォルトの名無しさん
2010/04/06(火) 06:30:22シェーダの計算を場合分けしてみると、
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)
0218デフォルトの名無しさん
2010/04/06(火) 13:53:540219デフォルトの名無しさん
2010/04/06(火) 14:04:47http://rina.jpn.ph/~rance/directx8/index
を参考にDirectXの勉強をしています。
上記ホームページの第4章の画像の描画(テクスチャ・マッピング)の項目あたりなのですが、
例えば20×20ピクセルのbmp画像を横200×縦400の範囲に敷き詰めて表示したい場合
どうすればよいのでしょうか?
InitVertex関数と配列を組み合わせるのかとも思ったのですが、
組み合わせ方がわかりません。
考え方が間違っているのでしょうか?
もしいいやり方があったら教えてください。
0220デフォルトの名無しさん
2010/04/06(火) 14:50:20やりたいことがイマイチ不明
お前さんの頭の中にはイメージあるんだろうけどそれじゃ伝わらない
とりあえず4章の終わりまで進めてから出直したほうがいいんじゃね?
20×20の画像が任意のものであれば
そのInitVertexを横10×縦20回呼べばいいだけだし
まったく同じ画像の繰り返しでいいなら
テクスチャのアドレッシングモードをD3DTADDRESS_WRAPにして
InitVertex内でtu=1.0とかtv=1.0とかになってるところの値を増やせばいい
0221デフォルトの名無しさん
2010/04/06(火) 14:52:00http://rina.jpn.ph/~rance/directx8/backimage/03.html
ってのがあるじゃん
こういうことがやりたいんじゃなくて?
0222デフォルトの名無しさん
2010/04/06(火) 15:01:36背景+αチャンネル付き立ち絵Aから、背景+αチャンネル付き立ち絵Bへ奇麗にクロスフェードさせたいって事なんでしょ
エロゲの会話シーンみたいな
0223デフォルトの名無しさん
2010/04/06(火) 15:03:14t-potではA32R32G32B32Fを使って座標を保持しているプログラムがある
自分のプログラムでも少し前に組んだやつだとクランプされてない
0224デフォルトの名無しさん
2010/04/06(火) 15:08:07聞かれてる条件について完全にスルーだからもう放置でいい希ガス
状況が不明すぎて答えられないし
またこのまま1週間放置とかなんじゃね?
0225デフォルトの名無しさん
2010/04/06(火) 15:09:00>>221
すみません、
20×20の画像を1個としてこれを繰り返して
横10個×縦20個として同じものを並べて表示したいということです。
とりあえずもう少し調べて考えてみます。お手数おかけしました。
0226デフォルトの名無しさん
2010/04/06(火) 15:15:40基本的にはUV値を0.0〜1.0の範囲より広げて指定するだけでいい。
テクスチャの拡張はいろんなパターンがあるから必要な方式を指定してあげること。
0227デフォルトの名無しさん
2010/04/06(火) 15:32:08ありがとうございます。参考にして考えます。
0228デフォルトの名無しさん
2010/04/06(火) 19:26:56「sampler」と「sampler2D」の違いって何なんでしょう??
今まで何となしに「sampler」を使っていた(2Dテクスチャのみ)んですが、
「sampler2D」というものもあることを知って不思議に思いました。
今まで「sampler」だったところを「sampler2D」に変えてみても、特に挙動は変わりませんでした。
0229デフォルトの名無しさん
2010/04/06(火) 19:48:400230デフォルトの名無しさん
2010/04/06(火) 21:38:180231デフォルトの名無しさん
2010/04/07(水) 18:53:24CPU使用率は100%近くになります。(1コアだけ使用のプログラムはだいたい50%)
これはDirectXのライブラリ内でマルチコアを考慮した動作をしてくれてるからでしょうか?
コア数が多いほど性能は上がる傾向にあるのでしょうか?
0232デフォルトの名無しさん
2010/04/07(水) 19:06:54ビジーループしてるだけのような予感。
0233デフォルトの名無しさん
2010/04/08(木) 00:21:25Sleep
0234デフォルトの名無しさん
2010/04/08(木) 14:16:20http://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) );
}
わからないでしょうか。
0235デフォルトの名無しさん
2010/04/08(木) 14:44:06Name: 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)
0236デフォルトの名無しさん
2010/04/08(木) 15:26:45と思ったら別スレでの出来事だった
0237デフォルトの名無しさん
2010/04/08(木) 16:21:52DirectXサンプルのスキンメッシュをいじり倒して、概ね理解はできてきたと思うのですが、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の呼び出しが超遅いとかでしょうか?
0238デフォルトの名無しさん
2010/04/08(木) 17:07:50メッシュが複数あるとき使わないボーンもあるからじゃないの?
0239デフォルトの名無しさん
2010/04/08(木) 17:29:07意味がわかりませんか。
DirectXったってただの関数、ただのAPIですから、メッセージをヒントに
いつも開発してる時のように追いかけたら。
0240デフォルトの名無しさん
2010/04/08(木) 17:53:05レスありがとうございます
ただ、ちょっとご指摘の内容が理解できないのですが…。
すいません。
複数メッシュ時の挙動は、今ちょうどやっているところですが、やはりメッシュ毎にpMeshContainer(の中身)が生成されるため、
pMeshContainer->pSkinInfo->GetBoneOffsetMatrixを必要になるたびに呼べばよさそうな感じです
0242デフォルトの名無しさん
2010/04/09(金) 00:23:32そんなにコストかからないですか?1つを使いまわしていちいちSetValue()するのもアレかと思いまして。。。
0243デフォルトの名無しさん
2010/04/09(金) 02:48:47それが無駄や面倒臭くないというならやればいいじゃない。
普通は用途で分けるだろ。キャラ用・地形用・ポストエフェクト用・ビルボード用・etc
0244デフォルトの名無しさん
2010/04/09(金) 08:56:280245デフォルトの名無しさん
2010/04/09(金) 14:06:32CDXUTXFileMesh というクラスがどこにあるか、どなたかご存知の方はいらっしゃいますでしょうか
この名前でググった所、多分 DirectX SDK (Novenber 2008) 内にある DXUT 関連だろうという所まではたどり着いたのですが、
これが宣言されているヘッダや lib などが見つかりません。 よろしくお願い致します
0246245
2010/04/09(金) 14:18:06場所: ※デフォルトのパスでインストールした場合
C:\Program Files\Microsoft DirectX SDK (November 2008)\Samples\C++\DXUT\Optional
ここにある SDKMesh.h / SDKMesh.cpp
0247デフォルトの名無しさん
2010/04/09(金) 14:25:13>>244
ありがとうございます。
定数セットは比較的軽いんですか、知りませんでした
0248デフォルトの名無しさん
2010/04/09(金) 14:49:41やった事:
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件以上のエラーが出て死亡。
これはもう、あのサンプルはコンパイル出来ないので諦めろ、という事でしょうか
0249デフォルトの名無しさん
2010/04/09(金) 14:54:13http://sourceforge.jp/projects/sfnet_bullet/releases/?file_id=1982190
0250デフォルトの名無しさん
2010/04/09(金) 17:12:12統合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モデルをデモに使ってるくらいだからもしや・・・と思ったらビンゴだった。
なんか色々やってたのかもな。 とりあえず、乙
0251デフォルトの名無しさん
2010/04/09(金) 17:17:59三角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個の描画をするととんでもなく遅くなってしまったので、
ステートの設定を最小限にしたいと思って試したのですが、望む結果が得られませんでした。
0252デフォルトの名無しさん
2010/04/09(金) 17:23:05D3DFVF_XYZ じゃないとダメというか、意味無いような
0253デフォルトの名無しさん
2010/04/09(金) 17:24:140254デフォルトの名無しさん
2010/04/09(金) 17:49:25トランスフォーム後にZテストしてラスタライズしているのではないのでしょうか?
0255デフォルトの名無しさん
2010/04/09(金) 18:14:33そもそもZバッファ作ってる?
D3DRS_ZENABLE、D3DRS_ZWRITEENABLE、D3DRS_ZFUNCはどう設定している?
rhwの値をどう設定している?
252はトンチンカンなこと言ってるので無視でいい。
0256デフォルトの名無しさん
2010/04/09(金) 18:15:42正直ステートを多少減らしたぐらいじゃそんなに変わらないと思う
その200個のUIを一つの頂点バッファにまとめて一回で描画するとか
別のアプローチを考えた方が建設的かと
0257デフォルトの名無しさん
2010/04/09(金) 18:27:46>m_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
D3DCLEAR_ZBUFFERのフラグが抜けてる
0258デフォルトの名無しさん
2010/04/09(金) 18:41:50ありがとうございました。
原因は
>D3DCLEAR_ZBUFFER
でした。
そして、>>256
実は、UI要素の描画を1000アイテムにしても大して速度低下がなかったので、遅いのはほかに原因がありそうでした。
WM_PAINTでクライアント全アイテムを再描画しているのですが、
リサイズがものすごく遅かったので、描画が遅いものだと勝手に判断してしまっていました。
0259デフォルトの名無しさん
2010/04/09(金) 19:27:49ココが問題
0260デフォルトの名無しさん
2010/04/10(土) 22:07:45↑のソースを使ってDirectSoundで音を鳴らしています
ウィンドウを閉じた時点でたまーに
STOP: 0x000000CB
kmixer.sys
などとブルースクリーンが出ますが、なにが原因でしょうか?
鳴らしてるwavファイルはPCM signed 16bitモノラルで統一してます
0261デフォルトの名無しさん
2010/04/10(土) 22:10:250262260
2010/04/10(土) 22:14:010263デフォルトの名無しさん
2010/04/10(土) 22:18:410264デフォルトの名無しさん
2010/04/10(土) 22:30:300265デフォルトの名無しさん
2010/04/10(土) 22:36:56をFAQにしてくれ
0266デフォルトの名無しさん
2010/04/10(土) 22:50:10こういう話ですか?
ttp://support.microsoft.com/kb/920872/ja
0267デフォルトの名無しさん
2010/04/11(日) 16:09:39なぜか呼び出す行を変えたり、引数を持たせただけで変な方向に動いてしまう
これってナニが悪いの?
0268デフォルトの名無しさん
2010/04/11(日) 16:13:500269デフォルトの名無しさん
2010/04/11(日) 16:17:07エスパーしてみると
多分、行列計算を理解出来てないと見た
0270デフォルトの名無しさん
2010/04/11(日) 16:28:28ソースなんて見るまでもないだろ。
呼び出す行を変えたり、とある辺りでほぼ >>269 のエスパー内容で確定
もう一度数学Bからやりなおせば解決
0271デフォルトの名無しさん
2010/04/11(日) 17:15:22固定機能でやってて行列のセットの仕方になにか誤解があるんじゃね?
0272デフォルトの名無しさん
2010/04/11(日) 19:24:48行列は理解してるが、関数仕様が分ってないレベルなら
行列のセットの仕方が間違ってると気が付くのが道理では?
それを気がつけないのを、行列を理解出来てないと言うのでは?
世の中にはよっぽど鈍な子の、遥か斜め上を行く子がいっぱい居るのが現実ですよ
0273デフォルトの名無しさん
2010/04/11(日) 21:05:18ビデオカードは、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が返ります。テストのためにデバイスを生成して、上記のコードだけを実行するようにしても同じ現象が再現します。
レベルの制限の様な気もしますが、それについて書かれている資料を見つけられません。
レベル毎の制限についてのドキュメントか、何か情報があれば教えてください。
0274デフォルトの名無しさん
2010/04/11(日) 22:43:04DepthClipEnable must be TRUE.とかなんとか
0275デフォルトの名無しさん
2010/04/12(月) 00:40:1710Level9 ID3D11Device Methods
10Level9 ID3D11DeviceContext Methods
そのまんま制限仕様が書かれてますね orz
0276デフォルトの名無しさん
2010/04/12(月) 03:15:12下記クラスを作成/利用したコードを、デバッグモードで実行すると、
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);
}
};
0277276
2010/04/12(月) 03:15:560278デフォルトの名無しさん
2010/04/12(月) 16:57:27コンストラクタでNULL突っ込めばなおるよ。
ハ_ハ
('( ゚д゚∩ なおるよ!
ヽ 〈
ヽヽ_)
0279デフォルトの名無しさん
2010/04/12(月) 18:40:24A:ホストプログラム側でCreateTexture系関数で読み出したとき
B:VRAM上ではまだ圧縮状態で、圧縮のブロック単位でGPUのキャッシュまでロードし、 GPUで解凍しながら処理する
0280デフォルトの名無しさん
2010/04/12(月) 21:09:16基本的にB
0281279
2010/04/12(月) 21:39:47おお。
すると、メモリ帯域的にだいぶ負荷が下がりますね。
解凍にかかる負荷以上に、ボトルネックになりがちなメモリアクセス量を少なくできることによる
速度改善が期待できそうですね。
使用テクスチャの圧縮は積極的に行っていこうと思います。
ありがとうございました。
0282デフォルトの名無しさん
2010/04/12(月) 22:07:18DXT3にしてもDXT5にしてもあんまり綺麗に出ないよね
細部が良く見えないところはどんどん圧縮しちゃってもいいと思うが
0283279
2010/04/12(月) 22:15:08なるほど・・・
DX11では新しい圧縮がサポートされて、品質がだいぶ改善されるようですね。
DX11が浸透するまでは、ご助言通り、使いどころに注意ですね。
0284デフォルトの名無しさん
2010/04/12(月) 23:43:26これを利用して、ユーザーの環境に合わせて読み込む画像サイズを変え、負荷を調整する
といったことは効果的なのでしょうか?
例えば、テクスチャファイルは高解像度のものを1枚だけ用意し、ユーザーが
「テクスチャ品質:高」に設定すれば、そのままのサイズで読み込み、
「テクスチャ品質:低」に設定すれば、縮小して読み込む、といった具合です。
縮小処理のため、ロード時間は増えてしまうかもしれませんが、許容範囲であれば
配布時に複数解像度のテクスチャをいちいち用意しなくてもよくて良いと思うのですが。
0285デフォルトの名無しさん
2010/04/12(月) 23:54:12それでもこのシェーダがパイプライン上にあるのは、DX10との互換を保つためなんでしょうか?
それとも、テッセレーションステージでできなくて、ジオメトリシェーダでできることがあるのでしょうか?
0286デフォルトの名無しさん
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);
0287デフォルトの名無しさん
2010/04/13(火) 01:29:32みんな貧乏性なので、標準でも全然ok。帯域がどうとか自己満w。
まあ自己満でよければテクスチャを1/2や1/4に縮小するモードでも付ければって感じです。
0288デフォルトの名無しさん
2010/04/13(火) 01:29:53別々のレンダーターゲットに別々のカメラから見た絵を
描こうとしたら基本的にはGSを使うしかないわけだが。
テッセレーターは細分化するのが役目であって、
描画先の指定や細かい制御は出来ないよ。
ポストエフェクトはいちいち描画しなくてもCSで出来るようになったのは便利だね。
0289デフォルトの名無しさん
2010/04/13(火) 01:48:22ID3DXSprite::Beginはレンダリングステートを特定のものに書き換えるぜ
ここで通常合成に変えられちゃってるんじゃ?
BeginとEndの位置はどこよ?
0290284
2010/04/13(火) 07:38:30カプコンのPC版デビルメイクライ4体験版でテクスチャ解像度の高低を設定できるようになっていました。
個人作成のソフトではそういった設定はあまりないんですね。
必要かどうかよく吟味したいと思います。
ありがとうございました。
0291285
2010/04/13(火) 07:40:54ディスプレイスメントマッピングなど一部処理は新たに設置されたテッセレーションステージ
でやるほうが良くなったかもしれないくらいで、
基本的にはジオメトリシェーダならではの処理がまだあるということですね。
ありがとうございました。
0292286
2010/04/13(火) 18:46:57HRESULT 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()で行っています。
0293デフォルトの名無しさん
2010/04/13(火) 19:25:02じゃなくて
g_pD3DXSprite->Begin()はどこ?
0295デフォルトの名無しさん
2010/04/13(火) 19:45:25後で同時にスプライトとメッシュを同時に描画すると表示がおかしくなります。とか聞きにくるなよ?
0296デフォルトの名無しさん
2010/04/13(火) 20:00:01DirectXの場合はDirectSoundになるのでしょうか?
並行してコンポの液晶面や音楽プレイヤーなどでよく見かける
↓のような表示(何ていう名称なんでしょう)を行いたいのですが、流石にこちらはDirectXに頼れないですよね。
■ ■
■ ■ ■
■■ ■ ■■■
■■■■■■■■■■■■■
0297デフォルトの名無しさん
2010/04/13(火) 20:51:470298デフォルトの名無しさん
2010/04/13(火) 21:14:09サンプルの多さとWAVE、MIDIに対応してるDirectAudioに魅力を感じているのですが既に廃止済みとのことで・・・
DirectAudioは使うなというMSの方針に従うべきなのかどうか
0299デフォルトの名無しさん
2010/04/14(水) 09:07:53FFT変換でぐぐれ
0300デフォルトの名無しさん
2010/04/14(水) 11:44:46高速フーリエ変換変換
0301デフォルトの名無しさん
2010/04/14(水) 13:27:33ワロタ
0302デフォルトの名無しさん
2010/04/14(水) 18:38:07テクスチャを256x256 4枚 → 512x512 1枚に押し込めて動作テストし、
2回のQueryPerformanceCounterで経過時間を取得したのですが
誤差程度の変化しか有りませんでした。
マテリアルの切り替えは「非常に重い」と聞きますが、テクスチャをやたらと1枚に押し込めても
結局処理速度の向上は望めないものなのでしょうか?
0303デフォルトの名無しさん
2010/04/14(水) 19:23:30最適化する前に、マテリアルを一切切り替えず全部同じマテリアルで表示すると明らかに速くなったりするかを見てみる
グラフィックパイプラインのチューニングは、なにが原因で速度が遅いのかを調べてそこを最適化しないと効果は現れない
0304デフォルトの名無しさん
2010/04/14(水) 19:52:14DrawPrimitiveは描画が終わるまでブロックするわけじゃないから、
その前後で時間を測っても処理時間は測定できないよ。
0305デフォルトの名無しさん
2010/04/14(水) 20:03:17いまどきのグラボだったら、全部VRAMにのっちゃうから切り替えコストはあんまりかからないような・・・
0306デフォルトの名無しさん
2010/04/14(水) 20:11:10VRAMがたっぷりあって、それの上に乗っかる分には大丈夫なわけ??
VRAMに余裕がなくて、いちいち転送の必要がある場合に遅いと?
シェーダおよびシェーダ変数の切替コストも上記と同じ考えなのかな?
0307デフォルトの名無しさん
2010/04/14(水) 23:05:260308デフォルトの名無しさん
2010/04/14(水) 23:23:280309デフォルトの名無しさん
2010/04/14(水) 23:44:09ピクセルシェーダに渡されたトランスフォーム後座標をPosとすると、一般的には
(出力) = Pos.z / Pos.w;
としたり、
(出力) = Pos.w / (遠平面距離)
として、シャドウテクスチャを参照するときも同様にして各ピクセルの深度値と比較します。
たしかにこのやり方だとうまくいきます。
しかし、Pos.wを直接出力してもうまくいくと思って試してみたところ、うまく影が出ませんでした。
Pos.wは射影変換前のライトカメラ原点からZ値のはずなので、Pos.w/(遠平面距離)とは
0〜1に正規化するかどうかだけの違いで、影かどうかの判定結果は同じになると思うのですが・・・
0310302
2010/04/15(木) 00:08:05ありがとうございます。為になりました。
0312デフォルトの名無しさん
2010/04/15(木) 10:11:03現在 WinXPSP3 + DirectX9 (2008 August) でアプリケーションを作成しているのですが、
Direct3D で描画をする際に、実装予定の機能上の都合で 3D画面が重なったようなレンダリングをしたいと思っています。
具体的には、ポリゴンメッシュを通常通り3Dで描画した後、その上に重なって見えるように
また別のポリゴンメッシュを表示したいのです。
※丁度モデリングソフトで、メッシュ上にボーンや頂点移動のハンドルが重なって=見かけ上、常に手前に表示されているような状態
これらを実現する方法として、例えばデバイスコンパチブルなBitmapを別にバッファとして用意し、
そこに重ねて上に表示したい内容をレンダさせ、それを3D画面上にスプライトとして重ねてしまえばいいのかなと思ったのですが、
そのような方法(実現可能かどうかはこれから調べる)で良いのでしょうか。 あるいはもっとシンプルな方法がありますでしょうか。
よろしくお願いいたします。
0313デフォルトの名無しさん
2010/04/15(木) 10:19:36一番簡単な方法は、裏になるレイヤを描画した後にZバッファだけクリアして
手前のレイヤを描画。
別々に描画して後から重ねたいなら、RenderTargetTextureに対して描画。
0314312
2010/04/15(木) 10:48:00早速のレスありがとうございます!レスを頂いてからあっと気づきました・・・
Zバッファクリアだけで無事実現出来ました。ありがとうございました!
0315309
2010/04/15(木) 22:55:52出力先の浮動小数点バッファの初期化(クリア)が問題でした。
IDirect3DDevice9::Clearの色指定は0〜255の範囲内でしかできないようですが、
浮動小数点バッファはもっと広い範囲を記録できるにも関わらず、
0〜255の範囲内でしか初期化できないのでしょうか?
深度などを描画するときは、0.0f〜1.0fに正規化すれば良いのですが、
正規化せずに使うような用途のときは、広い数値範囲の初期化が必要になることも
あると思うので気になりました。
0316デフォルトの名無しさん
2010/04/15(木) 23:04:210318デフォルトの名無しさん
2010/04/16(金) 11:42:47ウィンドウのリサイズ(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;
〜 続く
0319318
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 になってしまうのは、
何が原因として考えられるのでしょうか。 よろしくお願い致します。
0320デフォルトの名無しさん
2010/04/16(金) 12:12:310321デフォルトの名無しさん
2010/04/16(金) 12:48:01レスありがとうございます。 はっとして確認していみましたが、
※Win32の GetCurrentThreadId() で値を確認
もともとマルチスレッドにはしていないので、どのタイミングでも同じIDが戻ってきました。
他に何か原因となりそうな事はありませんでしょうか・・ すみません
0322デフォルトの名無しさん
2010/04/16(金) 15:07:48D3DCREATE_MULTITHREADEDで生成していない場合、絶対に複数のスレッドからアクセスしてはいけない。
0323デフォルトの名無しさん
2010/04/16(金) 16:58:16サンプルソースで描画に使ったりしてるけど
簡単に教えてください
引数で渡すということは、切り替えることもあるんですよね
切り替えることで出来ることって何ですか?
0324名無しさん@Linuxザウルス
2010/04/16(金) 17:20:56デバイスドライバの事かと。
>切り替えることで出来ることって何ですか?
マルチモニタで二つ以上のモニタを使っている場合、
どのモニタでもフルスクリーン表示が出来るようになる。
0325デフォルトの名無しさん
2010/04/16(金) 17:50:59ちょっと聞きたいんだが、WM_SIZEのタイミングに合わせてデバイスリセットって本気か?
バックバッファから作り直すの?
ウインドウの大きさをマウスドラッグで変えまくったら、ものすごい勢いでデバイスリセット発生させるんか?
0326デフォルトの名無しさん
2010/04/16(金) 19:03:460327デフォルトの名無しさん
2010/04/16(金) 19:34:13これって、AlphaEnableやZEnableといったステート設定はホストプログラム側で固定機能時代のように
SetRenderStateで設定してやる必要があるのでしょうか?
フラグメントでないHLSLではtechnic宣言部で指定できて、ステートの保存、復帰といった面倒もなくて扱い易かったのですが・・・
0328デフォルトの名無しさん
2010/04/16(金) 19:48:38Windows的には本当はサイズ変更中に来るメッセージはWM_SIZINGで
WM_SIZEはサイズ変更が確定した後に一度だけ来るメッセージなんだけどな。
実際は「ドラッグ中にウインドウの内容を表示する」オプションを有効にしていると、
物凄い勢いで送ってくるが。(有効が普通)
0329デフォルトの名無しさん
2010/04/16(金) 20:01:13XP以降ではそのオプションは有効がデフォルトだよね
0330デフォルトの名無しさん
2010/04/16(金) 20:01:53回答ありがとうございます
モニタとかへのハンドルみたいなもんですか?
0331デフォルトの名無しさん
2010/04/16(金) 20:38:43たしかそうだったような。。。
0332デフォルトの名無しさん
2010/04/16(金) 21:05:170333327
2010/04/16(金) 21:16:14すみません、DirectX9です。
>>331
やはりそうですか・・・
柔軟性のためのトレードオフですね。
固定機能処理に依存するので、DX10以降で使えないというのも納得ですね。
0334デフォルトの名無しさん
2010/04/16(金) 21:17:35そんな感じ
0335デフォルトの名無しさん
2010/04/16(金) 22:25:22ハードウェアでパースペクティブコレクト補間されますが、
このとき、補間のための情報として「w成分が参照される」ということは分かったのですが、
この「w成分」というのは、補間しようとしているTEXCOORDセマンティクスの変数のものなのか、
それとも、POSITIONセマンティクスで出力した、ラスタライズで利用される頂点位置のものなのか、
どちらでしょうか?
TEXCOORD側のw成分はパースペクティブコレクトで参照されないだろうと思って、
w成分だけ頂点シェーダでいじると、どうもピクセルシェーダに達したときに、各成分値がおかしくなっているようなんですが・・・
0336335
2010/04/16(金) 22:31:04ただ、VS -> PS間での動きは気になるので、上記について何か知っていれば教えてほしいです。
0337デフォルトの名無しさん
2010/04/17(土) 00:23:31TEXCOORDは他で色々使うし。
0338デフォルトの名無しさん
2010/04/17(土) 07:05:21結局何が聞きたいのかさっぱりわからないので丸投げ
http://marupeke296.com/DXG_No55_WhatIsW.html
コレにかぎらず、初心者は
素人見立てで勝手にココが悪いんじゃないか、と決め付けないで
何がしたくて
どういうアプローチをしたら
どう上手くいかなかったのかを素直に書いて欲しいな
0339335
2010/04/17(土) 09:55:47やはりそうですよね。
いろいろいじってみましたが、それの場合に辻褄が合う結果っぽいです。
ありがとうございました。
>>338
ありがとうございます。
そのページはチェック済みでしたが、パースペクティブコレクトについては触れられておらず、
まだ釈然としませんでした。(wの意味についてはとても参考になりました)
0340デフォルトの名無しさん
2010/04/18(日) 00:54:18事前処理(シャドウマップとか)、不透明描画、半透明描画、ポストエフェクト
みたいな流れになると思うのですが、
こういう描画の管理はどういう手法が一般的なんでしょうか・・?
0341デフォルトの名無しさん
2010/04/18(日) 01:10:590342デフォルトの名無しさん
2010/04/18(日) 02:09:31メッシュが原点と各ポリゴンで構成される三角錐の総和であるなら求められると思うが…
人型とかだとちょっと分からん
0343デフォルトの名無しさん
2010/04/18(日) 07:38:27それもうDirectXだとかメッシュだとかの話じゃなくて
純粋に数学の話じゃないのか
0344デフォルトの名無しさん
2010/04/18(日) 07:42:06一般的にも何も、そのままじゃね
そしてその時の都合によって、その中のどれかの処理は 「既に処理済みだから、このタイミングでは省く」 のようにして
無駄なコストを省いて効率化するとか。 一般的にも何も、その時作ってる内容によるよ。
お手本もマニュアルも無い。
0345デフォルトの名無しさん
2010/04/18(日) 09:57:15大量のモデル出したり、描画プロセスが複雑化してきたら
どうやって管理してるのかなぁと・・・。
自分の場合、仮想関数でDraw作って、
それを描画リストに積んで、ソート後にまとめて実行してます。
0346デフォルトの名無しさん
2010/04/18(日) 10:21:29例えば各モデルの個別の描画内容って、それぞれに
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で挟んでループみたいな。
0347デフォルトの名無しさん
2010/04/18(日) 10:54:59ここじゃなくてCAD関連スレで聞いたほうが速いかも
0348デフォルトの名無しさん
2010/04/18(日) 14:26:49HLSLのシェーダの入出力記述で、TEXCOORDnセマンティクスを付けてテクスチャ座標値として
扱うことができますが、これって何個まで(nのところ)指定できるんでしょうか?
GPUによって違うのでしょうか?
それとも、PS3.0とか、シェーダのバージョンによって既定されているんでしょうか?
0349デフォルトの名無しさん
2010/04/18(日) 16:19:41シェーダのバージョン
vs/ps2.0 TEXCOORD0〜TEXCOORD7
vs/ps3.0 TEXCOORD0〜TEXCOORD15
0351デフォルトの名無しさん
2010/04/18(日) 18:09:51木などで抜き色(アルファ)テクスチャの板ポリが交差している場合、
1メッシュとしての描画は、ソートしても交差までは正常に描画されない(?)ので
交差分は別メッシュとしてDrawSubsetを別け、
描画済みの結果の上に描画させようと思うのですが、このやり方はマトモ(普通・定番)なのでしょうか?
0352デフォルトの名無しさん
2010/04/18(日) 18:15:53先に2値でZだけ書いて、後からα部分を重ねるとかは?
フィルレート無駄に消費して大量の木とかには向かないと思うけど・・・。
0353デフォルトの名無しさん
2010/04/18(日) 18:16:430354デフォルトの名無しさん
2010/04/18(日) 18:26:49D3DXVECTOR3 に D3DMATRIX をかけて新しい D3DXVECTOR3 を得る関数って、ヘルパーで存在しないのでしょうか。
演算子オーバライドかなと思い、変数同士をかけてみたところコンパイルできませんでした。
(行列かける行列は可能な事は知っています)
よろしくお願いいたします。
0355デフォルトの名無しさん
2010/04/18(日) 18:42:17http://msdn.microsoft.com/ja-jp/library/bb172972(v=VS.85).aspx
0356デフォルトの名無しさん
2010/04/18(日) 18:42:24色々種類があるから注意してね。
0357デフォルトの名無しさん
2010/04/18(日) 18:46:260358デフォルトの名無しさん
2010/04/18(日) 18:48:59演算子=関数呼び出しを幾らか減らすことでオーバーヘッドを削ることがある。
0359デフォルトの名無しさん
2010/04/18(日) 18:49:42マトリックスは一律4x4なのに対し、ベクトルは要素数が3だったり4だったりして、wの扱い方によって
何種類もの演算の種類が発生してしまう。
0360デフォルトの名無しさん
2010/04/18(日) 18:57:31( a.x * s, a.y * s, a.z * s )はあっても( a.x * b.x, a.y * b.y, a.z * b.z )がないところとか。
0361デフォルトの名無しさん
2010/04/18(日) 19:01:13演算子が継承されないから面倒なんだよな・・・。
0362351
2010/04/18(日) 19:01:15ありがとうございます。
先にZだけ書いて後から・・そんな方法も有るのですね。
将来的にはそういう事もできるようにはなりたく思います。ありがとうございました。
0363デフォルトの名無しさん
2010/04/18(日) 19:01:38Vector同士 の掛け算でそんな計算されたら困るだろw
0364デフォルトの名無しさん
2010/04/19(月) 13:33:32Webを回って、とあるシェーダを使ったサンプルソース見つけたのですが、その中に次のような記述がありました。
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 です。
0365デフォルトの名無しさん
2010/04/19(月) 13:57:178時代のアセンブライクなシェーダの産物だから
HLSLが主流となった9では代替となるものは無いかなぁ
あえて上げれば
D3DVERTEXELEMENT9
IDirect3DVertexDecralation9
辺りをググって情報を集めるべし
でも、素直にそのサイトはあきらめてHLSLで解説してるサイトを参考にした方が良いと思われる
0366デフォルトの名無しさん
2010/04/19(月) 14:13:10Vertex Declaration(頂点宣言)
DirectX9にもある機能。
DirectX8ではシェーダハンドルに頂点フォーマットも紐付けされていたので
頂点シェーダの作成時に頂点フォーマットも指定する。
DirectX9ではシェーダと頂点フォーマット指定が分離したので、別々にセットする。
ttp://msdn.microsoft.com/ja-jp/library/ee415204(VS.85).aspx#Vertex_Declaration_Changes
0367デフォルトの名無しさん
2010/04/20(火) 19:48:45単に(x>=y)って書くのとどう違うんでしょうか?
ハードウェアの比較器を使うから(有意かは環境によるとして)理論的には速く処理されるのでしょうか??
0368デフォルトの名無しさん
2010/04/20(火) 19:57:29a++;
どっちも結果は同じなのに何故あるのか、みたいな話か
0369デフォルトの名無しさん
2010/04/20(火) 20:08:08どう違うかはハード依存
0370デフォルトの名無しさん
2010/04/20(火) 20:14:02December2004のDirectSoundでストリーミングバッファ再生に挑戦しているのですが、
DirectSound8オブジェクト作成
→協調レベル設定
→DirectSound8からDirectSoundBuffer作成
→DirectSoundBuffer->QueryInterfaceでDirectSoundBuffer8作成
とここまでは成功するのですが、次のDirectSoundNotify8をDirectSoundBuffer8のQueryInterfaceで作るところで必ず失敗します
(HRESULTに-2147467262が入っている)
他のサンプル等でもこのように普通に作成しているみたいですが、作成順序がまずいんでしょうか?
0371デフォルトの名無しさん
2010/04/20(火) 20:29:52ひょっとして、テクスチャの初期化(device->CreateTexture())ってかなり重い……?
0373デフォルトの名無しさん
2010/04/20(火) 20:51:40HRESULT: 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すれば誰かが試してくれるかもしれない
0374デフォルトの名無しさん
2010/04/20(火) 21:04:35作成自体も重いし、毎フレームテクスチャを作って消して…
なんてやってると断片化を誘発してさらに重くなる
MANAGEDでテクスチャを作ってるとさらにタチが悪い
0375デフォルトの名無しさん
2010/04/20(火) 21:29:15なるほど……。
画像を800x600のテクスチャとして初期化するのに0.24秒、
1600x1200だと1秒強かかってしまうんだ。(ネットブックにて)
Core i7/RADEON 4850だとこれの大体4倍くらいだけど、
画像ファイルをオンメモリに展開するだけならこれの3〜5倍くらいは早いので、
残りは純粋なテクスチャの初期化とデータ転送ということになりそうなんだが、
どういう方針で高速化を図るべきか……。
0376デフォルトの名無しさん
2010/04/20(火) 22:55:16stepはマニュアルを読む限り、vectorやmatrixでも使えるのが
特徴ではないのか?
>>369
どういうこと?生成されるアセンブリコードは
ハードが違っても同じじゃないの?
つーかコンパイルにハードは関係ないでしょ。
0378デフォルトの名無しさん
2010/04/20(火) 22:59:470.24secって絶望的なほど重いが。
30FPSで0.03secだぜ、もう一度計測しなおした方がいい。
0379デフォルトの名無しさん
2010/04/20(火) 23:12:18float4 v2 = v0 >= v1 ? 1.0f : 0.0f;
三項演算子で書くとこうだけど、これでちゃんと
各要素独立して、1or0が入るのか?
試してないんでわからんが、
入るなら同等だと言えそうだ。
0380デフォルトの名無しさん
2010/04/20(火) 23:27:11同レベルのGeforceを同じコードで動かすと何故か遅くならなくて謎だった。
0381デフォルトの名無しさん
2010/04/20(火) 23:27:14昔の話かも
0382デフォルトの名無しさん
2010/04/20(火) 23:30:41ラデがロックの度にVRAMから転送とかそんな感じじゃないの
知らんけど
0383デフォルトの名無しさん
2010/04/20(火) 23:33:000384デフォルトの名無しさん
2010/04/20(火) 23:53:15かわりに、GDCの講演資料とかAMDのテクニカルペーパーが今のとこ一番役に立ってる。
ComputeShaderやらHullShaderやらDX11で追加されたもの以外は
DX10と大差ないから、1から勉強しなくてもだいたい分かるっしょ。
0385デフォルトの名無しさん
2010/04/21(水) 00:07:30�d
ずっと9やっててまだ10触ってないからとりあえず10の本買って遊んでみようかな
新しいシェーダも今のとこ興味ないし
0386デフォルトの名無しさん
2010/04/21(水) 00:08:25xファイルサポート打ち切ったり、初心者お断り感が増しちゃったっぽいのもあるかも。
0387デフォルトの名無しさん
2010/04/21(水) 00:13:50本の需要自体があんまし無いのかもしれない
0388デフォルトの名無しさん
2010/04/21(水) 00:22:16日本は衰退の一途をたどっているからな
仕方ない
0389デフォルトの名無しさん
2010/04/21(水) 00:23:21普及度、扱いやすさ、完成度、どれをとってもピカ一。
0390デフォルトの名無しさん
2010/04/21(水) 00:33:5111はWindows7の普及待ちかと
0391デフォルトの名無しさん
2010/04/21(水) 00:55:172003年中に出た9関連書籍は工学社のいつもの奴くらいで
今出てる関連書籍の半分以上は2005〜2007に発売されたもの
9の本が多いのは単純に9が超ロングセラーだから。
夏か秋くらいに「11実践プログラミング」みたいなのが工学社からでて
その後しばらくは11がどれくらい定着するか様子見って感じかな
0392デフォルトの名無しさん
2010/04/21(水) 01:10:58ハードごとというより、cpu gpuごとにと言った方が正確だと思う
0393371
2010/04/21(水) 01:40:33書き忘れたけど、DX9でD3DPOOL_MANAGEDで確保している。
>>378
別に毎フレームごとに初期化してるとは言ってないよ。
初期化に時間がかかりすぎて困ってはいるけど。
>>380,382
そいや、文字描画用に頻繁に書き換えて使うテクスチャの更新も
やたら時間かかってるんだよなぁ。
こいつはD3DPOOL_DEFAULT/D3DUSAGE_DYNAMICで初期化したほうがいいんだろうか?
0394389
2010/04/21(水) 01:45:57試しにVista上でDirect3DExを使ってみたら鬼のように楽になったりするので、
基本的にDirectX関係は新しいほうが却って楽になると思われ。
そもそもDX10以降じゃReset地獄自体がないわけだし。
0395デフォルトの名無しさん
2010/04/21(水) 01:46:400396デフォルトの名無しさん
2010/04/21(水) 07:54:53Direct3DExか・・・
聞いたことはあったけど、あまり意識したことはなかったなぁ。
検討してみるよ。
>そもそもDX10以降じゃReset地獄自体がないわけだし。
描画のBegin、Endとかがないとかだっけ?
良くなってるとこもあるよね。
0397デフォルトの名無しさん
2010/04/21(水) 08:22:50・テクスチャサイズを2の累乗にしてみる(512,1024...)
・D3DPOOL_DEFAULTで確保してみる
・DeviceをMULTITHREADEDで初期化してないか調べる
0398デフォルトの名無しさん
2010/04/21(水) 08:54:46・テクスチャサイズは2の累乗にしている
・D3DPOOL_DEFAULTで確保するのはこれから試す
・DeviceはMULTITHREADEDで動かしてる。そうじゃないと動作中にテクスチャを読み込めない。
0399デフォルトの名無しさん
2010/04/21(水) 08:58:18もうみんなWindows7に移行した・・・よな?
0400デフォルトの名無しさん
2010/04/21(水) 09:03:22XP切り捨てるにはあと3年くらいかかりそう・・・。
今から作り始めたら完成まで3年かかって
丁度いいかもしれないけどw
0401デフォルトの名無しさん
2010/04/21(水) 09:09:24何もしない空のDX9のアプリ作って、同じサイズのテクスチャ作ってみても同じだけ重いのか確認してみた?
0402デフォルトの名無しさん
2010/04/21(水) 10:02:35同じだけかかる。
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秒と出る(タイマーにそんな精度無いけど)
0403デフォルトの名無しさん
2010/04/21(水) 10:04:59D3DCREATE_MULTITHREADEDあるなしでは、
少なくとも無負荷時には初期化の所要時間に変化は見られない。
0404デフォルトの名無しさん
2010/04/21(水) 10:05:22テクスチャフォーマットは何なのか、という疑問
0405デフォルトの名無しさん
2010/04/21(水) 10:07:430406デフォルトの名無しさん
2010/04/21(水) 10:16:282048x2048で確保して、(0,0)-(1600,1200)の範囲にマッピングしてる。
>>405
どうなんだろ。今までD3DX系でしか読み込み処理やってない。
そういえばlibpngを使ってるゲーム処理系は多いけど、
これ使って自前で読み込んだ方がD3DX系よりも高速なんだろうか?
ちなみにpngの代わりにbmpやddsに切り替えてみたけど、全く早くならない。
D3DUSAGE_AUTOGENMIPMAP使ってMIPMAP生成をショートカットすると
ほんのちょっと早くなるけど、大勢に影響はない。(0.01〜0.02秒くらい減る)
0407デフォルトの名無しさん
2010/04/21(水) 10:18:30SurfaceFormatをDXT1か5にすれば、劇的に早くなると思われ
0408407
2010/04/21(水) 10:19:390409デフォルトの名無しさん
2010/04/21(水) 10:32:45却って遅くなった。0.41-0.45秒(遅くなるとはオレも思わなかった。???)
フォーマットはDXT5。
D3DXCreateTextureFromFileExで2048,2048のテクスチャに読み込ませた。
D3DXCreateTextureFromFileExをやめてEx無し版にしたら劇的に遅くなる(1.57秒)
って、あ!
テクスチャのサイズも1600x1200にしたら劇的に早くなった!(0.006秒)
これはやべえ。改善の余地ありすぎる。
とはいえ、DXT系の劣化を受け入れられる用途じゃないけど。(DXT系を使うくらいならそもそも解像度を下げればいい)
0410デフォルトの名無しさん
2010/04/21(水) 10:36:23あ!
テクスチャのサイズを2048x2048をやめて、テクスチャと同じ1600x1200にしたら
劇的に早くなった!(D3DXCreateTextureEx()で0.09秒)
これくらい早ければ十分実用域だなぁ。
あともう一息なんだが。
0411デフォルトの名無しさん
2010/04/21(水) 10:47:19つか1600x1200ってやたらでかいな
0412デフォルトの名無しさん
2010/04/21(水) 10:59:520413デフォルトの名無しさん
2010/04/21(水) 11:26:46速度を稼ぎたければDDSでミップマップまで用意しておくといい。
0414デフォルトの名無しさん
2010/04/21(水) 11:43:450415デフォルトの名無しさん
2010/04/21(水) 13:12:411600x1200の場合、
ミップマップ生成なしで0.08-0.11秒、
ミップマップ生成ありで0.14-0.18秒だね。
2048x2048にはめ込む場合、
ミップマップ生成なしで0.21-0.23秒、
ミップマップ生成ありで0.34-0.35秒になる。
たしかにミップマップ生成でいくらかは遅くなるけども、
それよりも2の累乗サイズを確保してはめ込みをする方がペナルティーが大きいようだ。
なんでやねん。
0416デフォルトの名無しさん
2010/04/21(水) 13:18:590417デフォルトの名無しさん
2010/04/21(水) 13:24:380418デフォルトの名無しさん
2010/04/21(水) 13:31:57それぞれD3DX_FILTER_NONEとD3DX_FILTER_LINEAR。
今、MipFilterをD3DX_FILTER_BOXに変更したら、ミップマップ生成が高速になった。
1600x1200の場合、ミップマップ生成ありで0.08-0.11秒。
2048x2048の場合、ミップマップ生成ありで0.20-0.23秒。
0419デフォルトの名無しさん
2010/04/21(水) 18:57:520420デフォルトの名無しさん
2010/04/21(水) 22:13:51なんでReset地獄が、描画のBegin、Endって話になるんだ
0421デフォルトの名無しさん
2010/04/21(水) 22:16:090422デフォルトの名無しさん
2010/04/21(水) 22:40:140423デフォルトの名無しさん
2010/04/21(水) 22:48:390424デフォルトの名無しさん
2010/04/21(水) 22:51:37そういうのは全部9の悪癖だった過ぎない、いらないものだったと分かる。
0425デフォルトの名無しさん
2010/04/21(水) 23:01:52一度は目にしてるネタww
0426デフォルトの名無しさん
2010/04/21(水) 23:04:15format = 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を考慮しても
確かに遅いな・・
0427デフォルトの名無しさん
2010/04/21(水) 23:11:2064MBか
0428デフォルトの名無しさん
2010/04/21(水) 23:12:230429デフォルトの名無しさん
2010/04/21(水) 23:15:35遅くともあまり気にならないような裏読みのシステム考えた方が建設的なんじゃないの
0430デフォルトの名無しさん
2010/04/21(水) 23:30:27いやポスターは知ってるが、どこが面白いのかと聞いているんだ
0431デフォルトの名無しさん
2010/04/22(木) 00:40:300432デフォルトの名無しさん
2010/04/22(木) 00:42:200433デフォルトの名無しさん
2010/04/22(木) 01:49:400434デフォルトの名無しさん
2010/04/22(木) 08:09:060435デフォルトの名無しさん
2010/04/22(木) 08:34:00既に簡単な先読み機構は用意している。
しかしそれでも、テクスチャ1枚の初期化に1秒以上かかるようでは(ネットブック)
間に合わない場合が出てくる。
特にタイトル画面とか本編外のシステムデータとかは同期的処理になってしまわざるをえない。
(先読みしたら相当な枚数になる)
0436デフォルトの名無しさん
2010/04/22(木) 09:00:46いい加減SDK側で自動対応して欲しい・・・
0437デフォルトの名無しさん
2010/04/22(木) 11:42:01Vista以降ではビデオカードのドライバがWindows Driver Model準拠になって
ビデオカードのメモリをOSが管理するから、
アプリ側でReset処理を行う必要が根本的に無くなっている。
WDM版DX9であるDirect3D9Exは
Reset処理そのものは必要だけどLoad/Unload処理が不要になってる。
0438デフォルトの名無しさん
2010/04/22(木) 11:44:170439437
2010/04/22(木) 11:57:10>Reset処理そのものは必要だけどLoad/Unload処理が不要になってる。
じゃなくて、D3DPOOL_MANAGEDがなくなってD3DPOOL_DEFAULTのままで
よきに計らってくれるようになり、D3DPOOL_DEFAULTなテクスチャの破棄が不要になった、ということだね。
さらに複数のd3ddevice間や他のプロセスとでもリソースが共有できるようになった。
0440デフォルトの名無しさん
2010/04/22(木) 12:44:58FLIPに使うバックサーフェスをリサイズしたい場合って、全部リセットしないとダメなんですか?
例えば デバイスから作り直さなきゃ行けないとか
ウィンドウモードで、どうやるのが常道なのかわかりません
0441437
2010/04/22(木) 13:26:05D3DFMT_A32B32G32R32Fはゲームだとまだあまり使わないけど、
ロード時間の比較は興味深い。
512x512未満ではテクスチャの大きさで所要時間の差がなく、
1024x1024では7.33倍の時間がかかり、
2048x2048ではほぼ順当に約4倍、
4096x4096ではまた増えなくなっている。
0442デフォルトの名無しさん
2010/04/22(木) 14:44:580443デフォルトの名無しさん
2010/04/22(木) 21:14:150444デフォルトの名無しさん
2010/04/22(木) 22:04:25リセットだけでいい。
ウィンドウリサイズでは、リサイズ完了までリセットは避ける。
0445デフォルトの名無しさん
2010/04/22(木) 22:06:20メーカー、製品の世代、GRAMのバス幅、動作クロック等で
様々変わってくる部分なのに、
なぜ自明だと言える?
0446デフォルトの名無しさん
2010/04/22(木) 22:13:45なんで時間がサイズと比例じゃないのかが分かってるってことじゃん
0447デフォルトの名無しさん
2010/04/22(木) 22:42:480448デフォルトの名無しさん
2010/04/22(木) 23:00:08>>393
0449デフォルトの名無しさん
2010/04/23(金) 01:23:57グローバル変数をいくつか記述(宣言と同時に初期化)するとして、その中で、実際に各シェーダで
一度も使われないものがあった場合、コンパイル時の最適化で消してくれるでしょうか?
それとも、定数レジスタを喰ってしまうのでしょうか?
なぜこのようなことを聞くかというと、シェーダパスによって、グローバルの大きな配列変数のいずれかを
使うようにしようと思っており、もし使わない配列が定数レジスタを喰うようであれば、他のやり方を
検討すべきと思いまして。
float3 Ary1[ 16 ] = {
0450449
2010/04/23(金) 01:27:20float3 g_Ary1[ 16 ] = { ← Pass0でのみ使用
float3( ・・・ ),
・・・
float3( ・・・ )
};
float3 g_Ary2[ 8 ] = { ← Pass1でのみ使用
float3( ・・・ ),
・・・
float3( ・・・ )
};
・・・
0451デフォルトの名無しさん
2010/04/23(金) 01:34:070452デフォルトの名無しさん
2010/04/23(金) 11:43:30透過テクスチャを貼った、2つの「交差」したポリゴンを個別に描画しているのですが、
2番目(後)に描画したポリゴンの一部が、1番目(前)に描画したポリゴンより後ろに有り、そこが描画されません。
Z値の比較で描画する必要なしとみなされ描画が働いていないと思われるのですが、Z比較をナシにすれば距離が完全に崩壊しますし・・。
各種ゲームで当たり前のように木や草で透過付きポリゴンの「交差」を見かけるのですが
あれは全て交差と見せかけた別ポリゴンなのでしょうか? それとも交差しても正しく描画する方法が有るのでしょうか?
0453デフォルトの名無しさん
2010/04/23(金) 11:54:31透過付きってのがアンチエイリアス等の半透明じゃなくて抜きでいいなら
アルファテストで抜き部分のz値を書き込まないことは可能
0454デフォルトの名無しさん
2010/04/23(金) 11:55:37マテリアルの順序。透過するテクスチャを最後に
0455452
2010/04/23(金) 12:08:08アルファテスト、ググって取り込んだらあっさり正常に描画されました。ありがとうございます。
>>454
はい。そっちの方は既に注意を受けてから心がけております。ありがとうございました。
0456デフォルトの名無しさん
2010/04/23(金) 18:24:10L8で確保した単色のテクスチャの輝度値を
アルファ値として画面に対してブレンド描画することは可能でしょうか?
描画する色はDiffuseを使います。
A8だと何も問題ないんだけど、GeForce FX 5600がA8フォーマットに対応してないみたいで。
0457デフォルトの名無しさん
2010/04/23(金) 19:07:21シェーダーでやれ
0458デフォルトの名無しさん
2010/04/23(金) 19:57:24固定機能でRGB成分を元にα成分を計算する場合は、
D3DTOP_DOTPRODUCT3を使う。
0459デフォルトの名無しさん
2010/04/23(金) 20:39:45なるほど……。
それはさきほど試したのですが、うまくいかなかったので諦めてました。
その単語で検索してみたら、こんなログが引っかかりました。
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値のカスタマイズってできないでしょうか?
0461デフォルトの名無しさん
2010/04/23(金) 23:38:54ちょっと何を聞きたいのかよくわからんが、テクスチャ座標を複数使いたいという話なら
D3DTSS_TEXCOORDINDEXでステージごとにどの座標を使うのか指定する。
0462デフォルトの名無しさん
2010/04/23(金) 23:50:310463デフォルトの名無しさん
2010/04/24(土) 00:12:31SM2.0ベースでゲーム作ったんだが、
i845やi865以前のオンボードのPCのユーザーが普通に文句言ってくるよ。
0464デフォルトの名無しさん
2010/04/24(土) 00:15:550465デフォルトの名無しさん
2010/04/24(土) 00:30:32オンボで動くように作ってるのは逆に尊敬に値するわ。
初代PSクラスのグラフィックしか出せないだろ。
0466デフォルトの名無しさん
2010/04/24(土) 00:31:51865なら頂点シェーダをソフトウェア
ピクセルシェーダをハードウェアでギリギリ動くだろ
0467デフォルトの名無しさん
2010/04/24(土) 00:39:14i865はPS2.0サポートしてないので無理。
0468デフォルトの名無しさん
2010/04/24(土) 00:43:100469デフォルトの名無しさん
2010/04/24(土) 00:45:35なるほど……
2枚テクスチャを利用して大きさが違うことがあるので
同じ範囲をさせるようにUVを一次変換する必要があるんだけど、
D3DTSS_TEXCOORDINDEXでステージが使うUVを指定してあげて、
SetTransform(D3DTS_TEXTURE1 )で変換かますMATRIXを設定してあげれば
なんとかなるような気がしてきた。
サンクス!
0470デフォルトの名無しさん
2010/04/24(土) 00:50:03ピクセルシェーダ対応になったのはIntel GMA 900からかな
0471デフォルトの名無しさん
2010/04/24(土) 05:49:41D3DBLENDOP_ADD使うのってどっちが良いんですかね
0472デフォルトの名無しさん
2010/04/24(土) 05:54:210473デフォルトの名無しさん
2010/04/24(土) 08:36:37PSなしVS1.1でライティングすらしない最低描画モード付けたよ。ゲームが動くだけで良いやつ。
0474デフォルトの名無しさん
2010/04/24(土) 11:43:33プログラム側でマテリアル毎に割り当てたりするの?
自分で作るときは一種類だけ作って、
パラメーター変更だけ適用してるけど・・・。
0475デフォルトの名無しさん
2010/04/24(土) 11:46:46そん時の都合次第じゃね
0476デフォルトの名無しさん
2010/04/24(土) 11:48:32入ってきたパラメーターで条件分とか切ってるならやめたほうがいいけど
0477デフォルトの名無しさん
2010/04/25(日) 13:51:27ある程度書いてみて思うに、
用途ごとに分けるといいようだ。
ビルボード描画に限って言えば、
・通常描画用
・合成描画用(2枚以上のテクスチャを使用)
・テキスト描画用
の3つに分けておくといい。
0478デフォルトの名無しさん
2010/04/25(日) 17:53:330479デフォルトの名無しさん
2010/04/25(日) 18:15:16プログラマが手動で用意できるもんでは無いと思うけど・・・・
0480デフォルトの名無しさん
2010/04/25(日) 18:30:59あるいはデザイナさんが自由に組み合わせた通りにSLコードを吐くユーティリティでもあるとか
0481デフォルトの名無しさん
2010/04/25(日) 18:31:090482デフォルトの名無しさん
2010/04/25(日) 19:09:46最近のモデリングソフトはシェーダー付きで吐き出すことも可能だし
0483デフォルトの名無しさん
2010/04/25(日) 19:18:05どうやってデバッグしてるんだろ
0484デフォルトの名無しさん
2010/04/25(日) 19:49:00パーツの組み合わせでそうなってるだけで
デバッグ自体は其処まで大変じゃないよ。
0485デフォルトの名無しさん
2010/04/25(日) 22:21:410486デフォルトの名無しさん
2010/04/25(日) 22:31:40組み合わせ爆発は1段階減少できるようだ。
そういうフレームワークを見たことがある。
まあ自分の作ってるゲームでは必要な機能ではないが。
0487デフォルトの名無しさん
2010/04/26(月) 17:43:37「壁との衝突」「地面との接触と自由落下」「ジャンプ時の頭上接触」
この3つを行いたいのですが、
それぞれ、バウンディングボックスの4隅からレイを飛ばさないと正しく判定できない物なのでしょうか?
何か飛ばすレイの数を減らしつつ上手く処理する方法は無いでしょうか・・?
また、壁(障害物)との衝突判定なのですが、
移動方向にだけレイを飛ばし判定するのは危険なのでしょうか?
一部市販のゲームで、細い所に入るとキャラが振動し始める姿を見、どう衝突判定しているのかかなり気になるのですが・・
0488デフォルトの名無しさん
2010/04/26(月) 17:52:27剛体運動の物理シミュレーションをやるというのでもないかぎり、
通常は質点とポリゴンの判定だけで十分。
0489デフォルトの名無しさん
2010/04/26(月) 19:52:11返された先でまた別の壁が押し返し、が繰り返し発生するからだな
0490487
2010/04/27(火) 06:19:44そうなのですね・・ありがとうございます。
>>489
なるほど。という事はレイの始点は結構後ろ側に有って
移動不可の判定だけでなく、めり込み具合を判定して距離を確実に取り
めり込みで後ろに移動を起こしたらそれもその方向への移動処理として判定すればそうなる という事でしょうか。
少しコツというか実装の理屈がわかった気がします。
0491487
2010/04/27(火) 06:34:23処理落ちによるゲーム速度の変化を起こさないよう、システム時間と比較で進行しているのですが、
高速移動中に処理落ちがおき、
レイの始点そのものが通常のあそび(余裕)を越えて、判定すべき対象を突き抜けてしまう危険が有る場合、
どのような対策をしておく事が妥当・可能でしょうか?
・高速移動の終点を先に予想しておき、もし大きく外れたら終点に無理矢理移動させる。
・常に定期的に正常な「過去位置」を保存し、異常な位置になったらそこに戻る。
ぐらいしか思いつけないのですが、
レイの始点や個数、仕組みを変える事などで対応できたりしますでしょうか・・?
0492デフォルトの名無しさん
2010/04/27(火) 06:49:44つまりデルタタイムに上限を設けて遊びを超えないようにする
0493487
2010/04/27(火) 06:51:07処理落ちを検出し、処理落ちした全フレーム分、衝突判定&移動処理を行えば
追加で処理落ちするかもだけど同じルールで正常に判定し続けられる・・のかな。
どちらにしても不測の事態に備えた何かは必要だと思うけど・・ 1人で長々すみません;
0495デフォルトの名無しさん
2010/04/27(火) 14:55:00移動後の位置座標のみで当たり判定してるならともかく
移動前から移動後へのレイと当たり判定取っとけば
どんだけ処理オチしても衝突位置は検出できるだろ
0496デフォルトの名無しさん
2010/04/27(火) 15:17:25俺なら画面表示以外の処理はどんなに処理落ちしてもスキップしたりしないで、別途オプションにするけど
0497デフォルトの名無しさん
2010/04/27(火) 16:00:570498デフォルトの名無しさん
2010/04/27(火) 16:14:18某ゲームみたいに高スペックマシンでやると
多段ヒット起こして即死とかはやめて欲しいが
0499デフォルトの名無しさん
2010/04/27(火) 17:49:01同時にとかしないよな?
0500デフォルトの名無しさん
2010/04/27(火) 19:09:210501デフォルトの名無しさん
2010/04/27(火) 19:44:43あぁ、そういう意味の同時ってのもあるが、ごめん紛らわしい書き方した。
void foo()
{
// 移動その他処理
// 描画処理
// 移動その他処理
// 描画処理
}
のように、一つの関数内で一緒くたにしてたりしないよな?ってこと
0502デフォルトの名無しさん
2010/04/27(火) 21:11:43個人製作以前に オブジェクト指向の言語をつかっているなら
処理をひとつひとつにまとめしたりするのが普通。
更に言うと
void型は返り値がないが、引数を与えて戻り値で処理したりして
なるべく塊?っていうかな
そういう感じにしておくっていえばいいのかな
まぁ、言語はわからないが、C++とかだったら
オブジェクト指向っていう意味をググってみるとコードの書き方とか
考えが少し変わってくるよ
0503デフォルトの名無しさん
2010/04/27(火) 21:20:21俺は >>499 、>>501 だが、いや俺はどっちかって言うと
ストラテジパターン的な処理の書き方をしてるぜ。 言語は C++
むしろOOPがクセになってる。 大本の質問者はどうか知らないが、それなので、
「一緒くたにしてたりしないよな?」 と確認してみたわけだ
0504デフォルトの名無しさん
2010/04/27(火) 23:22:32私の作成しているコードではどうも1秒ぐらい掛かってしまうようでして…
0505デフォルトの名無しさん
2010/04/27(火) 23:32:52Direct3D使って1024x768を超える解像度のゲームを作るのは
かなり無理っぽい……?
0506デフォルトの名無しさん
2010/04/28(水) 00:30:56処理落ち回数が3回なら3ループをまわすんじゃなく、移動量をx3するのが正しいんでしょうか?
0507デフォルトの名無しさん
2010/04/28(水) 01:37:56DirectX 9.0c用のプログラムを勉強したいのです。
0508デフォルトの名無しさん
2010/04/28(水) 01:43:08放物線を描く移動をループ毎に行っているとして、単純に3倍したらどうなるんだよ
0509デフォルトの名無しさん
2010/04/28(水) 01:45:32別に特に問題はない。
ただし地味にドキュメントの構成やDXUTやD3DXの様子が変わってたりするので
ネットにある古めのサンプルがそのままで動かなかったりはする。
0510デフォルトの名無しさん
2010/04/28(水) 06:00:35どうもありがとうございます。
0511デフォルトの名無しさん
2010/04/28(水) 10:22:00そうだったらAmazonで買いたいんですが。
0512487
2010/04/28(水) 10:47:11ありがとうございます。移動処理と描画は完全に分けております。
大規模な処理落ち時は描画をカットして判定させようと思います。
ありがとうございました。
0513デフォルトの名無しさん
2010/04/28(水) 11:34:50違う
0514デフォルトの名無しさん
2010/04/28(水) 12:25:54違うんですか。残念。
教えてくれてありがとう。
0515デフォルトの名無しさん
2010/04/28(水) 22:48:35描画フレームはコマ落ち
0516デフォルトの名無しさん
2010/04/28(水) 23:41:08SDKのサンプル見れば本なんていらないだろと言われちゃうとそうなんだけど電車とかで読みたいよな。
0517デフォルトの名無しさん
2010/04/28(水) 23:42:59Directxの本ではないが、
3Dの根本的な考え方などは
詳しく書いてあったりもするから、
読んで損は絶対にしないはず
0518デフォルトの名無しさん
2010/04/29(木) 00:30:55あとシェーダーがちょっと仕様が異なるだけだ
他の機能につっこみはなしでw
0519デフォルトの名無しさん
2010/04/29(木) 00:38:50SDKを印刷すればいいんじゃね?
0520デフォルトの名無しさん
2010/04/30(金) 01:28:37この関数で、100.0f乗とかしてもFPSが落ちません。
100回掛け算しているとは思えません。
一体、どういうアルゴリズムで100.0f乗(またはその他中途半端な指数乗)を計算しているのでしょうか?
0521デフォルトの名無しさん
2010/04/30(金) 01:36:210522デフォルトの名無しさん
2010/04/30(金) 01:41:32CPUでも一瞬だぞ?実装なんて気にするな。
0523デフォルトの名無しさん
2010/04/30(金) 01:44:49http://www.tom.sfc.keio.ac.jp/~fjedi/wiki/index.php?DirectX%BB%BB%BD%D1%B4%D8%BF%F4%B0%EC%CD%F7
この中で D3DXVec3TransformCoord の項
0524デフォルトの名無しさん
2010/04/30(金) 01:47:36大昔にアルゴリズムを別件で見て把握してたが、完全に忘れた
でも一つ言える事は、「100回掛け算」 なんてしない。 2進数での筆算の応用
0525デフォルトの名無しさん
2010/04/30(金) 02:06:080526520
2010/04/30(金) 02:10:36それは、すばらしいですね・・・
>>524
>>525
えー!!なんと!!
それならガンガン累乗しますw
どうもありがとうございました! m(_ _)m
0527デフォルトの名無しさん
2010/04/30(金) 02:23:50しかしオフスクリーンサーフェースをウィンドウに直接bitbltで書き写す
ことが出来たのですが、そこから先の段階に進めません><。
Directx9の作画結果をレイヤードウィンドウで透過・半透明で表示させる
にはどうしたらいいでしょうか?
環境 VC++2005
DirectX9 SDK (February 2007)
0528デフォルトの名無しさん
2010/04/30(金) 02:27:38x^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進数ならではの方法があるなら興味あるな
0529デフォルトの名無しさん
2010/04/30(金) 02:28:510530デフォルトの名無しさん
2010/04/30(金) 02:35:19http://www.geocities.jp/ky_webid/win32c/060.html
何故ググらない
0531デフォルトの名無しさん
2010/04/30(金) 02:47:46成功というとこまで行けなかったもので・・・。
結局画面には何も表示されないのです。
ネットのサンプルはエラーで動かないですし。
ちゃんとDirectxの画像がbitmapになってるかも
画面に表示できないので確かめる手段がなくて・・・。
参ってます。
0532デフォルトの名無しさん
2010/04/30(金) 03:00:040533デフォルトの名無しさん
2010/04/30(金) 03:06:37ええ、おっしゃるとおり独りで3ヶ月ほど同じ問題に取り組んでますお。
でもたしかここは初心者質問スレだったような。
0534デフォルトの名無しさん
2010/04/30(金) 03:17:030535デフォルトの名無しさん
2010/04/30(金) 03:22:58教えていただければありがたいです。
可能なかぎり直したいとこです。
0536デフォルトの名無しさん
2010/04/30(金) 03:36:430537デフォルトの名無しさん
2010/04/30(金) 08:42:16俺その「背景を透過して表示」 って処理、何気に今までやった事なかったけど
>>530 のリンク先にあった情報だけで普通に出来たぜ? win32 の動作とか理解出来てるかい?
そして一番肝心な、「動かないっていうそのエラー」 の内容は理解出来てる?
三ヶ月も時間過ぎてて、本当に詰まっている大本の原因を特定しないとかありえない。
それじゃまるで、誰かが書いてくれないと何も出来ない = サンプルコピペが出来ないと何も出来ないヒナになっちまうぜ?
0538デフォルトの名無しさん
2010/04/30(金) 09:54:270539デフォルトの名無しさん
2010/04/30(金) 09:57:59悩む事もあるけど、それがむしろ楽しい
0540デフォルトの名無しさん
2010/04/30(金) 10:35:54自分のためにもなるしな
0541デフォルトの名無しさん
2010/04/30(金) 11:01:070542デフォルトの名無しさん
2010/04/30(金) 11:04:30デザインパターン勉強して、作り始めた今は、設計がおもしろくておもしろくてたまりまへんw
みんなどんなふうに組んでるのかなぁ??って気になることはあるけど。
0543デフォルトの名無しさん
2010/04/30(金) 11:15:40ちゃんとプログラムやってれば、大抵デザパタと同じもの作るようになるから
その時に本当に使いこなせるって胸はれるよ
0544542
2010/04/30(金) 11:29:13ありがとう!
最近、自然とコンポジットパターンになっていった例があって、
HDRやSSAOなど、ある程度決まりきった複数のシェーダをコンポジットでまとめておけば、
使う側の記述がすごくすっきりして、しかも単発シェーダとまったく同じように扱えて、さらに使いまわしもできるようになった。
先人の知恵に感動した。
DirectXゲームの場合は、メッシュ何かのリソースの共有を意識したオブジェクト構成にするほうが良かったり、
考慮するところが多いけど、そういった中でできるだけ適切な妥協点を探っていくのがおもしろすぎる。
まだ手探りなところが多いけど、それなりに動くものがキレイな設計で実現できるようやってみる。
0545デフォルトの名無しさん
2010/04/30(金) 12:39:540546デフォルトの名無しさん
2010/04/30(金) 13:19:55FPSのフォント表示をしてみたのですが,
60FPSでコマ落ちしてしまいました.
ググる限りだと,もっぱら遅いと評判なのはわかりましたが,
ここまで遅いものなのでしょうか?
0548デフォルトの名無しさん
2010/04/30(金) 14:30:30以前フレームごとにフォントを生成して遅くなっていたケースを見たが、
どうだろうか?
0549デフォルトの名無しさん
2010/04/30(金) 14:34:53D3DXFontはそこまで酷いもんじゃない。
0550デフォルトの名無しさん
2010/04/30(金) 14:40:12単純に垂直同期してるってことは無いよな
0551デフォルトの名無しさん
2010/04/30(金) 15:16:45C++・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 );
}
0552デフォルトの名無しさん
2010/04/30(金) 15:30:20この引数と直前にやっている処理がかみ合っていないことに気がつかない時点でどうしようもない。
0553デフォルトの名無しさん
2010/04/30(金) 15:46:50ウィンドウそのものが表示されないって・・ とりあえず3ヶ月も時間無為に過ごしたのなら
あとちょっと2日くらい集中して、まずはこれを全部消化してみるといい。
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
今だけだ。とりあえず全部消化してみて、その後 MSDN・・・ は日本語版はクソだけど関数の仕様を追いかけろ。
多分、DirectXとか派手な方にばかり気がいってて基本的な事がおろそかになり過ぎてる。
なので簡単な事が理解出来ない。 それじゃ多分、自分自身がこれからもずっと辛いはず。 がんばれ
0554デフォルトの名無しさん
2010/04/30(金) 15:51:53ウィンドウズプログラム始めたばかりのとき、そのサイトにはたいへんお世話になった。
今DirectXプログラムを組めるのも、このサイトで得たウィンドウズプログラミングの基本あってのこと。
感謝、感謝。
というわけで、>>553のサイトはオススメよ。
0555デフォルトの名無しさん
2010/04/30(金) 16:49:50言葉足らずでしたが,フォント表示から始めてるわけじゃないです.
レンダリングまわりは出来てます.
>>549
おかしいですよね..;
レス拝見して冷静になってみて,
色々コメントアウトしてみた試したところ,
(デバイス)->Present()を,
メッシュの描画とテキストの描画で2回呼んでしまっていて,
それが原因で遅くなっていたようです.
有り難うございました;
0556デフォルトの名無しさん
2010/04/30(金) 17:20:20まと外してるかもだけど、こういうのもあるよ。
ttp://yokohama.cool.ne.jp/chokuto/urawaza/windowrgn.html
0557デフォルトの名無しさん
2010/04/30(金) 17:27:58HSPだった。orz
同じようなことはWINAPIでもできるはずなんだが見当たらんなぁ・・・。
0558デフォルトの名無しさん
2010/04/30(金) 17:40:140559デフォルトの名無しさん
2010/04/30(金) 17:40:22WIN32でできるはずなのに見当たらんって、それ考え方が違うからじゃね
出来ない訳ないじゃない。
ヒント: そのサイトにあるそのライブラリの中の処理は、きっと中でカラーキーを持った画像を持っている。
0560デフォルトの名無しさん
2010/04/30(金) 17:55:54ttp://www.yoshibaworks.com/ayacy/inasoft/wpt/ulw.html
>>559
悔い改めます。Orz
0561デフォルトの名無しさん
2010/04/30(金) 18:01:52>>552
ですよね。どうやればかみ合うかよくわからない状態です
>>553
CreateWindowEXにレイヤードを設定しなければ
普通に表示はされるんですよね・・・謎です。
ありがとうございます。
しばらく保留にしてHPの内容やってみますね
0562デフォルトの名無しさん
2010/04/30(金) 18:08:130563デフォルトの名無しさん
2010/04/30(金) 20:15:360564デフォルトの名無しさん
2010/05/01(土) 01:35:23パラメータの受け渡しが出来ないので複雑なものは見れないでしょうし、
サンプルのファイルすら開いたところで何を見ていいのか分かりません。
場合によっては白い球体のまま・・
0565デフォルトの名無しさん
2010/05/01(土) 01:51:110566デフォルトの名無しさん
2010/05/01(土) 03:36:26バイナリだけでなくソースもサンプルの中に含まれている
後は分かるな?
0567デフォルトの名無しさん
2010/05/01(土) 04:00:180568デフォルトの名無しさん
2010/05/01(土) 04:32:030569デフォルトの名無しさん
2010/05/01(土) 12:29:120570デフォルトの名無しさん
2010/05/01(土) 13:07:210571デフォルトの名無しさん
2010/05/01(土) 13:17:19影やエフェクト表現の為に、地面すれすれに半透明テクスチャを貼る別ポリゴンを作りたいのですが、
必要な元(地形)ポリゴンを抜け目なく取得する良い方法はないでしょうか・・?
できれば詳しい解説のあるサイトを教えて頂けますと幸いです・・orz
0572デフォルトの名無しさん
2010/05/01(土) 14:25:110573デフォルトの名無しさん
2010/05/01(土) 14:49:51>>571
何がやりたいのか意味不明
○影なら4角形の板ポリを足下に置くだけだ
0574デフォルトの名無しさん
2010/05/01(土) 14:57:30>必要な元(地形)ポリゴンを抜け目なく取得する良い方法
が世界のx,zを決めると、そのポリゴンの高さを取得?
と解釈するなら
ttp://marupeke296.com/COL_3D_No8_HightOfFloor.html
ここにいくつかの方法が
FindVerticesOnPoly←これをグーグルで入れると
(DirectX逆引き大全500の極意、Directx必携の自作関数の名前)
一応サンプルが見れるようだ
レイとメッシュの交点を調べている
しかしながら俺も初心者なのでもっといいやり方があるような
気もするので、あったら申し訳ない
地形が複雑だと丸影なんかだと不自然にめり込んだり
するような気もするので、
決め打ちで問題ないとも、directxシェーダプログラミングブック
に書いてあった。
0575デフォルトの名無しさん
2010/05/01(土) 15:02:20平らな地形でいいなら地面チョイ上にポリゴンを置くだけだな
0576デフォルトの名無しさん
2010/05/01(土) 15:36:41投影テクスチャだろ普通
0577デフォルトの名無しさん
2010/05/01(土) 16:10:23フィールドのマテリアル全てをマルチテクスチャにするの?
0578デフォルトの名無しさん
2010/05/01(土) 16:56:56まあ普通マルチパスだろう
1回目:普通にフィールド描画
2回目:影を落としたいフィールドのみ投影テクスチャで描画
0579デフォルトの名無しさん
2010/05/01(土) 17:08:420580デフォルトの名無しさん
2010/05/01(土) 19:21:47レスくれた方ありがとうございました
0581デフォルトの名無しさん
2010/05/01(土) 19:55:54影の落ちる位置のポリゴンを切り出したりするの? 表示用のポリゴンに対して当たり判定とか
0582デフォルトの名無しさん
2010/05/02(日) 11:44:33影はキャラ単位で管理すると難しいので、
見た目は落ちるが、光源単位で管理するのがよいと思う。
例えばスポットライトだとすると、スポットライトの形状から
視錘台を作り、キャラ群とフィールドをクリッピングして抽出する。
次に抽出したキャラ群のみライト視錘台で描画し、影用の投影テクスチャを作成する。
次に普通にフィールドとキャラ群を描画。
次に抽出したフィールドのみ投影テクスチャで描画。
ちなみにシャドウマップも同じような方法なので
これをやるなら直接シャドウマップに行ってもいいと思う。
0583デフォルトの名無しさん
2010/05/02(日) 23:41:52D3DXCreateEffectFromFile に渡せるフラグの値を確認したかったんだけど、この記事には
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
該当箇所が大分変更されていた。 ・・・いや本当、関連情報、別リリース版へのリンクくらい付けとこうよと思った。
0584デフォルトの名無しさん
2010/05/03(月) 00:05:39最近はマシになってるものの、日本語版のドキュメントは翻訳抜けとか情報が古い箇所が散見されるんで
英語版のMSDNを見るクセをつけた方がハマらなくて済むぞ
0585デフォルトの名無しさん
2010/05/03(月) 00:35:39むしろ上のリンクはわざわざ「過去のバージョン」から辿った先にある
ドキュメントで、そんなところを参照する方が悪い希ガス。
0586デフォルトの名無しさん
2010/05/03(月) 01:00:38同じようなのでも二つあるから注意w
0587デフォルトの名無しさん
2010/05/03(月) 01:03:42ググったらたまたまたどり着いちゃっただけでしょ。
関数名で検索すると過去のバージョンがトップに出る確率が高いんだよね。
0588デフォルトの名無しさん
2010/05/03(月) 10:32:54ピクセルシェーダは正常で、HLSLに問題が無い事は FX Composer でも動作確認して、C++側各所のHRESULTも確認済み。
しかし頂点シェーダを使おうとすると何も表示されない。
・・・もう少し自力で調べて整理してから、質問します
0589デフォルトの名無しさん
2010/05/03(月) 10:39:510590デフォルトの名無しさん
2010/05/03(月) 10:52:46ちなみにHLSL側の問題じゃなくて、HLSLコードはこれだけなので、
http://codepad.org/LnMY4hoO
多分C++側の問題。何かを忘れてるか、知らないか、勘違いしてると思うので今整理中です
0591デフォルトの名無しさん
2010/05/03(月) 10:53:270592デフォルトの名無しさん
2010/05/03(月) 10:58:17黒い背景に紛れたか、アルファテストかなんかでクリップされて、
表示されてないように見えるだけ、に100ペリカ
0593デフォルトの名無しさん
2010/05/03(月) 11:21:57頂点カラーを頂点シェーダからピクセルシェーダに渡してないじゃん。
0594588
2010/05/03(月) 11:29:50http://codepad.org/LAUgfxiv
実際にはここに他に diffuse、ambient などの値も渡しています。
しかし↑これであっても状況は同じ。 もうちょい追いかけます
0595588
2010/05/03(月) 11:30:51http://codepad.org/JkUTN1EX
0596デフォルトの名無しさん
2010/05/03(月) 11:47:300597デフォルトの名無しさん
2010/05/03(月) 11:56:29>float4 psProc(VSOut In) : COLOR {
PSの入力にVSOutは駄目じゃね?
0599588
2010/05/03(月) 12:20:56目的は、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の戻り値でエラーが出ていない事は執拗に確認済みです。長くなってすみません
0600デフォルトの名無しさん
2010/05/03(月) 12:35:33頂点シェーダにちゃんと定数として行列渡してる?
0601588
2010/05/03(月) 12:44:09デバイス->SetTransform(D3DTS_WORLD, &matWorld);
デバイス->SetTransform(D3DTS_VIEW, &matView);
デバイス->SetTransform(D3DTS_PROJECTION, &matProject);
としている3つの行列をかけた物を渡しているのですが、これで問題無いでしょうか。
※つまり、デバイスにもセット、HLSLにもセットと二重に行列を渡しているような状態。
他、デバイス->SetRenderState の中で、VertexShader を使う際にはセットしてはいけない物など
何かありますでしょうか・・・。
0603デフォルトの名無しさん
2010/05/03(月) 12:49:02行列をかける順番が間違ってるとか?
0604588
2010/05/03(月) 13:02:19なんかすみません。
なんて謝っていいのかわかりません
0605588
2010/05/03(月) 13:08:45>>603 さんのレスを見て、「いやいやww 間違ってないですよww」 と思いながら、
自前のカメラ管理クラスから行列取り出す部分を追いかけ、>>600 さんから頂いた、
>頂点シェーダにちゃんと定数として行列渡してる?
のレスを見て気づきました。
要は、メンバ関数の中でかけて作った自動変数の行列のポインタを投げていたっていう最低なオチです。
ちょっと天気もいいので散歩してきます。 ご迷惑おかけしました。
こんなうんこみたいな事例でも何かの反面になれば幸いです。 ありがとうございました。
0606デフォルトの名無しさん
2010/05/03(月) 13:13:22氏ね
0607デフォルトの名無しさん
2010/05/03(月) 13:15:200608デフォルトの名無しさん
2010/05/03(月) 13:15:330609デフォルトの名無しさん
2010/05/03(月) 13:16:580610デフォルトの名無しさん
2010/05/03(月) 13:17:570611デフォルトの名無しさん
2010/05/03(月) 13:21:30俺なんか 588が書いてる内容の半分も理解できない。ググってもなんかよくわからない
0612デフォルトの名無しさん
2010/05/03(月) 13:28:30DirectXに対する知識、経験値の深さが違う。
0613デフォルトの名無しさん
2010/05/03(月) 15:35:49でも上のみたいな例をを見るとDirectX触るの嫌だな
0614デフォルトの名無しさん
2010/05/03(月) 18:53:16それは答えている奴が最もわかっていると思う
別にそれが悪いと言っているんじゃないんであしからず
0615デフォルトの名無しさん
2010/05/03(月) 20:13:55ツボに入った、今世紀最大の格言の栄誉を送る
0616デフォルトの名無しさん
2010/05/03(月) 20:20:080617デフォルトの名無しさん
2010/05/03(月) 20:26:02高度に経験を積んだプログラマーはどうなりますか?
0618デフォルトの名無しさん
2010/05/03(月) 20:28:540619デフォルトの名無しさん
2010/05/03(月) 20:41:390620デフォルトの名無しさん
2010/05/03(月) 20:42:540621デフォルトの名無しさん
2010/05/03(月) 20:44:260622デフォルトの名無しさん
2010/05/04(火) 03:45:240623デフォルトの名無しさん
2010/05/04(火) 03:48:440624デフォルトの名無しさん
2010/05/04(火) 04:40:11∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
0625デフォルトの名無しさん
2010/05/04(火) 06:11:13パッ パッ パッ パッ パッ パッ
[つり] [ヲタ] [池沼] [厨房] [氏ね] [終了]
‖∧∧ ‖∧∧ ‖∧,,∧ ‖∧,,∧ ‖∧∧ ‖,∧∧
∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)∩・ω・`)
( ). ( ). ( ) ( ) ( ) ( )
`u-u´ `u-u´ `u-u´ `u-u´ `u-u´ `u-u
0626デフォルトの名無しさん
2010/05/05(水) 22:35:38DirectMusicを使うんでしょうか?
DirectShowを使うんでしょうか?
0627デフォルトの名無しさん
2010/05/05(水) 22:40:420628デフォルトの名無しさん
2010/05/05(水) 22:46:41簡単で分かり易かったしオススメ。
MSも今後はXAudio2の使用を勧めてなかったっけ??
0629デフォルトの名無しさん
2010/05/05(水) 23:28:42http://msdn.microsoft.com/ja-jp/library/cc308014(v=VS.85).aspx
なんか楽しそう。俺もちょっと何か作ってみる
0630デフォルトの名無しさん
2010/05/05(水) 23:30:32ここはお前の日記帳じゃない
0631デフォルトの名無しさん
2010/05/05(水) 23:34:240632628
2010/05/05(水) 23:37:57XAudio2を使ってすんなり鳴らせて拍子抜けだったw
SEみたいに短い音と、BGMのような長い音とで使い分けがいることに注意するくらいかな。
とりあえずオススメ。
0633デフォルトの名無しさん
2010/05/05(水) 23:45:49COMコーポネントの流儀に沿うように作っていたから
無駄に複雑なんだよな。
D3D8ぐらいからキレてシンプルに作るようになったw
0634デフォルトの名無しさん
2010/05/06(木) 00:11:49>キレてシンプルに作るようになったw
キレたのかw
0635デフォルトの名無しさん
2010/05/06(木) 00:22:31だいぶ前にDirectX SDKから外れちゃったしね。
0636デフォルトの名無しさん
2010/05/06(木) 00:29:210637デフォルトの名無しさん
2010/05/06(木) 00:36:56「俺ってすごくね?」と舞い上がってしまった後に、DirectShowで呆然としたのが懐かしいw
0638デフォルトの名無しさん
2010/05/06(木) 01:43:24聞いて良かったです.
ありがとうございました.
0639デフォルトの名無しさん
2010/05/06(木) 01:44:360640デフォルトの名無しさん
2010/05/06(木) 01:56:220641デフォルトの名無しさん
2010/05/06(木) 02:28:23ないない
0642デフォルトの名無しさん
2010/05/06(木) 12:37:02>パーティクルに関して詳しく
詳しくって、どこからどこまでの話?
何をやろうとしていて、何がわからないのか書かないと
>>641 みたいなレスしか出来ないと思うぞw
0643デフォルトの名無しさん
2010/05/06(木) 12:45:29とりあえずここを見ると、
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 インストールしないと無い?
0644643
2010/05/06(木) 13:07:36http://forums.xna.com/forums/t/5813.aspx
正解は、
×ライブラリ: XAudio2.lib
○ライブラリ: XAPOBase.lib
実際に上記ライブラリをリンカに指定してテストコードが正常に動いた事も確認しました。
ちなみにこの件については英語版MSDNの方も間違ってる模様。
0645デフォルトの名無しさん
2010/05/06(木) 14:33:28遅れましたが、ありがとうございます。
やはり欲しい物の形としては、レイを飛ばしまくってポリゴン情報抜いて
実装にルールを付けて自分でなんとかする・・しかなさそうですね。
その他の影についての話も参考になりました。ありがとうございました。
0646デフォルトの名無しさん
2010/05/06(木) 14:44:341フレーム内で、同じテクスチャを何度も何度もLockRect〜UnlockRectしまくる形になったのですが、
これは重く無駄な事をやっているのでしょうか?
もし重く無駄な事をやっているのでしたら、
・フレーム毎に全テクスチャをLockRectし、テクスチャ操作が終ったら全てUnlockRectする。
という形に全体を書き直そうと思うのですが、もっと良い方法が有ったりしますでしょうか?
0647デフォルトの名無しさん
2010/05/06(木) 14:56:330648デフォルトの名無しさん
2010/05/06(木) 16:03:21シェーダを使う等の方法でLockを無くせるなら、Lock無しの方がいい。
どうしてもLockが必要なら、D3DLOCK_DISCARDが使えないか検討する。
D3DLOCK_DISCARDを使うとLockした瞬間にテクスチャの内容は全て
無効になるので、必然的に1フレームに1回しかLockできなくなる。
D3DLOCK_DISCARDが使えないケースなら、D3DPOOL_SYSTEMMEMの
テクスチャに対して読み書きして、UpdateTextureで描画用テクスチャを更新。
0649デフォルトの名無しさん
2010/05/06(木) 16:35:51「読み」「書き」どっちのためのロックなのか教えてくだされ
0650デフォルトの名無しさん
2010/05/06(木) 20:43:14あとはサンプルの少なさ・・・出来る人はいいんだろうけどわしみたいな初心者には(´・ω・)
そこらへんが改善されればなー
0651646
2010/05/06(木) 23:18:34状況による質問だったのですね。書き込みメインだったのですが
D3DLOCK_DISCARDは参考にした資料そのままに使っておりました。
それでLock〜Unlockがハッキリしてたのですね。
今回自分で言ってた通りに全体を書き換え、FPSが明らかにマシになってくれました。
シェーダを使う方法で無しにできるならその方が良い・・ いつかその意味を理解し
より効率的に組めるようになりたく思います。 ご助言、ありがとうございました。
0652デフォルトの名無しさん
2010/05/07(金) 04:12:38GetCurrentPositionメソッドで取得した再生位置が
1秒分(44100*2ch*2Byte=176400Byte)ほどずれることがあるんですけど
どなたか、原因についてご存知ありませんか?
ぐぐってもそれらしいサイトが引っかからなくって・・・
Playしてからすぐ(だいたい10ms以内)にGetCurrentPositionすると割と起こります
起こったり起こらなかったりするので原因がよくわからないんです
0653デフォルトの名無しさん
2010/05/07(金) 04:35:210654デフォルトの名無しさん
2010/05/07(金) 05:51:27タイマーの精度でずれてるだけじゃねぇの?
そのバッファの長さが1秒だったりしてないか?
0655デフォルトの名無しさん
2010/05/07(金) 14:44:22実は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
0656デフォルトの名無しさん
2010/05/07(金) 15:09:15DirectSoundのことはあまり詳しくないから外してるかもしれないけど、
http://msdn.microsoft.com/ja-jp/library/cc370454.aspx
>再生カーソルの位置の報告をできるだけ正確に受けるには、セカンダリ バッファを作成する際に
>DSBCAPS_GETCURRENTPOSITION2 フラグを指定しなければならない。
これ関係ない?
0657デフォルトの名無しさん
2010/05/07(金) 15:17:08iミリ秒停止って、ちゃんとiミリ秒か確認してる?
まさかSleep(i)とかしてないよね?
0658デフォルトの名無しさん
2010/05/07(金) 20:48:08ところで、for ループの中で再生と停止を繰り返してるけど、
それ再生のタイミングで必ずカレントポジションがリセットされてる事は確認済みなの?
そんな爆速で繰り返して無事にリセットされてるの? ・・・って、DirectSound系はあんまり詳しくないけども
0659デフォルトの名無しさん
2010/05/07(金) 20:51:470660デフォルトの名無しさん
2010/05/07(金) 21:06:420661デフォルトの名無しさん
2010/05/07(金) 23:31:560662デフォルトの名無しさん
2010/05/07(金) 23:47:16どの話をしてて、どこがどう話になってない? なんか正解知ってるなら書いてくれ
0663652
2010/05/08(土) 07:36:15ライブラリ内部の処理を追ってみましたが
セカンダリバッファを作る時にDSBCAPS_GETCURRENTPOSITION2フラグを指定する場合と
指定しない場合があるようです。ただ、実際の処理でどちらが選択されているのかが
まだよくわからないんで、それが原因なのかはなんとも・・・
>>657
ライブラリで用意された指定ミリ秒停止する関数を使用してます
内部の処理を見るとLARGE_INTEGERとかQueryPerformanceCounter使ってるんで
ミリ秒以上の精度で、ミリ秒停止する処理を実装しているみたいです
>>660
まじすか、どんな感じにするのが普通なんでしょうか・・・
0664デフォルトの名無しさん
2010/05/08(土) 07:43:08どっちみちDirectX直接だって関数呼び出し並べるだけなんだから、
試しに自前で実装してみたら?
0665デフォルトの名無しさん
2010/05/08(土) 08:41:42GetCurrentPositionが絶対に成功してる保証が無い
タイマーが正確だという保証が無い
Windowsに制御を戻さないforループ内でのテストの信憑性が無い
どうしてもというなら
話はその辺を全部検証してきたからだな
0666デフォルトの名無しさん
2010/05/08(土) 21:14:35WIN32APIで描画する場合、デバイスコンテキストを取得し、LineTo等で描画をおこなうんですが
DirectXの方が高速といわれるのはなぜですか?
0667デフォルトの名無しさん
2010/05/08(土) 21:26:250668デフォルトの名無しさん
2010/05/08(土) 21:28:040669デフォルトの名無しさん
2010/05/08(土) 21:39:180670デフォルトの名無しさん
2010/05/08(土) 21:50:36なぜ、GPUでやったほうが速いのですか?
0671デフォルトの名無しさん
2010/05/08(土) 21:52:51何故だと思う?
予想してみよう
0672デフォルトの名無しさん
2010/05/08(土) 21:54:320673デフォルトの名無しさん
2010/05/08(土) 21:58:57float4 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"
0674デフォルトの名無しさん
2010/05/08(土) 22:08:13TEXCOORDとかに保存すれば一応PSでも参照できる。
もちろん補完された値だが。
0675デフォルトの名無しさん
2010/05/08(土) 22:21:50POSITIONとかFOGとかいくつかのセマンティックはPS側では利用できないから注意しないと駄目だね。
0676デフォルトの名無しさん
2010/05/08(土) 22:23:34>>673 は見てないのか
0677デフォルトの名無しさん
2010/05/08(土) 22:26:32671じゃないが、単純に一人で何もかも順番に実行するより、
物理的に他人の頭借りて平行して作業すりゃ早いだろ?って事
で、実際にGPU側で仕上がった内容を取得だけして処理する
0678デフォルトの名無しさん
2010/05/08(土) 22:28:59あの〜、抽象的ではなく、具体的に教えて欲しいです。
0679デフォルトの名無しさん
2010/05/08(土) 22:30:17お前質問者じゃないだろ
0680673
2010/05/08(土) 22:30:43色々そこを中心に調べて見ます
ありがとうございました
0681デフォルトの名無しさん
2010/05/08(土) 22:30:58http://pc.watch.impress.co.jp/docs/2007/0326/kaigai346.htm
0682デフォルトの名無しさん
2010/05/08(土) 22:33:30単純にCPUとGPUでは処理能力が違う。積和算で見ると100倍ほど異なる。
(Wikipedia:FLOPS)
0683デフォルトの名無しさん
2010/05/08(土) 22:41:04GPUの詳細まで知り尽くしてるわけではないみたいだから
その程度の奴に聞いても仕方なさそうw
0684デフォルトの名無しさん
2010/05/08(土) 22:42:380685デフォルトの名無しさん
2010/05/08(土) 22:44:32おめーがだよw
0686デフォルトの名無しさん
2010/05/08(土) 22:45:46その程度の奴にって、お前自分が何を言ってるのかわかってないだろw
そんな事もわからずにレスしちゃってるんですねw
0687デフォルトの名無しさん
2010/05/08(土) 22:47:31そういった詳細を隠蔽するためにDirectXAPIがあるわけだし。
0688デフォルトの名無しさん
2010/05/08(土) 22:50:11確かにそうですが、
なぜ、DirectXを使うの?と質問されて、安易に「GPUで処理するから」としか
答えれないのもどうかと思いませんか?
0689デフォルトの名無しさん
2010/05/08(土) 22:51:480690デフォルトの名無しさん
2010/05/08(土) 22:53:42ただいま、読んでいます。
ただし、やはり難しいため、いろいろ調べるのに時間が掛かります
よって、自分なりに理解できるまでは安易に感想なんていえません
0691デフォルトの名無しさん
2010/05/08(土) 22:57:02そろそろ読み終わった?
感想は?
0692デフォルトの名無しさん
2010/05/08(土) 22:58:44こういった奴、って馬鹿でしょ?
0693デフォルトの名無しさん
2010/05/08(土) 22:59:14>WIN32APIで描画する場合、デバイスコンテキストを取得し、LineTo等で描画をおこなうんですが
>DirectXの方が高速といわれるのはなぜですか?
どこでどんな文脈で言われてるの?って話もあるんだけど。
例えばバックグランドのサーフェスに夥しい量の線を繰り返し描くような時、
そのLineを引くロジックに相当無駄があったとしたら、必ずしも 「絶対にこっちの方が高速です!」 とはならないよね
0694デフォルトの名無しさん
2010/05/08(土) 23:00:23見上げた根性だな
質問者のレベルからいってとてもすんなり理解できるとは思えんが・・・
まぁ、ここにいる大抵の連中よりはエンジニアっぽいな
0695デフォルトの名無しさん
2010/05/08(土) 23:01:21ええ〜まだ理解できないの〜?
もしかしてちょっと出来ない子?
0696デフォルトの名無しさん
2010/05/08(土) 23:04:06はい、正直できない子ですよ
あおるだけの貴方よりは出来るとは思いますけど
0697デフォルトの名無しさん
2010/05/08(土) 23:06:50例えば実際に提供されている手段(ドライバやライブラリなど)について何か記述をした時、
そこに望む成果が得られるならばそれを単に利用するだけ。
そういう意味で、例えば望む結果として、DirectXよりもwin32APIの方が良いならばそっちを使うし
逆ならば逆だし。 あと、多分一般的に高速と言われる分野としては、3DCGについては
自前でCPU側の処理としてロジックを書いてGDIに描画するよりも、
専用のハードウェアを利用して書いたほうが早い、かも、しれない。
で、試しにプログラマの立場として実際に提供されているAPIなどを使ってそれを行い、
満足行く結果が得られるなら、そこで先に進む。 何故なら、プログラマは 「何か目的があってプログラミングをする人」 だから。
なので例えば、俺は自分が使っているPC机の脚の長さが何故70cmなのかは知らないし、
なぜモニタのサイズが14inchなのかもしらない。 そんな感じ。
0698デフォルトの名無しさん
2010/05/08(土) 23:10:130699デフォルトの名無しさん
2010/05/08(土) 23:12:50知らないって言葉しか見えてないのか
0700デフォルトの名無しさん
2010/05/08(土) 23:13:18たとえ、どんなことであろうと、知らないなんて
恥ずかしげもなく言えるような人の意見なんてなんの意味も無い
0701デフォルトの名無しさん
2010/05/08(土) 23:16:20お前がそう思うんならそうなんだろう
お前ん中ではな
0702デフォルトの名無しさん
2010/05/08(土) 23:17:23なんで知らないって言葉を言える事が、イコールでなんの意味も無いになるの?
俺には無意味に見えるけど、それ自分の中の定義?
0703デフォルトの名無しさん
2010/05/08(土) 23:20:090704デフォルトの名無しさん
2010/05/08(土) 23:20:460705デフォルトの名無しさん
2010/05/08(土) 23:21:150706デフォルトの名無しさん
2010/05/08(土) 23:21:18え? 駄目に決まってるじゃん?
0707666
2010/05/08(土) 23:22:350708デフォルトの名無しさん
2010/05/08(土) 23:23:130709デフォルトの名無しさん
2010/05/08(土) 23:25:010710デフォルトの名無しさん
2010/05/08(土) 23:26:55完璧に理解し切った感想が出てくる頃合か
0711デフォルトの名無しさん
2010/05/08(土) 23:27:58何故かと言う問いを他人に振る時、前提が曖昧なままじゃ質問にもならないですよ
0712デフォルトの名無しさん
2010/05/08(土) 23:30:32出来ない以前にただの屑じゃね
0713デフォルトの名無しさん
2010/05/08(土) 23:32:00正直大抵の人は答えれないと思うぞ、GPUの詳細なんて。
そこを知ろうとすることは悪くは無いが、まぁ、質問するのは無駄だな
0714デフォルトの名無しさん
2010/05/08(土) 23:32:090715デフォルトの名無しさん
2010/05/08(土) 23:33:43ホント鳩山みたいだ。
0716デフォルトの名無しさん
2010/05/08(土) 23:37:05いや後だしで曖昧な質問だった、と決め付けてる訳じゃなくて、
ここはプログラム板のDirectXスレなので、プログラミングする側の人間が知ってる範囲ってこのくらいで十分だから、
実際知らねーよって話じゃないの?
逆に、今コンデンサの中にどのくらいの電流が流れているかを知らないと電卓プログラムは作れませんだなんて、
そんな話は笑い話にもならないだろ?って事。 プログラム板なんだよここ
・・・ただ勿論、逆に 「そこを知らないと絶対に無理」 ならば知らない事は恥だろうし、弊害を生むだろうけど。
分業された立場の中で、目的を達成するだけだろ。全能の神じゃないんだから。 違うの?
0717デフォルトの名無しさん
2010/05/08(土) 23:37:160718デフォルトの名無しさん
2010/05/08(土) 23:37:31でも線とか絵を描くのはGPUの方が速いです。
理由は僕が阿呆だから答えられませんwww
って言えば満足するのかね。
0719デフォルトの名無しさん
2010/05/08(土) 23:38:29結局のところ、知らないんじゃんw
0720デフォルトの名無しさん
2010/05/08(土) 23:38:360721デフォルトの名無しさん
2010/05/08(土) 23:39:47同意
知ったかぶって、いい加減なレスする奴が腹立つ
0722デフォルトの名無しさん
2010/05/08(土) 23:41:33だからいいだろそれでって。そんな要点が理解できなかったら要件から設計もコードも起こせないぞw
頭悪い小学生かよまったくw
0723デフォルトの名無しさん
2010/05/08(土) 23:41:36「なぜGPUで処理する方が速いのですか?」
質問らしきものはこの二つだけなのに
なんでGPUの詳細とかお答えせなきゃならんのかw
0724デフォルトの名無しさん
2010/05/08(土) 23:41:45簡単に言えば、GPUはCPUのSSEユニットの拡張したようなやつをかなりいっぱい持ってるからそれ系の処理が得意。
逆に整数演算はすごいロスがある。
米軍は海の上に住めばいいと思うよ。日本謹製の技術で。
0725デフォルトの名無しさん
2010/05/08(土) 23:42:020726デフォルトの名無しさん
2010/05/08(土) 23:42:27ところで知ったかぶりのレスってどれよ
0727デフォルトの名無しさん
2010/05/08(土) 23:42:37CPUよりGPUを使った方がいいとされるのは、純粋にGPUの方が処理能力が大きいため。
ただしGPUは元々は画像処理用なので汎用で使えるわけではなく、
並列処理が行えない計算には使えない。
WindowsでGPUを使用するにはDirect3D/OpenGL/Cgなどを利用する必要がある。
詳しい話は後藤さんの記事を読め。
なんでこんなわかりきったことをグダグダと揉めるんだか。
0728デフォルトの名無しさん
2010/05/08(土) 23:43:370729デフォルトの名無しさん
2010/05/08(土) 23:44:21GDIとDirectXをどこまで知ってるのよ
0730デフォルトの名無しさん
2010/05/08(土) 23:44:45じゃぁRivaTNTで処理するよりもCorei7で処理する方が早いんですね、とか言い出しかねない。
0731デフォルトの名無しさん
2010/05/08(土) 23:45:18「鳩山みたい」ってレスの事じゃね?w
0732デフォルトの名無しさん
2010/05/08(土) 23:48:27すいません。そろそろ止めときます
0733デフォルトの名無しさん
2010/05/08(土) 23:49:36俺はきっと八百屋とか吉野家の事も全て知っていないといけない
てかそろそろコーディングの話に戻りたいぜ
0734デフォルトの名無しさん
2010/05/08(土) 23:51:280735デフォルトの名無しさん
2010/05/08(土) 23:52:160736デフォルトの名無しさん
2010/05/08(土) 23:54:420737デフォルトの名無しさん
2010/05/08(土) 23:59:120738デフォルトの名無しさん
2010/05/09(日) 00:01:470739デフォルトの名無しさん
2010/05/09(日) 00:09:06答えなければいけないなんて誰も言ってないだろ?
0740デフォルトの名無しさん
2010/05/09(日) 00:10:13上っ面だけ舐めて、本質を分かってないような奴が書いたプログラムなんて
誰も使ってくれないよ
0741デフォルトの名無しさん
2010/05/09(日) 00:12:37そりゃそうだw
>>740
そのレスを見ただけならそういう意見も出るよね。同意かな
0743デフォルトの名無しさん
2010/05/09(日) 12:39:54/__ \
| | | |
(_) (__)
愛用ツール:ツクール
0744デフォルトの名無しさん
2010/05/09(日) 19:24:02少なくとも構文強調できるものを探しています
0745デフォルトの名無しさん
2010/05/09(日) 19:28:070746デフォルトの名無しさん
2010/05/09(日) 19:42:470747デフォルトの名無しさん
2010/05/09(日) 20:18:29サクラエディタ
0748デフォルトの名無しさん
2010/05/09(日) 20:27:06強調キーワードを自分で編集できて便利。
0749デフォルトの名無しさん
2010/05/09(日) 23:50:12秀丸とかだとできないの?
0750デフォルトの名無しさん
2010/05/10(月) 00:27:060751デフォルトの名無しさん
2010/05/10(月) 00:34:210752デフォルトの名無しさん
2010/05/10(月) 00:57:430753デフォルトの名無しさん
2010/05/10(月) 01:41:450754デフォルトの名無しさん
2010/05/10(月) 20:37:27また、ハイトマップで衝突判定ってどうやってやるんでしょうか?
0755デフォルトの名無しさん
2010/05/10(月) 20:42:270756デフォルトの名無しさん
2010/05/10(月) 20:52:45ただ、Y軸だけってだけじゃなくて、法線方向に起伏させるやり方(甲羅から生えるトゲトゲとか)も同じ名称だと思うよ。
0757デフォルトの名無しさん
2010/05/10(月) 20:53:040758デフォルトの名無しさん
2010/05/10(月) 20:57:02>757
ありがとうございました
0759デフォルトの名無しさん
2010/05/10(月) 23:09:00D3D11_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への渡し方について教えて下さい。
0760デフォルトの名無しさん
2010/05/10(月) 23:20:180761デフォルトの名無しさん
2010/05/11(火) 00:00:01普通の3Dポリと同じで、毎フレームごとに線とか再描画するイメージでいいんですよね?
たとえば秒間何ラインくらいいけるもんなんすかねぇ。
それともクリッピングとかあるみたいですし、DirectDrawみたいな感じなんすかねぇ。
よさそうなら喜んでWindows7買ってくるんですが。
0762デフォルトの名無しさん
2010/05/11(火) 00:07:07そんなの、自分でテストすればいいじゃないか。
それから、Direct2DはVistaでも動くぞ。
0763デフォルトの名無しさん
2010/05/11(火) 03:23:13まぁGoogle先生でも知らないみたいなので、無さそうですかね
0764デフォルトの名無しさん
2010/05/11(火) 04:03:41作ってる途中だけど
0765デフォルトの名無しさん
2010/05/11(火) 04:07:05ソース丸ごと
0766デフォルトの名無しさん
2010/05/11(火) 04:09:39まだDirectXのメッシュクラスに自作のデータ流す方法分かってないから知りたいです
0767デフォルトの名無しさん
2010/05/11(火) 04:22:290768デフォルトの名無しさん
2010/05/11(火) 07:37:55GLであればAutodeskにあるSDKのサンプルならあるんですよね
0769デフォルトの名無しさん
2010/05/11(火) 09:45:23これかね
0770デフォルトの名無しさん
2010/05/11(火) 11:34:430771デフォルトの名無しさん
2010/05/11(火) 13:25:31まぁSDKのsampleにあるんだけど、なんか読みづらいのよね
0772デフォルトの名無しさん
2010/05/11(火) 16:28:250773デフォルトの名無しさん
2010/05/11(火) 16:30:220774デフォルトの名無しさん
2010/05/11(火) 18:53:57自分はホビーユーザーなので、今もDX9でXファイルです。
0775デフォルトの名無しさん
2010/05/11(火) 19:34:36ttp://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をそのまま色として出力してみた図です。
左では普通に表示されるので法線はおかしくないと思うのですが
他におかしくなる原因として何が考えられるでしょうか
0776デフォルトの名無しさん
2010/05/11(火) 19:41:23トゥーンシェーダというかハーフランバートだね。
//float4 Col = tex2D(Samp1, float2( p, 0.1f ));
ここが臭うなぁ・・・
ここで参照してるテクスチャ見せて。
0777デフォルトの名無しさん
2010/05/11(火) 19:43:35ベタ塗り一色のテクスチャで試してみるといいかも
0778デフォルトの名無しさん
2010/05/11(火) 19:56:51Samp1のAddressUはClampにしてる?
0779デフォルトの名無しさん
2010/05/11(火) 19:58:03もう一度落ち着いてレンダリングしてみろ
0780775
2010/05/11(火) 19:58:36ありがとうございます。
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
0781デフォルトの名無しさん
2010/05/11(火) 20:00:35テクスチャ座標にp(拡散係数?)が絡んでるのはなぜ??
0782デフォルトの名無しさん
2010/05/11(火) 20:04:48計算誤差で内積がわずかに1.0を超えてリピートしてる気がする。
0783781
2010/05/11(火) 20:06:120784775
2010/05/11(火) 20:08:52以前テクスチャのテストで使った
AddressU = Wrap;
AddressV = Wrap;
をコピペしたのが間違いだったのですね
みなさんありがとうございました。
0785デフォルトの名無しさん
2010/05/11(火) 20:12:400786デフォルトの名無しさん
2010/05/11(火) 20:34:30FBX SDKに関する話題はどのスレいけば良い?
0787デフォルトの名無しさん
2010/05/12(水) 00:14:190788デフォルトの名無しさん
2010/05/12(水) 00:19:38CG板かまるぺけさんのとこ
でもたぶんマイナーなのでみつからない
0789デフォルトの名無しさん
2010/05/12(水) 00:34:52テクスチャをレンダーターゲットにすれば
2D描画に関しては必要な時にだけ更新すればよい。
ただ2D描画時に同期とる設定をしなければならないのでメンドイ。
0790デフォルトの名無しさん
2010/05/12(水) 00:52:13SDKのバージョン自体は定期的にあがってたんだな・・・
0791デフォルトの名無しさん
2010/05/12(水) 02:46:37IMFVideoMixerBitmapとIDirect3DSurface9を用いた、EVRでの
オーバーレイ表示を考えています。
このとき、IDirect3DSurface9はどのように準備すればよいのでしょうか?
大まかな流れで結構ですのでご教授のほどよろしくお願い致します。
なお、言語はC++/CLI、Managed DirectX未使用です。
0792デフォルトの名無しさん
2010/05/12(水) 03:40:100793デフォルトの名無しさん
2010/05/12(水) 08:22:370794デフォルトの名無しさん
2010/05/12(水) 08:39:23Win32プログラムの経験はあるけど
DirectXでプログラム組んだことありませんって質問なのか?
0795デフォルトの名無しさん
2010/05/12(水) 10:19:58スキン無しならただの頂点の配列でいいし
スキン有りなら単純な木構造でよくね?
0796デフォルトの名無しさん
2010/05/12(水) 10:26:24遅くなりましたがありがとうございます。
描画は頂点配列をデバイスに流してるだけでした。
これじゃクオータニオン作らないといかんな…
0797デフォルトの名無しさん
2010/05/12(水) 10:39:02勘違い
0798デフォルトの名無しさん
2010/05/12(水) 11:21:380801デフォルトの名無しさん
2010/05/13(木) 19:05:04今使ってるのは2005
0802デフォルトの名無しさん
2010/05/13(木) 19:08:25とりあえず無料のExpressで試せして判断しろ
なんならそのまま使い続けろ
0803デフォルトの名無しさん
2010/05/13(木) 20:13:54トライアル版なら使ってるけど
2005からならそろそろ移行しないとサポート打ち切り始まってるライブラリ出始めてるだろ
0804デフォルトの名無しさん
2010/05/13(木) 20:28:43C++しか知らんが、使う価値はある。
インテリセンスでフリーズするとか、
デバッグランタイムじゃないと落ちるとか
2008では不明な不具合が結構あったが
全部直った。
ただ、重くなる。
2008はWinXP1.4GHzセロリンPCでギリギリ使えてたんだが
2010は重くて無理だった。
0805デフォルトの名無しさん
2010/05/13(木) 20:31:59そんなロートルマシンは窓から投げ捨てろ!
いや、まじで。
そろそろCore 2 DuoやAthlon 64 X2くらいが当たり前な世の中になってほしいです。
0806デフォルトの名無しさん
2010/05/13(木) 20:44:11いやとっくに出てる。日本語版。
WebインストーラもISOイメージフル版も。
http://www.microsoft.com/express/downloads/#2010-All
0807デフォルトの名無しさん
2010/05/13(木) 23:00:49愛機なんで捨てたりは出来ないが
2010が動かないのを機に、Win7機を買ったぜ。
これで俺もDX11プログラマの仲間入りさ。
ただしグラボが無いんで、サンプルの類はまったく動かないがな!
0808デフォルトの名無しさん
2010/05/13(木) 23:09:190809デフォルトの名無しさん
2010/05/14(金) 00:38:17インテリセンスやらコードチェックやら超優秀になってやがる・・・
優秀だから、たよりすぎてダメになりそうだぜ
おっとスレチか
0810デフォルトの名無しさん
2010/05/14(金) 00:45:28VC++のエディタは検索キーワードのハイライトができないのがイタイ・・・
0811デフォルトの名無しさん
2010/05/14(金) 00:45:560812デフォルトの名無しさん
2010/05/14(金) 01:05:56インテリセンスとか「宣言へジャンプ」とかどうやってんの?
0813デフォルトの名無しさん
2010/05/14(金) 02:16:290814デフォルトの名無しさん
2010/05/14(金) 03:33:44ただ現在は実行中に、「の形をした白いものが画面にちらつくことがあります。
(同じソースを使っていても出たりでなかったり、出る場所が違ったりします)
メッシュの描画処理やカメラの座標設定をコメントアウトしても真っ暗な画面に白いものがちらつき、何が原因なのかわかりません。
なお使用しているのはDirectX SDK (February 2010)および、Visual C++ 2008 Express Edition SP1です。
心当たりはないでしょうか?
0815デフォルトの名無しさん
2010/05/14(金) 04:47:27よくわからんけどすげぇじゃねぇかぁ!
0816デフォルトの名無しさん
2010/05/14(金) 07:32:140817デフォルトの名無しさん
2010/05/14(金) 09:58:55あとは、できればそのノイズの写ったスクリーンショットかな
0818デフォルトの名無しさん
2010/05/14(金) 10:00:24PIXでフラッシュが出るまで全FPSをスキャンしてじっくりと解析してみれ。
0819814
2010/05/14(金) 13:15:59わかってみれば簡単なことだったのですが、言われるまでは気付きませんでした。ありがとうございます。
>よくわからんけどすげぇじゃねぇかぁ!
描画してるものは単なるテクスチャを貼り付けただけの板なので……すごくはないと思います。
これからも頑張ってもうちょっと前進したいです。
0820デフォルトの名無しさん
2010/05/14(金) 13:27:54お前も頑張れよww
0821デフォルトの名無しさん
2010/05/14(金) 20:03:43それは網膜に映るミジンコ状の電気ノイズ刺激に過ぎません。
0822デフォルトの名無しさん
2010/05/14(金) 20:05:020823デフォルトの名無しさん
2010/05/14(金) 20:32:450824デフォルトの名無しさん
2010/05/15(土) 00:17:47マップチップで構成された背景をスクロールさせるとき、
一枚のチップ(32*32とか)ごとにスプライトを1つ作り、そこにチップテクスチャ
を1枚貼るのですか?
それともある程度の数のチップテクスチャをその数の大きさ分のスプライト1枚に貼るのですか?
0825デフォルトの名無しさん
2010/05/15(土) 00:39:40何十枚もマップチップを描画するよりも処理は軽いはず。
わかりにくかったらすまない。
0826デフォルトの名無しさん
2010/05/15(土) 00:42:29小さいのだと、動くスピードばらばらにして近感作ることもできる
単にスクロールさせたいだけならでかいの一枚でもいい
0827デフォルトの名無しさん
2010/05/15(土) 00:50:07とりあえずお前の言うスプライトの定義が曖昧なのでそこをはっきりさせよう
ゲームを管理する上では1セル1データで管理した方が圧倒的に楽
しかしそれを安易に実行すると32x32のチップで640*320を埋めようとすると
20x15回のDrawPrimitiveとテクスチャ切り替えが発生する
この程度では最近のマシンではたいしたネックにはならないだろうが
簡単にこの回数を減らす方法としては
チップマップを1枚のテクスチャに突っ込む
20*15*4個の頂点からなる1個の頂点バッファを作成する
あとは各頂点のテクスチャ座標を移動するなり書き換えるなりすれば
1回のDrawPrimitiveで描画が完了する
0828デフォルトの名無しさん
2010/05/15(土) 00:52:56とりあえずなんで640 480じゃないのかってね
0829デフォルトの名無しさん
2010/05/15(土) 01:13:350830デフォルトの名無しさん
2010/05/15(土) 01:17:05例えば、1チップ32x32ピクセルで、表示領域が例えば320x320だとすると、
一度に表示されるチップは10x10チップ。
で、スクロールすると両端がまたがる格好になるので右と下に1列づつプラスして、
330x330ピクセル幅のビットマップを用意して、そこに一度、11x11分を描画しておく。
で、画面をスクロールする際、マップ上の位置(ピクセル単位)を32で割った商が直前と同じなら
描画処理はせず、剰余の分だけ位置をずらす。
商が変わった時、ビットマップを11x11分再描画するんだが、その際チップの種別が同じ部分は描かなくても構わない訳だから飛ばす。
・・・みたいな処理を繰り返す。 ・・・表示される内容や位置によって処理負荷が変わってしまうけど、
そこはタイミングを別に合わせてどうにかする、みたいな
0831デフォルトの名無しさん
2010/05/15(土) 15:11:35現在DirectX SDKに入っているサンプル-チュートリアルをいじっているのですが、
これらの内容について、みなさんはコピペでなく、処理の内容を理解して使っているのでしょうか。
それとも、適当に把握してるだけで、コピペして使っているのでしょうか。
そして、コピペ使用だと後々問題になってくるのでしょうか?
不躾な質問ですが、回答お願いします・・・。心が折れそうで。
0832デフォルトの名無しさん
2010/05/15(土) 15:18:51いやマジで。
わかりきってるようなベタなパラメタセットや、あ、こんな値セット出来たのかって発見でもあれば
コピペする事はあるけど、少なくとも俺は応用をしたいのでそんな感じ
0833デフォルトの名無しさん
2010/05/15(土) 15:24:05ほんとにこんなの全部覚えるの?だとか心が折れそうになるのは
結果を急いで一度に全部覚えようなんてするからじゃね
やらねばならない事は多いし腰据えて一つ一つ潰していきな
そこにあるのはただのライブラリ関数の使い方であって、実際に自分で作るのはそれらの中で
必要な物を選んで使うだけで、メインとなる処理は自分で考えて作るはずだから
0834デフォルトの名無しさん
2010/05/15(土) 15:30:24ただ闇雲にコピペするのとの間には大きな隔たりがある
しかしこの壁を越えるのに必要なのは
「今の努力」より「継続の経験」によるものが大きい
今は何も分からずにコピペしてても4-5年もDirectXに触ってれば
そこで何が行われてるのか普通に分かってくる
「理解してから使う」のではなく「理解しながら使う」のがよろしかろう
0835デフォルトの名無しさん
2010/05/15(土) 16:36:210836デフォルトの名無しさん
2010/05/15(土) 16:38:200837デフォルトの名無しさん
2010/05/15(土) 17:16:04大抵大した技術者じゃない
好奇心に従ってただスキル増やせばいいのに
0838デフォルトの名無しさん
2010/05/15(土) 17:17:570839デフォルトの名無しさん
2010/05/15(土) 17:19:59放っておいても消えるよ。技術無くてもプライドだけ高いから、屁みたいな言い訳しながら消えていく。
放っておけばおk
0840デフォルトの名無しさん
2010/05/15(土) 17:24:03いやお前はわかってない
「〜わかります」とか、レスすらまさにコピペとかウケるww
頭良くない事は罪じゃないから、せいぜいがんばってニート脱出しなw
自分が何でこんな事言われてるか、本当はわかってるんだろ?ww
0841デフォルトの名無しさん
2010/05/15(土) 17:25:29は酷いな
ある意味すごい発想だな
0842デフォルトの名無しさん
2010/05/15(土) 17:43:140843デフォルトの名無しさん
2010/05/15(土) 17:48:28とにかくなんでもかんでも自分のお手製でないと気がすまないし
何故かそれを誇りに思ってる
使えるものは何でもつかって最終的なゲームの完成だけを目指すクリエイター型と
最終完成そっちのけでライブラリ製作に没頭するエンジニア型の論争は
いつまでたっても平行線で決着が付かない
0844デフォルトの名無しさん
2010/05/15(土) 17:51:47それがわかってて行うならそれは誰かの悪意
発端が上の流れで今更「釣り堀」とか言うのは悪意を誤魔化す言い訳
いいから逃げずに何かしてろ
0845デフォルトの名無しさん
2010/05/15(土) 17:52:170846デフォルトの名無しさん
2010/05/15(土) 18:00:24最初はそうでもいずれステップアップして行けば
改造なり改良したくなってくるしその頃にはどこを弄れば良いか分かってるハズ
何でもかんでも最初から理解した上で1から全部書けというのは酷すぎる
0847デフォルトの名無しさん
2010/05/15(土) 18:05:54ここに質問に来る人って基本
DirectXを極めたい人ではなくてゲームとか作りたい人でしょ?
だったらまずやるべきことは分かるだろう
0848デフォルトの名無しさん
2010/05/15(土) 18:11:540849デフォルトの名無しさん
2010/05/15(土) 18:27:530850デフォルトの名無しさん
2010/05/15(土) 19:19:22だからおまえら凄いゲームの作り方を教えろ
0851デフォルトの名無しさん
2010/05/15(土) 19:27:530852デフォルトの名無しさん
2010/05/15(土) 19:33:25初心者にありがちだな
0853デフォルトの名無しさん
2010/05/15(土) 19:46:50二匹目のどじょう狙う会社にもありがち。 とか言って
0854デフォルトの名無しさん
2010/05/15(土) 22:18:070855デフォルトの名無しさん
2010/05/15(土) 22:50:36涙ぐましいな・・・
0856デフォルトの名無しさん
2010/05/15(土) 23:16:04固定小数点で計算してる場合、
0〜90°を180分割もしておけばゲーム用としては十分だからなぁ。
まあテーブルにしておくところじゃね?
スレ違いだけどね。
0857デフォルトの名無しさん
2010/05/15(土) 23:31:30なんでもテーブルから読んだ方が速くなるわけじゃないけどな
0858デフォルトの名無しさん
2010/05/16(日) 02:43:390859デフォルトの名無しさん
2010/05/16(日) 03:24:090860デフォルトの名無しさん
2010/05/16(日) 03:35:08HLSLで法線マップの色を 赤:X軸 緑:Y軸 青:Z軸 として使用した場合、
ZX面に置かれている地面のポリゴンにそのまま当てると期待した色が出ずに困っていました。
ZX面に置かれた地面のポリゴンに全て平らという意味合いで青いテクスチャを法線として使用すると
2行目の使い方だと光源が真上より傾いたほうが明るく表示されることがあります。
一般的にはこういった場合はどのようにするものなのでしょうか。
現在HLSLで緑と青を入れ替えて 赤:X軸 緑:Z軸 青:Y軸 という風に使用しています。
地面だとこれで問題ないけど回転するものに対して適応出来ないしなぁ・・・・と思いつつ。
0861デフォルトの名無しさん
2010/05/16(日) 03:52:40「法線マップ 接空間」あたりでググれ
0862デフォルトの名無しさん
2010/05/16(日) 04:32:36double sin ( double x ) > float sinf ( float x ) > long double sin ( long double x ) = float sin ( float x )
の順で速いよね
たまにfloatの方がdoubleより速いと勘違いしてる人結構いるけど
0863デフォルトの名無しさん
2010/05/16(日) 05:07:07float sin(float x) と float sinf(float x) の速度が違うのはなぜ?
sin(double) と sin(float) が混在しているってことはC++の話だと思うけど、
普通C++用のmath.hでは sin(float) は sinf をインラインで呼び出してるだけでしょ。
0864デフォルトの名無しさん
2010/05/16(日) 05:50:22実行速度優先で最適化されればすべて等しくなるはずだけど
開発環境によるんじゃね?
0865デフォルトの名無しさん
2010/05/16(日) 07:42:07float演算の場合は計算ごとに毎回32Bitに丸めなおすから処理が入るからだっけ?
でも実際には大量に演算させる場合メモリアクセスの問題でfloatのが速かったりするんだよね。
0866デフォルトの名無しさん
2010/05/16(日) 10:47:22たまに勘違いしてる人がいるって言うより、>>865 も書いてるけどそれは
単にFPUの動作だけをカタログスペックなどで見ている場合、double の方が早いって話で、
実際の処理で考えたらメモリから Read するマシンサイクルが余分にかかるから
やっぱ float の方がって話じゃね
勘違いじゃないと思うよ
0867デフォルトの名無しさん
2010/05/16(日) 11:56:19先に計算しておいてテーブルにしておくということですか...
勉強になります.
0868デフォルトの名無しさん
2010/05/16(日) 14:21:10double sin ( double x ) = float sinf ( float x ) = long double sin ( long double x ) = float sin ( float x )
だったんだけど
0869デフォルトの名無しさん
2010/05/16(日) 14:43:520870デフォルトの名無しさん
2010/05/16(日) 14:53:21基本は全部double sin ( double x )で残りはそれを型キャストしてるだけなんだから。
まぁ、俺が計った限りじゃ3%程遅くなるだけだったのでそれほど気にするほどのものじゃないが
0871デフォルトの名無しさん
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;
}
改行多すぎで怒られたので続く
0872デフォルトの名無しさん
2010/05/16(日) 17:28:28つまり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倍の演算が出来てお得
0873デフォルトの名無しさん
2010/05/16(日) 17:31:500874デフォルトの名無しさん
2010/05/16(日) 18:09:56現実逃避はやめて、あなたのゲームを完成さる作業に移ってください。
0875デフォルトの名無しさん
2010/05/16(日) 18:47:430876デフォルトの名無しさん
2010/05/16(日) 19:44:58>floatはループの最後に無意味なメモリロードとストアが1つずつある
それは無意味ではないので、もっと勉強してくれ。
0877デフォルトの名無しさん
2010/05/16(日) 19:56:270878デフォルトの名無しさん
2010/05/16(日) 20:54:01そういうのをやるのが楽しいのは分るけどまずはゲームなりなんなりを完成させるのが先だよな。
0879デフォルトの名無しさん
2010/05/16(日) 20:56:26store-reloadの話ではなくて,store-reload後にも追加して1組のロードとストアがあるからわからない
こんなコード
fld dword ptr [esp+3Ch]
fstp dword ptr [esp+3Ch]
Debugなら分かるけどReleaseでやってるし意味ないと思うけど
0880デフォルトの名無しさん
2010/05/17(月) 00:05:25たしかfxファイルか何かをいじる奴ですよね?
頂点間の辺の太さや色を弄るようなものなのでしょうか?
0881デフォルトの名無しさん
2010/05/17(月) 01:08:48DirectXよりまず日本語との勉強から始めた方がいいとも思われる
0882デフォルトの名無しさん
2010/05/17(月) 02:33:37頂点カラーのことを言っているのだろうか?
そもそも辺に太さなどないが
0883デフォルトの名無しさん
2010/05/17(月) 02:41:56>>880 具体的に何をしたくて、どこでわからなくなった。
本当に丸ごとなら、まずググって自分なりに整理してみてくれ。
例えば、その用語で望むような内容が出てくるのか、とか
0884デフォルトの名無しさん
2010/05/17(月) 02:50:45したいことは、モデリングツールで頂点ペイントと言うのがあるのでやったらどうなるのかなと思いまして
今はマテリアルやテクスチャはあるのですが、何か金属に色を塗ったような感じに見えるので
頂点カラーを使ったらアニメっぽいオブジェクトを作れると前聞いたような気がしまして
でも頂点カラーってオブジェクトのファイルじゃなくて、fxファイルかなにか、特殊なもので設定するんじゃなかったかなあと思いまして
結局頂点カラーってどういう処理なのかを理解してないものですから、簡単にまとめて頂けたら良いなあと思ったのです
0885デフォルトの名無しさん
2010/05/17(月) 03:49:01その「面」が何色の光をどのように反射するかを設定するパラメーターである
よってライトが存在しないとまったく意味の無いものである
一般に初心者レベルのメッシュの描画では
このマテリアルカラーとテクスチャーカラーの乗算で色を決定する
頂点カラーとは
ポリゴンの頂点そのものの色でありライトに依存しない
素ポリゴンの描画でもないかぎりたいてい無視される値であり
通常は0xffffffff(白)になっており色に影響を与えないようになってる
これを設定し反映させることでライトに依存しない陰影を表現したり
透明度を変化させたりすることもある
一般にモデリングソフトは頂点カラーの出力のON/OFF設定が付いており
普段はあまり使われないものであるのでデータ削減のためにたいていOFFにしてある
上記のような使い方をするときのみONにして頂点情報に色のデータを含めることになる
ただしモデルデータに頂点カラーのデータがあるからといってデフォルトで反映されるわけではない
当然プログラム側で頂点カラーが反映されるようにプログラムする必要がある
またモデルデータに頂点カラーが含まれてない場合でも
プログラム側から頂点カラーを制御して各種演出を行う場合もある
アニメっぽいオブジェクトと頂点カラーはまったくの無関係
おそらくそれは、スキンメッシュファイルの作成時に
各頂点に対するボーンの影響度をグラフィカルに設定するために
見かけ上頂点に色をぬってるようにみえるものがあって
それを「頂点のペイント」と言ってるものもあるのでそれで勘違いしてるのでは?
0886デフォルトの名無しさん
2010/05/17(月) 04:03:31シェーダーとごっちゃになってました
これからシェーダーの書き方を勉強しようとしてたのでした
そしてたら頂点シェーダーか何かと、頂点カラーがごっちゃになって、頂点カラーさえできればアニメ絵の3Dオブジェクトを作れると思ってました
0887デフォルトの名無しさん
2010/05/17(月) 04:23:25トゥーンシェーディングなどのロジックを組んで表現したりするけど、
別に他の方法で再現したっていい。それは自分の都合次第。
逆に、ライト無しで頂点カラーで色を塗る形でアニメっぽくみせようとする事も別に出来ないって事は無いけど
多分あえてそうする理由も無いと思うので、とりあえずシェーダ書いて色々やってみれ
0888デフォルトの名無しさん
2010/05/17(月) 04:26:37頂点情報の構造体とか設定する場面で、頂点カラーにしろなんにしろ見てるはずなんだけど。
他にもSetMaterialにしろ、色々と
0889デフォルトの名無しさん
2010/05/17(月) 04:31:46マルチアニメのサンプルいじって3Dゲーム作ってるだけだし
0890デフォルトの名無しさん
2010/05/17(月) 04:42:37頑張れとしか言えないなw
0891デフォルトの名無しさん
2010/05/17(月) 04:58:41DirectX11の方に行く気ないし
0892デフォルトの名無しさん
2010/05/17(月) 05:02:270893デフォルトの名無しさん
2010/05/17(月) 05:10:120894デフォルトの名無しさん
2010/05/17(月) 05:13:340895デフォルトの名無しさん
2010/05/17(月) 07:06:09我々はずっと見てきているじゃないか。
0896デフォルトの名無しさん
2010/05/17(月) 07:12:030897デフォルトの名無しさん
2010/05/17(月) 07:26:09車輪の再開発だしパソコンが高機能化するからDXUTで十分ってばっちゃがいってた
0898デフォルトの名無しさん
2010/05/17(月) 09:55:33不要になったモデル(特に風景やモンスターなど)はどれくらいの頻度でデータを解放するのが好ましいでしょうか?
使いまわすモデルも結構有るのですが、やはり全部解放して読み込んでとするべきなのでしょうか。(´・ω・`)
0899デフォルトの名無しさん
2010/05/17(月) 10:11:37不要になったモデル(特に風景やモンスターなど)はどれくらいの頻度でデータを解放するのが好ましいでしょうか?
使いまわすモデルも結構有るのですが、やはり全部解放して読み込んでとするべきなのでしょうか!…(´・ω・`)
0900デフォルトの名無しさん
2010/05/17(月) 10:15:490901デフォルトの名無しさん
2010/05/17(月) 10:17:220902898
2010/05/17(月) 10:29:20>>898を代行して貰いお礼を書き込んだ後に、本文の文末だけ改変した>>899を誰かに勝手に投下されてしまいました。
ふざけているかのような内容になり申し訳ありません。(※今回は同板 アク禁になった人の為にレス代行するスレ★210 に依頼させて頂きました。)
0903デフォルトの名無しさん
2010/05/17(月) 11:55:53「使いまわすモデルが沢山有るが、全部解放して読み直すべきか」 だとか、
なんでそんな事を他人に質問してるのか良くわからない。
そのソフトの内部仕様(都合)として、使いまわす=使ってる内容は捨てられないんだろ?
なら使っていない内容を解放しましょう、みたいなバカな答えが聞きたいの?
0904898
2010/05/17(月) 13:17:04変な質問になりすみません。
ステージ内に出てくるモデルが固定ではなくランダムで、将来的には同ステージ内でもプレイし続けると2〜400MBのメモリを食う恐れが有るのです。
これをステージ切り替え時に全部解放して必要なのを読むと待ち時間が増大し、再読み込みする物の読み込み負担が増えるのではないだろうか? と
そして
できれば効率的にメモリを管理できるシステムにして、シームレスとまではいかなくてもそれに近しい環境にできないだろうか? という願望から
曖昧な質問をしてしまいました。 もっと自分なりにどうすれば効率的に管理できるのか考えてみようとおもいます。
ありがとうございました。
0905デフォルトの名無しさん
2010/05/17(月) 15:12:58>>899
理想を言えば、全て自前でメモリ管理するのがベストだろうけど、夢から醒めなさい。
想定しているビデオメモリが潤沢ならば、自前で解放のタイミングを
管理するのが、読み込み時間短縮の点で最良だろう。
シームレスなシーンを想定したゲームはこれが多い。「そろそろ」VRAMが
足りないなって時に、使ってない領域を必要なだけ解放すればいい。
しかしこのやり方だと当然メモリフラグメントの問題が生じてくる。
つまり「メモリは空いているはずなのに、確保できない…」状態だ。なので、
想定しているビデオメモリが厳しいならば、シーンごとにメモリをフラッシュすべき。
むしろゲームのデザインをそれに合わせるべき。
ゲームデザインや自分の腕を考え、可能ならば両者を折衷するのが良いだろう。
なんだかんだ言ったが、PCならDirectXのメモリ管理機能使っておきなさいな。
必ず使うシーンデータをDEFAULTで、動的なデータをMANAGEDで確保。この時
メモリフラグメントを防ぐため、DEFAULTの方を全て先に確保すること。
DirectX11ならまた違ってくるけどな。
0906デフォルトの名無しさん
2010/05/17(月) 16:05:45>>905
ありがとうございます。
メモリフラグメント。初めて知りました。恐ろしい現象ですね;
>必ず使うシーンデータをDEFAULTで、動的なデータをMANAGEDで確保。この時
>メモリフラグメントを防ぐため、DEFAULTの方を全て先に確保すること。
勉強になります。メモリのフラッシュと合わせてそうさせて頂こうと思います。
本当にありがとうございました。 自前の管理もいつかできるようになりたいものです。
0907デフォルトの名無しさん
2010/05/17(月) 23:05:480908デフォルトの名無しさん
2010/05/17(月) 23:28:48※ちなみに逆回転はサンドイッチ算を逆にするだけ
0909デフォルトの名無しさん
2010/05/17(月) 23:52:48もうちょっと頑張ってみます
0910デフォルトの名無しさん
2010/05/18(火) 08:08:040911デフォルトの名無しさん
2010/05/18(火) 19:01:230912デフォルトの名無しさん
2010/05/18(火) 19:09:23無理です。 最低限、普通にCreateWindowしてウィンドプロシージャ書いて、
DirectX関係ない部分の処理は書けないと無理。
・・・単にライブラリをテスト的に使うだけなら、あるいは出来る事が限られてもいいなら
DXUTなどのラッパライブラリを使うことで、"あまり"直接触らなくても書けるかもしれないけど、
そもそもわかってないと多分何も出来ないので、そういう意味で無理です。
というか、当たり前レベル
0913デフォルトの名無しさん
2010/05/18(火) 19:12:42それだけ使って何かするって言うような物じゃないので、
そもそも知らないと多分意味のある物なんて作れない。それ以前に、まったく何も知らない状態なら
DirectXとか全然関係ない基本的な部分でウィンドウすら作れない。 普通のマウスイベントもハンドルできない。
そんな訳で、DirectXってどういう関数群/ライブラリなのか普通に把握してれば、そもそもそんな質問も出ないと思う
0914デフォルトの名無しさん
2010/05/18(火) 19:43:44まーそうだけど詰まったら調べりゃいいんだし便利ライブラリとかもあるから、難しく考えずやってみれば
0915デフォルトの名無しさん
2010/05/18(火) 19:45:16借りることもあるから、簡単なWin32アプリは作れる人が前提
0916デフォルトの名無しさん
2010/05/18(火) 20:20:44SDKに入ってるもっとも簡単なサンプルだと
全体の半分くらいがWindowプログラムの領域になるわけで
経験者であれば残り半分を見れば良いだけの所だが
初心者はどこまでがWin32の領分でどこからがDirectXの領域か判断が付かないから
最初に直面しなければならない情報量が極端に増える
しかし、ステップアップしていけば
Windowsで処理する部分なんて全体の数%にも満たなくなるわけだから必須ではない
Win32APIを極める必要はまったく無いので
スケルトンウィンドウが作れて簡単なメッセージ処理が出来ればあとはDirectXの勉強に専念してOKだと思われる
0917デフォルトの名無しさん
2010/05/18(火) 20:35:070918デフォルトの名無しさん
2010/05/18(火) 20:56:340919デフォルトの名無しさん
2010/05/18(火) 20:56:48猫本読破してくるぜ
0920デフォルトの名無しさん
2010/05/18(火) 21:11:32あとは適宜必要になったら調べればいいかな
さっさと済ませてDirectxに入ったほうが楽しめるかもしれん
0921デフォルトの名無しさん
2010/05/18(火) 21:28:55SDKサンプルのXAudio2BasicStreamを見ながら勉強中です
サンプルではメインスレッドでwavデータをロードしていますが、
これは実際にゲームなどで使う場合、
自ら_beginthreadex などして再生スレッドを生成する必要があることを
意味しますか?
0922デフォルトの名無しさん
2010/05/18(火) 21:34:40なんでヘルプ読まないの?
http://msdn.microsoft.com/ja-jp/library/bb924665(v=VS.85).aspx
0923デフォルトの名無しさん
2010/05/18(火) 21:46:290924デフォルトの名無しさん
2010/05/19(水) 00:37:59マテリアル切り替えが重いと聞いていて当然やるべきだと思っていたのですが、
今時のパーツはそこまで重くならない等と聞いて、そこまでしなくて良いのかな? と疑問に。
描画時だけソートするか、ゲーム全体をソート前提にあれこれ工夫するか悩んでいます。
どう思われますでしょうか?
0925デフォルトの名無しさん
2010/05/19(水) 00:46:18見やすいコードにしたほうがいいのではないだろうか〜
0926デフォルトの名無しさん
2010/05/19(水) 00:48:16ソートしなきゃパフォーマンス落ちる!
とは聞いたことがないなぁ
0927デフォルトの名無しさん
2010/05/19(水) 01:22:21ソートするんだったら全部をZソートして
手前から順に描画することでそれより奥にあるものの描画を省くことで
パフォーマンスを上げようと試みるものじゃ
Z値で大まかにグループ分けして
手前のグループから順にさらのその中でマテリアル単位で描画するとかでもない限り
そんな大幅なパフォーマンスアップは無いような…
0928デフォルトの名無しさん
2010/05/19(水) 07:18:10自分でそうしなきゃ行けないような状態で管理してるからだと思う
予め種類ごとになんらかのリストに分けて管理を単にしてないとか。
あるいはモデルをまたいで同じマテリアルがある時、どのモデル達にどのマテリアルが含まれてて
それらをマテリアル単位に描画したいって事なら、それでもソートなんてせず、
自分で決めたそのマテリアルのIDなりなんなりで頂点範囲のリストを予め参照できる作りにしておけばいいだけ
自分のロジックを都合にあわせて書けばおkってだけの話
0929デフォルトの名無しさん
2010/05/19(水) 07:28:43マテリアルなんてメモリ上のデータを定数レジスタに突っ込むだけじゃん?
0930デフォルトの名無しさん
2010/05/19(水) 07:39:450931デフォルトの名無しさん
2010/05/19(水) 07:53:47Zソートはあったほうがイイんでないの??
0932デフォルトの名無しさん
2010/05/19(水) 08:01:14シェーダー・テクスチャ・ステートの切り替えを極力減らして高速化を図るって話だろ。
0933デフォルトの名無しさん
2010/05/19(水) 08:23:53本にはやるべしとか書いてあるけど、
実際の所労力に見合った効果はある?
0934デフォルトの名無しさん
2010/05/19(水) 08:51:36このスレのレベルに沿ってアドバイスするなら「そんなことより完成させるのが先」
0935デフォルトの名無しさん
2010/05/19(水) 09:12:27エフェクトグループ単位でソートして、どのエフェクトから書くか決めるのもありかもな
0936デフォルトの名無しさん
2010/05/19(水) 09:20:03あらかじめ近・中・遠でわけておくくらいでいいんじゃないか
0937デフォルトの名無しさん
2010/05/19(水) 12:50:550938デフォルトの名無しさん
2010/05/19(水) 12:57:020939デフォルトの名無しさん
2010/05/19(水) 14:23:460940デフォルトの名無しさん
2010/05/19(水) 15:28:420941デフォルトの名無しさん
2010/05/19(水) 19:20:50何か前のほうの書き込みで、VRAMが潤沢になった昨今では、よほどでない限りは
(CPU->GPU転送レベルの)シェーダ切替は発生しないみたいだから、
あまり気にしなくてもイイってあったよ。
0942デフォルトの名無しさん
2010/05/19(水) 19:54:41今でも遅いと思うな。ソートして目に見える違いがあるかどうかはよく分からない。
0943デフォルトの名無しさん
2010/05/20(木) 04:03:59そういうタイプの名前とか、雛形があったらうれしいです
0944デフォルトの名無しさん
2010/05/20(木) 04:18:130945デフォルトの名無しさん
2010/05/20(木) 04:25:12頭を整理しながら書いてたらなんかすごく簡単そうに思えてきたけど
0946デフォルトの名無しさん
2010/05/20(木) 04:33:420947デフォルトの名無しさん
2010/05/20(木) 04:35:240948デフォルトの名無しさん
2010/05/20(木) 04:42:23そんな都合のいい物は存在しないから
とりあえず自分で実装を試みてうまくいかなかったら
改めてどうダメだったのかを質問しに来い
0949デフォルトの名無しさん
2010/05/20(木) 04:46:180950デフォルトの名無しさん
2010/05/20(木) 05:20:234.11 古典的なスーパーマリオ64の三人称コントロールとアニメーション
0951デフォルトの名無しさん
2010/05/20(木) 05:25:34これ本だろ持ってねえぞ
内容晒せよ
0952デフォルトの名無しさん
2010/05/20(木) 05:26:430953デフォルトの名無しさん
2010/05/20(木) 05:29:180954デフォルトの名無しさん
2010/05/20(木) 06:31:550955デフォルトの名無しさん
2010/05/20(木) 06:41:100956デフォルトの名無しさん
2010/05/20(木) 06:42:010957デフォルトの名無しさん
2010/05/20(木) 06:50:16fabs
0958デフォルトの名無しさん
2010/05/20(木) 06:53:31V
/ ⌒`"⌒`ヽ、
/,, / ̄ ̄ ̄ ̄\ 大変失礼なことを致しました。
/,//:: \ 何とぞ、ご容赦くださいませんか。
;/⌒'":::.. |⌒ヽ
/ /、:::::... /ヽ_ \
__( ⌒ー-ィ⌒ヽ、 /⌒`ー'⌒ )
━━━`ー──ゝィソノー‐ヾy_ノー─"
0959デフォルトの名無しさん
2010/05/20(木) 13:37:46サイト見たら数週間掛かるとか書いてあった>ゴムひも視点oz
0960デフォルトの名無しさん
2010/05/20(木) 15:12:240961デフォルトの名無しさん
2010/05/20(木) 18:57:130962デフォルトの名無しさん
2010/05/20(木) 20:12:02http://pc12.2ch.net/test/read.cgi/tech/1274353792/1-100
0963デフォルトの名無しさん
2010/05/20(木) 20:48:55あまり速度ないから970か980くらいかと思ってたけど
0964デフォルトの名無しさん
2010/05/20(木) 23:04:350965デフォルトの名無しさん
2010/05/21(金) 03:16:140966デフォルトの名無しさん
2010/05/21(金) 06:09:32いくつか物体があるのですが、最後に描画される物体のローカル座標?でおそらく表示されてしまいます
それらのメッシュは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() );
というような感じで表示しているのですが
それぞれ閉じているので、ライン自体がどこで表示されてるかわからない上に、どのローカル座標に入ってしまったのかわかりません
教えてください。
0967デフォルトの名無しさん
2010/05/21(金) 06:18:26とりあえずメッシュはシェーダーつかって座標の行列変換して描いてるってことは分かるけど
DrawPrimitiveUPで描くラインは
シェーダー使って描いてるの?固定機能で描いてるの?
0968デフォルトの名無しさん
2010/05/21(金) 06:43:33わかりません。ある物体の座標をラインのための頂点の配列に入れてDrawPrimitiveUP( D3DPT_LINELIST,4, vert, sizeof(VERTEX));としただけです。
適当なところでDrawPrimitiveUPして試してるかんじです。一番上でDrawPrimitiveUPすると最後の物体からラインが生える。
一番上でDrawPrimitiveUPとして最後の物体で↓にすると
//V( g_pEffect->BeginPass( p ) );
V( ほげ->DrawSubset( 0 ) );
//V( g_pEffect->EndPass() );
とすると上手くいく部分もあります。でも理由が良くわかりません。
0969デフォルトの名無しさん
2010/05/21(金) 06:55:27埒が明かないのでソースうpしる
0970デフォルトの名無しさん
2010/05/21(金) 07:02:35エスパーでなんとかおねがいしまつううう
0971デフォルトの名無しさん
2010/05/21(金) 07:06:35それともスクリーン座標で2D的に引きたいのか?
VERTEX構造体とvertの中身だけでも書いてくれ
0972デフォルトの名無しさん
2010/05/21(金) 07:12:563D空間でつ
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},
};
これだけでつ(`・ω・´)
ラインに色が付く時とか付かない時とかあって意味わからんお。
0973デフォルトの名無しさん
2010/05/21(金) 07:21:37DrawPrimitiveUPの前に
SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE)
してくれ
0974デフォルトの名無しさん
2010/05/21(金) 07:25:210975デフォルトの名無しさん
2010/05/21(金) 07:35:48SetTransformで行列の設定はしてるよね?
メッシュは(たぶん)シェーダーで行列変換してるからいいけど
ラインを固定機能でかくならちゃんとデバイスに行列を指定しないとだめだぞ?
0976デフォルトの名無しさん
2010/05/21(金) 07:47:30今D3DXFX_DONOTSAVESAMPLERSTATEにしてみたりしているのですが意味ありますかね?
元々全てD3DXFX_DONOTSAVESTATEだったのですが
0977デフォルトの名無しさん
2010/05/21(金) 07:51:18意味わかっててパラメーターを変更したのか?
DXUTを使用したSDK標準のサンプルはビルドして動かしてみたか?
正常に動いてるなら自分のコードと比較してどこが違うか確かめられないか?
人に質問する前に一人で確かめられることはいろいろあるぞ。
0978デフォルトの名無しさん
2010/05/21(金) 07:51:39メッシュ描画用とは別に
ライン描画用のシェーダーを書いてるとかでもない限り意味無いぞ
0979デフォルトの名無しさん
2010/05/21(金) 07:56:20文字が間違ってました
説教ありがとうございました
0980デフォルトの名無しさん
2010/05/21(金) 07:58:030981デフォルトの名無しさん
2010/05/21(金) 08:07:44をシェーダーで書いてるのか固定機能で書いてるのかだけでもはっきりさせてくれよ
DrawPrimitiveUPは
g_pEffect->BeginPass( p ) ;
と
g_pEffect->End() ;
の内側にあるのか?外側にあるのか?
0982デフォルトの名無しさん
2010/05/21(金) 08:14:28もう解決ってことでいいのか?
0983デフォルトの名無しさん
2010/05/21(金) 08:25:12うん(`・ω・´) ゝ
0984デフォルトの名無しさん
2010/05/21(金) 10:13:14V V
(´・ω・`) うさちゃんピース
0985デフォルトの名無しさん
2010/05/21(金) 10:19:410986デフォルトの名無しさん
2010/05/21(金) 10:21:350987デフォルトの名無しさん
2010/05/21(金) 10:23:460988デフォルトの名無しさん
2010/05/21(金) 19:04:380989デフォルトの名無しさん
2010/05/21(金) 19:42:110990デフォルトの名無しさん
2010/05/21(金) 19:54:350991デフォルトの名無しさん
2010/05/21(金) 20:03:300992デフォルトの名無しさん
2010/05/21(金) 21:00:560993デフォルトの名無しさん
2010/05/21(金) 21:04:35そうやって大人の階段を登っていくんだよ。
0994デフォルトの名無しさん
2010/05/21(金) 21:15:350995デフォルトの名無しさん
2010/05/21(金) 22:01:260996デフォルトの名無しさん
2010/05/21(金) 22:04:14MAX?
0997デフォルトの名無しさん
2010/05/21(金) 22:37:55/__ \
| | | |
(_) (__)
愛用ツール:ツクール
0998デフォルトの名無しさん
2010/05/21(金) 22:48:130999デフォルトの名無しさん
2010/05/21(金) 22:59:071000デフォルトの名無しさん
2010/05/21(金) 23:01:1810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。