Questions tagged «camera»

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

6
创建自己的杀人凸轮
我计划为沙盒工具集创建自己的kill cam系统。但是,在考虑了kill cam本身的机制之后,我就迷失了。我正在尝试重现使命召唤游戏中常见的那些游戏,这些游戏从杀手的角度显示实际的杀戮场景。 我的想法: -当人们杀死别人时,我不能仅仅保留在记忆中,因为我不知道何时开始“录音过程”。我正在准确地确定某人何时“约”杀死某人。 -到目前为止,我唯一真正的想法是将装满的所有东西完整复制到侧面,以复制原始世界中的所有动作,但要延迟10秒。这样,所有的杀人摄像头将有10秒长,而人员摄影机将被移到杀手的第二世界。 我的问题: 已经有接受的方法可以做到这一点吗?有人对这样的事情有什么好主意吗?谢谢,如果可以!
15 camera 

2
为什么90°horz / 60°转换默认的FPS视野?
据我了解,垂直视场应调整为: fov = 2 * arctan(0.5*screenHeight / distanceEyeScreen); 也就是说,视野应与用户的距离和屏幕尺寸相匹配。 在许多FPS中,水平FoV的默认值为90°,而垂直FoV的默认值为60°(假设16:9)。一个示例是CryEngine。但是对于16:9 20“屏幕(可视区域的对角线,即约40 cm x 25 cm),此默认值将要求用户的眼睛距屏幕20 cm,以便获得正确的透视图。 因此,要么我在计算中犯了一个错误,要么一定是有理由为什么您故意选择了不足的FoV值。 默认FoV为90°horz / 60°vert的原因是什么?
14 3d  camera  perspective 

1
栅格上的正交单位转换不匹配(例如64像素转换不正确)
我正在寻找一些有关网格上单位翻译的小问题的见解。 更新并解决 我解决了自己的问题。有关详情,请参见下文。帖子的这一部分中的所有内容都证明是正确的。如果有的话,它可以作为下一个人的微型教程/示例/帮助。 设定 FBO,VAO,VBO 512x448窗口 64x64格 gl_Position = projection * world * position; projection由定义。ortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);这是一本教科书正交投影函数。 world 由摄像机在(0,0)的固定位置定义 position 由子画面的位置定义。 问题 在下面的屏幕截图(1:1缩放)中,网格间距为64x64,我在(64,64)处绘制了单位,但是该单位在错误的位置绘制了大约10px。我尝试过使用统一的窗口尺寸来防止像素大小出现任何失真,但是现在我在提供1:1像素到世界单位的投影时失去了正确的方式。无论如何,这里有一些有助于解决问题的快速图像。 我决定在什么引擎认为是64个偏移超级强加一堆精灵。 当这似乎过的地方,我去约,做了1个单位的基本情况。似乎按预期排列。黄色显示移动差异为1px。 我想要的是 理想情况下,在任何方向上移动64个单位将输出以下内容(叠加的单位): 顶点 看来进入顶点着色器的顶点是正确的。例如,参考第一个图像,数据在VBO中如下所示: x y x y ---------------------------- tl | 0.0 24.0 64.0 24.0 bl | 0.0 0.0 -> 64.0 0.0 tr | …

3
如何实现基于四元数的相机?
更新这里的错误是一个非常简单的错误。我错过了弧度到度的转换。如果您还有其他问题,则无需阅读全文。 我看了几本关于此的教程,当我以为自己理解时,便尝试实现基于四元数的相机。问题是,旋转大约10分钟后,它无法正常工作。10度会跳回-10度。我不知道怎么了 我正在使用openTK,它已经有一个四元数类。我是opengl的菜鸟,我只是出于娱乐目的而做,并不真正了解四元数,所以我可能在这里做一些愚蠢的事情。这是一些代码:(实际上,除了加载和绘制vbo的方法外,几乎所有代码(它取自于演示vbo-s的OpenTK示例)) 我将多维数据集加载到vbo中并初始化相机的四元数 protected override void OnLoad(EventArgs e) { base.OnLoad(e); cameraPos = new Vector3(0, 0, 7); cameraRot = Quaternion.FromAxisAngle(new Vector3(0,0,-1), 0); GL.ClearColor(System.Drawing.Color.MidnightBlue); GL.Enable(EnableCap.DepthTest); vbo = LoadVBO(CubeVertices, CubeElements); } 我在这里加载透视投影。每次我调整窗口大小时,它都会在开始时加载。 protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(0, 0, Width, Height); float aspect_ratio = Width / (float)Height; Matrix4 perpective = …

