有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    听起来太复杂了。以下是我的想法:

    • 即,您可以在屏幕上显示10x10个字段
    • 您有映射100x100个字段
    • 只需将映射增加到110x110,并在额外的空间中重复第一次(零est行和列)

    这样你们可以平滑地滚动,当相机到达地图上最右边的位置时,只需将其返回到0 X位置。垂直运动也是如此

    所以,我们的想法是让地图最左边的部分在屏幕宽度上加倍,而地图最上面的部分在屏幕高度上加倍,分别位于地图的正下方