Пишу програмку для проверки инерциооности зрения, т.е. мне необходимо узнать при какой частоте кадров (fps)
человек перестает видеть различия между двумя картинками (в моем случае это черный и белый квадрат).
Я столкнулся с такой проблемой, я не смог плавно увеличивать частоту выводимых кадров. Если выводить от 1-16, то более менее плавно,
а вот от 16 изменения происходят скачками 16, 21, 32, 64, 83, 96.
Проект пишу на C#, но если будут варианты решения на др. языке, то думаю разбирусь.
Процесс перерисовки у меня весит на событии OnIdle()
while (AppStillIdle)
{
// Render a frame during idle time (no messages are waiting)
Render3DEnvironment();
}
но я так же делал зацикливание для перерисовки, не помогло.
Для задержки на кадров использую цикл, который проверяет количество пройденых тиков с финишным значением, после выхода из цикла
устанавливаю новое конечное время
while (DateTime.Now.Ticks < timeTick); // timeTick — финишное время
timeTick = DateTime.Now.Ticks + tick; // tick — сколько тиков на один кадр
Для нарисования квадрата использую VertexBuffer, который имеет 12 вершин, 6 — для белого, 6 — черного.
В методе Render() происходит выбор вершин в зависимости от условия, т.е VertexBuffer блокирую только один раз
if (isBlack)
{
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);
isBlack = false;
}
else
{
device.DrawPrimitives(PrimitiveType.TriangleList, 6, 2);
isBlack = true;
}
до этого использовал VertexBuffer с 6 вершинами, и при каждой перерисовке блокировал его и менял значения, но результат у меня
не отличается от предыдущего.
Если кто знает как это можно реализовать (плавное увелечение fps), напишите, плиз.