所以我很难理解在libgdx中ortographic相机的工作原理。
我想要的是拥有一台只能在一个正方形内渲染东西的相机,同时让另一台摄像机为我的整个屏幕设置边界。
所以在这里,我能够在整个屏幕上为游戏手柄做我想做的事情。但是,你在右上方看到的是游戏的背景图,我想渲染的部分只在你看到的红色方块内。我如何实现这一目标?
相机应该这样做还是我需要想办法手动完成?我对相机和投影矩阵的工作原理感到困惑。
在此屏幕上,使用我的屏幕相机的投影矩阵绘制左侧的红色方块和绿色区域。地图(右上角)使用我的地图凸轮绘制。
地图凸轮是400x400的视口,但正如您所看到的,瓷砖是矩形的,这不是我想要的宽高比。如果有人可以简要解释相机如何工作,我会非常感激。
我不在这里发布我的代码的原因是因为我觉得我需要了解相机机制如何正常编码,所以我想首先解决这个问题。
关注@ Tenfour04的建议完美无缺。如果有人想知道我想要实现什么。这是一张照片。
答案 0 :(得分:1)
单独的相机无法裁掉部分屏幕。为此你需要使用glViewport。 Libgdx中已有一个Viewport类可以为您完成。您将需要两个正交相机(一个用于地图,一个用于GUI),但视口可以创建自己的相机。
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();
答案 1 :(得分: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();