Прошло много времени с момента моего последнего обновления! Я получил отличные отзывы и предложения по архитектуре, особенно в отношении загрузки ресурсов и оптимизации конвейера. Я планирую интегрировать эти идеи шаг за шагом. Прежде чем перейти к продвинутому подвигу...
Прошло много времени с момента моего последнего обновления! Я получил отличные отзывы и предложения по архитектуре, особенно в отношении загрузки ресурсов и оптимизации конвейера. Я планирую интегрировать эти идеи шаг за шагом.
Прежде чем переходить к расширенным функциям, таким как горячая перезагрузка шейдеров или многопоточная потоковая передача ресурсов, нам необходимо решить фундаментальную проблему: переход от плоского 2D-рендеринга к полноценному 3D-окну просмотра. Сегодня мы сосредоточимся на настройке системы 3D-камеры-обскуры.
1. Зачем нам нужна камера? (Нормированные координаты устройства)
Если вы визуализируете сетку в wgpu без униформы матрицы вида камеры или проекции в шейдере WGSL, позиции ваших вершин передаются непосредственно в пространство отсечения нормализованных координат устройства (NDC) WebGPU.
В wgpu NDC — это ограниченное пространство отсечения, где:
Диапазон X и Y от [-1,0, 1,0]
Z варьируется от [0,0, 1,0]
Без матрицы перспективы для разделения перспективы (масштабирование геометрии на основе расстояния по оси Z) ваша сцена визуализируется как плоский ортогональный прямоугольник. Вершины за пределами этого диапазона [-1.0, 1.0] обрезаются мгновенно, и объекты не уменьшаются по мере удаления.
2. Создание стандартной камеры-обскуры
Чтобы добиться реалистичной глубины 3D, мы
