Questions tagged «matrix»

以行和列排列的数字,符号或表达式的2D数组。每行必须具有相同的列数。数字,符号或表达式本身称为元素或条目。

9
为什么我们移动世界而不是摄影机?
我听说在OpenGL游戏中,让玩家移动的方法不是移动相机,而是移动整个世界。 例如,这里是本教程的摘录:OpenGL视图矩阵 在现实生活中,您习惯于移动相机以更改特定场景的视图,而在OpenGL中则相反。OpenGL中的相机无法移动,并且被定义为面向负Z方向位于(0,0,0)。这意味着无需移动和旋转相机,而是围绕相机移动和旋转世界以构建适当的视图。 我们为什么要这样做?



1
变换矩阵乘法顺序
我在尝试找出最终变换矩阵的正确乘法顺序时遇到了困难。我总是会感到奇怪的动作或扭曲的几何形状。我当前的模型解释如下: 对于单个节点,我的乘法顺序是: L = S * R * T 哪里 L =局部变换矩阵 S =局部比例矩阵 R =局部旋转矩阵 T =本地翻译矩阵 对于节点的世界转换: 宽=宽*长 哪里 W =世界变换矩阵 PW =父世界转换矩阵 L =上面计算的局部变换矩阵 渲染时,我为每个节点计算矩阵: MV = Inv(C)*净重 哪里 MV =特定节点的模型视图转换矩阵 Inv(C)=逆相机变换矩阵 NW =上面计算的节点的世界转换矩阵。 最后,在着色器中,我进行了以下转换: TVP = PRP * MV * VP 哪里 TVP =最终变形的顶点位置 PRP =透视矩阵 …
21 matrix 

5
矩阵代表什么?
我最近开始学习OpenGL,但在可视化矩阵及其在计算机图形学中的作用时遇到了问题。给定这样的4x4矩阵模板: 我假设像这样的每个矩阵都是世界空间中顶点的坐标。然后将它们中的几个放在一起并加阴影给一个对象? 但是为什么会有a Xx,a Xy和an Xz?我读到它的轴是不同的(上,左,前),但仍然无法使意义变得有意义。
19 opengl  matrix 

6
如何围绕世界对齐的轴旋转对象?
我有一个Vector3,每个轴都有一个欧拉角。 通常,当我想创建旋转矩阵时,我将使用D3DXMatrixRotationX之类的函数从上方的旋转矢量传递相应的角度,然后将矩阵(ZXY)相乘以创建整体旋转矩阵,以用于形成完整的对象变换矩阵。 但是,此方法将在对象空间中产生一组旋转。也就是说,将向量(90,0,90)传递到我的方法中将在世界空间中有效地产生(90,90,0)的旋转。 有没有一种方法可以始终确保我的旋转矢量的每个分量导致围绕各自的世界空间对齐轴的旋转? 编辑: 这是当前情况的动画-我想要一种绕蓝色轴而不是红色轴旋转的方法。 编辑2: 只是要注意,我并不是在寻找涉及欧拉角的解决方案,而只是寻找一种可以表示围绕世界轴的多次旋转的变换的方法。

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

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


3
如何反转转换矩阵的效果?
我最近一直在通过GLFW使用OpenGL和C ++进行游戏。 在游戏中,我有一个飞艇,上面装有炮塔。飞艇在世界空间坐标中移动,而炮塔“跟随”它。 炮塔在外观/目标方向上拥有自己的坐标空间。基本上,当炮塔指向方向时(0,0,1),其瞄准方向平行于飞艇的运动方向。 为了给炮塔提供世界空间目标,我有一个矩阵,用于获取世界空间坐标并将其转换为炮塔空间坐标。 随着炮塔开火,我希望它在世界空间中生成弹丸,那么有没有一种使用我的转换矩阵将炮塔空间坐标转换回世界空间的优雅方法? 提出问题的更一般的方法可能是:如果我有一个矩阵M,它的坐标从空间A到空间B。有没有办法使用一种简单的方法M来从获得的坐标B来A?

2
为什么我们需要第四个坐标除以z?
我在这里阅读回复: 图形卡将向量的第四个元素作为最终位置怎么办? “第四个组件是跟踪透视投影的技巧。进行透视投影时,您希望除以z:x'= x / z,y'= y / z,但这并不是可以通过对x,y,z的向量进行运算的3x3矩阵来实现。为此,标准的技巧是添加第四个坐标w,并声明x,y,z总是除以w在应用了所有转换之后以及在栅格化之前。” 但是我不明白为什么我们不能使用3x3矩阵除以z? 我们不能乘以 1/z 0 0 0 1/z 0 0 0 1/z 要得到 [x/z y/z 1] ?

