Questions tagged «mathematics»

数学问题涉及游戏开发中使用的算术,几何,微积分,公式和其他计算。


2
如何围绕3D中的任意点(而不是原点)旋转?
我有一些模型,我希望使用四元数以正常方式旋转,除了希望绕原点旋转以外,我希望它稍微偏移一些。我知道您并不是说在3D空间中绕点旋转。你说你绕轴旋转。因此,我将其可视化为围绕尾部不在本地原点的向量旋转。 我的渲染/物理引擎中的所有仿射变换都使用SQT(比例尺,四元数,平移;从Game Engine Architecture一书中借来的一个想法)存储。因此,我从这些组件中构建每个帧的矩阵,并将其传递给顶点着色器。在此系统中,先平移,然后缩放,然后旋转。 在一种特定情况下,我需要在世界空间中平移对象,对其进行缩放并围绕不以该对象的本地原点为中心的顶点旋转它。 问题:考虑到上述当前系统的限制,如何实现围绕原点以外的点进行局部旋转?自动支持任何可以仅使用矩阵描述如何执行此操作的人:)

3
在2D空间游戏中伪造等距图形
首先,我确切地知道我的绘图问题是什么,并且对于如何解决该问题我有各种想法。我在这里要弄清楚如何调整绘制的帧,以便保持等距的“幻觉”。 我正在编写在太空中进行的2D鸟瞰游戏。我试图在Up是北方的世界中使用等轴测图形,而游戏世界不会像传统的等轴测游戏那样旋转(请记住,游戏是在太空中进行的,没有地形)。这是我尝试使用的一个示例精灵:http : //cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64.png围绕其自身的垂直轴旋转了64次,视角为35度(又名iso)。图像已生成,因此可以更改。 为了清楚起见,我已指定北(上)为0度,东(右)为90度。 我的问题是,由于所使用的3D平面存在差异,我的精灵并不总是看起来像面对游戏一样。不知道我是否正确使用了术语,但是我的飞船是在一个平面上旋转的,而查看平面期望事物在其自身的平面上旋转。这是问题的描述: http://cell.stat-life.com/images/stories/AsteroidOutpost/ProjectionIssue.png 左边是侧视图,右边是自顶向下的视图。在顶部,我可以看到太空飞船/精灵表的世界。在底部,我具有将精灵绘制到屏幕上时的外观。 右上角是我的飞船如何旋转的简化版本(每帧之间的角度间隔均匀)。右下角是在屏幕上绘制特定角度时,精灵看起来像面对的角度。该问题在45度左右最为明显。这是一张覆盖有“屏幕平面”线的图像,该线指向该船应该面对的方向:http : //cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64RedLine.png红线应始终指向与船完全相同的方向,但是如您所见,投影问题正在引起问题。我希望我已经很好地描述了这个问题。 编辑: 红线在屏幕平面上旋转,而太空飞船在“船平面”上旋转,因此绘制时船角和屏幕角度之间存在较大差异。 结束编辑 当这艘船向应该向前方射击的一侧偏离目标的位置发射激光束时,看起来很奇怪。 所以...我想出的解决方案是: 停止尝试伪造等轴测图,变大或回家。已经旋转了我的世界。(PS:这可以解决我的问题,对吗?) 更改我的Sprite表(以某种方式),使其具有表示模型将被查看的“屏幕角度”的框架。因此,当我要求提供45度的图像时,它实际上看起来像是在屏幕上面对45度。 更改我的Sprite渲染系统以从Sprite工作表中抓取一个不同的帧(以某种方式),因为知道抓取“正常”帧看起来会很有趣。因此,与其抓取45度的框架,不如抓取33度的框架(只是猜测),使它对用户而言看起来是正确的。 只需使用3D!真是太容易了 例如:您会推荐哪种解决方案?我倾向于2,即使我知道这是错误的。请记住,我有权使用Sprite生成工具。方法3是我的第二选择。这两种方法都只需要我对角度应用一些数学运算即可得到所需的结果。顺便说一句,我在其中添加了#4作为玩笑,我不想转向3D。 对于两个:使用方法2或方法3,如何调整输入或输出角度?我对3D投影和3D矩阵(更不用说2D矩阵)以及任何其他数学方法可以达到我想要的结果都不太满意。 在这里大声思考:如果我将一个单位矢量面向我要看的船的方向(在屏幕平面上),然后将其投影到船平面上,然后找出那条投影线与飞机平面之间的夹角北方是,我应该具有要显示的船舶图形的角度。对?(#3的解决方案?)伙计...我无法解决。 编辑: 我知道这个问题是很难用静态图像可视化,所以我遵守我的雪碧库Visual测试仪显示的问题:http://cell.stat-life.com/downloads/SpriteLibVisualTest.zip它需要XNA 4.0此应用程序只需旋转精灵,然后从其中心向外以游戏认为船应面对的角度画一条线。 编辑9月8日 继续我的“大声思考”段落:我认为我可以采用朝北的单位矢量(0x,1y,0z),而不是使用投影(因为它看起来很难),而是使用矩阵将其旋转到角度精灵实际上是面向的,然后围绕X轴再次从“查看平面”向外旋转到“精灵平面”,然后……变平?仅使用X和Y(忽略Z),向量(基本上是将其投影)回到视平面上。然后,使用新的扁平化矢量,我可以确定其角度并将其用于...某物。我待会再考虑。 编辑9月8日(2) 我尝试从上面遵循我的想法,并取得了一些成功,是的!所以...为了使一条红线看起来像是从我的飞船中出来(仅出于测试目的),我做了以下工作: Vector3 vect = new Vector3(0, 1, 0); vect = Vector3.Transform(vect, Matrix.CreateRotationZ(rotation)); vect = Vector3.Transform(vect, Matrix.CreateRotationY((float)((Math.PI / 2) - MathHelper.ToRadians(AngleFromHorizon)))); Vector2 …

