Обычно перед переводом применяется матрица вращения. Так
transform = R * T
- R является матрицей вращения (обычно 4 строк и 4 столбца)
- T является матрицей перевода (4 строки и 4 столбца)
*
является умножение матриц которым применяются первые Т а затем R
Конечно, я предполагаю, что вы уже знаете, как выполнять умножение матриц, я не предоставляю код, потому что неясно, нужен ли вам фрагмент python или вы используете экспорт еще одна модель.
После этого применить конечную матрицу проекции (я предполагаю, что ваша матрица проекции уже умноженное на вид матрицы)
final = P * transform
- P является матрица проекции (4 строки и 4 столбца)
transform
ваш полученный ранее (4 строки и 4 столбца) матрицы
final
матрица является тот, который преобразует каждый вектор ваша 3D модели, опять же здесь вы матричное умножение (но в этом случае второго операнд является Колум вектор которым четвёртый элемент 1
)
transformedVertex = final * Vec4(originalVertex,1)
transformedVertex
вектор-столбца (4x1 матрица)
final
является завершающим матрица (4х4)
- вершина является ОНЛ 3 координаты, поэтому мы добавим
1
, чтобы сделать его (4x1)
*
еще матрица умножения
После преобразования вершины Z
значение - это значение, которое непосредственно отображается в буфер Z и вводится в значение глубины.
На этом этапе выполняется одна операция, выполняемая «по соглашению» и делящая Z на W, чтобы нормализовать ее, тогда значения вне диапазона [0..1] отбрасываются (ближе к ближайшей плоскости клипа или ближе всего к далекой плоскость клипа).
Смотрите также вопрос: Why do I divide Z by W?
EDIT:
Может быть, я неправильно ваш вопрос, если вам нужно расстояние между камерой и точкой, это просто
function computeDistance(cam, pos)
dx = cam.x-pos.x
dy = cam.y-pos.y
dz = cam.z-pos.z
distance = sqrt(dx*dx + dy*dy + dz*dz)
end function
пример
cameraposition = 10,0,0
vertexposition = 2,0,0
выше код
computeDistance (cameraposition, vertexposition)
выходы
8
Без проблем;). Спасибо, что приняли мой ответ и добро пожаловать в stackoverflow :) – GameDeveloper