diff --git a/README.md b/README.md index e062a25..233de8c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # CSS Matrix3D Perspective Calculator +[Русская версия](README_ru.md) + A browser-based tool for generating CSS `matrix3d()` transforms with perspective projection. Define 4 corners on a field and a widget size — get ready-to-use CSS code. **Keywords:** CSS matrix3d, perspective transform, 3D CSS, homography, quadrilateral mapping, CSS transform generator, perspective projection, CSS 3D effects, background image, perspective mockup, CSS perspective tool @@ -13,6 +15,34 @@ A browser-based tool for generating CSS `matrix3d()` transforms with perspective Copy the CSS from the "CSS Output" section and paste into your project. +## Step-by-Step Example + +Place a widget onto a screen in a background image using perspective transform. + +### 1. Upload background image + +Load a background photo onto the field. This will be your visual reference for positioning corners. + + + +### 2. Upload widget image + +Load the widget (e.g. a UI panel or screenshot) that you want to place on the screen. + + + +### 3. Align corners to the target area + +Drag the 4 corners on the SVG field to match the edges of the screen (or any quadrilateral surface) in the background image. The preview updates in real time. + +### 4. Get the result + +The widget is rendered with the correct perspective, matching the screen angle in the background. + + + +Copy the generated `matrix3d()` CSS and paste it into your project. + ## Features - Pure math — homography-based matrix3d() calculation diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..722d23e --- /dev/null +++ b/README_ru.md @@ -0,0 +1,119 @@ +# CSS Matrix3D — Калькулятор перспективы + +[English version](README.md) + +Браузерный инструмент для генерации CSS-трансформаций `matrix3d()` с перспективной проекцией. Укажите 4 угла на поле и размер виджета — получите готовый CSS-код. + +**Ключевые слова:** CSS matrix3d, перспективная трансформация, 3D CSS, гомография, отображение четырёхугольника, генератор CSS-трансформаций, перспективная проекция, CSS 3D-эффекты, фоновое изображение, перспективный макет, инструмент перспективы CSS + +## Использование + +[Открыть в браузере](https://ku6epxboctuk.is-a.dev/css-matrix-calc/) — не требует сборки. + +- **Редактирование** — перетаскивайте углы на SVG-поле, настраивайте размеры поля и виджета +- **Предпросмотр** — результат трансформации matrix3d() обновляется в реальном времени + +Скопируйте CSS из раздела «CSS Output» и вставьте в свой проект. + +## Пошаговый пример + +Размещение виджета на экране в фоновом изображении с помощью перспективной трансформации. + +### 1. Загрузите фоновое изображение + +Загрузите фотографию фона на поле. Она послужит визуальным ориентиром для позиционирования углов. + + + +### 2. Загрузите изображение виджета + +Загрузите виджет (например, панель интерфейса или скриншот), который хотите разместить на экране. + + + +### 3. Сопоставьте углы с целевой областью + +Перетащите 4 угла на SVG-поле так, чтобы они совпали с краями экрана (или любой другой четырёхугольной поверхности) на фоновом изображении. Предпросмотр обновляется в реальном времени. + +### 4. Получите результат + +Виджет отрисовывается с правильной перспективой, соответствующей углу наклона экрана на фоне. + + + +Скопируйте сгенерированный CSS с `matrix3d()` и вставьте в свой проект. + +## Возможности + +- Чистая математика — расчёт matrix3d() на основе гомографии +- Предпросмотр в реальном времени +- Перетаскивание углов мышью +- Редактируемые размеры поля с блокировкой пропорций +- Масштабирование координат при изменении размера поля +- **Загрузка фонового изображения** — загрузка изображения на поле для визуальной ориентации +- **Загрузка изображения виджета** — загрузка изображения в виджет с автоматическим подбором размера +- Три способа загрузки: выбор файла, вставка через Ctrl+V, drag & drop +- **Настройка object-fit** — contain, cover, fill, none, scale-down +- Нулевые зависимости, работает в любом современном браузере + +## Фоновое изображение + +Загрузите фоновое изображение на поле, чтобы использовать его как ориентир при позиционировании углов. Полезно для точного совпадения перспективы существующих скриншотов или фотографий. + +**Как загрузить:** + +- Нажмите «Загрузить изображение» и выберите файл +- Нажмите Ctrl+V, чтобы вставить из буфера обмена +- Перетащите файл изображения на левую колонку или панель «Фон» + +**Настройка отображения:** + +- Используйте выпадающий список object-fit для управления масштабированием изображения: contain, cover, fill, none или scale-down + +## Изображение виджета + +Загрузите изображение непосредственно в виджет. При загрузке изображения размеры виджета (Ш/В) автоматически подстраиваются под размер изображения и блокируются. + +**Как загрузить:** + +- Нажмите «Загрузить изображение» на панели виджета +- Нажмите на поле вставки и нажмите Ctrl+V +- Перетащите файл изображения на панель виджета + +**Удаление:** + +- Нажмите «Удалить», чтобы очистить изображение виджета и разблокировать размеры + +## Применение + +- **Презентации и лендинги** — отрисовка виджета или скриншота на мониторе под любым углом +- **Карусели и галереи** — демонстрация карточек товаров с перспективной деформацией +- **Интерактивные инфографики** — наложение данных на карты или диаграммы с перспективой +- **Превью приложений** — размещение мобильного интерфейса на фоне устройства +- **Эффекты при скролле** — анимация matrix3d для 3D-эффектов без WebGL +- **Макеты и прототипы** — визуальное размещение интерфейсов в контексте (на стене, ноутбуке, баннере) +- **Совпадение перспективы** — загрузите фото экрана, совместите углы, получите точную CSS-трансформацию + +## Структура проекта + +```text +├── index.html +├── style.css +└── js/ + ├── main.js — точка входа + ├── state.js — управление состоянием + ├── homography.js — математика гомографии + ├── svg-renderer.js — SVG-рендеринг + ├── drag.js — обработка перетаскивания + ├── inputs.js — поля ввода + ├── preview.js — предпросмотр + └── ui.js — кнопки, режимы, загрузка изображений +``` + +## Как это работает + +Инструмент использует [гомографию]() для вычисления 3D-перспективной трансформации по 4 соответствующим точкам. Результирующее CSS-свойство `matrix3d()` отображает прямоугольный виджет на произвольный четырёхугольник, заданный пользователем. + +## Лицензия + +MIT diff --git a/images/background.jpg b/images/background.jpg new file mode 100644 index 0000000..00b73f7 Binary files /dev/null and b/images/background.jpg differ diff --git a/images/result.jpg b/images/result.jpg new file mode 100644 index 0000000..98a6487 Binary files /dev/null and b/images/result.jpg differ diff --git a/images/widget.png b/images/widget.png new file mode 100644 index 0000000..8057a82 Binary files /dev/null and b/images/widget.png differ