Le noeud Follow_Traget_Cam est un noeud viewpoint qui a la particularité
de pouvoir suivre un point cible à une certaine distance. Cette
distance est définie par une distance maximale et minimale du
point de vue par rapport à la position cible.
Le point de vue reste centré sur la position cible grâceà
un Look-at intégré.
Télécharger
PROTO follow_target_cam [ eventIn SFFloat fraction eventIn SFVec3f targetpos 0 0 0 eventIn SFFloat set_dist eventIn SFFloat set_min_dist eventIn SFBool turn_aroundR eventIn SFBool turn_aroundL eventIn SFBool turn_aroundU eventIn SFBool turn_aroundD eventIn SFBool set_bind exposedField SFFloat fieldOfView 0.785398 field SFString description "" exposedField SFVec3f pos_init 0 0 10 field SFFloat dist 22 field SFFloat min_dist 15 exposedField SFVec3f offset 0 5 0 exposedField SFRotation re_orientation 1 0 0 -.2 eventOut SFTime bindTime eventOut SFBool isBound exposedField MFNode children [] eventIn MFNode addChildren eventIn MFNode removeChildren ]
fraction : eventIn de type SFFloat. Fraction qui rend la
caméra dynamique.
postarget : eventIn de type SFVec3f. Position qui doit être
observée et suivie par la caméra.
set_dist : eventIn de type SFFloat. Permet de redéfinir
la distance maximale entre la cible et la caméra.
set_min_dist : eventIn de type SFFloat. Permet de redéfinir
la distance minimale entre la cible et la caméra.
turn_aroundR : eventIn de type SFBool. Si TRUE, la
caméra pivote autour de la cible sur la droite.
turn_aroundL : eventIn de type SFBool. Si TRUE, la
caméra pivote autour de la cible sur la gauche.
turn_aroundU : eventIn de type SFBool. Si TRUE, la
caméra pivote autour de la cible vers le haut.
turn_aroundD : eventIn de type SFBool. Si TRUE, la
caméra pivote autour de la cible vers le bas.
set_bind : eventIn de type SFBool. Pour "binder"
la caméra.
fieldOfView : exposedField de type SFFloat. Le champ de vision
de la caméra.
description : field de type SFString. Pour donner un nom à
la caméra.
pos_init : exposedField de type SFVec3f. Position initiale
de la caméra.
dist: field de type SFFloat. Distance maximale entre la caméra
et la position cible.
offset : exposedField de type SFVec3f. Champ permettant de
décaler la position de la caméra indépendamment
de sa postion calculé pour le suivi.
re_orientation : exposedField de type SFRotation. Champ permettant
de décaler l' orientation de la caméra indépendamment
de son orientation calculé par le Look-At.
bindTime : eventOut de type SFTime. renvois l' instant
ou la caméra est "bindée".
isBound : eventOut de type SFBool. Renvois si la
caméra est la vue active.
children : exposedField de type MFNode. Les objets Plcez ici
des objets qui seront fixes quelque soit le point de vue.
addChildren : eventIn de type MFNode. Pour ajouter
des objets fixes sur la caméra.
removeChildren : eventIn de type MFNode. Pour enlever
des objets fixés sur la caméra.
L'activation (BIND = TRUE) de la caméra supprime tous les
modes de navigation. En conséquence, vous ne pouvez plus naviguer
de façon traditionnelle dans la scène. Cela peut aussi
avoir comme conséquence la suppression du choix des vues pré
définies et du mode de navigation du menu contextuel du plugin.
Une façon de contourner ce problème est d' inclure un
bouton appelant un script qui permet de forcé le basculement
vers une autre vue et un autre mode de navigation. Placez ce bouton
comme Children de la caméra.
Note importante : si la scène ne comporte qu' un seul point
de vue, vous ne pourrez pas basculer vers un autre mode de navigation.
J' ai développé ce PROTO dans un but bien précis
: je voulais faire une un viewPoint qui puisse suivre un objet déplacer
interactivement dans la scène. L' idée est de faire
comme les jeux 3D vue à la 3ème personne (personnage
vue de dos).
Selon le déplacement de la cible, il se peut que la caméra
aille se placer dans des endroits incongrus (à travers un mur,
en dessous du sol, etc.. ). Utiliser alors les events turn-around
pour pouvoir tourner la caméra.
L' amplitude verticale est limitée de "vue du dessus" à "vue de dessous". En conséquence, vous ne pouvez pas faire de looping verticale complet du point de vue autour de la cible. Par contre, vous pouvez tourner à l' infini dans chaque sens sur le plan horizontal.
Ce PROTO est écrit en VRML97 en tenant compte de la norme de script
ECMA. A ce titre, il est théoriquement compatible avec tous les plugins
VRML respectant ces deux normes. Je l' ai testé avec succès sur les
plugins suivants :
BS
Contact 6.1 de Bitmanagement.
Contact
5.1 de Blaxxum.
Cosmo
Player 2.1 de Cosmo Software.
Cortona
VRML client 4.0 de ParallelGraphics.
Si vous l' utilisez avec un autre navigateur et qu' il ne fonctionne
pas, merci de me
contacter pour me le signaler.