2013-05-29 7 views
1

Я бегу довольно простой цикл создание 30 новых сетках куба:Производительность Three.js?

for(i=0; i<30; i++){ 
    var zPos = 0 + i * (cubeHeight+ySpace) + cubeHeight/2; 
    cube = new THREE.Mesh(new THREE.CubeGeometry(cubeWidth, cubeWidth, cubeHeight), material); 
    cube.position.z = zPos; 

    cube.castShadow = true; 
    cube.recieveShadow = true; 
    parent.add(cube); 
} 

Это работает очень медленно. Каковы могут быть причины?
(Я предполагаю, что я смогу повторно выполнить 30 ящиков без проблем с производительностью?)

+0

Можете ли вы поместить свой полный код в jsFiddle? – dIsoVi

+1

Является ли этот цикл в каждом вызове animate() или выполняется только один раз, при инициализации? Сколько огней у вас есть эта огромная тень? –

+0

Сначала я попробовал бы этот пример и проверил бы результаты: http://threejs.org/examples/webgl_interactive_cubes.html – BaptisteB

ответ

3

новый THREE.CubeGeometry (...); должен быть инициализирован один раз для всех вне цикла for, вам нужно всего лишь 1 геометрия для всех кубов ->, потому что они все одинаковые, вам нужно разделить инкрустацию этой геометрии. Я надеюсь, что это помогает.

+0

На самом деле он должен либо создать единую геометрию, либо клонировать ее, либо создавать отдельные геометрии. Они не могут быть разделены, поскольку все их свойства также будут разделены и, по сути, будут одним и тем же кубом. Однако вы можете делиться материалами. –

3

Нам нужно еще несколько деталей, чтобы полностью ответить на ваш вопрос:

  • Какую версию three.js вы используете?

  • Что еще происходит в сцене?

  • Какой метод таймера вы используете? (SetInterval, SetTimeout или requestAnimationFrame)

Мои догадки относительно того, почему это может быть медленным:

  • Некоторые другие части кода на самом деле использует больше времени, прежде чем этот код выполняется.

  • Ваш визуализатор не называется достаточно часто, и он выглядит нестабильным.

  • Ваш компьютер не поддерживает некоторые функции three.js, и он использует работу, чтобы компенсировать это.

  • Ваш компьютер может быть медленным. (Зависит от платформы и браузера.)

  • Вы создаете и уничтожаете эти блоки без методов кеширования. (Вы должны перезаписать старые значения без использования нового оператора в максимально возможной степени. Запрашивающая память может быть дорогим по времени.)

+1

Я был недавно в аналогичной ситуации - охота за причину медленной работы с трио.js. Последнее предложение повторного использования памяти, когда это возможно, вместо того, чтобы называть новое, немедленно решило мою проблему. Я неоднократно создавал объект Vector3 внутри основного цикла.После перемещения его выделения за пределы цикла и просто сброса его значения внутри цикла перед использованием все стало невероятно быстрым. Благодаря! – dmoench

0

Вы также можете проверить, сколько экземпляров Three.js вы работаете на компьютере. Возможно, вы запускаете некоторые демо со своего веб-сайта в фоновом режиме (также в других браузерах).

Завершение их даст вам больше возможностей.

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