为了一个游戏,我想要测量自上一帧以来经过的时间。
我使用了glutGet(GLUT_ELAPSED_TIME)
来实现这个功能。但是在包含glew之后,编译器无法找到 glutGet函数(奇怪)。因此,我需要另一种替代方法。
我发现大多数网站都建议在 ctime 库中使用 clock 函数,但那个函数只能度量程序的 CPU 时间而非真实时间!ctime库中的 time 函数精确到秒,而我需要至少毫秒级别的精度。
我可以使用 C++11。
为了一个游戏,我想要测量自上一帧以来经过的时间。
我使用了glutGet(GLUT_ELAPSED_TIME)
来实现这个功能。但是在包含glew之后,编译器无法找到 glutGet函数(奇怪)。因此,我需要另一种替代方法。
我发现大多数网站都建议在 ctime 库中使用 clock 函数,但那个函数只能度量程序的 CPU 时间而非真实时间!ctime库中的 time 函数精确到秒,而我需要至少毫秒级别的精度。
我可以使用 C++11。
在C++11之前,我认为没有内置高分辨率时钟。如果您无法使用C++11,您必须修复glut和glew的错误或使用平台相关的计时器函数。
#include <chrono>
class Timer {
public:
Timer() {
reset();
}
void reset() {
m_timestamp = std::chrono::high_resolution_clock::now();
}
float diff() {
std::chrono::duration<float> fs = std::chrono::high_resolution_clock::now() - m_timestamp;
return fs.count();
}
private:
std::chrono::high_resolution_clock::time_point m_timestamp;
};
QueryPerformanceCounter
是一个非破损的时钟(但也不可移植)。Visual C++ 的 high_resolution_clock
使用系统滴答声,大约为 15 毫秒 - 这是有问题的。请参阅链接的答案以获取更多信息和错误报告。 - Ben Voigt