Questions tagged «camera»

从摄像机观察游戏世界,这是从中观察游戏世界的观点。

9
为什么我们移动世界而不是摄影机?
我听说在OpenGL游戏中,让玩家移动的方法不是移动相机,而是移动整个世界。 例如,这里是本教程的摘录:OpenGL视图矩阵 在现实生活中,您习惯于移动相机以更改特定场景的视图,而在OpenGL中则相反。OpenGL中的相机无法移动,并且被定义为面向负Z方向位于(0,0,0)。这意味着无需移动和旋转相机,而是围绕相机移动和旋转世界以构建适当的视图。 我们为什么要这样做?


5
爆炸的逼真的相机/屏幕抖动
我想在爆炸时摇晃一下相机,我尝试了几种不同的功能来晃动它,似乎没有什么能真正给人“哇,真是棒极了!” 输入我想要的感觉。我尝试了一些任意的相对高频正弦波模式,并具有一些线性衰减,以及方波型模式。我尝试只移动一个轴,两个轴和所有三个轴(尽管在这种情况下,多莉效应几乎没有引起注意)。 有人知道好的相机抖动模式吗?
36 camera 

2
洛克人风格的屏幕滚动设计
NES经典的《漫画人》系列使用了非常特殊的滚动技术,我很难将精力集中在实现上。本质上,该级别分为大小均相同的“屏幕”。一些屏幕可以平滑地彼此滚动,从而产生了更广阔的游戏领域的幻觉。某些屏幕会阻止相机滚动,直到播放器到达屏幕边缘为止,此时会发生过渡并显示下一个屏幕。单个屏幕也可能具有多个过渡,例如,它的梯子可以上升到一个屏幕,但是您也可以向前走到另一个屏幕。 这些屏幕过渡如何建模? 屏幕0是播放器开始的开始屏幕。 屏幕0-3在水平方向上平滑滚动,并向玩家显示为一个连续的比赛场地。 由于在屏幕3及其相邻的屏幕4和5之间存在过渡,因此除非玩家移动到相应的边缘并“推动”到下一个屏幕,否则照相机不会前进到屏幕3的右边缘或上边缘。 一旦播放器移动到两个过渡边缘中的任意一个,用户输入就会立即被禁用,并且摄像机会过渡到新区域,之后恢复用户输入。 蓝屏(屏幕5)已禁用水平滚动,因此只能进行垂直过渡。 绿色屏幕(屏幕6)具有垂直返回屏幕5的垂直过渡,但也允许水平平滑滚动到屏幕7。 编辑:在房间方面实现过渡导致我这样做: 带有箭头的小缺口是可能发生过渡的区域。每个区域都有一个“方向”和谎言只是房间外面的可视区域。一旦玩家击中一个区域,就会开始过渡。
25 2d  camera  platformer 


4
投射射线以选择体素游戏中的方块
我正在开发一款具有类似于Minecraft的地形且由块组成的游戏。由于基本渲染和块加载现已完成,因此我想实现块选择。 因此,我需要找出第一人称相机所面对的障碍。我已经听说过要取消整个场景的投影,但是我决定反对,因为它听起来很hacky,而且不准确。也许我可以以某种方式向视图方向投射射线,但是我不知道如何用体素数据中的块检查碰撞。当然,此计算必须在CPU上完成,因为我需要结果才能执行游戏逻辑运算。 那么,如何找出相机前面的哪个块呢?如果可以的话,我该如何投射光线并检查碰撞?

2
在2D游戏中实现相机/视口
将相机/视口实现到2D游戏的最实用方法是什么? 我读过,应该存储对象的世界位置而不是相对于屏幕的位置? 现在的情况: 我实现了一个简单的2D游戏,从XML文件加载对象和关卡。当前,级别XML文件如下所示: <map> <tile obj="ground" x="0" y="555" /> <tile obj="ground" x="16" y="555" /> <tile obj="ground" x="32" y="555" /> ... </map> 所有对象都有一个二维矢量“位置”,将其当前位置存储在屏幕上。 我想要的是: 图片中: 相机为800x600或640x480 块和精灵为16x16像素。 世界大小可能有所不同 坐标可能应该相对于世界而不是相对于屏幕进行标准化? 视口相对于播放器x,y的位置,并在播放器到达相机死区时移动(类似于此视频)。 我问的是伪示例/文章,但是如果您需要了解我在开发中使用的东西:SDL和C / C ++。
20 c++  2d  architecture  camera 

