Questions tagged «coordinates»

实体在游戏空间中位置的数字表示。坐标系统有多种形式,可满足多种绘制位置地图的方法。


4
如何处理2D屏幕坐标和笛卡尔坐标之间的差异
大多数2D屏幕/位图坐标系的Y轴正下方(原点位于左上角)。 这与大多数人以正的Y轴指向上方(原点为中心)的几何方式思考相反。 大多数游戏如何管理两个不同的2D坐标系?坐标有两种主要类型(屏幕与笛卡尔坐标),但可能有许多不同的坐标空间:精灵空间,世界空间,视图空间,屏幕空间等。 背景: 我最初使游戏中的世界坐标与2D屏幕坐标约定相匹配。这使得使用图形绘制例程非常自然,但是在使用三角函数(如atan2())时会出现一些细微问题。馈入atan2()2D屏幕坐标的结果非常令人困惑,因为atan2()假定正y轴指向上。 因此,我更改了世界坐标,以遵循经典的笛卡尔坐标系(原点位于屏幕左下方)。使用atan2()进行推理更加简单明了,但是现在很难进行其他类型的推理: 如果我单击此处的屏幕,下面是什么精灵? 我在哪里点击了那个精灵? 如果在错误的位置绘制了子图形,则错误地计算了什么?屏幕坐标还是世界坐标? 我意识到从屏幕坐标到直角坐标的转换只涉及将y值按-1缩放,同时可选地转换两个(x,y)值。我对游戏设计的最佳做法更感兴趣: 大多数游戏是否只​​遵循屏幕坐标约定并改变了他们对atan2()之类的东西的看法? 何时/如何完成坐标系转换?(使用矩阵,OOP抽象等) 子画面位置是否存储为子画面的中心或拐角之一?当我绘制精灵时,精灵的高度/宽度朝“错误”方向移动似乎是一个常见问题。 尽管我的问题主要是关于2D游戏,但OpenGL似乎使用了Y轴指向上方的坐标系。OpenGL必须最终将这些3D坐标投影到2D屏幕坐标系上。也许可以在OpenGL的方法中找到一些指导...
23 2d  screen  coordinates 

3
向量有什么不同/复杂/有用?
如果这不是一个真正的问题,请原谅我,但我确实对此感到困惑。 我经常听到其他游戏开发人员谈论使用向量如何非常有用,但是每个人都被向量数学所吓倒,向量似乎令人生畏。我从来没有去了解他们。 所以,最后我在Wikipedia 上看了Vector,感到很惊讶。除非我弄错了,否则一个矢量(为简单起见,它是2D)只是x和y坐标。 如果我误解了,请纠正我。 所以这是我的问题:这是否意味着二维(或三维)坐标的任何表示都是矢量?如果是这样,则向量和坐标是同一件事。而且,不使用坐标就几乎不可能创建游戏,那么向量对进行过大量游戏编程的人来说是令人困惑的还是陌生的? 我可以对此进行澄清。任何帮助表示赞赏。


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 | …

5
如何从全局坐标空间转换为局部空间?
给定一个名为的实体EntityA,我想定义一个局部坐标空间,其中的位置EntityA是原点,其航向矢量是X轴,航向矢量的法线是Y轴: 给定它们的全局坐标,我如何找到另一个实体在EntityA本地空间中的位置? 例如:EntityA的全局位置是(50,50),而的全局位置EntityB是(80,90)。那么EntityB在EntityA的本地空间中的位置是什么? 编辑:请轻松进行数学运算。

4
等距交错地图:计算屏幕上点的地图坐标
我知道已经有很多相关资源,但是我还没有找到与我的坐标系相匹配的资源,因此在调整这些解决方案以满足我的需求时遇到了很大的麻烦。我了解到,做到这一点的最佳方法是使用转换矩阵。实现这没问题,但是我不知道我必须以哪种方式变换坐标空间。 这是显示我的坐标系的图像: 如何将屏幕上的点转换为此坐标系?


4
如何在两个不同的2D坐标系之间转换?
我正在尝试将一个坐标系从一个坐标系转换为另一个坐标系,以便可以在图像上绘制它。 基本上,目标坐标系如下: X range: 0 to 1066 Y range: 0 to 1600 (仅是我要绘制的标准图像,尺寸为1066 x 1600) 我尝试在图像上绘制的位置实际上具有完全相同的大小,但是坐标系不同。所有坐标的跨度为1066x1600。 但是一个坐标示例将是: (111.33f, 1408.41f) (-212.87f, 1225.16f) 该坐标系的范围是: X range: -533.333 to 533.333 Y range: 533.333 to 2133.333 我觉得这是一个非常简单的数学运算,但是由于某种原因我没有理解。 如何将提供的坐标转换为第一个坐标系?
10 2d  coordinates 

