ミリ秒単位で処理する関数を作るには? - ページ 3

 
Dmitry Fedoseev:

24コマ/秒は、子供の頃にテレビの本を読んでいなければ十分です)))

実はアナログのブラウン管テレビにもインターレース走査がありましたが、当時は与えられた帯域の中でフルフレームを作ることができず、奇数ラインと偶数ラインを先に出して、管の残光によるフリッカーが見えなかったからにほかなりません。本を読むだけでなく、学生時代にはテレビの修理の際にかなり手を動かしていました ))

 
Alexey Volchanskiy:

アナログのブラウン管テレビはインターレース走査でしたが、当時は与えられた帯域でフルフレームを作ることができず、最初に偶数ライン、次に奇数ラインを作り、真空管の残光によるフリッカーが見えなかったからにほかなりません。本を読むだけでなく、学生時代にはテレビの修理の際にかなり手を動かしていました ))

何コマあればいいのかわからない。そのような本は読んだことがない。でも、肝心なのは、今やってみたらうまくいったということです。もちろん、まだすべてを把握できているわけではありませんが、すでにすがるような思いでいます。
 
Nikolay Demko:

ChartRedraw関数の コストは40ミリ秒なので、16回目以降のタイマー更新の意味がありません。

40ミリ秒は1秒間に25フレームに相当し、これは人間の知覚速度に等しい。

いやいや、ニコライさん、もちろんそれ以下ですよ。私のコンピュータでは、COLOR_FORMAT_ARGB_NORMALIZEで2ミリ秒弱、COLOR_FORMAT_XRGB_NOALPHAで1ミリ秒弱となります。

添付のサンプルスクリプト(TestSpeedCanv.ex5)からわかるように、30ミリ秒のフレーム遅延(32fps)は、あなたの目には絶対に十分なものです。ちなみに、動画はすべてこの速度で撮影しています。スローモーション再生が必要な場合は、より高いフレームレートが使用されます。

ファイル:
 
Реter Konow:

タイマー機能の最大周波数は15-16mcです。

はい、そうです。(最大周波数=64Hz)。

一応、補足しておきます。

タイマーの周期ステップ=15.625ミリ秒。

つまり、EventSetMillisecondTimer(1) コマンドと EventSetMillisecondTimer(10) コマンドでは、実時間が 15.625ms となります。

EventSetMillisecondTimer(21) コマンドと EventSetMillisecondTimer(30) コマンドを使用した場合、実際の周期は 31.25ms となります。

EventSetMillisecondTimer(95) コマンドと EventSetMillisecondTimer(105) コマンドでは、実際の周期は 109.375 ms になります。

など

ファイル:
 
Alexey Volchanskiy:

アナログのブラウン管テレビはインターレース走査でしたが、当時は与えられた帯域でフルフレームを作ることができず、最初に偶数ライン、次に奇数ラインを作り、真空管の残光によるフリッカーが見えなかったからにほかなりません。本を読むだけでなく、学生時代にはテレビの修理の際にかなりのハクリをしたものです)。

ええ、625ラインとかね。最初の自作ゲーム(コンピュータゲームではなく、個々のチップに組み立てられたもの)は、通常312本の線を使っていました。子供のころに遊んだこと:ホッケー、テニス...。
 
Alexey Volchanskiy:

アナログのブラウン管テレビはインターレース走査でしたが、当時は与えられた帯域でフルフレームを作ることができず、最初に偶数ライン、次に奇数ラインを作り、真空管の残光によるフリッカーが見えなかったからにほかなりません。本を読むだけでなく、学生時代にはテレビの修理で結構なシフトをこなしていました)。

それで?ビデオでは、自然な均一 運動効果を得るためには、1秒間に24コマあれば十分だと教わりませんでしたか?そして、フリッカーの問題は、モニター(テレビ)の問題です。

 
Dmitry Fedoseev:

それで?動画では、1秒間に24コマあれば自然な均等運動効果が得られると、そこで教わりませんでしたか?そして、フリッカーの問題は、モニター(テレビ)の問題です。

今では携帯電話でも50fpsの動画が見られるようになりました)

同じもの、速い動きを24fpsと50fpsで撮影し、比較する。

ps. チャーリー・チャップリンは15fpsで撮影しており、これは十分すぎるほどです。)

 
Alexey Volchanskiy:

アナログのブラウン管テレビはインターレース走査でしたが、当時は与えられた帯域でフルフレームを作ることができず、最初に偶数ライン、次に奇数ラインを作り、真空管の残光によるフリッカーが見えなかったからにほかなりません。本を読むだけでなく、学生時代にはテレビの修理の際にかなりのハクリをしたものです)。

はい、でもそのハーフフレームは、同じフレームからではなく、別のものでした。
その分、パソコンでの25fpsよりも動きが滑らかでしたね。

 
Taras Slobodyanik:

携帯電話でも50fpsの動画が見られるようになった)

同じもの、速い動きを24fpsと50fpsで撮影して比べてみてください。

追記:チャーリー・チャップリンは15fpsで撮影していました。)

知識の深さには驚かされます! ...そして、知覚の繊細さにも驚かされます。通常、チャップリンの映画では、誰もがジャークや不自然な動きを見ています。

 
Nikolai Semko:

はい、そうです。(最大周波数=64Hz)。

一応、補足しておきます。

タイマーの周期ステップ=15.625ミリ秒。

つまり、EventSetMillisecondTimer(1) コマンドと EventSetMillisecondTimer(10) コマンドでは、実時間が 15.625ms となります。

EventSetMillisecondTimer(21) コマンドと EventSetMillisecondTimer(30) コマンドを使用した場合、実際の周期は 31.25ms となります。

EventSetMillisecondTimer(95) コマンドと EventSetMillisecondTimer(105) コマンドでは、実際の周期は 109.375 ms になります。

など

ニコライさん、訂正ありがとうございます。

正確な周期は測っていないのですが、ある周期をスキップしていることに気づきました。周波数が理想的ではないのです。特に、周期値の小さい範囲(16~25ms)では、その傾向が強い。つまり、16ミリ秒に設定すると、かなりの確率で32ミリ秒の間が空くことになる。

生理の頻度には、一種の失敗があるのです。一種の電子的不整脈ですね。


そこで、40msという周期(人間の感覚では十分な周期)を設定し、タイマーがいくつかの周期をスキップしたらどうだろう、と考えています。そうすると、1秒間に24コマではなく、18~24コマになるんです。何回目のピリオドかによって、タイマーがスキップされます。タイマーの周期を25msにするのがベストだと思うのですが、どうでしょうか?それは、私がもともと自分に課していることです。