gl_Position
является однородными координатами . Компонент w
играет роль в перспективной проекции.
Матрица проецирования описывает отображение из трехмерных точек зрения на сцену в 2D-точки на окне просмотра. Он преобразуется из пространства глаз в пространство клипа, а координаты в пространстве клипа преобразуются в нормализованные координаты устройства (NDC) путем деления на компонент w
координат клипа ( Перспективное разделение ) .
В Перспективной проекции матрица проекции описывает отображение из трехмерных точек в мире, как они видны из камеры с отверстиями, в двумерные точки окна просмотра. Координаты глазного пространства в усечении камеры (усеченной пирамиды) отображаются в куб (координаты нормализованного устройства).
Матрица перспективных проекций:
r = right, l = left, b = bottom, t = top, n = near, f = far
2*n/(r-l) 0 0 0
0 2*n/(t-b) 0 0
(r+l)/(r-l) (t+b)/(t-b) -(f+n)/(f-n) -1
0 0 -2*f*n/(f-n) 0
Когда декартова координата в пространстве зрения преобразованный матрицей перспективной проекции, то результатом является однородные координаты . Компонент w
растет с расстоянием до точки зрения. Это приводит к уменьшению объектов после разрыва перспективы Perspective , если они находятся дальше.
Вы должны использовать Date
, DateComponents
и Calendar
вместо NSDate
, NSDateComponents
и NSCalendar
. Затем старый синтаксис необходимо обновить до последней версии Swift
. Также вам нужно изменить константу (let
) interval
и anchorComponents
на переменную (var
) при изменении значений. Ниже приведен фиксированный фрагмент,
let calendar = Calendar.current
var interval = DateComponents()
interval.day = 7
// Set the anchor date to Monday at 3:00 a.m.
var anchorComponents = calendar.dateComponents([.day, .month, .year, .weekday], from: Date())
let offset = (7 + (anchorComponents.weekday ?? 0) - 2) % 7
anchorComponents.day = (anchorComponents.day ?? 0) - offset
anchorComponents.hour = 3