Comment créer une fonction pour traiter chaque milliseconde ? - page 3

 
Dmitry Fedoseev:

24 images par seconde, c'est suffisant si vous n'avez pas lu de livres télévisés quand vous étiez enfant))).

En fait, les téléviseurs analogiques à tube cathodique utilisaient le balayage entrelacé, mais uniquement parce qu'à l'époque, ils ne pouvaient pas produire des images complètes dans une bande passante donnée, ils affichaient d'abord les lignes paires et impaires et le scintillement n'était pas visible en raison de la rémanence des tubes. Non seulement j'ai lu des livres, mais en tant qu'étudiant, j'ai aussi fait pas mal de travaux de réparation de téléviseurs ;))

 
Alexey Volchanskiy:

En fait, les téléviseurs analogiques à tube cathodique étaient dotés d'un balayage entrelacé, mais uniquement parce qu'à l'époque, ils ne pouvaient pas produire des images complètes dans une bande passante donnée, ils produisaient d'abord les lignes paires, puis les impaires, et en raison de la rémanence des tubes, le scintillement n'était pas visible. Non seulement j'ai lu des livres, mais en tant qu'étudiant, j'ai aussi fait pas mal de travaux de réparation de téléviseurs ;))

Je ne sais pas combien de cadres il devrait y avoir. Je n'ai pas lu de tels livres. Mais l'essentiel est que je l'ai fait maintenant et que cela fonctionne bien. Bien sûr, je n'ai pas encore tout compris, mais j'ai déjà quelque chose à quoi me raccrocher.
 
Nikolay Demko:

Lafonction ChartRedraw a un coût de 40 millisecondes, il est donc inutile de mettre à jour le compteur après 16.

40 millisecondes correspondent à 25 images par seconde, ce qui est égal à la vitesse de perception humaine.

Eh bien non, Nikolaï, bien sûr que c'est moins que ça. Sur mon ordinateur, il faut un peu moins de 2 millisecondes avec COLOR_FORMAT_ARGB_NORMALIZE et moins d'une milliseconde avec COLOR_FORMAT_XRGB_NOALPHA.

Comme vous pouvez le constater dans l'exemple de script ci-joint(TestSpeedCanv.ex5), le retard de 30 millisecondes (32 fps) est absolument suffisant pour vos yeux. D'ailleurs, toutes les vidéos sont tournées à cette vitesse. Une fréquence d'images plus élevée est utilisée lorsque la lecture au ralenti est nécessaire.

Dossiers :
 
Реter Konow:

La fréquence maximale de la fonction de minuterie est de 15-16 mc.

Oui, c'est vrai. (Seulement pas la fréquence, mais la période. Fréquence maximale = 64 Hz)

Juste pour ajouter une précision :

Le pas de période pour le timer = 15,625 millisecondes.

C'est-à-dire qu'avec la commande EventSetMillisecondTimer(1) et avec la commande EventSetMillisecondTimer(10) la période réelle sera de 15.625 ms.

avec la commande EventSetMillisecondTimer(21) et avec la commande EventSetMillisecondTimer(30), la période réelle sera de 31,25 ms.

Avec la commande EventSetMillisecondTimer(95) et la commande EventSetMillisecondTimer(105), la période réelle sera de 109,375 ms.

etc.

Dossiers :
 
Alexey Volchanskiy:

En fait, les téléviseurs analogiques à tube cathodique étaient dotés d'un balayage entrelacé, mais uniquement parce qu'à l'époque, ils ne pouvaient pas produire des images complètes dans une bande passante donnée, ils produisaient d'abord les lignes paires, puis les impaires, et en raison de la rémanence des tubes, le scintillement n'était pas visible. Non seulement j'ai lu des livres, mais en tant qu'étudiant, j'ai aussi fait pas mal de travaux de réparation de téléviseurs ;))

Ouais, 625 lignes et tout ça. Les premiers jeux faits maison (pas les jeux sur ordinateur - assemblés sur des puces individuelles) utilisaient généralement 312 lignes. Joué quand j'étais enfant : hockey, tennis...
 
