Я совмещаю 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
должен постоянно обновляться, что является еще одним бременем.
Кто-нибудь придумал что-то лучше? Возможно, библиотека, чтобы помочь с этим?