Я использую Three.js для рисования 3D-моделей на рендерере холста webgl над простыми элементами DOM, и мне нужно выполнить обнаружение столкновений между ними. В настоящее время мой рабочий метод заключается в использовании renderer.domElement.toDataURL(), загрузке его как объекта imageData, затем рисовании в отдельном контексте 2D-холста, затем извлечении массива пикселей getImageData() и повторении с использованием эта потрясающая функция столкновения пикселей.
Это невероятно медленно, и снижает частоту кадров до почти неиграбельных ~5-8 кадров в секунду. Без запуска этого обнаружения попаданий я получаю около 40-50 FPS.
Я думаю, что замедление связано с невероятно громоздкой функцией toDataURL()->load image->drawImage()->getImageData().
У меня возникает вопрос: Есть ли лучший способ получить доступ к сглаженным 2D-пиксельным данным, доступным на холсте WebGL? или, возможно, лучший метод экстраполяции координат моего 3D-объекта без параллакса? Честно говоря, любой способ получить какое-то обнаружение столкновений быстрее, чем я сейчас делаю, будет чрезвычайно полезен.
EDIT: WebGL context.readPixels() работает отлично для меня и очень быстро по сравнению с моим предыдущим кладжем. Хотя следует отметить, что массив данных зеркально отображается сверху вниз по сравнению с обычным массивом данных пикселей изображения. Я просто перевернул свою процедуру проверки значения Y при столкновении и заставил это работать, хотя другие могут споткнуться более хитрыми способами. Удачи!