4
为什么OpenGL中的剪辑空间具有4个尺寸?
我将其用作一般参考,但是我浏览在线文档和书籍的次数越多,对此的理解就越少。 const float vertexPositions[] = { 0.75f, 0.75f, 0.0f, 1.0f, 0.75f, -0.75f, 0.0f, 1.0f, -0.75f, -0.75f, 0.0f, 1.0f, }; 在这本在线书中,有一个示例,说明如何为OpenGL绘制第一个经典的hello世界,即制作三角形。 三角形的顶点结构按照上面的代码声明。 与其他所有相关资料一样,这本书强调了“剪辑空间”是一种4D结构,该结构用于基本确定将要栅格化并渲染到屏幕的内容。 这是我的问题: 我无法想象4D的东西,我不认为人类可以做到这一点,此Clip空间的4D是什么? 我读过的最易读的文档是关于相机的,这只是对剪切概念的抽象,我明白了,问题是,为什么不首先使用相机的概念呢?熟悉的3D结构?带有摄像头的概念,唯一的问题是,你需要定义其他方式准,所以你基本上要添加什么其他的语句样的相机,你希望有。 我应该怎么读0.75f, 0.75f, 0.0f, 1.0f呢?我得到的只是它们都是浮点值,我得到前三个值的含义,这意味着最后一个是什么?

2
如何使用Input.GetAxis(“ Mouse X / Y”)旋转相机?
我想制作一个随鼠标旋转的第一人称相机。 我查看了Input.GetAxis Scripting API页面,并找到了示例代码,该代码已包含在文章的底部。试用后,我意识到,尽管它具有与希望的基本功能相同的功能,但它并不能使相机与xz平面平行,尤其是在圈动鼠标时。片刻之后,相机将处于一个奇怪的角度,并且播放器将完全被破坏! 是否有此代码的快速修复程序会以某种方式限制相机的移动,或者是否有更好的旋转相机的方法? using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public float horizontalSpeed = 2.0F; public float verticalSpeed = 2.0F; void Update() { float h = horizontalSpeed * Input.GetAxis("Mouse X"); float v = verticalSpeed * Input.GetAxis("Mouse Y"); transform.Rotate(v, h, 0); } }
13 unity  camera 

1
如何创建多个2D聚光灯?
我正在寻找创建2D“聚光灯”效果,以允许在多个实体上聚光灯。即,好像几个精灵在握火炬。对于单个实体(一个聚光灯),我使用一种技术,其中叠加了渐变精灵,并使中心点追逐该实体。该技术对于单个聚光灯效果很好。这是一个截图,以说明我在说什么: 单一焦点-作品 我遇到的问题是该技术无法扩展到多个实体。如果叠加另一个聚光灯图像,则会遇到几个问题。这是一个模拟的屏幕截图: 多个聚光灯=问题 最明显的问题是可见的角。可以通过使聚光灯图像巨大地覆盖整个级别来解决此问题,但这并不正确。第二个也是更棘手的问题是,我正在用这种技术有效地增加黑暗度。因此,添加的每个精灵都会使其他所有人变暗。显然我正在错误地解决此问题。 有任何想法吗? 不断的努力 评论中已经有一些关于混合选项的讨论。这是我目前的想法。在上面的单个Spotlight示例中,我使用了一个看起来像这样的图像文件:(为了更易于说明,我将透明色替换为绿色) 如上所述,问题在于该图像与另一图像的Alpha混合不会产生所需的效果。相反,它将产生以下内容: 作为混合选项问题,这并不令我震惊。在我看来,问题在于这种图像具有透明遮罩和应隔离的图像(黑色正方形)。 因此,我应该使用在运行时针对黑色正方形使用的透明蒙版,而不是内置了切出的透明蒙版的黑色图像。这样做时,我仍然无法使用传统的白色和黑色透明蒙版,否则会遇到相同的问题。这是一个示例,这次白色和黑色代表白色和黑色: 看来,解决方案将是应用本身利用透明度的透明蒙版。像这样:(绿色=透明) 这样,可以将多个透明蒙版混合在一起,然后将其用作黑色正方形的透明蒙版。这是两个Alpha混合在一起的透明蒙版的示例: 无论如何,这就是我正在努力实现的方法。如果可行,我将发布结果。我目前不知道的是我是否可以使用本身具有透明度的透明蒙版。
12 2d  sprites  camera  lighting 

3
我应该如何安装第一人称相机?
我是一名初学者程序员,正在创建一个项目,该项目使我可以通过第一人称相机在房间中走动。到目前为止,我已经绘制了建筑物并继续进行,但现在我受困了,不知道如何制作第一人称视角的相机让我走来走去。 谁能指出我可以使用的相机类别或一些有用的代码?
12 c++  directx  camera 

5
游戏中的相机控制技术
我是计算机科学领域的MPhil学生,致力于处理图形中的相机控制问题。尽管摄像机控制的文献可以追溯到1980年代末,但大多数(据我所知)主要是学术性的,很少在游戏中使用。 现在,我的论文的一部分应该致力于游戏中使用的相机控制方法。但是问题是我还没有实现世界上所有的游戏,所以我无法谈论它们。但我想游戏开发人员通常会使用一些参考。 有人可以帮我吗?即使是根据您自己的经验而不是书本。
11 camera  control 

