Система координат WebGPU
Что уже должно быть понятно:
- векторы и матрицы (Векторы и матрицы)
- clip space: координаты от -1 до 1
Что появится в этой главе:
- какие системы координат проходит вершина на пути к экрану
- почему clip space от -1 до 1
- перспективное деление
- правосторонняя система координат в WebGPU
Итог: теоретическая глава — визуального результата нет, но без понимания этого пути вершины на экран невозможно осознанно работать с проекциями
Каждая вершина проходит через несколько систем координат, прежде чем попасть на экран. Понимание этого пути объяснит, зачем нужны матрицы проекции и что делает GPU под капотом.
Путь вершины
Object space
Координаты относительно центра объекта. Вершины куба от -0.5 до 0.5 — это object space. Куб «не знает», где он находится в мире.
World space
Координаты в общей системе сцены. Model-матрица переводит object space → world space: сдвигает, поворачивает и масштабирует объект на нужное место.
View space (eye space)
Координаты относительно камеры. View-матрица перестраивает мир так, что камера оказывается в начале координат и смотрит вдоль оси -Z (в правосторонней системе).
Clip space
Результат умножения на projection-матрицу. Координаты всё ещё однородные
Область видимости камеры называется frustum — усечённая пирамида. Near и far задают диапазон глубины, FOV — угол обзора. Объекты за пределами frustum не рисуются.
NDC (Normalized Device Coordinates)
После перспективного деления
: (слева направо) : (снизу вверх) : (от ближней плоскости к дальней) — это отличие от OpenGL, где
Screen space
NDC преобразуются в пиксели экрана через viewport:
Ось
Правосторонняя система координат
WebGPU использует правостороннюю систему:
- +X — вправо
- +Y — вверх
- +Z — на наблюдателя (из экрана)
Проверка «правило правой руки»: если указательный палец — X, средний — Y, то большой палец указывает направление Z.
По соглашению камера смотрит вдоль -Z. Это значит, что объекты перед камерой имеют отрицательные координаты Z в view space — projection-матрица переворачивает ось Z так, чтобы ближние объекты имели меньшее значение глубины.
Перспективное деление
В clip space координаты — однородные
Это создаёт эффект перспективы — далёкие объекты (большой
Числовой пример: вершина через все пространства
Пусть вершина куба находится в позиции
1. Object → World (model = сдвиг на
2. World → View (view matrix: камера в
3. View → Clip (perspective_rh с fov=45°, aspect=1, near=0.1, far=100):
Projection-матрица преобразует Z в диапазон
4. Clip → NDC (перспективное деление):
Z = 0.99 — почти на дальней плоскости (1.0 = far). X и Y в пределах
5. NDC → Screen (окно 800×600):
Вершина отобразится в пиксель
Типичные ошибки
Диапазон Z в NDC
В WebGPU Z-координата в NDC находится в диапазоне
Нулевая ближняя плоскость
Значение near = 0 в perspective_rh приведёт к делению на ноль при перспективном делении. Ближняя плоскость отсечения всегда должна быть строго больше нуля — типичное значение 0.1.
Направление оси Y на экране
В NDC ось Y направлена вверх (
Попробуйте сами
Упражнение 1
Подставьте в числовой пример из главы координаты вершины (-1, -1, -3) вместо (1, 1, -5) и проследите путь через все системы координат до экранных пикселей. Попадёт ли вершина на экран?
Упражнение 2
Уменьшите дальнюю плоскость отсечения до far = 5.0 в перспективной проекции. Подумайте: какие вершины из числового примера окажутся отсечёнными и почему?
Упражнение 3
Проверьте «правило правой руки» для системы координат WebGPU: убедитесь, что ось
С этими знаниями мы готовы к следующей главе, где применим model, view и projection матрицы на практике.