Questions tagged «screen»

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 

1
如何在屏幕边缘绘制一个箭头,使其指向屏幕外的对象?
我希望执行本主题中描述的操作: http://www.allegro.cc/forums/print-thread/283220 我尝试了这里提到的各种方法。 首先,我尝试使用Carrus85描述的方法: 只需取两个三角形斜边的比率即可(与另一个三角形无关),我建议将点1和点2作为计算的距离。这将为您提供从较大三角形到角落的三角形的长宽比百分比。然后,您只需将deltax乘以该值即可得到x坐标偏移,然后将deltay乘以该值即可得到y坐标偏移。 但是我找不到一种方法来计算对象离屏幕边缘的距离。 然后,我尝试使用23yrold3yrold建议的射线投射(以前从未做过): 从屏幕中心向屏幕外对象发射光线。计算射线在矩形上的相交位置。有你的座标。 我首先计算了由两点的x和y位置差异形成的三角形的斜边。我用它沿着那条线创建了一个单位向量。我遍历该向量,直到x坐标或y坐标不在屏幕上。然后,两个当前的x和y值形成箭头的x和y。 这是我的光线投射方法的代码(用C ++和Allegro 5编写) void renderArrows(Object* i) { float x1 = i->getX() + (i->getWidth() / 2); float y1 = i->getY() + (i->getHeight() / 2); float x2 = screenCentreX; float y2 = ScreenCentreY; float dx = x2 - x1; float dy = y2 …

3
使Android游戏适应不同的屏幕尺寸
我正在制作仅纵向屏幕方向的Android游戏。当我在手机上运行它时效果很好,但是当我在平板电脑上运行它时,即使屏幕尺寸更大,所有位图的大小都相同。有什么方法可以使位图即使在不同尺寸的屏幕上也保持相同的比例?
11 java  android  screen 

1
屏幕空间到世界空间
我正在编写一个2D游戏,其中我的游戏世界的x轴从左到右,y轴从上到下,z轴在屏幕外: 尽管我的游戏世界是自上而下的,但游戏的渲染却略有倾斜: 我正在研究从世界空间到屏幕空间的投影,反之亦然。我的前者工作如下: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); 该NegateY()扩展方法不正是它听起来像,因为XNA的Ÿ线延伸自下而上,而不是自上而下。上面的屏幕截图显示了所有工作。基本上,我在3D空间中有一堆点,然后在屏幕空间中进行渲染。我可以实时修改相机属性,并看到它动画到新位置。显然,我的实际游戏将使用精灵而不是点,并且摄影机的位置将被固定,但是我只是在尝试所有数学运算之前。 现在,我正在尝试以另一种方式转换。也就是说,给定上方屏幕空间中的x和y点,请确定世界空间中的相应点。因此,如果将光标指向绿色梯形的左下角,则希望获得世界空间读数(0,480)。该ž坐标无关。或者,当映射回世界空间时,z坐标将始终为零。本质上,我想实现此方法签名: public Vector2 ScreenPointToWorld(Vector2 point) 我已经尝试了几种方法来使它正常工作,但是没有运气。我最近的想法是,我需要调用Viewport.Unproject近两次不同/远ž值,计算得到的Ray,规范它,然后计算出的交点Ray有Plane,基本上代表了我的世界的地面。但是,我陷入了最后一步,不确定是否使事情变得过于复杂。 谁能为我指出如何实现这一目标的正确方向?
10 xna  c#  matrix  projection  screen 
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.