Articles of 比例

剪切/reflection/放大如何用4x4matrix表示?

我明白,4×4matrix可以表示一个3d点(表示为x,y,z,w) 例如,翻译是 [1 0 0 0] [0 1 0 0] [0 0 1 0] [xyz 1] 其中x,y和z是沿每个轴移动点的量。 我知道如何表示平移,缩放和旋转,但其他变换如剪切(具有任何不变平面和剪切因子),reflection(在任何平面中)和扩大(以任何中心和任何比例因子)表示? 最终目标是让c ++函数创建一个转换matrix。 例如: Matrix4x4.generateReflection(Vector3d planeNormal); Matrix4x4.generateEnlargment(float centerX, float centerY, float centerZ, float scaleFactor); 这些将返回一个Matrix4x4类的实例,其中设置的元素使得它乘以一个点返回剪切/reflection/放大的点。

libgdx – 缩小图像时的图像瑕疵

为什么当我缩小一个位图时,这个边界出现在边缘的周围,我该如何避免呢? 我试过每一个我知道的filter,结果越来越差。 这是原始的位图:

XNA放大/缩小模型而不是缩放模型

我试图在我的游戏中实现放大/缩小function。 我可以用Z和X键改变cameraDistance值。 而不是缩放,它看起来像模型缩小或变大(移近或远离相机)。 相机应该靠近或远离模型。 以下是我的观点和投影matrix。 cameraDistance是似乎“缩放”模型的值。 经过几天的混乱之后,我意识到(是的,过了几天!:)),我不应该改变这个值。 Matrix view = Matrix.CreateRotationY(MathHelper.ToRadians(cameraRotation)) * Matrix.CreateRotationX(MathHelper.ToRadians(cameraArc)) * Matrix.CreateTranslation(0, -45, 0) * Matrix.CreateLookAt(new Vector3(0, forwardRotation, -cameraDistance), new Vector3(0, 0, 0), Vector3.Up); Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1, 10000); 所以,而不是改变cameraDistance值,我想我应该改变我的CameraPositionOffset 。 以下是我的updateCamera方法 // This vector controls how much the camera's position is offset from the // sphere. This value can […]

如何旋转两个缩放对象

