我正在尝试加载一个充满顶点的obj文件并将其渲染为点云。 当我尝试运行我的代码时崩溃并给我以下错误: Tutorial06.exe中0x66463E50(nvwgf2um.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00E9D000。
我按照微软提供的教程代码与DirectX进行了更改,并将其更改为适应我的布局和一切,但我必须做错了,我不确定它是什么。 这是我尝试初始化缓冲区的方法:
CloudLoader::getInstance().loadCloudData("cloud.obj");
std::vector<CloudVertex>* data = CloudLoader::getInstance().getCloudData();
D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof( CloudVertex ) * data->size();
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory( &InitData, sizeof(InitData) );
InitData.pSysMem = data;
hr = g_pd3dDevice->CreateBuffer( &bd, &InitData, &g_pVertexBuffer );
这是我的云加载代码:
void CloudLoader::loadCloudData(std::string fileName)
{
if (m_loaded == false){
m_loadedData = new std::vector<CloudVertex>();
std::wifstream fileIn(fileName.c_str()); //Open file
wchar_t checkChar;
if (fileIn){
while (fileIn){
checkChar = fileIn.get(); //Get next char
switch (checkChar){
case 'v':
checkChar = fileIn.get();
if (checkChar == ' ') //v - vert position
{
float vz, vy, vx;
fileIn >> vx >> vy >> vz; //Store the next three types
m_loadedData->push_back(CloudVertex(vx, vy, vz));
}
break;
}
}
}
}
m_loaded = true;
}
我猜它是一个C ++的东西,而不是directX,它可能非常简单,但我已经坚持了一段时间了,我真的很感激帮助。
答案 0 :(得分:0)
pSysMem不能指向“数据”,因为这是指向std :: vector类的指针,实际上并不是向量中包含的数据。
尝试:
InitData.pSysMem = data->data();