6
规范视图体积的目的是什么?
我目前正在学习OpenGL,但无法找到该问题的答案。 在将投影矩阵应用于视图空间之后,将视图空间“规格化”,以使所有点都位于[-1,1]范围内。通常将其称为“规范视图体积”或“标准化设备坐标”。 虽然我找到了很多资源,告诉我这是如何发生的,我还没有看到任何东西,为什么它发生。 此步骤的目的是什么?

4
如何计算由反弹摩擦引起的旋转?
接下来是我的上一个问题:我很实际地将球从击中的表面弹起。现在我想使它从打击的摩擦中旋转。 演示起来很简单:我在每个刻度上以球的角速度旋转球,并在渲染时应用相同的旋转。 当球撞到墙壁时,我知道旋转速度受... 击球时球的初始速度 球与表面的摩擦系数(物理常数) 的入射角(球的进向速度矢量与表面法线之间的角度)。 入射角由球的撞击速度和出口速度向量的点积近似得出。(1表示高自旋,-1表示无自旋,其他所有相对而言) 将以上所有内容相乘,并确保将它们转换为0-1,然后乘以最大旋转速度,球似乎在旋转速度方面达到了预期。除了一件事:它总是沿顺时针方向旋转(因为正值)。 这是个好方法吗?您能想到一个更简单的方法吗? 如果此方法看起来不错,我会缺少什么?我怎么知道什么时候球应该逆时针旋转?

1
我如何知道我的敌人是否可以看到我的玩家?
给定一个玩家和一个敌人的位置,并给定每个角色的方向向量,我如何确定一个人是否可以“看见”另一个人? 换句话说,如何测试某个方向的位置在另一个方向的前面还是后面? 出于我的目的,“在...前面”是指直接在任何一个角度之前或与之成90度。
15 mathematics  ai  vector 