3
绕固定轴旋转对象
我试图让我的应用程序用户通过在屏幕上拖动手指来旋转在屏幕中央绘制的3D对象。屏幕上的水平移动表示绕固定的Y轴旋转,而垂直移动表示绕X轴旋转。我遇到的问题是,如果我只允许绕一个轴旋转,则对象旋转良好,但是一旦引入第二个旋转,该对象就不会按预期旋转。 这是正在发生的情况的图片: 蓝色轴代表我的固定轴。画出具有此固定蓝色轴的屏幕。这就是我要相对于对象旋转的对象。发生的是红色。 这是我所知道的: 围绕Y(0,1,0)的第一次旋转使模型从蓝色空间(称为空间A)移至另一个空间(称为空间B)。 尝试再次使用向量(1、0、0)旋转时,空间B中的x轴会旋转,而不是空间A中的x轴旋转,这不是我的意思。 考虑到我(想)知道的内容(为简洁起见,省略了W坐标),这是我尝试的操作: 首先使用四元数绕Y(0,1,0)旋转。 将旋转Y四元数转换为矩阵。 将Y旋转矩阵乘以我的固定轴x矢量(1、0、0),以获得相对于新空间的X轴。 使用四元数围绕这个新的X向量旋转。 这是代码: private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space float[] …

3
2.5D游戏相机
我希望有人能像我5岁时向我解释这个问题,因为我一直在努力奋斗了几个小时,根本无法理解我在做什么错。 我Camera为我的2.5D游戏写了一个课程。目的是支持这样的世界和屏幕空间: 相机在右边是黑色的东西。该图像中+ Z轴朝上,-Z朝下。如您所见,世界空间和屏幕空间的左上角都有(0,0)。 我开始编写一些单元测试,以证明我的相机可以正常工作,而这正是事情开始变得奇怪的地方。我的测试在世界,视图和屏幕空间中绘制坐标。最终,我将使用图像比较来断言它们是正确的,但是现在我的测试仅显示结果。 渲染逻辑用于Camera.ViewMatrix将世界空间转换为视图空间,并将Camera.WorldPointToScreen世界空间转换为屏幕空间。 这是一个示例测试: [Fact] public void foo() { var camera = new Camera(new Viewport(0, 0, 250, 100)); DrawingVisual worldRender; DrawingVisual viewRender; DrawingVisual screenRender; this.Render(camera, out worldRender, out viewRender, out screenRender, new Vector3(30, 0, 0), new Vector3(30, 40, 0)); this.ShowRenders(camera, worldRender, viewRender, screenRender); } 这是我运行此测试时弹出的内容: 尽管我怀疑z轴正在进入屏幕而不是朝向查看器,但世界空间看起来还不错。 视图空间让我完全困惑。我期望摄影机位于(0,0)上方并朝场景中心看。相反,z轴似乎绕错了方向,并且相机位于我期望的相反角上! …
12 xna  matrix  projection 

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

5
有人可以解释乘法/级联中colum vs row major的(原因)吗?
由于我对矩阵的两个标准感到困惑,因此我试图学习如何构造视图和投影矩阵,并在实现过程中遇到困难。 我知道如何乘法矩阵,并且可以看到乘法之前的转置会完全改变结果,因此需要以不同的顺序进行乘法。 我不明白的是什么仅是“符号约定” -从这里和这里的文章看来,作者断言这对矩阵的存储或转移到GPU的方式没有影响,而在第二个方面分页该矩阵显然不等同于将其布置在行大的内存中;如果我查看程序中的填充矩阵,我会看到翻译组件占据了第4、8和12个元素。 鉴于: “与列主矩阵的后乘运算产生的结果与与行主矩阵的预乘结果相同。” 为什么在以下代码段中: Matrix4 r = t3 * t2 * t1; Matrix4 r2 = t1.Transpose() * t2.Transpose() * t3.Transpose(); r!= r2 为何,为什么pos3!= pos为什么: Vector4 pos = wvpM * new Vector4(0f, 15f, 15f, 1); Vector4 pos3 = wvpM.Transpose() * new Vector4(0f, 15f, 15f, 1); 乘法过程是否根据矩阵是行还是列主矩阵而改变,或者仅仅是顺序(对于等效效果)? 让事情变得更清晰的一件事是,当提供给DirectX时,我的列主WVP矩阵已成功通过HLSL调用成功用于转换顶点:mul(vector,matrix),应将向量视为row-major,那么我的数学库提供的列主矩阵如何工作?

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.