2
将第三人称相机旋转到目标
我有一台第三人称相机,它不直接看玩家,而是在他面前的某个地方。 当用户进入拍摄模式时,我希望相机转向播放器以面对目标。 在上图中。“ O”是玩家(来源),“ L”是角色,“ C”是摄像机位置,“ T”是目标。我想旋转后视线C-> L,以使其绕原点(“ O”)经过T(C'-> L'-> T')。 基本上,我需要找到在图片中以红色显示的角度alpha。 我将相机位置存储在这样的结构中: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } 因此,如果可以找到所需的角度,则可以执行以下操作: cam->absoluteRotation = cam->absoluteRotation * alpha; 为了让玩家始终注视目标。 如果look望通过原点,我可以简单地做 Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion …

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

4
LibGDX使相机保持在TiledMap的范围内
我有一个简单的TiledMap,可以很好地渲染它。我有一个玩家在跳来跳去(使用Box2D),而我的相机跟随着该玩家: cam.position.set( player.position().x * Game.PPM + Game.V_WIDTH / 4, player.position().y * Game.PPM, 0 ); cam.update(); 但是,摄像机将“移出” TiledMap。如何将相机保持在TiledMap上,所以当我靠近地图边缘时,相机停止滚动,并且播放器移向相机边缘?

1
3D相机旋转
拜托,请原谅我,但我需要帮助,而我在这个问题上已经停留了几个星期,我没有取得任何进展,无论我走到哪里,我都会看到一个不同的答案,我尝试的所有方法都无法正常工作。我已经有了足够的技巧和建议,现在我真的只需要一个人给我答案,我就可以从此倒退,因为我不明白这一点。 使该主题最令人困惑的是每个人使用一组不同的约定或规则的方式,他们的答案基于他们自己的约定而没有定义它们的含义。 因此,这是我根据似乎最常见和合乎逻辑的内容形成的一组约定: 轴的右手法则。 正Y向上,正Z朝向观看者,正X朝向右侧。 行主矩阵,发送到着色器时转置。 螺距:绕X轴旋转 偏航:绕y轴旋转 滚动:绕z轴旋转 轮换顺序:横摇,俯仰,偏航(这是正确的吗?有人可以对此进行检查吗?) 从轴的正端向下看,正旋转值会导致顺时针旋转。 沿所有轴旋转0的默认方向是向下指向负Y的向量。 ..鉴于这些约定(如果它们约定不对,请务必纠正我!),如何做: 写一个LookAt函数?(lookAt(矢量位置,矢量眼焦点,矢量向上)) 计算旋转矩阵。(旋转(x,y,z)) 至少在过去的3周内,我尝试自己回答了这两个问题,我至少重写了LookAt&Rotation Matrix函数30次,测试了数十种方法,并通读了我所见过的材料。数百个网站,阅读了许多回答的问题,复制了别人的代码,到目前为止,我所做的一切都没有奏效,所有事情都产生了错误的结果。其中一些产生了一些非常怪异的输出,甚至没有接近正确的旋转。 除昨晚外,我每天晚上都在为此工作,因为我对反复的失败感到非常沮丧,不得不停下来休息一下。 拜托,请告诉我正确的方法是什么,以便我可以逆向工作并弄清楚它是如何工作的,我只是没有得到正确的答案,这使我有些疯狂! 我正在用Java编写,但是我会接受用任何语言编写的代码,我的大多数3D渲染代码实际上都运行得非常出色,这只是我无法理解的数学。 更新:已解决 感谢您的帮助!现在,我有了一个我真正理解的可以正常工作的LookAt函数,而且我再也高兴不起来了(如果有人想问一下,请问)。 我确实曾尝试过根据俯仰/偏航/侧倾变量创建旋转矩阵,但它似乎还是失败了,但是我决定放弃尝试将euler角用于freelook相机,因为它似乎不适合用于角色,而不是我要创建一个四元数类,沿着这条路径走运可能会更好,否则,我将诉诸于使用螺距/偏航作为球面坐标,并依靠新的工作LookAt函数进行旋转。 如果还有其他人遇到类似的问题并想问我问题,请随时。 至少我不会再受困了,谢谢您的帮助!

1
如何从第二个游戏中的摄像机录制,然后将其导出到视频文件?
我正在Unity中制作PC恐怖游戏,我想在游戏中进行摄像机录制模拟-这样您就可以随时离开一个令人毛骨悚然的位置,并且在浏览时您会得到一盘录像带。 从技术上讲,我需要在角色的手上安装第二个摄像头(手持摄像头),然后让玩家通过按下按钮浏览取景器。但是无论在任何位置,手持摄像机都必须记录该点聚焦的所有内容-地板,楼梯,垃圾等,无论是将其放低还是抬高以符合玩家的视线。 游戏结束时(玩家离开或死亡),我想选择一个选项,将录制的磁带保存到视频文件中(如果不可能,则保存到一些保存文件中)。 如何在游戏中实现这种功能?是否有一些特殊的Unity技巧,附加组件和附加模块?使用主动触发器保存装饰和场景,还是仅从屏幕上抓取视频? 以下是我的意思的快速MSPaint概念:
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.