РЕДАКТИРОВАТЬ: исходный вопрос лучше всего решить, просто добавив 0,05 к компоненту y position
узла. Тем не менее, оригинальный ответ, приведенный ниже, немного касается составления матриц преобразования, если это то, что вас интересует.
=============================================== =======================
Если вы хотите применить операцию к матрице, самый простой способ - создать матрицу, которая выполняет эту операцию, а затем умножить исходную матрицу на эту новую матрицу.
Для перевода, если вы хотите перевести на x
, y
, z
, вы можете сделать это:
let translation = simd_float4x4(
float4(1, 0, 0, 0),
float4(0, 1, 0, 0),
float4(0, 0, 1, 0),
float4(x, y, z, 1)
)
Обратите внимание, что это просто единичная матрица (1 по диагонали) с последним столбцом (!!! важно, что float4s выше - это COLUMNS, а не ROWS, как это может показаться визуально), в котором содержится x / y / значения z Вы можете продолжить исследование однородных координат, но подумайте об этом как о представлении перевода.
Затем, в simd, просто сделайте это: let newWorldTransform = translation * oldWorldTransform
, и вы получите преобразование старого мира, переведенное вашими значениями перевода x / y / z (в вашем примере [x, y, z] = [0, 0.05 , 0]).
Однако, возможно, стоит выяснить, почему вы хотите редактировать результаты теста на попадание. Я не могу придумать практического варианта использования для этого, поэтому, возможно, если вы объясните немного больше о том, что вы пытаетесь сделать, я мог бы предложить более интуитивный способ сделать это.