Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 22.08.2011, 13:22   #1
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 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
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: передвижение с помощью матриц

Каково причина обьявления x,y,z статиками?
(Offline)
 
Ответить с цитированием
Старый 22.08.2011, 13:57   #3
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: передвижение с помощью матриц

Сообщение от Dream Посмотреть сообщение
Каково причина обьявления x,y,z статиками?
Разве в этом проблема?
Я так понял когда объявляешь их статиками то каждый вызов функции не происходит перезапись участков памяти для переменных, а это экономия ресурсов.
(Offline)
 
Ответить с цитированием
Старый 22.08.2011, 14:01   #4
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 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
Mhyhr
Бывалый
 
Регистрация: 06.04.2009
Сообщений: 612
Написано 276 полезных сообщений
(для 858 пользователей)
Ответ: передвижение с помощью матриц

зачем такие извращения с внутренностями матрицы?
чем D3DXMatrixTranslation(...) не угодил?
(Offline)
 
Ответить с цитированием
Старый 22.08.2011, 14:43   #6
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: передвижение с помощью матриц

были проблемы со стандартными матрицами и с углами... да и к тому же хочется понять саму матрицу научится с ней работать ..
(Offline)
 
Ответить с цитированием
Старый 22.08.2011, 14:55   #7
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: передвижение с помощью матриц

>>static
это не экономия ресурсов, компилятор умнее тебя и умеет экономить их эффективней.

бегло взглянул на вторую ф-цию, вроде всё норм (ток -z вроде не надо).
возможно порядок умножения где-то нарушен при установке матриц.
(под "без переменных" подразумиваются нулевые значения?)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо falcon за это полезное сообщение:
Mr_F_ (22.08.2011), YellowAfterlife (23.08.2011)
Старый 22.08.2011, 15:15   #8
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 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
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 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
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 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
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: передвижение с помощью матриц

об этом тебе mr_f и сказал.
к тому же можно воспользоваться D3DXMatrixIdentity()
(Offline)
 
Ответить с цитированием
Старый 22.08.2011, 19:26   #12
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: передвижение с помощью матриц

Доки не читай @ сразу пиши код.
__________________

(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
Colossus (24.08.2011), Dream (02.07.2013), Dzirt (27.08.2011), falcon (22.08.2011)
Старый 23.08.2011, 22:04   #13
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: передвижение с помощью матриц

А как сделать передвижение объекта с помощью матриц в локальных координатах?
(Offline)
 
Ответить с цитированием
Старый 24.08.2011, 00:23   #14
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: передвижение с помощью матриц

может книжки почитаешь а? учебник там, по линейной математике? ну или Луну того же (там в общем-то доступно всё написано)
или доки хотя б какие-нибудь?
как-то не гоже спрашивать такие вещи..

кури матрицы перехода, и, подскажу с твоими локальными преобразованиями, произвдение матриц перехода составляет комбинацию преобразований. (вроде ж математически коректно выразился xD )
Отсюда и пляши, чо на чо умножить, что бы перемещать тела в локальных СК.. а лучше книжки почитать)
(Offline)
 
Ответить с цитированием
Старый 24.08.2011, 00:51   #15
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: передвижение с помощью матриц

А как сделать передвижение объекта с помощью матриц в локальных координатах?
фактически тебе достаточно вектор сдвига умножить на матрицу ротации объекта -> получишь локально смотрящий сдвиг, прибавляешь к позиции.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com