2015-12-02 3 views
0

Так что мне немного трудно понять, как работают орфографические камеры в libgdx.Как создать надлежащую ортографическую камеру в libgdx

, что я хочу, это иметь камеру, которая будет отображать только объекты в квадрате, а другая камера устанавливает границы для всего экрана.

enter image description here

Так вот, я был в состоянии сделать то, что я хотел на весь экран для геймпада. Но то, что вы видите в правом верхнем углу, это фоновая карта игры, и я хочу, чтобы части были попаданы в красный квадрат, который вы видите здесь. Как мне это достичь?

Камеры должны делать это или мне нужно выяснить способ сделать это вручную? Я действительно смущен тем, как работают камеры и проекционные матрицы.

Здесь на этом экране красный квадрат и зеленая панель слева рисуются с использованием матрицы проекций моей экранной камеры. Карта (вверху справа) рисуется с помощью моей камеры.

Карта камеры представляет собой порт вида 400x400, но, как вы можете видеть, плитки прямоугольные, и это не тот рацион, который я хочу. Если кто-то может кратко объяснить, как работают камеры, я бы очень признателен.

Причина, по которой я не размещаю свой код, состоит в том, что мне кажется, что мне нужно понять, как работает механика камеры, даже чтобы правильно ее закодировать, поэтому я хочу сначала решить эту проблему.

Совет @ Tenfour04 работал отлично. В случае, если кто-то задается вопросом, чего я хотел достичь. Вот фотография.

enter image description here

ответ

1

Камера не может обрезать часть экрана. Для этого вам нужно использовать glViewport. В Libgdx уже есть класс Viewport, который может сделать это за вас. Вам понадобятся две орфографические камеры (одна для карты и одна для графического интерфейса), но видовое окно может создавать свои собственные.

private Viewport viewport; 

//in create: 
viewport = new FitViewport(400, 400); 

//in resize: 
viewport.update(width, height); 

//in render: 
viewport.getCamera().position.set(/*...move your map camera as needed*/); 
viewport.apply(); //viewport cropped to your red square 
batch.setProjectionMatrix(viewport.getCamera().combined); 
batch.begin(); 
//draw map 
batch.end(); 

//return to full screen viewport 
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

batch.setProjectionMatrix(yourGUICamera.combined); 
batch.begin(); 
//draw gui 
batch.end(); 
+0

Я уже использовал аналогичный шаблон. Я попробую это и отчитаю. Благодаря! –

+0

Привет @ Tenfour04, это сработало отлично. Большое спасибо!. Я просто не применял и не обновлял видовые экраны правильно! Еще раз спасибо! –

0

Что происходит, это камера будет соответствовать себя к размеру экрана. Чтобы изменить это, вы хотели бы использовать FrameBuffer. Буфер кадра будет ограничивать камеру желаемым размером, а затем может быть нарисован как текстура.

Создайте буфер кадра с размерами в пикселях.

//Initialize the buffer 
FrameBuffer fbo = new FrameBuffer(Format.RGB565, width, helght, false); 

Оформить мир в буфере.

fbo.begin(); 

//Draw the world here 

fbo.end(); 

Нарисуйте буфер на экран с помощью партии.

batch.begin(); 

batch.draw(fbo.getColorBufferTexture(), x, y); 

batch.end(); 
+0

RGB888 не поддерживается фреймбуферов на всех устройствах, так что вам нужно будет RGB565 в качестве резервного, и поэтому цвета будет низким фи на этих устройствах. – Tenfour04

+0

О, круто, я не знал, что – Ttocsneb

Смежные вопросы