Articles of 变换

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

我正在开发一个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; 但是这并不完全适用。 红色方块出现在中心,围绕其原点旋转,但白色方块似乎围绕其原点和世界原点(即窗口的左上角)旋转。 我错过了什么?

我是否需要存储一个通用的旋转点/半径以便在对象变换的原点之外旋转?

我在执行非原点旋转时遇到了问题。 我有一个类Transform存储每个组件分别在三个三维向量的position , scale和rotation 。 这对于基于对象中心的局部旋转是很好的。 问题是除了原点旋转之外,如何确定/连接非原点旋转。 通常这可以通过用于中心旋转的变换旋转变换和非原点的变换旋转变换来实现。 问题是因为我正在存储单个组件,所以最终的Transformmatrix不会被计算出来,直到需要通过使用各个组件来填充适当的matrix。 (请参阅GetLocalTransform() ) 我是否还需要为世界旋转存储一个额外的旋转(和半径),还是有一种实现方法,只使用单一的旋转值? Transform.h #ifndef A2DE_CTRANSFORM_H #define A2DE_CTRANSFORM_H #include "../a2de_vals.h" #include "CMatrix4x4.h" #include "CVector3D.h" #include <vector> A2DE_BEGIN class Transform { public: Transform(); Transform(Transform* parent); Transform(const Transform& other); Transform& operator=(const Transform& rhs); virtual ~Transform(); void SetParent(Transform* parent); void AddChild(Transform* child); void RemoveChild(Transform* child); Transform* FirstChild(); Transform* LastChild(); […]

matrix转换

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

如何将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来执行这个转换?

平面转换中的错误

我有一堆共面点,坐在飞机P 。 我想把飞机翻译成Q 。 这是我做的: 我从P ,说a , b , c 。 它们的质心由c(a,b,c) 。 我selectO = c(a,b,c)和本地XYZ的本地原点为: x = normalize(Oa); v = normalize(Ob); z = x.crossProduct(v); y = x.crossProduct(z); 我将相同的方法应用于Q上的全局坐标,即d , e , f 。 O_ = c(d,e,f); x_ = normalize(Od); v_ = normalize(Oe); z_ = x_.crossProduct(v_); y_ = x_.crossproduct(z_); 然后,我使用如下的变换matrix: Matrix input = [x,y,z]; […]

如何约束轴角度旋转?

我有一个问题,我正在执行轴角度旋转,并试图限制我的旋转。 具体来说,我有一个骨架(模型/网格与钻机,转换是层次结构骨盆移动网格的三角形),我约束的运动,以防止不良的关节旋转(如膝盖弯曲侧身或倒退)。 在这种情况下的旋转几乎可以通过说“不要绕X / Y / Z旋转”来限制。 我正在使用Unity3D RotateAround函数,该函数可以围绕指定的轴在任意角度旋转。 考虑到对这一点,轴和角度的控制,我怎样才能限制这个旋转来防止“不好的”旋转?

如何实现一个轨道可调的旋转?

这是一个脚本: public float RotationSpeed = 100f; public float OrbitSpeed = 50f; public float DesiredMoonDistance; public Transform target; public Vector3 axis = Vector3.forward; void Update () { transform.Rotate(Vector3.forward, RotationSpeed * Time.deltaTime); transform.RotateAround(target.position, Vector3.forward, OrbitSpeed * Time.deltaTime); float currentMoonDistance = Vector3.Distance(target.position, transform.position); Vector3 towardsTarget = transform.position – target.position; transform.position = transform.position + (DesiredMoonDistance – currentMoonDistance) * towardsTarget.normalized; […]

均匀分布2个或更多的形状给定它们的x和y点在边界框内

我有一组dynamic形状的对象,我如何均匀地分布它们水平或垂直。对象被包围框包围,对象被放置在x,y如图所示。 任何人都可以帮助我提供algorithm或伪代码。 更新:很明显,那些停留在极端(形成一个有界的框)的形状保持不变,空间内的剩余物体均匀分布。 我用一个文字处理应用程序来模拟上面的例子。 对于里面的2个物体,

显示几何的法线

我有一个由2个三角形创建的矩形,它在xz平面上,我有对象。 现在,两个三角形(面法线)的法线是y轴,即(0,1,0)。 我想要显示两个三角形的法线,为此我需要两个点来绘制一条线来显示正常。 直觉上,如果我把一个三角形的中心作为一个,(0,1,0)作为法线的第二个点,那么两个法线都会收敛到单个点。 我不认为这是正确的,因为法线应该完全垂直于表面。 我们可以做一个把戏,以一个点为中心,通过增加y坐标来保持x和z相同,但是如果我们有曲面而不是平面板呢? 怎么样三角形的圆筒呢? 我们怎样才能将法线显示为一列圆柱? 我想我在这里错过了非常基本的概念,请帮我理解它,并告诉我如何计算正常的两点。

DirectX11:绘制多个对象

如何使用DrawIndexed()在屏幕上一次绘制多个不同的对象,并使用多个顶点缓冲区? (绘制相同的对象很简单,我不期待实例) …但我正在寻找转换两个不同的顶点缓冲区。 (是的,我正在使用索引顶点)