|
24.05.2013, 17:50
|
#1
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Родитель объекта
Снова нубо-проблема, взываю к терпению форумчан.
Есть объект, есть камера.
У каждого из них формируется результирующая матрица, путем умножения масштабирования, поворота и позиции. С этой матрицей объект визуализируется, с этим проблем нет.
Нужно чтобы камера была чилдом для этого объекта. То есть если объект вращается, то она вращается по его орбите, если перемещается - перемещается за ним.
Желательно, конечно, все это сделать через матричные преобразования, миную тригонометрию.
И как можно более простым языком. Заранее спасибо.
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
24.05.2013, 18:05
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Родитель объекта
умножаешь локальную матрицу чайлда на глобальную парента ну и получаешь глобальную чайлда.
токо надо в правильной последовательности перемножать.
инвертируешь глобальную матрицу камеры - получаешь её матрицу вида.
|
(Offline)
|
|
24.05.2013, 20:37
|
#3
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
Вот локальные координаты у меня хранятся в переменных, потом я их кладу в матрицу. Потом эту матрицу я использую как матрицу мира и вывожу объект. (Если совсем просто).
Как мне узнать узнать глобальную матрицу объекта?
Можешь более развернуто ответить..?
Я правильно понял - мне нужно для вывода камеры использовать результирующую матрицу объекта?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
24.05.2013, 22:52
|
#4
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
И тут же еще один вопрос:
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = width;
d3dpp.BackBufferHeight = height;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0 ;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hwnd;
d3dpp.Windowed = 0;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
При изменении
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0 ;
на любые другие значение приложение не взлетает. Как включить мультисемплинг?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
24.05.2013, 23:11
|
#5
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Родитель объекта
Вот локальные координаты у меня хранятся в переменных, потом я их кладу в матрицу. Потом эту матрицу я использую как матрицу мира и вывожу объект. (Если совсем просто).
Как мне узнать узнать глобальную матрицу объекта?
|
которой рисуешь объект я и назвал глобальной (мировой).
а локальная - относительно координат парента.
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER
|
этот момент крайне сомнителен
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.05.2013, 23:40
|
#6
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
Спасибо, с мультисемплингом разобрался!
А вот с матрицей все никак не соображу.
Я рисую объект одной матрицей. Этой же матрицей рисовать и его детей?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
25.05.2013, 00:51
|
#7
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Родитель объекта
Я рисую объект одной матрицей. Этой же матрицей рисовать и его детей?
|
нет, детей ты рисуешь матрицей, которая равна умножению локальной (относительной) матрицы чайлда на рисовательную матрицу парента.
|
(Offline)
|
|
25.05.2013, 00:56
|
#8
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
Так, может я туплю, но мировая матрица получается при умножении всех матриц преобразования - позиции на поворот на масштаб (может порядок спутал).
Может я ошибаюсь? Но именно эту матрицу я использовал как мировую, когда рисовал объект.
Как получить локальную матрицу?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
25.05.2013, 01:01
|
#9
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Родитель объекта
Как получить локальную матрицу?
|
это такая же матрица как и мировая, но координаты в ней относительно парента. ну типа с учётом того что к позиции прибавится позиция парента в дальнейшем, и с ротацией так же.
|
(Offline)
|
|
25.05.2013, 01:16
|
#10
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
Получается так:
rezult - матрица, которую я применю к чилду.
parentrezult - мировая матрица родителя.
result=result*parentresult;
Правильно?
И мини-вопросик - как в PhysX вращать актера? Чтобы он поворачивался и линейная скорость действовала уже в другом направлении?
NxMat33 rot;
rot=Actor->getGlobalOrientation();
rot.rotZ(200);
Actor->setGlobalOrientation(rot);
Поворачивает объект, но не оси.
В Blitz3D это называлось "RotateMesh". А мне нужно то, что называлось "TurnEntity".
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
25.05.2013, 02:45
|
#11
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Родитель объекта
ну типа того, может быть последовательность умножаемых придётся поменять.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.05.2013, 04:54
|
#12
|
ПроЭктировщик
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений (для 6 пользователей)
|
Ответ: Родитель объекта
Спасибо, завтра попробую, но вроде не получалось.
А как быть с поворотом в PhysX?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:03.
|