Documentația detaliată în engleză a modulului API: link.
Poziția unei camere și orientarea sa spațială sunt definite de modul de control. În modurile EYE, TARGET și HOVER, modul de control are mai multe limitări: de exemplu, axa verticală a camerei este aliniată întotdeauna de-a lungul axei Z din World, iar camera este focalizată constant pe punctul de pivotare. Camera de mod STATIC nu are astfel de limitări, ceea ce o face mai potrivită pentru ușurință atunci când aveți nevoie de un control mai complet, cum ar fi animația procedurală.
Funcțiile principale pentru controlul camerei sunt localizate în modulul camera. Unele dintre ele (destinate unui anumit mod de control) au nume care încep cu un prefix corespunzător: static_, eye_, target_ și hover_. Alte funcții pot fi utilizate în orice mod.
Pentru a schimba modul de control și a defini complet comportamentul camerei, se pot utiliza următoarele metode: : static_setup(), eye_setup(), target_setup() și hover_setup(). Aceste metode primesc un obiect care conține un set de parametri opționali, care pot fi utilizați pentru a stabili poziția, rotația, limitele disponibile și așa mai departe.
var camera = m_scenes.get_active_camera();var POS = new Float32Array([1,1,1]);var LOOK_AT = new Float32Array([0,0,0]);var EYE_HORIZ_LIMITS = { left: Math.PI/4, right: -Math.PI/4 };var EYE_VERT_LIMITS = { down: -Math.PI/4, up: Math.PI/4 };var TARGET_DIST_LIMITS = { min: 1, max: 10 };var HOVER_DIST_LIMITS = { min: 1, max: 10 };var HOVER_ANGLE_LIMITS = { down: 0, up: -Math.PI/4 };var HOVER_HORIZ_TRANS_LIMITS = { min: -5, max: 3 };var HOVER_VERT_TRANS_LIMITS = { min: -1, max: 1 };...// setare STATIC camera prin definirea noii pozitii si a noului punct look-at m_cam.static_setup(camera, { pos: POS, look_at: LOOK_AT });// setare STATIC camera prin definirea noului punct look-at și pastrarea pozitiei existentem_cam.static_setup(camera, { look_at: LOOK_AT });// setare STATIC camera prin definirea noii pozitii si pastrarea orientarii existentem_cam.static_setup(camera, { pos: POS });// setare EYE camera cu limite de rotire pe orizontalam_cam.eye_setup(camera, { pos: POS, look_at: LOOK_AT,horiz_rot_lim: EYE_HORIZ_LIMITS });// setare EYE camera cu limite de rotire pe verticalam_cam.eye_setup(camera, { pos: POS, look_at: LOOK_AT,vert_rot_lim: EYE_VERT_LIMITS });// setare TARGET camera cu limite pentru distanta si mod panning m_cam.target_setup(camera, { pos: POS, pivot: LOOK_AT,dist_lim: TARGET_DIST_LIMITS, use_panning: true });// setare HOVER camera pe o distanta fixa (fara zooming) relative la propriul pivotm_cam.hover_setup(camera, { pos: POS, pivot: LOOK_AT });// setare HOVER camera cu zooming (distanta + limite unghi)m_cam.hover_setup(camera, { pos: POS, pivot: LOOK_AT,dist_lim: HOVER_DIST_LIMITS, hover_angle_lim: HOVER_ANGLE_LIMITS });// setare HOVER camera cu limite de translatie m_cam.hover_setup(camera, { pos: POS, pivot: LOOK_AT,horiz_trans_lim: HOVER_HORIZ_TRANS_LIMITS,vert_trans_lim: HOVER_VERT_TRANS_LIMITS });// setare HOVER camera cu rotirea pe orizontala activata m_cam.hover_setup(camera, { pos: POS, pivot: LOOK_AT, enable_horiz_rot: true });Caracteristica principală a obiectului Camera de tip HOVER este faptul că distanța și limitele unghiului de înclinație definesc o anumită cale de mișcare spre punctul de pivotare. Obiectul Camera va fi întotdeauna localizat pe această cale, astfel încât poziția sa fnală poate fi diferită de cea returnată de metoda hover_setup() (practic, este proiectată pe cale). Dacă trebuie să setați poziția camerei pe o anumită cale, puteți utiliza metoda hover_setup_rel() pentru a seta limitele relative.
var camera = m_scenes.get_active_camera();var POS = new Float32Array([1,1,1]);var PIVOT = new Float32Array([0,0,0]);...// setare HOVER camera cu mentinerea pozitiei date pentru camera si// posibilitatea de zoom-in si zoom-outm_cam.hover_setup_rel(camera, { pos: POS, pivot: PIVOT, dist_interval: 2,angle_interval: Math.PI/4 });Modul current camera poate fi verificat cu metodele is_static_camera(), is_eye_camera(), is_target_camera(), is_hover_camera() sau get_move_style():
var camera = m_scenes.get_active_camera();...if (m_cam.is_static_camera(camera))console.log("STATIC camera!");if (m_cam.get_move_style(camera) == m_cam.MS_EYE_CONTROLS)console.log("EYE camera!");Notă: Dacă trebuie să modificați doar câteva aspecte ale comportamentului camerei, puteți utiliza metodele descrise mai jos.
Pentru a roti o cameră STATIC, trebuie să utilizați metodele static_get_rotation() și static_set_rotation(). În aceste metode, rotația este definită de quaternion.
var camera = m_scenes.get_active_camera();...// rotire prin quaternionvar _quat_tmp = new Float32Array(4);var old_quat = m_cam.static_get_rotation(camera, _quat_tmp);var new_quat = m_quat.rotateX(old_quat, Math.PI/2, old_quat)m_cam.static_set_rotation(camera, new_quat);Pentru tipurile EYE, TARGET și HOVER camera, rotirea este realizată în coordonate sferice folosind metodele eye_rotate(), target_rotate(), hover_rotate() și rotate_camera():
var camera = m_scenes.get_active_camera();...// rotate by given delta anglesm_cam.eye_rotate(camera, Math.PI/6, Math.PI/2);// set absolute rotation in world spacem_cam.eye_rotate(camera, Math.PI/6, Math.PI/2, true, true);Coordonatele sferice curente ale obiectului Camera pot fi obținute folosind metoda get_camera_angles():
var camera = m_scenes.get_active_camera();var _vec2_tmp = new Float32Array(2);...// get camera orientation in spherical coordinatesvar angles = m_cam.get_camera_angles(camera, _vec2_tmp);phi = angles[0];theta = angles[1];Accesul la poziția obiectului Camera poate fi obținut folosind metodele get_translation() și set_translation(). Pentru modurile TARGET și HOVER reprezintă translația simultană a întregului model, inclusiv poziția obiectului Camera și a punctului de pivotare.
var camera = m_scenes.get_active_camera();var _vec3_tmp = new Float32Array(3);...// get camera positionvar pos = m_cam.get_translation(camera, _vec3_tmp);// set new positionvar new_pos = m_vec3.set(1, 0, 2, pos);m_cam.set_translation(camera, new_pos);Metode suplimentare de translație a obiectului Camera:
Notă: Deoarece Camera este un obiect în scenă, pot fi folosite și metodele din modulul transform. Dar, deoarece fiecare mod de control influențează diferit mișcarea camerei, rezultatele pot fi diferite de cele așteptate.
Limitele obiectului Camera sunt disponibile pentru camerele de tip EYE, TARGET și HOVER. Pentru a seta o anumită limită, trebuie să utilizați o metodă specifică:
var camera = m_scenes.get_active_camera();var _limits_tmp = {};var EYE_HORIZ_LIMITS = { left: Math.PI/4, right: -Math.PI/4 };...// get limitsm_cam.eye_get_horizontal_limits(camera, _limits_tmp);// set limitsm_cam.eye_set_horizontal_limits(camera, EYE_HORIZ_LIMITS);Prezența limitelor poate fi verificată folosind metodele has_distance_limits() , has_horizontal_rot_limits(), has_vertical_rot_limits(), has_horizontal_trans_limits() și has_vertieal_trans_limits().
Notă: În modul HOVER, obiectul Camera are întotdeauna limite pentru distanță și unghi de elevație. În cazul în care aceste limite nu au fost setate, ele sunt calculate automat pentru a bloca obiectul Camera în poziția curentă relativ la punctul de pivotare.
Notă: Limitele activate ale camerei pot influența poziția și orientarea spațială stabilite de funcțiile API.
Când lucrați cu API-urile obiectului Camera (rotație, limite de setare), toate unghiurile sunt definite după cum urmează:
Pentru obiect Camera de tip TARGET/HOVER:
Pentru obiect Camera de tip EYE: