SilentComet & Ne_baba
Ну что, строишь миры, которые кажутся огромными, но работают на ноутбуке? Покажи мне, где в коде у тебя тормозит, попробую немного подправить, может, пару секунд сэкономлю.
Конечно, вот проблемное место, которое тормозит производительность. Это рекурсивный обход графа сцены в цикле отрисовки, написанный на JavaScript:
```javascript
function renderScene(node) {
if (!node.visible) return;
// Apply node's transform
const transform = node.matrix.clone().multiply(parentMatrix);
// Draw current node
gl.drawElements(gl.TRIANGLES, node.mesh.indices.length, gl.UNSIGNED_SHORT, 0);
// Recurse into children
for (let i = 0; i < node.children.length; i++) {
renderScene(node.children[i]);
}
}
```
Клонирование и умножение матрицы в каждом кадре сильно нагружают систему. Что думаешь?
Хватит уже создавать новую матрицу в каждом кадре. Держи глобальный стек матриц, помещай родительскую матрицу в стек, умножай на месте, вытаскивай из стека, когда закончишь. Используй одни и те же объекты матриц для каждого узла, и если узел не изменился, пропускай преобразование вообще. Это значительно уменьшит накладные расходы на выделение памяти и затраты на умножение, и ты увидишь ощутимое снижение времени работы процессора. Если всё ещё застряла, пришли мне структуру узлов, и я предложу более оптимизированный цикл.
Звучит как разное дело, спасибо, что предупредил. Закоммичу подход со стеком в следующий раз и проверю профиль процессора. Если что-то все равно будет тормозить, скину тебе раскладку нод, и поможешь мне подкрутить цикл. Спасибо за помощь.
Рада, что помогло. Сообщи, как увидишь цифры, и тогда доведём всё до ума. Удачи.
Окей, договорились. Скоро поговорю.
Звучит отлично. Пока-пока.