Win32 Дублируйте, зеркалируйте, копируйте или рисуйте содержимое окна дважды, с идеальной синхронизацией кадров. Для стерео рендеринга левого глаза - PullRequest
0 голосов
/ 04 мая 2020

Я написал программу для Win32 C ++.

Я хотел бы дублировать визуальное содержимое левого окна в каждом кадре, чтобы оно отображалось в другом месте на экране. (Один прямоугольник с левой стороны экрана и идентичный прямоугольник с правой стороны экрана.)

Это для стерео рендеринга, где левый прямоугольник виден в левом глазу пользователя, а правый прямоугольник в правом глазу.

text

Два прямоугольника должны быть синхронизированы по кадрам, это означает, что они должны всегда показывать один и тот же кадр. Или, другими словами, если правый глаз отстает от левого при «одном вызове отрисовки», то зрителю становится плохо.

ПРИМЕЧАНИЕ: у меня есть исходный код для обоих windows, потому что я создал их. (Оба windows находятся в одном и том же exe в данный момент.)

Что я пробовал:

  • BitBlt (), нарисовав прямоугольник angular часть рабочего стола HD C в правое окошко. Я вызываю BitBlt () в сообщении WM_PAINT правого окна: Это работает, НО правое окно на 1-2 кадра позади левого.

Потенциальные решения:

  • В сообщении WM_PAINT левого окна нарисуйте оба windows с одинаковым содержимым. Возможно ли это как-то?

  • Используйте одно гигантское окно, чтобы нарисовать оба прямоугольника. Это будет означать, что все рисование происходит в одном вызове WM_PAINT. Тем не менее, я не знаю, как скопировать часть окна в другую часть. Я мог бы sh Я мог бы просто сказать Win32 «рисовать снова», но на этот раз начать с 1000 пикселей вправо ...

  • Сделать что-нибудь с DirectX. (Понятия не имею, что.)

Любая помощь будет принята с благодарностью!

...