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

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

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

Ответ
 
Опции темы
Старый 10.05.2013, 14:44   #1
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Вращение осей координат

Друзья, нужна небольшая помощь по поводу вращения объекта.

    D3DXMATRIX T;
    D3DXMATRIX R;
 
    D3DXMatrixRotationY(&R,-80.0f);
    D3DXMatrixTranslation(&T,0.0f,0.0f,45.0f);
 
    result=R*T;
В последствии результирующая матрица используется как мировая.
Нужно, чтобы объект двигался в ту сторону, в которую повернут. Но, как я не старался, адекватного вращения осей координат я не мог добиться.


Уверен, что все это элементарно решается.
Заранее спасибо за помощь.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 10.05.2013, 14:51   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Вращение осей координат

д3дх математикой не пользуюсь, но по сути ты можешь умножить вектор "вперед" (0,0,1) на ротационную матрицу и получить локальный "вперёд" для объекта (или ты можешь вытащить этот локальный сразу из матрицы если тебе так проще; или ты можешь умножить глобал вектор на кватернион объекта). Локальный прибавляешь к позиции и едешь куда надо.
Эйлеры не юзай для такой задачи.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkMedveD (10.05.2013)
Старый 10.05.2013, 14:51   #3
jimon
 
Сообщений: n/a
Ответ: Вращение осей координат

T2 - матрица которая двигает его "в последствии"

result = T2 * (R * T)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkMedveD (10.05.2013)
Старый 10.05.2013, 15:01   #4
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

А что если T*(R*T)?

Просто не знаю, какие координаты в какую из матриц перемещения вкладывать?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
bersercer26 (03.03.2014)
Старый 10.05.2013, 16:33   #5
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Спасибо, парни, работает.
Делал через матрицу пост-перемещения.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 26.05.2013, 18:56   #6
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Может кто-нибудь знает, как сделать тоже самое в PhysX?
Там же мировой матрицы нет...
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 27.05.2013, 12:50   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вращение осей координат

получить можно. задать нет.

вообще это физикс должен считать трансформации объекта.
получаешь трансформацию от физикса и передаешь ее гапи. рисуешь меш.

или что то-же самое? задать родителя?
(Offline)
 
Ответить с цитированием
Старый 27.05.2013, 16:50   #8
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Не-не, родитель не при делах.


Наверно я изначально использовал неправильную концепцию.
Я все изменения объекта делал в PhysX, потом получал матрицу из этого всего и рендерил уже на ее основе меш.
	if (Actor)
	{
		Actor->getGlobalPose().getColumnMajor44( position );
	}

	result=scale*angle*position;
Грубо говоря - делал так.
Но если я даже буду поворачивать матрицу поворота, то PhysX все равно этого не заметит. То есть мне нужно как-то именно его оси вращать.

Или я не так все делаю?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 00:28   #9
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вращение осей координат

очень странно видеть ригидбоди в качестве потомка.
обычно это независимый объект.

опиши ситуацию зачем это нужно.
может помогут джойнты?
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 04:57   #10
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Создаю игрока. Это объект, физический, который управляется пользователем по средствам WASD. Ускориться, притормозить, поворот налево\направо. Так же за объектом летает камера.
Поскольку объект физическое тело, то все его преобразования просчитывал через PhysX. То есть я просто придавал ему ускорение, он перемещался. Я вытаскивал матрицу этого объекта из актера сцены и использовал как мировую. Проблема в том, что изменяя мировую матрицу я не изменяю матрицу объекта в PhysX. То есть все мои преобразования сказывались на графике.

А ригидбоди не потомок. Камера - потомок, а двигаю я именно этот ригидбоди.

Джойны? Даже не знаю, мне кажется это совсем другая история...
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 13:10   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вращение осей координат

Проблема в том, что изменяя мировую матрицу я не изменяю матрицу объекта в PhysX.
т.е. после вытаскивания матрицы из объекта у тебя еще была какая-то причина ее менять? какая?

камера не ригидбоди?
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 13:21   #12
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Камера вообще не физическая, просто средство создания матрицы вида. Абстрактная такая.

Не так сказал, я ее не менял.
Вот в DirectX можно запросто повернуть оси объекта с помощью матрицы вращения. В PhysX этого нет. Но я нашел какой-то пример, где объект движется туда, куда смотрит камера. Правда мне кажется, что там это реализовано по средствам тригонометрии. То бишь х+а и z+а.
Но точно понять как там реализовано это мне не удалось.
В тоже время помню что в Xors3D запросто поворачивал оси объекта, а не ригидбоди.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 13:40   #13
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вращение осей координат

я правильно понимаю, что повернуть перса ты хочешь не применяя силы к ригидбоди, а просто повернуть матрицу?
если так - то это непраивльно. все игровые изменения должны производиться над физическим телом.
хочешь передвинуть - прикладываешь силу
хочешь повернуть - прикладываешь силу
хочешь чтобы двигался в направлении камеры - прикладывай две силы, по оси x и z соотвественно.

от физического движка получаешь матрицу и передаешь ее графическому
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 14:40   #14
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Вращение осей координат

в PhysX есть Character controller, который можно трансформировать как любой графический объект у тебя, при этом у него останется коллизия, но на него не будут действовать силы.
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 23:04   #15
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Вращение осей координат

Да, как раз про Character controller я и говорил, когда говорил о примере.

Я так и делаю:

	if (Actor)
	{
		Actor->setLinearVelocity(NxVec3(_x,_y,_z));
	}
Или под применением силы ты подразумеваешь AddForce?
Я просто устанавливал линейную и угловую скорость, благодаря этому персонаж передвигался.

Разве силы иначе воздействуют на объект? Меняют его ориентацию?..

Если не сложно, ткните носом в то место, где в Character controller устанавливается вектор, в который двигается объект?

Между топологией Direct и PhysX, я так понял, есть небольшая разница.
В DirectX я с помощью матрицы вращения могу поменять ориентацию объекта в пространстве, а в PhysX это надо делать через угол к оси У?
То есть если я хочу передвинуть персонажа вперед, то мне нужно передвигать его на Х+а и Z+а, да?
Но как найти угол альфа? Скаляр между осью У и чем? Как получить поворот по оси У для объекта?

Мне почему-то кажется, что все это решается гораздо проще, в обход линейной алгебры и тригонометрии.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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