EntityZ# ( entity[,global] )

Параметры

entity = указатель объекта
global (не обязательно)= True для глобальных координат, False - для локальных. По умолчанию False.

Описание

Возвращает Z-координату объекта.
Если параметр global= False, то используется локальная система координат (относительно родительского объекта).

Смотрите EntityX(), чтобы узнать больше о локальных и глобальных координатах.

Пример

; Пример EntityX / EntityY / EntityZ.

; Escape - выход, другие клавиши - движение.

Const width = 640, height = 480
Const KEY_ESC = 1, KEY_LEFT = 203, KEY_RIGHT = 205

Graphics3D 640, 480
AmbientLight 50, 50, 50

Global isMoving = False ; используется для управления остановкой/стартом движения
Global count ; счетчик обновлений


; Установим камеру, свет и 3 объекта...

cam = CreateCamera()
PositionEntity cam, 0, 2, -50
CameraZoom cam, 4

lt = CreateLight() : TurnEntity lt, 30, 40, 0


Global oSphere, pCone, cSphere

oSphere = CreateSphere()
EntityColor oSphere, 250, 50, 0 ; Оранжевая сфера, родитель конуса

pCone = CreateCone( 8, True, oSphere) ; будет родителем маленькой сферы
ScaleEntity pCone, .8, 2.0, .8
PositionEntity pCone, 8, 0, 0
EntityColor pCone, 255, 255, 0

cSphere = CreateSphere( 8, pCone ) ; дочерняя сфера конуса
EntityColor cSphere, 150, 150, 0
ScaleEntity cSphere, .4/.8, .4/2.0, .4/.8 ; попробуйте закомментировать эту строку
PositionEntity cSphere, 0, 2, 0 ; выше родителя

; ... и запустим главный цикл.

While Not KeyDown( KEY_ESC )

UpdateEverything
RenderWorld
ShowInfo

Flip

Wend

End



Function UpdateEverything( )

; Объект не изменяет свою позицию относительно родителя, локальные координаты постоянны.
; Попробуйте раскомментировать команду PositionEntity, чтобы проверить это.


If GetKey() Then isMoving = Not isMoving

If isMoving
TurnEntity oSphere, 0, .5, 0
TurnEntity pCone, .2, 0, 0

count = count + 1
a# = count Mod 360
; PositionEntity cSphere, 0, 2 + Sin( a ), 0 ; поэкспериментируйте здесь

End If

End Function

Function ShowInfo( ) ; вывести глобальные и локальные координаты для всех объектов
Local x$, y$, z$

Color 255, 255, 255
Text 185, 20, "Global"
Text 495, 20, "Local"

Color 250, 50, 0
Text 20, 50, "oSphere: " + XYZ( oSphere, True )
Text 400, 50, XYZ( oSphere, False )

Color 255, 255, 0
Text 20, 75, " pCone: " + XYZ( pCone, True )
Text 400, 75, XYZ( pCone, False )

Color 150, 150, 0
Text 20, 100, "cSphere: " + XYZ( cSphere, True )
Text 400, 100, XYZ( cSphere, False )

End Function

; ******************************************************************

; Эти функции форматируют текст на экране, чтобы не было слишком много чисел.

Function Round#( x#, m# ) ; округляем x
If m < 0.0 Then m = -m
s# = Sgn( x )
If x < 0.0 Then x = -x
diff# = x Mod m
If diff < .5 * m
Return ( x - diff ) * s
Else
Return ( m + x - diff ) * s
End If
End Function


Function XYZ$( entity, globalFlag )

ex# = Round( EntityX( entity, globalFlag ), .001 )
ey# = Round( EntityY( entity, globalFlag ), .001 )
ez# = Round( EntityZ( entity, globalFlag ), .001 )

Return RSet( ex, 8 ) + RSet( ey, 8 ) + RSet( ez, 8 )

End Function

Главная страница

Нажмите сюда, чтобы увидеть последнюю версию этой страницы в интернете