Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 摄像机跟踪算法_3d_Camera - Fatal编程技术网

3d 摄像机跟踪算法

3d 摄像机跟踪算法,3d,camera,3d,Camera,我正在做一个游戏,我正在寻找一个基本的摄像机跟踪算法的帮助 假设我们有一扇窗户,大小是320乘480 我们也有 坐标为x,y的玩家 用户可以使用 箭头键 摄像机正在跟踪玩家的坐标。[摄像机坐标是屏幕所在的位置]。所以camera.x=player.x和camera.y=player.y 现在我遇到的问题是:当玩家到达房间的尽头时, 我能看到房间的“外面”。因此,理想情况下,当摄像机接近房间尽头时,它应该停止移动 我不知道如何有效地解决这个问题,这似乎是游戏中的一个共同特点。任何帮助都会很好

我正在做一个游戏,我正在寻找一个基本的摄像机跟踪算法的帮助

  • 假设我们有一扇窗户,大小是320乘480
  • 我们也有 坐标为x,y的玩家
  • 用户可以使用 箭头键
  • 摄像机正在跟踪玩家的坐标。[摄像机坐标是屏幕所在的位置]。所以camera.x=player.x和camera.y=player.y
现在我遇到的问题是:当玩家到达房间的尽头时, 我能看到房间的“外面”。因此,理想情况下,当摄像机接近房间尽头时,它应该停止移动

我不知道如何有效地解决这个问题,这似乎是游戏中的一个共同特点。任何帮助都会很好

我的代码不起作用。。真的,这种观点是随机的

#bi_currentwindow.layout.x = -(top left x corner of window)
#bi_currentwindow.layout.y = -(top left y corner of window)
#bi_bg_size= total room (or world) size

            diff=(object.x-Window.size[0]/2)
            if diff<0:
                bi_currentwindow.layout.x = object.x+diff
            else:
                diff=(object.x+Window.size[0]/2)-bi_bg_size[0]
                if diff<0:
                    bi_currentwindow.layout.x = -object.x+Window.size[0]/2.0
            diff=(object.y-Window.size[1]/2)

            if diff<0:
                bi_currentwindow.layout.y = diff+Window.size[1]/2
            else:
                bi_bg_size=centralVarTransfer.bi_bg_size
                diff=bi_bg_size[1]-(object.y+Window.size[1]/2)

                if diff>0:
                    bi_currentwindow.layout.y = -object.y+Window.size[1]/2.0
#bi_currentwindow.layout.x=-(窗口左上角x)
#bi_currentwindow.layout.y=-(窗口的左上角)
#bi_bg_尺寸=房间(或世界)总尺寸
diff=(object.x-Window.size[0]/2)

如果diff每当我玩2D游戏时,我更喜欢让玩家在屏幕中央移动背景。这允许您执行以下操作:如果我的房间侧面>或<我的屏幕大小,则移动我的屏幕,使其侧面等于我的屏幕大小

但是,如果您有摄像头并且更喜欢使用该方法: 数学应该很简单。 比如:

//assuming origin is the center of the object
if ( camera.xPosition - (camera.width / 2) < room.x - (room.width / 2))
     camera.xPosition  = room.x - (room.width / 2) + (camera.width / 2)
//假设原点是对象的中心
如果(camera.xPosition-(camera.width/2)
我的代码可能有点不对劲(而且只针对房间的一侧),但从概念上讲,您正在检查由偏移(基于相机宽度或高度)修改的相机位置是否大于或小于由偏移(基于房间宽度或高度)修改的房间位置


我发现有两个索引卡,并像照相机一样移动一个索引卡,有助于将您试图编码的边界条件概念化

每当我玩2D游戏时,我更喜欢将玩家置于屏幕中央并移动背景。这允许您执行以下操作:如果我的房间侧面>或<我的屏幕大小,则移动我的屏幕,使其侧面等于我的屏幕大小

但是,如果您有摄像头并且更喜欢使用该方法: 数学应该很简单。 比如:

//assuming origin is the center of the object
if ( camera.xPosition - (camera.width / 2) < room.x - (room.width / 2))
     camera.xPosition  = room.x - (room.width / 2) + (camera.width / 2)
//假设原点是对象的中心
如果(camera.xPosition-(camera.width/2)
我的代码可能有点不对劲(而且只针对房间的一侧),但从概念上讲,您正在检查由偏移(基于相机宽度或高度)修改的相机位置是否大于或小于由偏移(基于房间宽度或高度)修改的房间位置


我发现有两个索引卡,并像照相机一样移动一个索引卡,有助于将您试图编码的边界条件概念化

谢谢,但是y照相机的宽度是什么意思?在这种情况下,你的照相机宽度就是屏幕宽度。(320)事实上,我明白你的意思。不过,这有点难。如果玩家是在显示“外部”的区域中生成的呢?如果你在主更新循环中调用代码,它会在每一帧检查代码。所以,不管发生什么,它总是会检查你是否能看到房间外面,并相应地调整房间。我怀疑你有这个问题,因为你这样做只是为了回应球员的移动。如果不是这样,请提供一些示例代码,以便我能提供更多帮助。默认相机位置为[0,0],如果玩家在房间的一角繁殖,那么相机位置将始终为[0,0],谢谢,但y camera.width是什么意思?在这种情况下,相机宽度是屏幕宽度。(320)事实上,我明白你的意思。不过,这有点难。如果玩家是在显示“外部”的区域中生成的呢?如果你在主更新循环中调用代码,它会在每一帧检查代码。所以,不管发生什么,它总是会检查你是否能看到房间外面,并相应地调整房间。我怀疑你有这个问题,因为你这样做只是为了回应球员的移动。如果不是这样,请提供一些示例代码,以便我能提供更多帮助。默认摄影机位置为[0,0],如果玩家在房间的一角繁殖,则摄影机位置将始终为[0,0]