我有两个对象。 未来“揪心”的头尾。 头部和尾部始终指向相同的方向。 然而,当我尝试使用缩放矩形(比源矩形更大/更小)时,旋转不再起作用,因为绘制的头部不再“附着”到尾部。 (没有缩放它们,这工作得很好。) 红色的精灵没有任何旋转(下面的代码)。 其他人围绕他们各自的“较低”原点(底部中心)旋转(旋转= 0) 所以,非红色的小精灵应该是头尾相接(就像红色的小精灵一样)。 我已经摆弄了一段时间的代码…这是我认为你需要看到的帮助: Initialization() { Rectangle headSize = new Rectangle(0,0, 29, 100); Rectangle linkSize = new Rectangle(0,0, 29, 67); Rectangle tailSize = new Rectangle(0,0, 29, 53); Rectangle headSource = new Rectangle(0, 0, 29, 53); Rectangle linkSource = new Rectangle(0, 53, 29, 67); Rectangle tailSource = new Rectangle(0, 120, […]

在平台游戏中缩放背景而不缩放前景?

我目前正在开发一个平台游戏,我遇到了扩展解决scheme的问题。 我想要一个不同的游戏分辨率仍然显示前景未缩放(字符,瓷砖等),但我想要的背景缩放到适合窗口。 为了更好的解释这个,我的视口有4个variables:(x,y,width,height),其中x和y是左上角,width和height是尺寸。 这些可以是800×600,1024×768或1280×960。 当我devise我的关卡时,我devise了最高分辨率(1280×960)的所有内容,并希望游戏引擎在用户以较低分辨率运行时将其缩小。 我已经尝试了以下工作,但没有任何我想出来解决这个问题: scale = view->width/1280; drawX = x * scale; drawY = y * scale; (这使得翻译太小,分辨率低) 和 scale = view->width/1280; bgWidth = background->width*scale; bgHeight = background->height*scale; drawX = x + background->width/2 – bgWidth/2; drawY = y + background->height/2 – bgHeight/2; (这使得翻译在地图的边缘完全错误) 问题是,无论游戏运行的分辨率是多less,地图的大小都是一样的,而前景是未缩放的。 (使用较低的分辨率,您只能在视口中看到较less的前景) 我想知道如果有人有任何想法如何解决这个问题? 先谢谢你!

缩放世界 – 投影,查看还是分离matrix?

我目前正在编写一个简单的三维空间可视化程序。 事情从一个简单的XML文件加载到它,其中包含空间中的对象的位置和大小,所以你可以把基本上任何数字放入XML,它会告诉你在3D中的东西。 我的问题是,当我尝试查看例如一个太阳系,使用实际数字,因为他们真的是在太空中(例如地球月球距离= 3.844e8米),我的物体松散的forms和纹理从脸上分离由于有限的浮动位置精度。 我根本无法让用户自己来扩展场景,因为有10个星球左右,工作太多了,有时候计算起来有点复杂。 正因为如此,我决定添加一个选项,以便自动缩放整个场景。 我的问题很简单:如果我想要衡量世界/场景,我应该使用哪个matrix? 投影matrix,视图matrix,或一个全新的matrix(请不要这个,我用完了uniform s)? 谢谢。

将相机alignment到矩形

我正在使用Java开发一款游戏,并且在寻找正确的相机位置方面遇到了一些麻烦。 我已经制作了一个矩形,可以准确显示我想要的相机的位置, 但是,每当我真的尝试调整相机,使其适合矩形,我得到奇怪的结果。 当我到达一个不是1:1的点时,相机进入了奇怪的地方。 (蓝色矩形不应该在上面的GIF中可见,因为这是相机的边缘应该是)现在我有一个相机类,在那里我设置的位置: x=-((leftX+Math.abs(leftX-rightX)/2)-Main.WINDOW_WIDTH/2/scale); y=-((topY+Math.abs(topY-bottomY)/2)-Main.WINDOW_HEIGHT/2/scale); 其中leftX,rightX,topY和bottomY是矩形的最顶端,最右端,最顶端和最底端。 这两行代码就是问题所在。 我只需要根据比例来确定移动相机的位置。 对于翻译和缩放,我有这样的: g.translate(cam.getX(), cam.getY()); g.scale(cam.scale, cam.scale); //Render in-game objects g.translate(-cam.getX(), -cam.getY()); g.scale(1/cam.scale,1/cam.scale); 我问的是,我怎样才能移动相机,使其与矩形完美alignment? 我已经坚持了两天,我真的不知道该去哪里。 任何提示都将不胜感激! 🙂

在缩放unity3d时,将子元素放在父圆的边上

我遇到了一些不同的情况。 我有一个圆形精灵,我正在旋转不断旋转的同时旋转我想使圆圈越来越大。 我有一个对象在圆的边缘,我已经把这个对象作为圆的孩子。 现在我的问题是如何使这个孩子对象留在边缘,而我缩放圆形精灵。 这可能吗 ? 谢谢。

如何处理缩放? (碰撞检测和速度closures)

我正在做一个鸟瞰的2D游戏。 我想根据实体的速度放大/缩小(类似于GTA 1/2),但是我正在努力缩放。 要缩放,我只需按缩放比例缩放所有实体。 一个问题是命中testing是closures的(小实体仍在发生)。 另一个问题是对象的移动速度较慢(放大时移动的距离较小,缩小时移动的距离较大)。 唯一能解决的问题是缩放所有边界框(用于碰撞检测),并根据缩放因子调整速度。 但这似乎是浪费和复杂的(特别是因为我决定基于速度的缩放因子)。 有没有更好的办法?

最后matrix操作被忽略?

我有两个方法,一个旋转我的四合一和翻转它(使用scaleM),他们如下:(注意,这些方法中的所有值已被正确定义)。 如果我只打一个电话,他们按照预期工作,但是如果我打电话给他们,那么只有那个被称为“最后一个”的人应用 – 这是为什么呢? 如果我将它们结合到“翻转和旋转方法”上 – 那么我的四元组翻转和旋转。 (请参阅第三个代码段) 为什么是这样? 方法旋转 public void rotate(float x, float y, int angle){ //Rotate the quad Matrix.setIdentityM(mRotationMatrix, 0); Matrix.translateM(mRotationMatrix, 0, centreX, centreY, 0f); Matrix.rotateM(mRotationMatrix, 0, -angle, 0, 0, 0.1f); Matrix.translateM(mRotationMatrix, 0, -centreX, -centreY, 0f); } 方法“翻转”(水平) public void flipHorizontal(float x, float y){ Matrix.setIdentityM(mRotationMatrix, 0); Matrix.translateM(mRotationMatrix, 0, centreX, centreY, 0f); Matrix.scaleM(mRotationMatrix, […]