2012-04-15 4 views
0

Я написал программу для загрузки obj-файла в directx 9. Все, что я делаю, это чтение данных вершин и данных индекса из файла (я не читал никаких нормальных данных текстуры или вершин). Затем я подключаю эти данные непосредственно к вершинам и буферам индексов.Obj loader in directX 9

Когда я запускаю код, объекты визуализируются, но они не являются правильной формой. Сетка деформируется. Вот мой код -

D3DXCreateMeshFVF(
    index_size, // NumFaces 
    vertex_size, // NumVertices 
    D3DXMESH_MANAGED, // Options 
    D3DFVF_XYZ, // FVF 
    Device, // The Device 
    &Mesh[id].MeshData); // The Mesh 

VOID* pVertices; 
// Copy the vertices into the buffer 
Mesh[id].MeshData->LockVertexBuffer(D3DLOCK_DISCARD, (void**)&pVertices); 

memcpy(pVertices, VertexData, vertex_size*sizeof(FLOAT)*3); // VertexData is the vertex data that I obtained form the obj file 

// Unlock the vertex buffer 

Mesh[id].MeshData->UnlockVertexBuffer(); 

// Prepare to copy the indices into the index buffer 

VOID* IndexPtr; 

// Lock the index buffer 

Mesh[id].MeshData->LockIndexBuffer(0, &IndexPtr); 

// Check to make sure the index buffer can be locked 

// Copy the indices into the buffer 

memcpy(IndexPtr, IndexData, index_size*sizeof(WORD));// IndexData is the list of indices I obtained form he obj file. 

// Unlock the buffer 

Mesh[id].MeshData->UnlockIndexBuffer(); 

Когда я показываю куб, он отображает только половину его, а некоторые грани отсутствуют. Я подозреваю, что это некоторая проблема с буфером индекса, но я не знаю, как это исправить.

Мне очень нужна помощь. Спасибо всем.

ответ

0

У меня нет времени для чтения кода, но, насколько я помню, индексные данные в файлах .obj начинаются не с 0, а с 1, я имею в виду, что после загрузки всех данных индекса, вы должны вычитать -1 для каждого индекса.

Если вы сравните .OBJ с .X-файлами, вы увидите разницу между данными индекса.