Кадр/с, как вычисляют это?

В моей книге OpenGL это говорит это:

"Что часто происходит в такой системе, то, что кадр является слишком сложным для рисования в 1/60 секунду, таким образом, каждый кадр отображен несколько раз. Если, например, требуется 1/45 секунда для рисования кадра, Вы получаете 30 кадр/с, и графика неактивна для 1/30 1/45 = 1/90 второй на кадр, или одна треть времени".

В предложении, которые говорят, "требуется 1/45 секунда для рисования кадра, Вы получаете 30 кадр/с", почему я получаю только 30 кадр/с? Woudln't 45 кадр/с быть более корректным?

7
задан unwind 29 January 2010 в 08:13
поделиться

3 ответа

Графическая карта, как правило, будет только буферным кадром.

Если требуется 1/45 секунды, чтобы нарисовать кадр, то на 1/60 второй марки предыдущий кадр будет RedisPlayed. На мкме 1/45 следующий кадр сделан - но у карты нет свободного буфера, чтобы начать рендеринг следующего, поэтому должен сидеть простаиваться до 1/30, где он может отправлять этот кадр и начать работать на следующем.

Это с включенным VSync - если вы его отключите, вместо того, чтобы получить 30FPS Framerate и простуды на холостом ходу 1/3 времени, карта немедленно начнет перерисовать, и вместо этого вы получите удар.

12
ответ дан 6 December 2019 в 11:49
поделиться

Версия генератора нерекурсивного решения @ unutbu, запрошенная @ Andrew в комментарии:

def genflat(l, ltypes=collections.Sequence):
    l = list(l)
    i = 0
    while i < len(l):
        while isinstance(l[i], ltypes):
            if not l[i]:
                l.pop(i)
                i -= 1
                break
            else:
                l[i:i + 1] = l[i]
        yield l[i]
        i += 1

немного упрощенная версия этого генератора:

def genflat(l, ltypes=collections.Sequence):
    l = list(l)
    while l:
        while l and isinstance(l[0], ltypes):
            l[0:1] = l[0]
        if l: yield l.pop(0)
-121--1810323-

Simple Regex:

\w +

Это соответствует последовательности символов «word». Это почти то, что вы хотите.

Это несколько более точно:

\w (? < !\d) [\w '-] *

Он соответствует любому количеству символов слова, гарантируя, что первый символ не является цифрой.

Вот мои совпадения:

1 ЛОЛОЛОЛ
2 ВЫ
3 БЫЛО
4 PWN3D
5 einszwei
6 drei

Это больше похоже на это.

EDIT:
Причина отрицательного обзора заключается в том, что некоторые ароматизаторы regex поддерживают символы Юникода. При использовании [a-zA-Z] будет пропущено несколько желательных символов «слова». Разрешение \w и запрет \d включает в себя все символы Юникода, которые могли бы начать слово в любом блоке текста.

EDIT 2:
Я нашел более сжатый способ получить эффект отрицательного lookbehind: Double negative character class с единственным отрицательным исключением.

[^\W\d] [\w '-] * (? < =\w)

Это то же самое, что и выше, за исключением того, что это также гарантирует, что слово заканчивается символом слова. И, наконец, есть:

[^\W\d] (\w | [- '] {1,2} (? =\w)) *

Обеспечение наличия не более двух несловосочетаний в строке. Она совпадает со словами, но не со словами, что имеет смысл. Если вы хотите, чтобы он соответствовал «word--up», но не «word---up», вы можете изменить 2 на 3 .

-121--2669374-

Правильно. Вы бы получили 45 кадров в секунду, но система замедляет его до 30 кадров в секунду, чтобы получить гладкий кадр на 60Hz (60 перерисовок в секунду) мониторах.

Поскольку требуется рисовать что-либо каждые 1/60 секунд на мониторе 60Hz и не может рисовать «полукадр», необходимо нарисовать предыдущий кадр. Так что если вы 60 раз в секунду вы один раз рисуете реальный кадр, и каждые 2 кадра вы рисуете первый, то вы получаете 30 кадров в секунду, несмотря на то, что вы можете управлять 45 кадров в секунду.

5
ответ дан 6 December 2019 в 11:49
поделиться

Так что да, как и другие, это связано с вашей графикой в ​​ожидании V-Sync перед началом создания следующего кадра.

Это сказано ...

Остерегайтесь, не все мониторы обновляются при 60 Гц. 60FPS VS 30FPS становится 70FPS VS 35FPS на дисплее 70 Гц.

Если вы не хотите получить вашу карту, чтобы дождаться V-Sync перед началом следующего кадра, но все еще избегайте разрыва, используйте Triple . GPU затем Ping-Pongs, визучая 2 буфера, пока отображается 3-й. Событие V-Sync - это то, что запускает обмен на «В настоящее время законченный» буфер. Это все еще не очень здорово, потому что вы в конечном итоге с некоторыми кадрами, которые остаются на экране чаще, чем другие: с вашим рендерингом 1/45, кадр останется на 1/30 и следующее за 1/60, давая некоторую надежность Отказ

Последнее, с появлением офсетного рендеринга (рендеринг не отображаемых буферов), это теоретически возможно для водителя, чтобы не ждать V-синхронизации, прежде чем начать на следующем кадре, если ранняя работа этого следующего кадра случается, чтобы не прикоснуться к поверхности дисплея. Я не думаю, что я когда-либо видел водитель, хотя это умно, хотя.

0
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: