java如何正确组合两个摄影机视图矩阵?
基本上,我有一个三维六边形瓷砖地图(想想简化的Civ 5地图)。它经过优化,可以使用单个大网格来减少绘制调用,并轻松实现一些酷炫的Civ 5功能(地形连续性和uv纹理出血)
我想在我的游戏中支持概括地图,所以我就如何最好地做到这一点集思广益
例如,如果主摄像机接近地图的远东,则我可以通过执行以下操作简单地执行向远西方的平移:
if(camera.x >= MAP_WIDTH)
camera.translate(0, 0, y);
然而,通过这样做,将有一个简短的时间跨度,玩家将看到“结束”的董事会之前的翻译。我想消除这个
我要解决这个问题的第一个想法是基本上只修改上面的代码,如下所示:
if((camera.x + camera.viewportWidth >= MAP_WIDTH)
camera.translate(0, 0, y);
然而,在翻译过程中,这会产生“跳跃”的副作用,感觉不自然
我的最终解决方案,以及问题的主题:
我有三个摄像头,我的主摄像头,一个在远东,一个在远东。我基本上希望“组合”这些摄影机的矩阵,以在实际边界之外渲染贴图
基本上,如果摄影机与世界边界有一定距离,我希望在以下位置从世界的另一侧绘制场景。例如,这是我想做的工作的伪代码:
int MAP_WIDTH = 25;
float viewportSize = 10f;
float mainCamX = 24f;
float mainCamY = 15f;
Matrix4 cbnd = camera.combined;
if(camX >= MAP_WIDTH)
camX = 0;
else if(camX < 0)
camX = MAP_WIDTH - camX;
if(camX + viewportSize >= MAP_WIDTH)
cbnd = combineMatrices(mainCam.combined, westCam.combined);
modelBatch.setProjectionMatrix(cbnd);
modelBatch.begin();
//Draw map model
//Draw unit models.
modelBatch.end();
modelBatch.setProjectionMatrix(mainCam.combined);
但我不确定如何恰当地组合矩阵,而且我对一般的矩阵概念还不熟悉
谁能帮我组合一下这些矩阵吗
# 1 楼答案
听起来太复杂了。以下是我的想法:
这样你们可以平滑地滚动,当相机到达地图上最右边的位置时,只需将其返回到0 X位置。垂直运动也是如此
所以,我们的想法是让地图最左边的部分在屏幕宽度上加倍,而地图最上面的部分在屏幕高度上加倍,分别位于地图的正下方