Сообщение от 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 )
ЗЫ
В университетах на линейно алгебре преподают вектора и матрицы, но это мало применимо к геймдеву (хотя знать определения и как перемножаются матрицы надо обязательно), так что доки читать надо, а вот про кватернионы там не учат (по крайней мере в мое время не было), так что по этому тоже доки читай, пригодится.