2
通过Unity3D中的门户时如何融合两个摄像机
在提出问题之前,我知道最明显的解决方案是使用规范化的视口矩形,但是我需要比矩形更复杂的形状,并且我考虑使用视口矩形,但似乎没有是我的解决方案。 编辑:有些人对我的问题感到困惑,让我再详细一点。 发生的情况是,随着玩家进入一个门户,我创建了一个克隆的FPS控制器,然后将其移出了另一个。这给了我两个摄像头,以及您在右上方看到的视图。它只是显示一台摄像机,并剪辑门户。我想要的是与此类似的东西摄像机融合在一起,创造出平滑过渡的错觉。我想做的是删除所有绿色底纹图像中的所有内容,并将其替换为其他相机。这样一来,您可以获得摄像机A的视图从门户中移出的峰值,并与摄像机B的视图在另一个门户中移出的峰值相融合,以获得一个完整的图像。随着您在门户中的移动,切割也会相应地更改。 我一直在设计门户网站系统,但我的所有工作都陷入了困境,包括让玩家流畅地通过门户网站。我现在的主要问题是获得Valve的相机混合效果。我需要两个摄像头将它们无缝融合在一起,就好像您正在通过门户戳头一样。它不能只是一个矩形,它必须匹配,但是玩家正在通过门户进行查找。 我目前最好的方法是在每个门户后面投影一个深度蒙版着色器,然后将您正在旅行的门户中的相机制作成仅深度的。然后以某种方式混合两个摄像机。我的主要问题是弄清楚我该怎么做,如何使第二台摄像机仅渲染门户网站之外的内容,而其余默认设置为摄像机1来获得一个全屏投影。 如果您可以给我一些想法,或者解释一下如何使用深度蒙版着色器来实现这一点,那将是极大的帮助。我将继续努力,并在取得突破时进行更新。
18 c#  unity  camera  valve  portals 

4
如何围绕目标点旋转摄像机?
我正在绘制一个场景,其中摄影机可以在宇宙中自由移动。相机类跟踪视图(或注视)点,相机的位置以及向上矢量。然后将这些向量/点传递到gluLookAt。 平移和缩放几乎不容易实现。然而,我发现围绕转动一下点要多得多的问题。我想编写一个函数Camera.rotate,它具有2个角度,一个可以向上/向下旋转,另一个可以沿以视点为中心的假想球向左/向右旋转。 是否有捷径可寻? 我已经(简要地)阅读了有关四元数的信息,但是我想看看鉴于场景的构造相对简单,是否有更简单的解决方案。

2
如何将鼠标单击转换为射线?
我有一个透视投影。当用户单击屏幕时,我想计算从鼠标点投射的近平面和远平面之间的射线,因此我可以对自己的世界进行一些射线相交的代码。 我正在使用自己的矩阵以及矢量和射线类,它们均按预期工作。 但是,当我尝试将射线转换为世界坐标时,我的远端总是以0,0,0结尾,因此射线从鼠标单击转到对象空间的中心,而不是通过对象。(near和far的x和y坐标相同,只是z坐标互为负数而不同) GLint vp[4]; glGetIntegerv(GL_VIEWPORT,vp); matrix_t mv, p; glGetFloatv(GL_MODELVIEW_MATRIX,mv.f); glGetFloatv(GL_PROJECTION_MATRIX,p.f); const matrix_t inv = (mv*p).inverse(); const float unit_x = (2.0f*((float)(x-vp[0])/(vp[2]-vp[0])))-1.0f, unit_y = 1.0f-(2.0f*((float)(y-vp[1])/(vp[3]-vp[1]))); const vec_t near(vec_t(unit_x,unit_y,-1)*inv); const vec_t far(vec_t(unit_x,unit_y,1)*inv); ray = ray_t(near,far-near); 我怎么了?(如何解开鼠标点?)

