28 Septembre 2025 à 20:09:39

Nouvelles:

Teamspeak 3 OFCRA
IP : ts.ofcra.org
Mot de passe : mineisbiggerthanyours
Discord: https://discord.gg/bWtGS7N


/!\ L'OFCRA RECRUTE /!\


Bullet cam [camera.sqf]

Démarré par Prax, 16 Octobre 2012 à 13:51:07

« précédent - suivant »

0 Membres et 1 Invité sur ce sujet

Prax

Salut les scripteurs fous,

J'ai un problème de saccades avec un script de Bullet cam et je le prouve:

Test Bullet Cam

Le script camera.sqf utilisé:
Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.01;
};
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;

Avec dans l'init de l'unité:
Citerthis addeventhandler ["fired",{_this execVM "cam.sqf"}]


Zombi

C'est le sleep le problème. Celui dans la boucle alive projectile.
( le sleep 0.01;)

Essaie de le réduire un peu.

C'est en secondes, donc 0.01 ça donne du 10ms ... ça devrait pas saccader comme ça parce que 10ms c'est pas beaucoup du tout :-/

Prax

#2
J'ai rien compris sans me vanter...  :cool2:

Tu me dis que 10 ms c'est pas beaucoup mais tu me demandes de le réduire... Moi pas comprendre.  ???

Edit: Ayé j'ai trouvé, merci.  :plusun:


Prax

Encore moi...  :rireniais:

Bullet Cam 2

Quelle variable je modifie pour que la caméra se rapproche un peu plus du gus ?


Zombi

#4
Dis comment tu as résolu le problème si tu l'a résolu, ça peut être utile à d'autres.

Je disais : dans le bout de code :
Citerwhile{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.01;
};
L'instruction SLEEP 0.01 me semble être le problème.

SLEEP => Attendre
0.01 => Pendant 0.01 secondes (soit 10 ms).

Mais d'un autre côté, 10ms c'est très peu de temps donc la saccade que cette pause induit devrait être a peine visible...

Voilà :)

EDIT : Cam 2 : je sais pas.
J'ai l'impression que la balle que tu tires est considérée "morte" avant d'arriver sur le mec et que donc la caméra s'arrête.

Prax

#5
Arf merde... Bon bah je vais fouiner, merci comme même.

Pour le "problème" initial j'ai modifié comme tu m'as dit. Ce qui donne:

Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.0009;
};
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;


Zombi

En fait je suis au boulot donc c'est coton pour t'aider vraiment :p

Si j'ai le temps ce soir je fais un test et je te dirais.

Dans l'immédiat je vois qu'une solution : mettre un
Citerplayer sidechat "Projectile mort";
dans le code.

-->

Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.0009;
};
player sidechat "Projectile mort";
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;

Ca te permettra de savoir pile poil quand le projectile passe en "mort".
(en fait tu crée la caméra, tu la prépositionne, et ensuite ya une boucle tant-que "projectile vivant et caméra vivante" faire bouger ma caméra à l'emplacement du projectile et attendre xxxxxx.xxxxxx secondes. Si la caméra arrête de bouger c'est que le projectile est considéré comme mort. Donc au pire on peut forcer la caméra à bouger encore un peu :)  ).

ricco

Cela fait très longtemps que je n'ai plus touché à "camera.sqf", mais il me semble que tu te positionnes la camera loin derrière la balle, ce qui fait que lorsque la balle touche le quidam ta camera se trouve à la distance que tu vois sur le film. Je te propose de modifier la variable indiquant où se trouve la camera. Mon comment à deux balles  ;)

Zombi

AH OUI !

Le "CamSetRelPos" est à -13 !!

Remonte un peu la valeur vers -5 et ça devrais aller :D

MERCI RICCO !!

Prax



ricco