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

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

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

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

Снова нубо-проблема, взываю к терпению форумчан.

Есть объект, есть камера.
У каждого из них формируется результирующая матрица, путем умножения масштабирования, поворота и позиции. С этой матрицей объект визуализируется, с этим проблем нет.

Нужно чтобы камера была чилдом для этого объекта. То есть если объект вращается, то она вращается по его орбите, если перемещается - перемещается за ним.

Желательно, конечно, все это сделать через матричные преобразования, миную тригонометрию.

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

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

инвертируешь глобальную матрицу камеры - получаешь её матрицу вида.
(Offline)
 
Ответить с цитированием
Старый 24.05.2013, 20:37   #3
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Родитель объекта

Вот локальные координаты у меня хранятся в переменных, потом я их кладу в матрицу. Потом эту матрицу я использую как матрицу мира и вывожу объект. (Если совсем просто).

Как мне узнать узнать глобальную матрицу объекта?

Можешь более развернуто ответить..?

Я правильно понял - мне нужно для вывода камеры использовать результирующую матрицу объекта?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 24.05.2013, 22:52   #4
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 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
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Родитель объекта

Вот локальные координаты у меня хранятся в переменных, потом я их кладу в матрицу. Потом эту матрицу я использую как матрицу мира и вывожу объект. (Если совсем просто).

Как мне узнать узнать глобальную матрицу объекта?
которой рисуешь объект я и назвал глобальной (мировой).
а локальная - относительно координат парента.

D3DPRESENTFLAG_LOCKABLE_BACKBUFFER
этот момент крайне сомнителен
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkMedveD (24.05.2013)
Старый 24.05.2013, 23:40   #6
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Питер
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Родитель объекта

Спасибо, с мультисемплингом разобрался!

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

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

Так, может я туплю, но мировая матрица получается при умножении всех матриц преобразования - позиции на поворот на масштаб (может порядок спутал).

Может я ошибаюсь? Но именно эту матрицу я использовал как мировую, когда рисовал объект.
Как получить локальную матрицу?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Старый 25.05.2013, 01:01   #9
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Родитель объекта

Как получить локальную матрицу?
это такая же матрица как и мировая, но координаты в ней относительно парента. ну типа с учётом того что к позиции прибавится позиция парента в дальнейшем, и с ротацией так же.
(Offline)
 
Ответить с цитированием
Старый 25.05.2013, 01:16   #10
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 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
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Родитель объекта

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

Спасибо, завтра попробую, но вроде не получалось.

А как быть с поворотом в PhysX?
__________________
Фантазия плохого программиста ограничивается его знанием языка. Фантазия хорошего программиста ограничивается возможностями языка и компилятором. Фантазия гениального программиста не ограничивается ничем.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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