MX_Master Posted March 14, 2011 Share Posted March 14, 2011 getElementMatrix. Сабж ну вроде бы для тех, кто с матрицами связан эта функция очень понятная, но для меня это пока что единственная непонятная функция (: прошу разъяснить хотя бы какое значение в этой матрице за что отвечает я сам в 3Д графике - счагол, но если кто-то пояснит, я буду рад Link to comment
lil Toady Posted March 14, 2011 Share Posted March 14, 2011 http://ru.wikipedia.org/wiki/%D0%9C%D0% ... 0%B4%D0%B0 В общем-то это лишь другое представление позиции и поворота, можно не вникать и пользоваться getElementPosition/Rotation и считать тригонометрически Link to comment
MX_Master Posted March 14, 2011 Author Share Posted March 14, 2011 Я чуть ранее читал литературу, где сразу дают понять одну вещь - тригонометрический метод подсчета не такой уж и быстрый. Но это не значит, что он не подойдет в менее быстрых подсчетах, но все-таки. Поэтому я заинтересовался этой функцией. почитаемсЬ -- позднее -- копал на форуме.. и нашел переделанный пример из вики function getPositionFromElementAtOffset ( element, x,y,z ) if not x or not y or not z then return false end local matrix = getElementMatrix ( element ) local offX = x * matrix[1][1] + y * matrix[2][1] + z * matrix[3][1] + matrix[4][1] local offY = x * matrix[1][2] + y * matrix[2][2] + z * matrix[3][2] + matrix[4][2] local offZ = x * matrix[1][3] + y * matrix[2][3] + z * matrix[3][3] + matrix[4][3] return offX, offY, offZ end хотелось бы на примере сразу понять. Какие x,y,z мы тут указываем, и какие offX, offY, offZ получаем на выходе? В параллельной теме человек спрашивал как найти, допустим точку в 3Д мире которая находится в багажнике тачки. Ну или какой-то другой практичный пример, допустим как найти 3Д точку ровно на крыше транспорта. Link to comment
Antibird Posted March 15, 2011 Share Posted March 15, 2011 Не вдаваясь в подробности, x,y,z - оси, проходящие через центр элемента; в центре, соответственно, точка (0,0,0). На примере автомобиля, если смотреть на него строго сверху вниз, причем морда направлена на север (вверх): ось x - слева направо, y - снизу вверх, z - из глубины на тебя. Допустим, что узнать координаты багажника =) указываем Y (навскидку) -2. Прикрепить что-нибудь на крышу: z +1 etc. Принцип, думаю, понятен. Не буду тут рассказывать про проекции вектора на оси, но можно отметить, что элементы матрицы [4][1], [4][2] и [4][3] - есть координаты объекта в мире GTA, что удобно в некоторых случаях. P.S. Пользуясь тем, что тов. lil toady читает эту ветку хочу поинтересоваться: а не планируете добавить setElementMatrix()? Было бы как минимум логично. Link to comment
lil Toady Posted March 15, 2011 Share Posted March 15, 2011 P.S. Пользуясь тем, что тов. lil toady читает эту ветку хочу поинтересоваться: а не планируете добавить setElementMatrix()? Было бы как минимум логично. Все что мы планируем записано в мантисе[/bugs], там можно и и это функцию попросить, видимо просто никто не задумывался. Link to comment
Kernell Posted March 15, 2011 Share Posted March 15, 2011 Не вдаваясь в подробности, x,y,z - оси, проходящие через центр элемента; в центре, соответственно, точка (0,0,0).На примере автомобиля, если смотреть на него строго сверху вниз, причем морда направлена на север (вверх): ось x - слева направо, y - снизу вверх, z - из глубины на тебя. Допустим, что узнать координаты багажника =) указываем Y (навскидку) -2. Прикрепить что-нибудь на крышу: z +1 etc. Принцип, думаю, понятен. Не буду тут рассказывать про проекции вектора на оси, но можно отметить, что элементы матрицы [4][1], [4][2] и [4][3] - есть координаты объекта в мире GTA, что удобно в некоторых случаях. Если автомобиль будет повёрнут на сервер, то я и без getElementMatrix найду координаты багажника. Причём даже не на вскидку -2, а с помощью getElementBoundingBox, т.е. к Y ( X, Y, Z = getElementPosition ) прибавить minY ( minX, minY, minZ, maxX, maxY, maxZ = getElementBoundingBox ). Но всё это при условии, что автомобиль повёрнут на север.. А как получить координаты багажника при условии, что автомобиль может быть повёрнут куда угодно? Тут уже нужны знания геометрии видимо, которых у меня очень мало (почти нет). Link to comment
MX_Master Posted March 15, 2011 Author Share Posted March 15, 2011 (edited) функция выше этим и занимается, насколько мое просветление в этой теме мне подсказывает, могу предположить function getPositionFromElementAtOffset ( element, x,y,z ) if not x or not y or not z then return false end local matrix = getElementMatrix ( element ) local offX = x * matrix[1][1] + y * matrix[2][1] + z * matrix[3][1] + matrix[4][1] local offY = x * matrix[1][2] + y * matrix[2][2] + z * matrix[3][2] + matrix[4][2] local offZ = x * matrix[1][3] + y * matrix[2][3] + z * matrix[3][3] + matrix[4][3] return offX, offY, offZ end -- ... -- смещение от центра тачки до конца задней части тачки local yOffset _, yOffset = getElementBoundingBox(car) -- car это какая-то тачка -- смещение от центра тачки до точки в центре багажника yOffset = yOffset - 0.5 -- координаты 3Д мира точки в центре багажника в данный момент времени local bootX,bootY,bootZ = getPositionFromElementAtOffset( car, 0,yOffset,0 ) нащщет setElementMatrix никто не заморачивался, т.к. получив матрицу, я так понял, можно выставить позицию и углы вращения существующими функциями, вытянув нужные значения из матрицы хотя бы, приведи парочку жизненно важных способов применения. Многие такими высокими материями графики в скриптинге не занимаются, поэтому хватает функций изменения позиции и углов Edited March 15, 2011 by Guest Link to comment
Antibird Posted March 15, 2011 Share Posted March 15, 2011 Дык ведь с помощью той функции, что MX_Master привел в пример. Я лишь вкратце брякнул, чего она делает. getPositionFromElementAtOffset ( myVehicle, 0,-2,0 ) Ну, естественно, насчет (0,-2,0) это я примерно сказал, пристреляться надо. И будет нам счастье и на север и на юг и вверх тормашками, и к Эйлеру не ходи P.S. Определи чутка. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now