У меня возникли проблемы при создании функции Load Mesh в C ++ для Direct X. Кажется, я получаю эту ошибку: «Необработанное исключение по адресу 0x00401e64 в _.exe: 0xC00000005: ошибка чтения прав доступа Lox 0x83e05597». Я знаю, что это сбой в этой строке:
D3DXMATERIAL* tempMaterials = (D3DXMATERIAL*)bufMaterial->GetBufferPointer();
Вся функция выглядит следующим образом (я следил за directxtutorial.com до сих пор за прямой помощью X).
void LoadModel(Model* model, LPCTSTR File){
LPD3DXBUFFER bufMaterial;
D3DXLoadMeshFromX(File, D3DXMESH_SYSTEMMEM, d3ddev, NULL, &bufMaterial, NULL,
&model->numMaterials, &model->Mesh);
OutputDebugString("LOAD MESH \n");
D3DXMATERIAL* tempMaterials = (D3DXMATERIAL*)bufMaterial->GetBufferPointer();
OutputDebugString("GET BUFFER\n");
model->Material = new D3DMATERIAL9[model->numMaterials];
model->Texture = new LPDIRECT3DTEXTURE9[model->numMaterials];
OutputDebugString("LOAD MESH \n");
for(DWORD index = 0; index < model->numMaterials; index++)
{
model->Material[index] = tempMaterials[index].MatD3D;
model->Material[index].Ambient = model->Material[index].Diffuse;
// if there is a texture to load, load it
if(FAILED(D3DXCreateTextureFromFileA(d3ddev,
tempMaterials[index].pTextureFilename,
&model->Texture[index])))
model->Texture[index] = NULL; // if there is no texture, set the texture to NULL
}
return;}
Я называю это так:
LoadModel(networkBase, TEXT("E:\\C++\\Skirmish\\X\\gridbox.x"));
Но я нашел мою старую книгу по Beginning DirectX и другой источник на веб-сайте, которые все используют этот тип приведения буфера материала из временного буфера материала, как это делает строка, вызывающая сбой. Пожалуйста, помогите!