當將VERTEX
結構傳遞給緩衝區時,我注意到了一些奇怪現象。起初,我認爲這是一個錯誤的自定義函數讀取.obj文件,但調試進一步縮小了問題。當傳遞到頂點緩衝區DirectX:將數組指針傳遞給頂點結構
VERTEX foo[] = {
{XMFLOAT3(-0.5f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(-0.5f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.9f, 0.0f, 0.0f), D3DXCOLOR(0.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(2.0f, 0.9f, 0.0f), D3DXCOLOR(0.0f,1.0f,0.0f,1.0f)},
};
工作完美:就拿:
struct VERTEX{
XMFLOAT3 Translation;
D3DXCOLOR Color;
};
和它的實例。動態創建結構的數組實例會產生奇怪的結果。我會看到一個頂點出現,或沒有。這裏有一個例子,假設foo
爲返回[工作] VERTEX*
陣列頂點的功能:
VERTEX *bar= new VERTEX[barsize];
VERTEX foo[] = {
{XMFLOAT3(-0.5f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(-0.5f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.9f, 0.0f, 0.0f), D3DXCOLOR(0.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(2.0f, 0.9f, 0.0f), D3DXCOLOR(0.0f,1.0f,0.0f,1.0f)},
};
bar=foo;
後來就......
memcpy(MappedResource.pData, &bar, sizeof(bar));
我在做一些有趣的嘗試訪問數據那foo
指向,只有第一組座標傳入?
*編輯:當寫這篇文章,foo和酒吧混合。這篇文章現在顯示了正確的例子。
你的代碼很混亂,foo有什麼用?你說這是一個函數,但它是你的代碼中的數組,並且foo = bar會得到未初始化的值。 – zdd
我剛編輯帖子,對不起。我淡化了這個問題。原始代碼具有解析頂點的obj文件的功能。它返回一個'VEXTEX *'數組(表示爲'VERTEX foo []'),它被複制到bar。我注意到'VERTEX'數組工作正常,但是當我使用'new'分配時,我可以訪問新數組中的元素,但D3D不能 - 它似乎只畫一個點。我相信這是一個指針問題。 –
請參閱下面的答案。 – zdd