3
准确地模拟许多没有循环的骰子卷?
好的,所以如果您的游戏掷出大量骰子,您可以循环调用一个随机数生成器。但是对于任何一组频繁滚动的骰子,您都会获得分布曲线/直方图。所以我的问题是我可以运行一个简单的简单计算来得出适合该分布的数字吗? 例如2D6-得分-概率百分比 2-2.77% 3-5.55% 4-8.33% 5-11.11% 6-13.88% 7-16.66% 8-13.88% 9-11.11% 10-8.33% 11-5.55% 12-2.77% 因此,了解上述内容后,您可以滚动一个d100并计算出准确的2D6值。但是一旦我们从10D6、50D6、100D6、1000D6开始,这可以节省很多处理时间。因此,必须有一个可以快速完成此任务的教程/方法/算法?对于股票市场,赌场,战略游戏,矮人堡垒等来说,它可能很方便。如果您可以模拟完整的战略战斗的结果,而这需要花费几个小时才能打通,但只需几次调用此功能和一些基本数学运算,该怎么办?

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
在圆上给定点的情况下获取以弧度为单位的角度
我正在做一个绕圆盘旋转的表盘。 使用此转盘,您可以将鼠标移到圆的任何位置,以将转盘的位置调整到圆上与单击角度相同的一点。例如,如果您单击上方的转盘,请单击下面粉红色所示的位置,则将转盘移至该点的上方但在圆圈上。 我知道如何在给定的半径和角度(以弧度为单位)的情况下获得圆上点的位置。那就是这个公式: x = Cos(angle) * radius + CenterX; y = Sin(angle) * radius + CenterY; 但是,我正在做相反的事情-我有一个点击点,我想将它变成圆上的一个点(控制旋钮所在的位置)。我正在尝试使用此点(和给定的半径)来计算以弧度为单位的角度,以便可以将控制旋钮以相同的角度放置在圆上。 我可以使用方便的公式来完成此操作吗?

6
SIMD C ++库[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 2年前关闭。 过去,我将Visual Studio与DirectX XNA数学库一起使用。现在,我正在使用GNU编译器集合。任何人都可以通过良好的文档建议SIMD数学库?
14 c++  mathematics  simd 

6
3D图形编程的数学主题
已关闭。这个问题需要更加集中。它当前不接受答案。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我了解3D图形编程需要以下数学主题。我已经在我的数学课程中开始其中一些学习。有人可以指出我的资源方向来解释它们如何应用吗?他们用来解决什么图形/游戏问题? 向量数学 矩阵数学 四元数 线性代数 据我所知,这些都是线性代数/矩阵主题。还需要其他主题吗?


5
要在OpenGL ES 2.0游戏中使用的完整数学库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 您是否知道用于OpenGL ES 2.0游戏的完整(或几乎完整)的跨平台数学库? 该库应包含: Matrix2x2,Matrix 3x3,Matrix4x4类 四元数 Vector2,Vector3,Vector4类 欧拉角类 上述类,转换等之间的操作。 3D图形中的标准数学运算(点积,叉积,SLERP等) 是否可以单独或作为任何软件包的一部分使用这样的Math API ? 编程语言:Visual C ++,但计划移植到OS X和Android OS。


1
如何在体素地形中实现应力/应变力学?
我正在开发一个类似于Minecraft的世界,该世界将地形划分为体素。但是,我也希望景观的不稳定配置可以预期地崩溃。例如,悬垂太重的物体会在“高应力”体素处断裂并折断,而具有不对称腐蚀基础的柱体也会破裂。我正在考虑向地形中的每个体素添加一个“应力矢量”字段,并执行以下操作(伪代码): foreach voxel in terrain foreach neighbor in voxel.neighbor_voxels() if magnitude(voxel.stress - neighbor.stress) > stressThreshold detach_voxels(voxel, neighbor) 但是问题是我不知道如何计算这些单独的压力。是否存在某种专门用于体素离散化的基于FEA的算法,可以用来计算每个体素的压力?还是我将这一切都弄错了,还有其他方法可以做到这一点?

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.