Тема: getMathElement()
Показать сообщение отдельно
Старый 11.04.2012, 13:18   #2
Платон Александрович
Нуждающийся
 
Аватар для Платон Александрович
 
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений
(для 83 пользователей)
Ответ: getMathElement()

Сообщение от burovalex Посмотреть сообщение
Взял пример с хелпа

Graphics3D 640,480 
SetBuffer BackBuffer() 

camera=CreateCamera() 
PositionEntity camera,0,0,-5 

light=CreateLight() 
RotateEntity light,90,0,0 

sphere=CreateSphere() 

PositionEntity sphere,0,0,0 
ScaleEntity sphere,1,2,3 
RotateEntity sphere,0,0,0 

While Not KeyDown(1) 
RenderWorld 

Text 0,0,GetMatElement#(sphere,1,1) 

Flip 
Wend 
End
Выводит двойку масштаба
Перебла все комбинации от 0-3, все остальные ноль
Помогите чайнику
Чайнику надо почитать про матрицы и вектора.

GetMatElement возвращает элемент матрицы трансформации энтити. Матрица квадратная порядка 4. Т.е. 4х4 - четыре 4-хмерных вектора.

Т.к. эта матрица трансформации комбинирует в себе масштаб, поворот и смещение, то просто так извлечь какую-то трансформацию нельзя.
В твоем случае, чтобы извлечь масштаб, надо взять длины векторов по каждой оси:

;   | 0 1 2 3
; ------------
; 0 | X Y Z W
; 1 | X Y Z W
; 2 | X Y Z W
; 3 | X Y Z W

; чистая матрица масштаба выглядит так:
; X 0 0 0
; 0 Y 0 0
; 0 0 Z 0
; 0 0 0 1

XAxisX# = GetMatElement ( Entity, 0, 0 )
XAxisY# = GetMatElement ( Entity, 0, 1 )
XAxisZ# = GetMatElement ( Entity, 0, 2 )

YAxisX# = GetMatElement ( Entity, 1, 0 )
YAxisY# = GetMatElement ( Entity, 1, 1 )
YAxisZ# = GetMatElement ( Entity, 1, 2 )

ZAxisX# = GetMatElement ( Entity, 2, 0 )
ZAxisY# = GetMatElement ( Entity, 2, 1 )
ZAxisZ# = GetMatElement ( Entity, 2, 2 )

ScaleX# = Sqr ( XAxisX * XAxisX + XAxisY * XAxisY + XAxisZ * XAxisZ )
ScaleY# = Sqr ( YAxisX * YAxisX + YAxisY * YAxisY + YAxisZ * YAxisZ )
ScaleZ# = Sqr ( ZAxisX * ZAxisX + ZAxisY * ZAxisY + ZAxisZ * ZAxisZ )
ЗЫ
В университетах на линейно алгебре преподают вектора и матрицы, но это мало применимо к геймдеву (хотя знать определения и как перемножаются матрицы надо обязательно), так что доки читать надо, а вот про кватернионы там не учат (по крайней мере в мое время не было), так что по этому тоже доки читай, пригодится.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (11.04.2012)