Articles of matrix

剪切/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/放大的点。

将3轴向量转换为旋转matrix

我想从3个形成轴的向量(3dsmax)中获得一个旋转matrix(所有3个向量彼此alignment90度) 我读过的地方是我可以建立一个旋转matrix,只需在每一行中插入一个vector(来源: http : //renderdan.blogspot.cz/2006/05/rotation-matrix-from-axis-vectors.html ) 所以,我用这些示例向量构建了一个matrix x轴:[-0.194624,-0.23715,-0.951778] y轴:[-0.773012,0.634392,0] z轴:[-0.6038,-0.735735,0.306788] 但由于某种原因,如果我尝试将这个matrix转换成eulerangles,我会收到这个旋转:(eulerAngles 47.7284 6.12831 36.8263)…这是完全错误的,并且根本不alignment我的3个向量。 我知道轮换是很难理解的,可能会有人点亮吗? 🙂

如何让孩子变身荣誉父母的本源

我正在开发一个2D变换系统,它具有以下要求: 变换可以有孩子 转换具有抵消它们的锚点/原点 儿童应尊重父母的翻译起源 旋转是相对于本地原点发生的(即物体围绕原点而不是父母旋转) 作为我正在寻找的一个例子: – 在屏幕中间添加红色正方形,并且在原点的中心 – 添加一个白色正方形,将它的原点居中,稍微缩小它,使它成为红色的正方形 – 每一帧你都旋转两个方块一个固定的数量 你应该看到的是一个红色的正方形在屏幕中间的中心旋转,一个白色的正方形在红色方块内旋转。 我现在做的方式是这样的: c = child; p = child.parent; c.local_transform.translate(c.translation); c.local_transform.rotate(c.rotation); c.local_transform.scale(c.scale); c.local_transform.translate(c.origin.inverse()); c.local_transform.translate(p.origin); c.world_transform = c.local_transform * p.world_transform; 但是这并不完全适用。 红色方块出现在中心,围绕其原点旋转,但白色方块似乎围绕其原点和世界原点(即窗口的左上角)旋转。 我错过了什么?

OpenGL – 计算相机视图matrix

问题 我正在计算模型,视图和投影matrix独立地在我的着色器中使用如下: gl_Position = projection * view * model * vec4(in_Position, 1.0); 当我尝试计算我的相机的视图matrix时,Z轴被翻转,我的相机看起来像在向后看。 我的程序是用C#使用OpenTK库编写的。 翻译(工作) 我创建了一个testing场景如下: 从我对OpenGL坐标系的理解中,他们被正确定位。 模型matrix使用以下方法创建: Matrix4 translation = Matrix4.CreateTranslation(modelPosition); Matrix4 model = translation; 视图matrix是使用以下命令创建的 Matrix4 translation = Matrix4.CreateTranslation(-cameraPosition); Matrix4 view = translation; 旋转(不工作) 我现在想创建相机的旋转matrix。 要做到这一点,我使用相机的权利,向上和向前的向量: // Hard coded example orientation: // Normally calculated from up and forward // Similar to look-at camera. […]

投影/视图matrix:对象比它应该大,深度不影响顶点

目前我正在尝试从头开始编写一个C 3D软件渲染引擎,只是为了好玩,并且深入了解OpenGL在幕后做了些什么,以及90年代的程序员必须在DOS上做什么。 我已经写了自己的matrix库,并没有注意到任何问题进行testing,但是当我试图在0,0,10投影一个简单的2×2立方体的顶点,如0,0,10基本相机看到,立方体似乎出现的方式大于应用程序的窗口。 如果我将顶点的坐标缩小8倍,我可以在屏幕上看到一个正确的立方体。 这个立方体似乎不是透视图,从前面看,后面的顶点与前面的顶点完全重叠,所以我很确定这是不正确的。 这是我如何创建视图和投影matrix(vec4_initd初始化w = 0的向量,vec4_initw初始化w = 1的向量): void mat4_lookatlh(mat4 *m, const vec4 *pos, const vec4 *target, const vec4 *updirection) { vec4 fwd, right, up; // fwd = norm(pos – target) fwd = *target; vec4_sub(&fwd, pos); vec4_norm(&fwd); // right = norm(cross(updirection, fwd)) vec4_cross(updirection, &fwd, &right); vec4_norm(&right); // up = cross(right, forward) vec4_cross(&fwd, &right, […]

如何在Android上使用matrix转换Point2f?

我正在开发的Android和我使用android.renderscript.Matrix3f类来做一些计算。 现在我需要做的就是做一些像mat.tranform(pointIn, pointOut); 所以我需要通过给定的Point类来转换matrix。 在awt我只需要这样做: AffineTransform t = new AffineTransform(); Point2D.Float p = new Point2D.Float(); t.transform( p, p ); 但在Android我现在有这样的: Matrix3f t = new Matrix3f(); PointF p = new PointF(); // Now I need to tranform it somehow.. 但Android中的Matrix3f类没有Matrix.transform(Point2D ptSrc, Point2D ptDst)方法。 所以我想我必须手动进行转换。 但我不确定这是如何工作的。 从我看到的东西像translate ,然后rotate ? 任何人都可以请告诉我如何在代码中做到这一点?

matrix转换

我必须find3D转换matrix的组件。 我有一个第一个系统,在这个系统中乘以:M1 = Scale x Rotation x Translation。 我想在一个像这样计算的引擎中有相同的转换:M2 =尺度x平移x旋转因此,当我input相同的值时,翻译和旋转的反转会有一个问题。 如何计算最后一个matrixM2中的值是否具有相同的转换? 谢谢

从点获得3D四旋转matrix

我有4个3D点,代表一个偶数的四个空间。 (所以3个点就足够了)我需要获得所有单独的转换(平移,旋转,尺寸),以便我可以在CSS 3D引擎中构建该四边形。 所以一个quad的默认法向量是[0,0,1]。 我到目前为止: // 4 points p0, p1, p2, p3 // normal normal = cross(p1 – p0, p2 – p0) // axis and angle axis = cross([0, 0, 1], normal) angle = arccos(dot([0, 0, 1], normal)) // rotation matrix rotationMatrix = matrix4.fromAxisAngle(axis, angle) // width and height width = sqrt((p2.x – p1.x)^2, (p2.y […]

如何将matrix转换与Flash中的非统一屏幕缩放结合起来?

我正在使用Flash 转换matrix进行仿射变换。 我有一个矩形图像被旋转和缩放(2D)。 有两组缩放variables:ScreenScaleX和ScreenScaleY,ScaleX和ScaleY,以及一个逆时针旋转角度theta。 ScreenScaleX和ScreenScaleY是窗口的缩放因子; 旋转图像后,应将其应用于原始 X轴和Y轴的方向。 ScaleX和ScaleY应该在旋转图像之后应用于新的 X和Y方向。 例如:如果theta是90度,ScreenScaleX和ScreenScaleY仍然会沿着原始X / Y轴的方向拉伸,但是现在ScaleY将在屏幕的X方向上拉伸,并且ScaleX将在屏幕的Y方向上拉伸。 我想我可以通过缩放,旋转和倾斜的组合来实现这一点,但是我正在努力弄清楚matrix的外观。 我将如何从这些variables构造一个matrix来执行这个转换?

四元数旋转,平移,缩放或4×3 / 4x4matrix的骷髅?

我正在修改一个使用4×3和4×4matrix制作骨架的游戏,但是我看到骨架也可以用四元旋转和vector平移和缩放来制作。 两者有什么区别? 第一个有更多的价值,我想,但是,哪个更好? 如果我有一个4×3 / 4×4的matrix框架,我可以通过某种方式将其转换为旋转,平移和缩放吗?