Le Besoin

Il est souvent fastidieux de créer des introductions vidéo.

Il faut repérer les lieux, prendre les coordonnées pour placer les caméras.

Refaire tout si on change de lieu. bref c'est long et fastidieux.

Il a donc fallut faire quelques fonctions pour faciliter tout ca.

Le script permet de créer une caméra, de suivre des objets, d'être 'portée' par des objets. de faire des plans fixes, mouvant, travelling, full move.

Le Principe

On va créer une fonction qui va se charger de positionner la caméra et de suivre les “cibles” qu'on va lui indiquer.

Il n'y a donc plus grand chose à faire.

On appelle la fonction avec les paramètres qui piloteront la caméra simplement.

Les positions sont en fait des objets, ce qui simplifie grandement la vie. En cas de déplacement, nous n'avons pas besoin de se ré-entrer les coordonnées.

La mise en œuvre

Le script va être rangé dans un fichier de fonctions par exemple 'cam_functions.sqf'

Ce script sera appelé dans le fichier 'init.sqf' par exemple.

Placer le code suivant dans 'init.sqf'

call compile preprocessFileLineNumbers "cam_functions.sqf";

Les fonctions

 
/*##################################################################
Créer la caméra
 
FNCT_CamMakeCamera()
	@param1 Position de départ de la camera
	@return la camera créée
 
Ex : _cam = [ (getPos player) ] call FNCT_CamMakeCamera;
##################################################################*/
 
FNCT_CamMakeCamera ={
 
	_pos = _this select 0;
 
	enableRadio false;
	showCinemaBorder false;
 
	_cam = "camera" camCreate _pos;
	_cam cameraEffect ["internal", "back"];
	_cam camSetFov 1.0;
	_cam;
};
 
 
 
/*##################################################################
Libérer la caméra
 
FNCT_CamFreeCamera()
	@param1 la camera a détruire
	@return la camera
 
Ex : _cam = [ _cam ] call FNCT_CamMakeCamera;
##################################################################*/
 
FNCT_CamFreeCamera = {
 
	_cam = _this select 0;
 
	_cam cameraEffect ["terminate", "back"];
	camDestroy _cam;
	enableRadio true;
	_cam;
};
 
 
/*##################################################################
 
Suivre avec la caméra un objet en déplacement ou pas à partir 
d'un autre objet en mouvement ou pas
 
FNCT_CamFollow()
	@param1 Porteur de la camera
	@param2 cible de la camera
	@param3 durée du plan (en seconde)
	@param4 Offset de position de la camera par rapport au véhicule à suivre (x,y,z)
	@param5 la caméra
 
	@return la camera
 
Ex : [OFF1,OFF2,10,[0,-1,1.8],_cam] call FNCT_CamFollow;
 
#################################################################*/
 
 
FNCT_CamFollow = {
    _porteur    = _this select 0;
    _cible      = _this select 1;
    _duree      = _this select 2;
    _camOffset  = _this select 3;
    _cam        = _this select 4;
 
    _start = time;
 
    while {((time - _start)< _duree) && (alive _porteur) } do {
 
    	_pos = position _porteur;
    	_x   = _pos select 0;
    	_y   = _pos select 1;
    	_z   = _pos select 2;
 
    	_cam camSetPos [ 
    		_x + (_camOffset select 0 ), 
    		_y + (_camOffset select 1 ), 
    		_z + (_camOffset select 2 )
    	];
 
    	_cam camSetTarget _cible;
 
    	_cam camCommit 0;
    	sleep 0.002;
    };
   _cam;
};
 

L'intro.sqf

L'intro.sqf contient le script qui va décrire tous les mouvements de la caméra.

La première fonction à appeler est 'FNCT_CamMakeCamera()'.

Cette fonction va mettre en place l'intro et créer une caméra.

A partir de maintenant nous pouvons utiliser la camera.

Sur la Map, placer 1 Humvee nommé HM1 qui suit quelques point de passages. 1 Homme nommé MAN1 qui suit aussi quelques points de passages.

Ils vont nous servir de repère et de porteur pour notre camera.

On créé la caméra :

_cam = [ (getPos player)] call FNCT_CamMakeCamera;

On va créer le premier plan.

[MAN1,HM1,5,[1,1,1.8],_cam] call FNCT_CamFollow;

La caméra est portée par MAN1 et regarde HM1. La camera est placée à 1m à droite et 1 m en arrière du cameraman (MAN1) et à 1.8m au dessus de lui. Le plan dure 5 sec.

Quelque soit les mouvements des unités, la caméra suivra toujours HM1 et sera toujours portée par MAN1.

Passons au deuxième plan.

[HM1,MAN1,8,[1,3,5],_cam] call FNCT_CamFollow;

Cette fois c'est le Humvee (HM1) qui porte la caméra et qui filme MAN1. La caméra est placée 1m à droite et 3 m en arrière du Humvee et à 5m de haut. Le plan dur 8 sec

3ème plan.

[MAN1,MAN1,10,[0,0.5,2],_cam] call FNCT_CamFollow;

La camera est portée par MAN1 et regarde MAN1. Elle est placée à juste derrière la tête de MAN1.

…/…

On termine l'intro en libérant la caméra.

[_cam] call FNCT_CamFreeCamera;

ce qui donne pour une intro de 23 sec avec 3 plans en mouvement

/*
intro.sqf
*/
 
_cam = [ (getPos player)] call FNCT_CamMakeCamera;
[MAN1,HM1 ,5 ,[1,1,1.8],_cam] call FNCT_CamFollow;
[HM1,MAN1 ,8 ,[1,3,5]  ,_cam] call FNCT_CamFollow;
[MAN1,MAN1,10,[0,0.5,2],_cam] call FNCT_CamFollow;
[_cam] call FNCT_CamFreeCamera;

Difficile et faire plus simple et quand même avec une intro qui se tient.

 
scripts/camera.txt · Dernière modification: 16/10/2009 01:14 par Clint
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki