CylinderSensor
Описание:
CylinderSensor { autoOffset TRUE diskAngle 0.262 enabled TRUE maxAngle -1 minAngle 0 offset 0 0 0 eventOut isActive eventOut rotation_changed eventOut trackPoint_changed }
Этот сенсор отслеживает движение курсора мыши в цилиндрической системе координат невидимого цилиндра с осью вращения параллельной локальной оси Y.
Большинство полей (autoOffset, enabled, offset) и eventOut'ов этого сенсора (isActive, trackPoint_changed) такие же, как и у , где Вы и можете про них прочитать.
Пара полей maxAngle и minAngle аналогична maxPosition и minPosition . Если maxAngle меньше, чем minAngle, то вращение не ограничивается.
eventOut rotation_changed аналогично eventOut translation_changed PlaneSensor.
Единственное действительно отличительное поле - это diskAngle.
В спецификации предусмотрено два способа описание движения курсора через CylinderSensor. Представьте себе отдельно взятое велосипедное колесо. Если Вы всунете палец между спиц, то сможете вращать колесо бесконечно НЕ ОТРЫВАЯ руку, которая будет описывать конус вращения. А если Вы схватитесь за обод, то для поддержания бесконечного вращения Вам придется постоянно ПЕРЕХВАТЫВАТЬ руку.
Аналогично, в VRML можно хвататься через CylinderSensor за ТОРЕЦ цилиндра или за его БОКОВУЮ СТОРОНУ.
Для регулирования, когда используется какой способ и введен diskAngle. Если угол между bearing вектором и осью цилиндра МЕНЬШЕ diskAngle, то Вы сможете, зацепив мышью цилиндр, вращать его бесконечно (при этом курсор будет описывать на экране круги). Если угол между вектором и осью цилиндра БОЛЬШЕ diskAngle, то придется, провернув немного цилиндр, отпускать кнопку мыши и перетаскивать курсор (при этом курсор на экране будет двигаться дискретно-прямолинейно). {bearing вектор - это вектор, проходящий сквозь курсор на экране.}
И кстати, не забывайте, что CylinderSensor можно привязывать к объектам любой формы, а не только к телам вращения. . Потяните параллелепипед за боковые грани - вращение будет продолжаться, пока вы не дотянете ПРЯМОЛИНЕЙНО курсор до границы экрана. Теперь поверните ее к себе верхней гранью и крутите ее, пока не надоест, перемещая курсор ПО КРУГУ.