2
XNA 2d相机滚动-为什么使用矩阵变换?
我正在制作一个测试游戏,希望关卡不断滚动。为了创建这种效果,我建立了一个摄像机类,该摄像机类仅存储vector2位置和枚举方向。它还包含一个公共的“移动”方法,该方法仅以固定的速率更改头寸。然后,当我在绘制时遍历我的瓷砖阵列时使用此位置。这一切都很好。 但是,有人告诉我应该使用Transform矩阵来移动相机,并且在启动spritebatch时应该提供此信息。我有点困惑a。)这是如何工作的?好像我只在spritebatch开始时给它一样,它怎么知道要保持位置变化?b。)为什么在遍历图块时仍然确定需要照相机的位置? 目前,我无法正常工作,但这并不奇怪,因为我还不完全了解它的工作原理。目前,在我的尝试(遵循的代码)中,正在绘制的图块发生了变化,这意味着相机的位置正在更改,但是视口的位置保持不变(即,在相机的原点)。对于要如何使用它,我将不胜感激。 相机: class Camera { // The position of the camera. public Vector2 Position { get { return mCameraPosition; } set { mCameraPosition = value; } } Vector2 mCameraPosition; public Vector2 Origin { get; set; } public float Zoom { get; set; } public float Rotation { get; …


3
什么是“模拟操作员”过场摄像机运动?
我有一些问题与很多游戏过场动画中摄像机的不平滑运动有关,这些运动似乎试图模拟操作人员握持摄像机时的紧张情绪。这与一般游戏中发生某些事件(例如爆炸)时的相机抖动相反,尽管它们也确实发生在我所谈论的过场动画中。 在很多游戏中都有这种效果的例子,但是我所看到的最好的例子是我尝试描述的是《合金装备5:地面零点》的开场动画(以及许多过场动画)。确保选择60 FPS以使效果更清晰。 这种“模拟的人工操作”效果是否有名称,您知道如何实现吗? 我的猜测是,摄像头正在通过某种随机偏差函数在两个轴上偏移,该函数总是向着原点稍微弹性地移动,以阻止其疯狂游荡。也许布朗运动?

6
创建无缝循环的2D多人游戏关卡?
最近出现了有关如何创建可以进行循环关卡设计的2D横向滚动多人游戏的讨论(《星际思考》及其世界如何循环)。 我认为最简单的方法是制作一个带有触发区域的矩形地图,该区域可以将玩家从一侧转移到另一侧。但是,这种方法的明显问题是在地图边缘一次有多个玩家的情况。您不希望只是将玩家传送到彼此面前,而是需要一种在不让其他玩家消失的情况下运送玩家的方法。 为了补充这个想法并解决问题,我提出了以下建议:设置一个触发区域(图像中的红色正方形),玩家可以在其中看到“克隆区域”(绿色正方形)。在这个绿色方块中,来自触发区域另一侧的对象将被复制到其相应的克隆区域(可以通过A和B形状看到)。当玩家到达“克隆区域”的起始边缘时,他们将被传送到地图的另一侧。 在此示例中,玩家2会认为他们正在看玩家1,但是实际上他们会在看到他的克隆,反之亦然。 对于当前的问题,这似乎有些极端和复杂。我现在的问题是要知道此解决方案是否是解决该问题的好方法,还是有解决此问题的更简单方法?

5
最佳的前悬式公式是什么?
给定一个空间点,一个行进方向以及自开始以来的时间,什么是令人信服的,不晕车的模拟头球的公式?在以前的游戏中取得了什么成功?是否有任何关于哪种鲍勃诱发疾病的研究最少? 一个示例天真头鲍勃公式,应用于向上轴: http://www.wolframalpha.com/input/?i=abs%28sin%28x%29%29

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.