2017-03-05 14 views
7

wszyscy! Pracuję nad projektem, w którym biorę "podstawowy" model/siatkę, i tworzę go tak, aby wyglądał jak bardziej określony teren. Mam jednak problem, gdy próbuję edytować siatkę. Jest to w zasadzie jak to zrobić: (assets jest AssetManager)Model siatki edycji LibGDX z szablonu

Model terrain = assets.get("terrain.g3db", Model.class); 
Mesh template = null; 
for (float x = 0; x <= maxX; x += 1f) { 
    for (float z = 0; z <= maxZ; z += 1f) { 
     Mesh m = template.copy(false); 

     // get proper vertices here 

     mesh.setVertices(vertices); 
     terrain.calculateTransforms(); 

     terrain.meshes.set(0, mesh); 

     ModelInstance terrainInstance = new ModelInstance(terrain); 
     terrainInstance.transform.setToTranslation(x, 0, z); 
     instances.add(terrainInstance); 
    } 
} 

Jedynym problemem jest to, kiedy to zrobić po prostu uzyskać płaski teren. Po usunięciu tej linii:

terrain.meshes.set(0, mesh); 

Dostaję teren, ale każda instancja modelu ma to samo. Aby rozwiązać ten problem, trzeba usunąć tę linię i dodać ten jeden:

terrain.meshes.get(0).setVertices(vertices); 

co myślę dzieje się z linią, która powoduje płaski mapa jest kiedy ustawić go, usuwa wszystko, co mógłby powiedzieć, "Hej, ta siatka odnosi się do tej części modelu".

Ekranów:
Z linii, która powoduje płaską mapę: Picture
Bez tej linii: Picture

UPDATE: Dzięki komentarzu Xoppa za co sugeruje, że załadować nowy model dla każdego rzutu, ale w tym celu muszę użyć G3dModelLoader. Chciałbym użyć AssetManager, jeśli jest to możliwe, ale nie sądzę, że jest ...

+0

O co więc chodzi? – Xoppa

+0

Jak to naprawić, tak że nie mam modeli po prostu ułożone w tablicy. Chcę, żeby modele miały siatki niezależne od siebie. – mttprvst13

+0

Jeśli chcesz utworzyć wiele modeli, utwórz wiele modeli. W twoim kodzie masz tylko jeden model. – Xoppa

Odpowiedz

2

Aby to naprawić, stworzyłem niestandardowy program ładujący, który używa G3dModelLoader. Aby upewnić się, że nie mam żadnych wycieków pamięci, stworzyłem dwie zmienne w klasie, będące samym programem ładującym i tablicą inicjowanych modeli. Po uruchomieniu metody #getNewModel() ładuje nowy model, dodaje go do listy zainicjowanych modeli i zwraca nowy model. W metodzie #dispose() po prostu uruchamia listę zainicjowanych modeli i uruchamia metodę utylizacji w tych modelach.

Powiązane problemy