2
半条命2 BSP光照图
我正在为大学项目编写BSP查看器。到目前为止,我已经正确加载了主要几何图形,并且PVS正常工作。 现在,我正在尝试应用光照贴图,但似乎无法正确计算光照贴图的纹理坐标。 根据这里:http : //developer.valvesoftware.com/wiki/The_Source_Engine_BSP_File_Format struct texinfo_t { float textureVecs[2][4]; // [s/t][xyz offset] float lightmapVecs[2][4]; // [s/t][xyz offset] - length is in units of texels/area int flags; // miptex flags overrides int texdata; // Pointer to texture name, size, etc. } 浮点数的第一个数组本质上是两个向量,代表在世界几何体上渲染时纹理的定向和缩放比例。s和t这两个向量是纹理像素坐标空间中从左到右和从上到下的方向到世界的映射。每个向量都有一个x,y和z分量,以及一个偏移量,该偏移量是纹理在该方向上相对于世界的“偏移”。向量的长度表示每个方向上纹理的缩放比例。 通过以下方式将纹理像素(或纹理像素)的2D坐标(u,v)映射到面部上某点的世界坐标(x,y,z): u = tv0,0 * x + tv0,1 …

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 

3
射线追踪中的BRDF和球坐标
我开发了使用标准Phong / Blinn Phong照明模型的光线跟踪器。现在,我正在对其进行修改以支持基于物理的渲染,因此我正在实现各种BRDF模型。目前,我专注于Oren-Nayar和Torrance-Sparrow模型。这些中的每一个均基于用于表示入射光和出射光方向的球坐标。 我的问题是:正确的方法是将wi和wo从笛卡尔坐标转换为球坐标? 我正在应用此处报告的标准公式https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversions,但是我不确定自己做对了,因为我的向量的起点不是尾巴直角坐标系,但以射线与对象的交点为中心。 在这里您可以找到我当前的实现: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp 谁能帮我解释将wi和wo矢量从笛卡尔坐标转换为球坐标的正确方法吗? 更新 我在这里复制代码的相关部分: 球坐标计算 float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float phi = atan2f(z, x); return (phi < 0.f) ? phi + 2.f * M_PI : phi; } 奥伦·纳亚(Oren Nayar) …

2
世界界限-(0,大小)或(-HalfSize,HalfSize)?
创建在其中移动,绘制和碰撞对象的游戏空间时,最好将(0,0)点或(0,0,0)点放在空间的正中心,这样世界的界限是(-halfSize,halfSize),还是最好将它放在空间的最远角落,所以界限是(0,size)? 每种方案的利弊分别是什么?还是真的没关系吗? 看来这只是次要的细节,但我想看看是否存在我可能忽略的重大问题。

3
2D等距:屏幕到平铺坐标
我正在编写一个等距的2D游戏,并且很难准确地确定光标在哪个图块上。这是一张图: 其中xs和ys是屏幕坐标(像素),xt和yt是图块坐标,W和H分别是图块宽度和图块高度(以像素为单位)。我对坐标的表示法是(y,x),这可能会令人困惑,对此感到抱歉。 到目前为止,我能弄清楚的最好的是: int xtemp = xs / (W / 2); int ytemp = ys / (H / 2); int xt = (xs - ys) / 2; int yt = ytemp + xt; 这似乎几乎是正确的,但是给我一个非常不精确的结果,使得很难选择某些图块,或者有时它会在我尝试单击的图块旁边选择一个图块。我不明白为什么,我想知道是否有人可以帮助我理解其背后的逻辑。 谢谢!

3
在两点之间的线上获取点
我正在用JavaScript制作一个简单的太空游戏,但现在我遇到了有关向量的难题。 游戏视图在2d网格上自上而下。当用户单击网格时,太空飞船将飞到该地点。 因此,如果我有两点要点: { x : 100.2, y : 100.6 }; // the ship { x : 20.5, y : 55.95 }; // the clicked coordinates 如果游戏循环以每秒60次迭代的速度滴答作响,并且期望的飞船速度为每滴答0.05点(每秒3点),那么我如何为游戏循环的每个滴答计算新的飞船坐标集? ps:我不想考虑惯性或影响船的多个向量,我只想让船停下它正在做的任何事情(即以一种方式飞行)并以静态速度移动到单击的坐标。
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.