2016-12-11 1 views
0

Я новичок в трех js. В моем проекте мне нужно нарисовать землю с большим количеством текстуры. Земля имеет много слоев, каждый слой имеет 4 текстуры и текстуры в разных слоях разного размера. Под изображением описывают землю: Ground Граунд одна сетка имеет несколько материал:Динамическое изменение очень много текстур очень низкая производительность

this.mesh = new THREE.Mesh(geometry, new THREE.MultiMaterial(materials)); 

Предположим, у меня есть машина всегда в центре земли, другими словами, в центре всех слоев. Когда он движется, земля переводится, чтобы автомобиль всегда находился в центре. Поэтому каждый раз переводите текст, мне нужно обновить текстуру в новом положении. Рисунок рисуем 3 слоя для иллюстрации, но в моем проекте 6 слоев. Поэтому каждый раз, когда меняется вся текстура, это означает, что нужно изменить 6 * 4 = 24 текстуры, и это вызывает низкую fps в моей программе.
Это моя функция, чтобы загрузить текстуру из индексированной БД каждый раз, когда изменение текстуры:

Ground.prototype.loadTextureFromIndexedDB = function (url, materialIndex) { 
var loader = new THREE.TextureLoader(); 
loader.crossOrigin = ''; 
loader.load(url, 
    function (texture) { 
     var groundMaterial = ground.mesh.material.materials[materialIndex];   

     groundMaterial.map.dispose(); 
     groundMaterial.map = texture; 
     groundMaterial.map.anisotropy = ground.maxAnisotropy; 
     groundMaterial.map.minFilter = THREE.LinearFilter; 
     groundMaterial.map.needsUpdate = true; 
     img = null; 
     window.URL.revokeObjectURL(url);   
    }); 
} 

Я пробовал много решений. Один из них представляет собой сетку с BufferGeometry и MultiMaterial с массивом ShaderMaterial. Насколько я знаю, это лучший результат для THREE JS, не так ли? Если это тогда, возможно, ТРИ JS не так сильно, как я думал. Должен ли я перейти на другой API для моего проекта? Кто-нибудь предлагает мне какое-либо решение для повышения производительности в моей программе? Большое спасибо!

+1

вы не дают никакой информации о том, почему вам нужны все эти текстуры, Вы также не дают никакой информации о том, как вы реализуете его сейчас. Без этой информации вам сложно помочь. – 2pha

+0

Спасибо @ 2pha за ваш комментарий. Мне был изменен мой вопрос, поэтому я надеюсь, что вы сможете найти то, что я ошибаюсь в своем коде. – congle

+0

Итак, у вас есть 1 наземный самолет с многоматериалом на нем? Какие материалы вы используете в этом многомерном материале? Вы считали, что пишете свой собственный ShaderMaterial? – 2pha

ответ

-1

попробовать использовать BufferGeometry или изменить слой грунта с различными текстурами (сам слой)

+0

Я попытался использовать BufferGeometry без индексирования (потому что одна сетка с несколькими текстурами, поэтому не может использовать индексирование BufferGeometry) но он отстает при изменении всех текстур. Я не знал, что вы имеете в виду «изменить слой земли с помощью разных текстур (самого слоя)». Не могли бы вы объяснить это более подробно? – congle

+0

Я имею в виду создание массива слоев (мешей) и удаление/добавление их из сцены вместо изменения 1 слоя (сетки) текстур. Медленная сцена загрузки, но более быстрое рабочее приложение. – littledumbgirl

+0

Спасибо @littledumbgirl, я попытаюсь использовать ваше решение и сообщить результат позже. – congle

 Смежные вопросы

  • Нет связанных вопросов^_^