Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 190) Анализ состояния объектов


Школа программирования

190) Анализ состояния объектов

Это последний выпуск из серии программирования на BlitzBasic.

Команды BlitzBasic позволяют получать самую разную информацию о состоянии объектов сцены.

EntityX, EntityY и EntityZ дают соответствующую координату объекта (X - в стороны, Y - вверх/вниз, Z - вперед/назад).

EntityRoll показывает наклон объекта в градусах относительно оси Z.
EntityYaw показывает наклон объекта в градусах относительно оси Y.
EntityPitch показывает наклон объекта в градусах относительно оси X.

Видимость объектом A объекта B проверяется функцией

EntityVisible (A, B)

Она возвращает true, если объект B ничем не загорожен и "видим" объектом A.

Функция EntityDistance (A, B) рассчитывает расстояние между двумя объектами.

Важная функция EntityPick позволяет выделить ближайший к указанному объекту (первый параметр) объект, приближенный к наблюдателю (человеку за компьютером). Поиск объекта осуществляется в диапазоне, заданном вторым параметром.

Схожая с ней по функциональному назначению

CameraPick ( camera,vx,vy )

находит в трехмерной сцене объект, заданный двумерными координатами (на "плоском" экране пользователя). Эта функция полезна для осуществления выбора разных объектов сцены. Сама по себе данная функция никаких координат не возвращает, но после ее вызова можно обращаться к набору следующих Picked-функций:

Точные координаты пространственной точки "выбранного" с помощью Picked-функции объекта определяются функциями PickedX, PickedY, PickedZ;

Сам выбранный объект (идентификатор) находится функцией PickedEntity. Она возвращает ноль, если ни один из "выбираемых" объектов не найден.

Важно!
Для корректной работы этой функции необходимо, чтобы выбираемый объект был ранее указан в программе как "подлежащий выбиранию" (по умолчанию ни один объект выбрать с помощью CameraPick нельзя). Для задания выбираемости объекта необходимо воспользоваться командой

EntityPickMode entity,pick

Второй параметр pick может принимать одно из следующих значений:

0 - невыбираемый;
1 - область выбора вокруг объекта представлена в виде сферы (радиус сферы задается командой EntityRadius);
2 - область выбора попиксельно совпадает с видимой формой объекта на плоском экране;
3 - область выбора вокруг объекта представлена в виде куба (размер куба задается командой EntityBox).

Пример:

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,2,-10

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

plane=CreatePlane()

; разрешим выбирать поверхность
EntityPickMode plane,2

cube=CreateCube()

; будем выбирать куб c точностью до каждого видимого пиксела
EntityPickMode cube,2
PositionEntity cube,0,1,0

While Not KeyDown( 1 )

If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05

; по нажатию на мышку пытаемся выбрать объект
If MouseHit(1)=True Then CameraPick(camera,MouseX(),MouseY())

RenderWorld

; Координаты
Text 0,40,"PickedX: "+PickedX#() ;
Text 0,60,"PickedY: "+PickedY#() ;
Text 0,80,"PickedZ: "+PickedZ#() ;
Text 0,160,"PickedTime: "+PickedTime#()
Text 0,180,"PickedEntity: "+PickedEntity()
Text 0,200,"PickedSurface: "+PickedSurface()
Text 0,220,"PickedTriangle: "+PickedTriangle()

Flip

Wend

End


(c) 2004-2008 Сергей Бобровский

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои книги (учебные курсы) "Технологии Delphi / C++ / C#".
http://shop.piter.com/publish/authors/17681/191180213/
Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное