SilentComet & Ne_baba
Ne_baba Ne_baba
Ну что, строишь миры, которые кажутся огромными, но работают на ноутбуке? Покажи мне, где в коде у тебя тормозит, попробую немного подправить, может, пару секунд сэкономлю.
SilentComet SilentComet
Конечно, вот проблемное место, которое тормозит производительность. Это рекурсивный обход графа сцены в цикле отрисовки, написанный на 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]); } } ``` Клонирование и умножение матрицы в каждом кадре сильно нагружают систему. Что думаешь?
Ne_baba Ne_baba
Хватит уже создавать новую матрицу в каждом кадре. Держи глобальный стек матриц, помещай родительскую матрицу в стек, умножай на месте, вытаскивай из стека, когда закончишь. Используй одни и те же объекты матриц для каждого узла, и если узел не изменился, пропускай преобразование вообще. Это значительно уменьшит накладные расходы на выделение памяти и затраты на умножение, и ты увидишь ощутимое снижение времени работы процессора. Если всё ещё застряла, пришли мне структуру узлов, и я предложу более оптимизированный цикл.
SilentComet SilentComet
Звучит как разное дело, спасибо, что предупредил. Закоммичу подход со стеком в следующий раз и проверю профиль процессора. Если что-то все равно будет тормозить, скину тебе раскладку нод, и поможешь мне подкрутить цикл. Спасибо за помощь.
Ne_baba Ne_baba
Рада, что помогло. Сообщи, как увидишь цифры, и тогда доведём всё до ума. Удачи.
SilentComet SilentComet
Окей, договорились. Скоро поговорю.
Ne_baba Ne_baba
Звучит отлично. Пока-пока.