Проблема с трехмерной проекцией: значение Z не находится в [1, -1] после разделения перспективы

Я пытаюсь сделать простую перспективную проекцию в процессе растеризации трехмерной точки. Вот все матрицы и другая информация. Все матрицы являются строковыми. Система координат правая.

Камера находится в [0,0, -1], а точка находится в [0,0,0] (w = 1 для матричных операций)

Матрица обзора модели (инверсия матрицы кулачка, т. е. tx = 0; ty = 0; tz = 1):

[1 0 0 tx]
[0 1 0 ty]
[0 0 1 tz]
[0 0 0 1 ]

Матрица перспективы:

[f/aspect,0,0,0]
0,f,0,0
0,0,-(near+far)/(near-far),2*far*near/(near-far)
0,0,1,0]

аспект равен 1, поскольку область просмотра квадратная. Дальний = 100 и Ближний = 0,1 f = 1 / tan (fovDegress * M_PI / 360);

Результирующая матрица:

1.94445, 0,        0,        0
0,       1.944445, 0,        0
0,       0,        1.020202, -2.020202
0,       0,        1,        0

Теперь я применяю матрицу вида модели, а затем матрицу проекции к вектору точки, а затем получаю новую точку Pv = { x, y, z, w} Затем я получаю нормализованные координаты x '= x / w; y '= y / w; и z '= z / w; x 'и y' всегда лежат между [-1,1], пока точка находится в пирамиде. Но это не относится к z '. По мере приближения точки к камере значения z 'экспоненциально возрастают. Когда точка находится в [0,0,0], значение z равно -1.

Теперь мне нужно обрезать несколько строк, поэтому мне нужно, чтобы значение z было между [1, -1]. Мне интересно, что не так с моей процедурой. Спасибо.

5
задан datenwolf 4 May 2011 в 14:24
поделиться