Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

Animationの完成

Animationの実装

今までの実装では時間の取得の仕方が間違っていた。
時間の表示を正常にするとコマ飛びすることなくアニメーションが表示された。

時間の取得方法

実装当初に色々調べた際に、あまり深く調べることなく以下のstack overflowのanswerをそのまま流用していた。
How to get the current time in native Android code? - Stack Overflow

#include

// from android samples
/* return current time in milliseconds */
static double now_ms(void) {

struct timespec res;
clock_gettime(CLOCK_REALTIME, &res);
return 1000.0 * res.tv_sec + (double) res.tv_nsec / 1e6;

}

しかしコメント文にあるように、このコードではミリセカンドの単位で時間が取得できる。
アニメーションを行うときにはセカンドの単位で表示していたので、1000倍の速さについていけずコマ飛びしていた。

timespec構造体

仕様は以下に書かれてある。
cpprefjp.github.io

tv_sec エポックからの経過秒。値は0以上
tv_nsec ナノ秒単位で表される秒未満の値 値の範囲は[0, 999'999'999]

tv_nsecはナノセカンドの単位で整数値で取得されるので、 1.0 * 10^{-9}を掛ける必要がある。
つまり clock_gettime を実行したときの時刻tは

double t = res.tv_sec + res.tv_nsec / 1e9;

で取得できる。