Alexey Volchanskiy:

En fait, les téléviseurs analogiques à tube cathodique étaient dotés d'un balayage entrelacé, mais uniquement parce qu'à l'époque, ils ne pouvaient pas produire des images complètes dans une bande passante donnée, ils produisaient d'abord les lignes paires, puis les impaires, et en raison de la rémanence des tubes, le scintillement n'était pas visible. Je ne lis pas seulement des livres, mais, en tant qu'étudiant, je faisais d'assez bons quarts d'heure pour réparer des téléviseurs).

Et alors ? Ne vous a-t-on pas appris qu'en vidéo, 24 images par seconde suffisent pour obtenir un effet de mouvement uniforme et naturel ? Et le problème du scintillement est un problème de moniteur (TV).

 
Dmitry Fedoseev:

Et alors ? N'y avez-vous pas appris qu'en vidéo, 24 images par seconde suffisent pour obtenir un effet de mouvement uniforme et naturel ? Et le problème du scintillement est un problème de moniteur (TV).

maintenant, même les téléphones ont des vidéos à 50 fps)

filmer la même chose, un mouvement rapide, à 24 fps et 50 fps et comparer.

ps. et charlie chaplin a tiré 15 fps ce qui est plus que suffisant)

 
Alexey Volchanskiy:

En fait, les téléviseurs analogiques à tube cathodique étaient dotés d'un balayage entrelacé, mais uniquement parce qu'à l'époque, ils ne pouvaient pas produire des images complètes dans une bande passante donnée, ils produisaient d'abord les lignes paires, puis les impaires, et en raison de la rémanence des tubes, le scintillement n'était pas visible. Non seulement j'ai lu des livres, mais en tant qu'étudiant, j'ai aussi fait pas mal de travaux de réparation de téléviseurs ;))

Oui, mais ces demi-cadres étaient différents, ils ne provenaient pas du même cadre.
Et grâce à cela, les mouvements étaient plus fluides qu'à 25 fps sur l'ordinateur.

 
Taras Slobodyanik:

même les téléphones ont maintenant des vidéos à 50 fps)

Filmez la même chose, un mouvement rapide, à 24 fps et 50 fps et comparez.

ps. et charlie chaplin a tiré 15 fps - plus que suffisant)

C'est incroyable la profondeur de la connaissance ! ...et la subtilité de la perception ! Habituellement, tout le monde voit des saccades et des mouvements non naturels dans les films de Charlie Chaplin.

 
Nikolai Semko:

Oui, c'est vrai. (Seulement pas la fréquence, mais la période. Fréquence maximale = 64 Hz)

Juste pour ajouter une précision :

Le pas de période pour le timer = 15,625 millisecondes.

C'est-à-dire qu'avec la commande EventSetMillisecondTimer(1) et avec la commande EventSetMillisecondTimer(10) la période réelle sera de 15.625 ms.

avec la commande EventSetMillisecondTimer(21) et avec la commande EventSetMillisecondTimer(30), la période réelle sera de 31,25 ms.

Avec la commande EventSetMillisecondTimer(95) et la commande EventSetMillisecondTimer(105), la période réelle sera de 109,375 ms.

etc.

Merci pour la correction, Nikolaï.

Je n'ai pas mesuré ces périodes exactes, mais j'ai remarqué qu'il y a des sauts de certaines périodes. La fréquence n'est pas idéale. Surtout dans la gamme des petites valeurs de période (16-25 ms). Ainsi, si je la règle sur 16 ms, la pause sera très souvent de 32 millisecondes.

Il y a une sorte d'échec dans la fréquence des périodes. C'est une sorte d'arythmie électronique.


Je me demande donc ce qui se passe si je fixe une période de 40 ms (ce qui est suffisant pour la perception humaine) et que le minuteur saute certaines périodes ? Dans ce cas, nous n'aurions pas 24 images par seconde, mais 18-24. En fonction du nombre de périodes, le minuteur sautera. Je pense que la meilleure option serait une période de temporisation de 25ms. C'est ce que je m'étais fixé au départ.

Raison: