Бюджет: по договоренности
Нужно разработать библиотечный виджет `ScanGlWidget` (Qt/C++ + чистый OpenGL) и демо‑приложение для плавной визуализации изображения, поступающего «полосами» (вертикальными срезами). Визуально «двигается» изображение под фиксированной «линией сканирования», которая остаётся прижатой к левому/правому краю окна и не смещается пан/зумом.

### Стек и окружение
- **Qt** 6.8.3 (`QOpenGLWidget`, `QOpenGLFunctions`), **C++20**, **OpenGL 3.3+**
- **CMake** сборка, целевая платформа: **Windows 10/11**

### Требуемый функционал (MVP)
- **Кольцевой буфер текстуры**: загрузка новых полос в 2D‑текстуру без «сдвига» содержимого; отрисовка до двумя сегментами с `GL_CLAMP_TO_EDGE` без шва.
- **Полосы шириной N ≥ 1**: корректное обновление текстуры прямоугольниками `width=N`, отсутствие визуальных разрывов при wrap.
- **Frame pacing**: плавное время‑базированное движение изображения при включённом VSync; остановка движения при паузе входа.
- **Инвариант интерфейса**: линия сканирования фиксирована у выбранного края; pan/zoom не способен её «утащить» внутрь кадра.
- **Pan/Zoom + fit‑to‑window**: плавные трансформации с ограничителями относительно линии сканирования.
- **Яркость/контраст (GPU)**: регулировка в шейдере для R8/R16/RGBA8 в реальном времени (без «прыжков» яркости).
- **Эмулятор входа (Producer)**: подача полос из PNG с настраиваемой скоростью и джиттером; циклический проход.
- **PBO (ping‑pong)**: двойная буферизация для снижения «микростопов» при загрузке данных в текстуру (после базовой стабилизации).
- (Опционально) **Связка нескольких виджетов**: синхронизированный pan/zoom без петель и дрожания.

### Ключевое API
- Геометрия и формат: `setFrameDimensions(widthPixels, heightPixels)`, `setPixelFormat8u/16u/RGBA8()`, `setInputStripeWidthPixels(N)`
- Приём данных: `bool pushStripe(const void* data, int strideBytes)`
- Движение/направление: `setScanDirection(LeftToRight/RightToLeft)`, `setTargetLatencyMs(ms)`, `setPaused(bool)`
- Навигация: `setZoomAnimated(...)`, `panByAnimated(...)`, `fitToWindow()`
- Тон‑коррекция: `setBrightnessContrast(brightness, contrast)`
Опубликован 14.10.2025 в 16:21
Заказ находится в архиве

Выберите способ верификации:

Обновите страницу после прохождения верификации.