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 Antibird said: P.S. Пользуясь тем, что тов. lil toady читает эту ветку хочу поинтересоваться: а не планируете добавить setElementMatrix()? Было бы как минимум логично. Все что мы планируем записано в мантисе[/bugs], там можно и и это функцию попросить, видимо просто никто не задумывался. Link to comment
Kernell Posted March 15, 2011 Share Posted March 15, 2011 Antibird said: Не вдаваясь в подробности, 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