Opengl, Lazarus, Реализация игрового поля
| |
cann | Дата: Вторник, 21 Декабря 2021, 18:00 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Окно создаваемого OpenGL приложения развернуто на весь экран, например разрешение экрана 1366х768 пикселй. Хотелось бы понять как реализовать игровое поле определенного размера, например 400х400 пикселей, при этом игровой объект "Астероид" должен быть виден в пределах игрового поля и не виден за пределами игрового поля. Игровой объект "Астероид" должен плавно появляться в игровом поле из неигрового поля. Как можно сделать это методами OpenGL?
|
|
| |
afq | Дата: Вторник, 21 Декабря 2021, 21:03 | Сообщение # 2 |
Разработчик
Сейчас нет на сайте
| opengl отвечает только за рисование, или если старая opengl, то и за трансформацию ( это передвижение, масштаб, поворот - изображений или объектов ). основная логика с полем пишется руками, а opengl только отображает.
|
|
| |
cann | Дата: Среда, 22 Декабря 2021, 07:08 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Цитата opengl отвечает только за рисование, или если старая opengl, то и за трансформацию ( это передвижение, масштаб, поворот - изображений или объектов ). основная логика с полем пишется руками, а opengl только отображает.
Это я все понимаю, мне не понятно как сделать, если можно так сказать, "слои". То есть, игровое поле (размер которого 400х400 пикселей) является самым нижним слоем, на нем видны игровые объекты, а остальное неигровое поле является самым высоким слоем и на нем игровые объекты не видны. Если игровой объект (Астероид) движется из неигрового поля в игровое, то он в игровом поле появляется плавно, сначала не виден, потом выходит из неигрового поля в игровое.
|
|
| |
afq | Дата: Среда, 22 Декабря 2021, 07:15 | Сообщение # 4 |
Разработчик
Сейчас нет на сайте
| в коде придумываешь класс как слой, и сначала первым слоем рисуешь background, потом вторым слоем. в каждом слое свои спрайты. чтобы сделать плавное появление, у спрайта есть альфа канал, всего у спрайта четыре канала, зеленый, красный, синий вроде и альфа. у opengl есть функция glScissors, с помощью нее можно отображать только определенную область.
|
|
| |
cann | Дата: Среда, 22 Декабря 2021, 07:30 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Цитата в коде придумываешь класс как слой, и сначала первым слоем рисуешь background, потом вторым слоем. в каждом слое свои спрайты. чтобы сделать плавное появление, у спрайта есть альфа канал, всего у спрайта четыре канала, зеленый, красный, синий вроде и альфа. у opengl есть функция glScissors, с помощью нее можно отображать только определенную область.
Спасибо за ответ. Попробую сделать, что вы предложили. Плюс в репутацию поставил.
Сообщение отредактировал cann - Среда, 22 Декабря 2021, 07:31 |
|
| |
DmitriyIM | Дата: Пятница, 24 Декабря 2021, 00:10 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Цитата cann ( ) То есть, игровое поле (размер которого 400х400 пикселей) является самым нижним слоем, на нем видны игровые объекты, а остальное неигровое поле является самым высоким слоем и на нем игровые объекты не видны. Если игровой объект (Астероид) движется из неигрового поля в игровое, то он в игровом поле появляется плавно, сначала не виден, потом выходит из неигрового поля в игровое.
То, что вы описываете - абстракция Конечно, можно и слои реализовать, но игра будет требовать больше ресурсов. Гораздо проще привязать экран к камере, а область видимости (400х400 пикселей) указать относительно ее центра. Тогда, для реализации того, что вы описали, нужно будет просто проверять, попадает объект в видимую зону, или нет. Если да, то вывести его, если нет, то перейти к следующему объекту.
Могу постараться найти хорошую литературу, если напишите какую версию OpenGL планируете использовать.
|
|
| |
cann | Дата: Воскресенье, 26 Декабря 2021, 15:09 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Цитата DmitriyIM ( ) Гораздо проще привязать экран к камере, а область видимости (400х400 пикселей) указать относительно ее центра. Тогда, для реализации того, что вы описали, нужно будет просто проверять, попадает объект в видимую зону, или нет. Если да, то вывести его, если нет, то перейти к следующему объекту.
Могу постараться найти хорошую литературу, если напишите какую версию OpenGL планируете использовать.
Если сможете, то расскажите подробней об этом способе или укажите на литературу, где этот способ описывается. Использую старую версию OpenGL 1.1
|
|
| |
|