Flip
Здравствуйте, уважаемые программисты. Я не понимаю, каким образом работает оператор Flip. В справке сказано, что он меняет местами BackBuffer() и FrontBuffer(), но тогда выходит, что в BackBuffer() идет то, что было раньше (происходит шаг назад!). Т. е. если до применения команды Flip FrontBuffer() находится на стадии I, то BackBuffer() находится на стадии II (т. к. в нем уже произошли изменения); после команды Flip BackBuffer() и FrontBuffer() обменялись своим местом в ОЗУ, и FrontBuffer() получил стадию II, а BackBuffer() стадию I, т. е. забыл о тех изменениях, которые с ним произошли до команды Flip. По-моему, я что-то не так понимаю. Буду признателен, если вы объясните.
|
Ответ: Flip
Всё просто.
Представь, что у тебя есть картина. У неё две стороны. Что можно делать: Можно рисовать картину прямо перед лицом у зрителя - это одиночная буфферизация (не знаю правильный термин к сожалению) А можно рисовать картину с задней стороны, а потом переворачивать, чтобы зрители вкушали картину, пока ты рисуешь следующий кадр на ставшей оборотной стороне. Так вот: Рисуешь картину ты с помощью RenderWorld и 2д-функций, и потом показываешь её с помощью Flip(). Иначе: В FrontBuffer находится то, что увидит игрок. В BackBuffer происходит отрисовка. Чтобы показать игроку то, что мы нарисовали (когда мы уже закончили рисовать, есессно), мы использует Flip(). Я не в курсе, меняет ли б3д адресацию буферов или копирует содержимое Backbuffer в Frontbuffer (логично делать первое, но хрен его знает, что там Марк нахимичил), но это решительно ничего не меняет с точки зрения кода. Даже если в BackBuffer попадает содержимое FrontBuffer-а предыдущего кадра - всё равно задний буфер в 99% случаев (цифра с потолка, но близкая) перерисовывается полностью. |
Ответ: Flip
Спасибо за хорошее объяснение, но не могли бы вы устранить один вопрос:
Содержание буфера - это готовая картина в пикселях или же сборище неотрендеренных моделей? Если это пиксели, то все понятно: у программы есть один скоп моделей и двойная буферизация сделана для того, чтобы не рендерились модели на глазах у игрока. Все так? И еще почему-то такой код: Код:
Graphics3D 640, 480 Извините за море вопросов, но тут нагрянул еще один: по умолчанию включен BackBuffer()? Вот такой код: Код:
Graphics3D 640, 480 |
Ответ: Flip
Цитата:
Цитата:
Цитата:
Цитата:
|
Ответ: Flip
Большое спасибо!
Но один вопрос все-таки остался: Код:
Graphics3D 640, 480 |
Ответ: Flip
Потому что Graphics3D самостоятельно создаёт BackBuffer.
|
Ответ: Flip
Ещё может статься, что SetBuffer повторно инициализирует задний буфер, делая его пустым, а т.к. до Flip-а он на экран не попал - то, что в него поместили перед SetBuffer утрачено.
Вообще, полезнее было бы сделать Print "1" и Print "2" - так хоть понятно, какая строка выводится) |
Ответ: Flip
Сейчас я вообще запутался. Почему такое:
Код:
Graphics3D 640, 480 |
Ответ: Flip
Почему оно должно его убирать? Ты пишешь текст в BackBuffer, командой Flip меняешь буферы местами и текст отрисовывается.
|
Ответ: Flip
Дело в том, что текст всегда на экране (не зависимо от того, буду я применять после команды Print команду Flip или нет).
|
Ответ: Flip
А ты после флип стирай буфер через CLS
|
Ответ: Flip
Нет, вы не поняли. Вначале стоит BackBuffer(). Я на нем печатаю какую-то строчку. И эта строчка появляется на экране! Значит, команда Print всегда печатает на FrontBuffer()?
|
Ответ: Flip
Цитата:
Эти команды (принт\инпут) удобны для работы без буфферизации. Всё выводя сразу во фронт без всяких флипов. //радует как человек дотошно разбирается в деталях - все бы так. |
Ответ: Flip
Спасибо! Я, кстати, так понимаю, что Print нужен исключительно при "DOS-оформлении" программы, т. к. когда я работал с 3-хмерными объектами, то при использовании Print экран просто скакал. Этот эффект никак не убрать? Если так, то как я понимаю, в 3D-игре нужно использовать оператор Text. Так, да?
|
Ответ: Flip
Да. В более-менее дружественном интерфейсе принту не место.
Позицию вывода (в строках и пунктах(?)) для print\input можно задать оператором locate - но это всё не то. |
Часовой пояс GMT +4, время: 08:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot