Я совмещаю 3D-контент с Three.js с содержимым HTML и SVG. CSS.This.js выполняет довольно хорошую работу, синхронизируя размещение содержимого HTML и SVG в 3D-мире.
Но системы координат SVG/HTML являются "левыми", тогда как система координат Three.js "правша". Это в основном означает, что их оси Y обращены вспять. В SVG/HTML, y/top идет по экрану, а Three.js использует более стандартное математическое соглашение y, спускающегося по экрану.
Мне нужно постоянно конвертировать из одного в другое, что довольно подвержено ошибкам. Я знаю, что я не первый, кто столкнулся с этим (например, смотрите здесь). Кто-нибудь придумал общее решение? Вот что я пробовал:
-
Сделайте все в
Object3Dс помощью.scale.y = -1. Как вы можете подозревать, это оказывается катастрофой. Он превращает все наизнанку, и даже не пытайтесь поставить свою камеру там. -
Сделайте все в
Object3Dс помощью.rotate.x = Math.PI. Это более перспективно, но осьzбольше не соответствует концепции HTML z-индекса. Тем не менее, это то, что я сейчас использую. -
В HTML не используйте
top, используйтеbottom. В SVG сделайте все внутри<g transform="scale(1, -1)">внутри<g transform="translate(0, imageHeight)">. Тем не менее, я считаю, что это будет более запутанным для разработчиков, иimageHeightдолжен постоянно обновляться, что является еще одним бременем.
Кто-нибудь придумал что-то лучше? Возможно, библиотека, чтобы помочь с этим?