Без проблем загружается один .х-файл (код Делфийный):
Result := D3DXLoadMeshFromX(PChar(FileName), D3DXMESH_SYSTEMMEM, FD3DDevice,
nil, @FpD3DXMaterialBuffer, nil,
@NumMaterials, FppMesh);
а так же несколько "меш"-й (при условии, что переменные FppMesh1, FppMesh2 ...FppMesh_n объявлены, например, в секции private:
private
FppMesh1,
FppMesh2,
...
FppMesh_n: ID3DXMesh;
...
case smth of
1: Result := D3DXLoadMeshFromX(PChar(FileName), D3DXMESH_SYSTEMMEM, FD3DDevice,
nil, @FpD3DXMaterialBuffer, nil,
@NumMaterials, FppMesh1);
2: Result := D3DXLoadMeshFromX(PChar(FileName), D3DXMESH_SYSTEMMEM, FD3DDevice,
nil, @FpD3DXMaterialBuffer, nil,
@NumMaterials, FppMesh2);
...
n: Result := D3DXLoadMeshFromX(PChar(FileName), D3DXMESH_SYSTEMMEM, FD3DDevice,
nil, @FpD3DXMaterialBuffer, nil,
@NumMaterials, FppMesh_n);
end;
...
Result := FppMesh1.DrawSubset(0);
Result := FppMesh2.DrawSubset(0);
...
Result := FppMesh_n.DrawSubset(0);
Вопрос состоит в следующем: как сделать тоже самое (загрузить несколько "меш"-ей), только без объявления переменных FppMesh1 - FppMesh_n?
Я пробовал вот так:
private
...
FppMesh: ID3DXMesh;
FppMeshList: TList;
p: Pointer;
...
for i := 1 to N do begin
Result := D3DXLoadMeshFromX(PChar(FileName), D3DXMESH_SYSTEMMEM, FD3DDevice,
nil, @FpD3DXMaterialBuffer, nil,
@NumMaterials, FppMesh);
FppMeshList.Add(pointer(FppMesh));
end;
...
for i := 0 to FppMeshList.Count-1 do begin
p := FppMeshList.Items[i];
Result := ID3DXMesh(p).DrawSubset(0);
end;
В этом случае "показывается" только последний "меш", хотя при загрузке (см. цикл "for i := 1 to N do begin") в переменной FppMesh были различные значеня адреса (я проверял).
Хотя и в случае использования "n" переменных FppMesh1 - FppMesh_n не все так гладко - показываются только два первых "меш"-а, но я думаю, что в моей программе где-то ошибка (искать - нет времени)...
Меня больше интересует как "победить" коллекцию интерфейсов FppMeshList? Или (мой вопрос) в более общем виде - как "загрузить" несколько "меш"-й, что бы потом можно было манипулировать (перемещать, поворачивать, масштабировать, "зеркАлить") кажды "меш" отдельно?