|
22.08.2011, 13:22
|
#1
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
передвижение с помощью матриц
Вот столкнулся с проблемой (т.к недавно перешел на С++):
Осуществляю передвижение объектом с помощью функции:
void MoveEntity(D3DXMATRIX& m,float dx,float dy,float dz)
{
static float x,y,z;
x += dx;
y += dy;
z += dz;
m._11 = 1; m._12 = 0; m._13 = 0; m._14 = 0;
m._21 = 0; m._22 = 1; m._23 = 0; m._24 = 0;
m._31 = 0; m._32 = 0; m._33 = 1; m._34 = 0;
m._41 = x; m._42 = y; m._43 = -z; m._44 = 1;
}
Но т.к я двигал один обьект все было норм, а как захотелось нсколько то понял что сделал ошибку - не надо инкриминировать x,y,z в функции т.к для последующего объекта будут прибавлены координать предыдущего.
Чет мозги не варят как можно сделать передвижение разных объектов с помощью одной функции?
|
(Offline)
|
|
22.08.2011, 13:35
|
#2
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: передвижение с помощью матриц
Каково причина обьявления x,y,z статиками?
|
(Offline)
|
|
22.08.2011, 13:57
|
#3
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
Сообщение от Dream
Каково причина обьявления x,y,z статиками?
|
Разве в этом проблема?
Я так понял когда объявляешь их статиками то каждый вызов функции не происходит перезапись участков памяти для переменных, а это экономия ресурсов.
|
(Offline)
|
|
22.08.2011, 14:01
|
#4
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
Написал чуть модифицированную функцию но тут проблем еще больше:
void MoveEntity(D3DXMATRIX& m,float dx,float dy,float dz)
{
static float x,y,z;
x = m._41 + dx;
y = m._42 + dy;
z = m._43 + dz;
m._11 = 1; m._12 = 0; m._13 = 0; m._14 = 0;
m._21 = 0; m._22 = 1; m._23 = 0; m._24 = 0;
m._31 = 0; m._32 = 0; m._33 = 1; m._34 = 0;
m._41 = x; m._42 = y; m._43 = -z; m._44 = 1;
}
Каковата ГНОМА тут присходит движение даже без переменных dx,dy,dz ... Без моего участия.
|
(Offline)
|
|
22.08.2011, 14:29
|
#5
|
Бывалый
Регистрация: 06.04.2009
Сообщений: 612
Написано 276 полезных сообщений (для 858 пользователей)
|
Ответ: передвижение с помощью матриц
зачем такие извращения с внутренностями матрицы?
чем D3DXMatrixTranslation(...) не угодил?
|
(Offline)
|
|
22.08.2011, 14:43
|
#6
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
были проблемы со стандартными матрицами и с углами... да и к тому же хочется понять саму матрицу научится с ней работать ..
|
(Offline)
|
|
22.08.2011, 14:55
|
#7
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: передвижение с помощью матриц
>>static
это не экономия ресурсов, компилятор умнее тебя и умеет экономить их эффективней.
бегло взглянул на вторую ф-цию, вроде всё норм (ток -z вроде не надо).
возможно порядок умножения где-то нарушен при установке матриц.
(под "без переменных" подразумиваются нулевые значения?)
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо falcon за это полезное сообщение:
|
|
22.08.2011, 15:15
|
#8
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
Сообщение от falcon
>>static
бегло взглянул на вторую ф-цию, вроде всё норм (ток -z вроде не надо).
возможно порядок умножения где-то нарушен при установке матриц.
(под "без переменных" подразумиваются нулевые значения?)
|
1) m._41, m._42 ... имеют не нулевые значения их значения далеко за пределами 1 000 000 изначально
2) вторая функция не пашит именно из-за того что я проделываю операцию x = m._41 + dx; y ... ; z... ; Я даже не могу понять что происходит с камерой толи она отдаляеться далеко и поэтому я не вижу предмета, толи каким-то образом нарушаються матрици вида хз?
|
(Offline)
|
|
22.08.2011, 15:23
|
#9
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: передвижение с помощью матриц
1) m._41, m._42 ... имеют не нулевые значения их значения далеко за пределами 1 000 000 изначально
|
в с++ переменные изначально не 0. они не инициализированы, т.е. содержат в себе мусор из памяти. ты должен вручную ставить им 0.
|
(Offline)
|
|
22.08.2011, 17:07
|
#10
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
Все разобрался оказалось даже проще:
void MoveEntity(D3DXMATRIX& m,float dx,float dy,float dz)
{
m._11 = 1; m._12 = 0; m._13 = 0; m._14 = 0;
m._21 = 0; m._22 = 1; m._23 = 0; m._24 = 0;
m._31 = 0; m._32 = 0; m._33 = 1; m._34 = 0;
m._41 += dx; m._42 += dy; m._43 += -dz; m._44 = 1;
}
Токо после инициализации D3DXMATRIX matView,matViewPos(к примеру)...
нужно обьявлять явно матрици которые инициализированы и токо тогда все будет как надо перемещаться:
НАПРИМЕР:
D3DXMATRIX matWorldPos;
matWorldPos._11 = 1; matWorldPos._12 = 0; matWorldPos._13 = 0; matWorldPos._14 = 0;
matWorldPos._21 = 0; matWorldPos._22 = 1; matWorldPos._23 = 0; matWorldPos._24 = 0;
matWorldPos._31 = 0; matWorldPos._32 = 0; matWorldPos._33 = 1; matWorldPos._34 = 0;
matWorldPos._41 = 0; matWorldPos._42 = 0; matWorldPos._43 = 10; matWorldPos._44 = 1;
dev->SetTransform(D3DTS_WORLD,&matWorldPos);
|
(Offline)
|
|
22.08.2011, 18:50
|
#11
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: передвижение с помощью матриц
об этом тебе mr_f и сказал.
к тому же можно воспользоваться D3DXMatrixIdentity()
|
(Offline)
|
|
22.08.2011, 19:26
|
#12
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: передвижение с помощью матриц
Доки не читай @ сразу пиши код.
__________________
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
|
23.08.2011, 22:04
|
#13
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: передвижение с помощью матриц
А как сделать передвижение объекта с помощью матриц в локальных координатах?
|
(Offline)
|
|
24.08.2011, 00:23
|
#14
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: передвижение с помощью матриц
может книжки почитаешь а? учебник там, по линейной математике? ну или Луну того же (там в общем-то доступно всё написано)
или доки хотя б какие-нибудь?
как-то не гоже спрашивать такие вещи..
кури матрицы перехода, и, подскажу с твоими локальными преобразованиями, произвдение матриц перехода составляет комбинацию преобразований. (вроде ж математически коректно выразился xD )
Отсюда и пляши, чо на чо умножить, что бы перемещать тела в локальных СК.. а лучше книжки почитать)
|
(Offline)
|
|
24.08.2011, 00:51
|
#15
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: передвижение с помощью матриц
А как сделать передвижение объекта с помощью матриц в локальных координатах?
|
фактически тебе достаточно вектор сдвига умножить на матрицу ротации объекта -> получишь локально смотрящий сдвиг, прибавляешь к позиции.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:24.
|