Articles of math

查看matrix查找U

Ť<———————- Q 在创建视图matrix的同时,我通常将W(GET,W)=(TQ)/ || TQ || U =(WX(0,1,0)/ || WX(0,1,0)v = wxu大多数情况下都是这样的,但是当我想走y轴并且直视0,0时,0 vector的价值是什么? (0,1,0)不起作用。 试过每一个组合甚至是消极的,没有工作。

在透视matrix的近平面上有没有math上的限制?

我已经注意到,如果在透视摄像机中,我将像0.000001这样的低0.000001数值和1000 0.000001远平面0.000001 ,我的渲染就会出现一些问题,比如奇怪的深度伪像(见下图)或者在非投影过程中被零除。 我不擅长math,但应该有些奇怪,因为如果我把飞机放在0.1一切都按预期工作。 对于我不知道的近平面值有没有math上的限制? 我在JavaScript上使用WebGL(我没有使用Three.js;我的问题与math有关,而不是与特定的框架有关)。 如果它很重要,我使用Float32Array来存储matrix,我使用这些库来做math: https://github.com/Jam3/camera-unproject https://github.com/stackgl/gl-mat4 https://github.com/stackgl/gl-mat4/blob/master/perspective.js 特别是这里除以零的情况发生在 : function project (out, vec, m) { var x = vec[0], y = vec[1], z = vec[2], a00 = m[0], a01 = m[1], a02 = m[2], a03 = m[3], a10 = m[4], a11 = m[5], a12 = m[6], a13 = m[7], a20 = m[8], […]

模拟眼球滚动的实现背后的math解释是什么?

我想模拟eyeballs在眼睛滚动,我已经find并在codepen.io分叉这个实现。 这正是我所需要的。 var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); var border = 10; var centerX = c.width / 2; var centerY = c.height / 2; var radius = 40; var radiusEye = 12; var faceCenterX = centerX; var faceCenterY = border+radius + 60; var radiusEyeIn = 6; var eyeYPosition = faceCenterY-8 var reyedx = […]

如何绕着枢轴点旋转vector

在统一,我想弄清楚如何旋转一个枢轴点周围的对象。 我在常规的堆栈溢出中发现了一小段代码,但是它甚至不能正常工作。 我已经编辑了一下,现在开始工作好一点了,但是它仍然是我所需要的。 它围绕物体旋转,但是大约一半的时候跳到另一个位置。 一半实际上与枢轴点一起旋转,虽然有点偏离它应该是,如果你继续旋转它的偏移量变得越来越大。 那么另外一半是完全closures的,尽管如此,仍然不如原来的代码那样糟糕。 对不起,我无法解释, 这是一个GIF,使其更容易。 public Vector3 RotTesta(Vector3 point, Vector3 pivot, Quaternion pointRotation, Quaternion pivotRotation) { //To rotate an object around an arbitrary point, translate first (the arbitrary offset) then rotate as opposed to rotate-scale – translate Vector3 offset = point – pivot; Vector3 rotationOffset = pivotRotation.eulerAngles – pointRotation.eulerAngles; offset = Quaternion.Euler(rotationOffset) […]

将偏斜转换为旋转+比例

我正在为Unity提供一个插件,从2Danimation软件中提取数据并将其转换为Unity Animator。 我被“skew”属性阻止。 当我在Y轴上倾斜对象时,以下是我在animation软件中获得的数据。 这是一个自定义(非常艺术)的绘图: 在Unity中进行一些手动testing之后,我知道可以用3D旋转和2D比例来获得相同的结果。 然而,我无法理解input和输出背后的math逻辑(我的math知识是有限的)。 你知道我怎么可以将歪斜转换成3d转换(旋转+缩放)? 任何帮助将不胜感激。

获得三点之间的角度?

我有三点,A,B和C(在Unity中存储为Vector2)。 如果有一条线AB和一条线BC,我试图findB点的角度。 我知道,这应该是一个简单的谷歌search,我已经find了几种方法,但由于某种原因,他们都返回我的数据集完全意外的结果! 我检查了一下,确保我传递的三个点计算角度确实是正确的(x,y)坐标,并且在我的代码中的其他地方使用相同的数据没有任何问题。 考虑到所有的function都会返回奇怪的结果,那一定是我在这里不理解的东西… 这里是一个公式: Vector2 A = //some vector2.normalized Vector2 B = //some vector2.normalized Vector2 C = //some vector2.normalized float Angle = Mathf.Atan2(By – Ay, Bx – Ax) – Mathf.Atan2(By – Cy, Bx – Cx); 这里是另外一个我试过的地方,p0,p1和p2,以及vector2的: function findAngle(p0, p1, p2) { var a = Math.pow(p1.x – p0.x, 2) + Math.pow(p1.y – p0.y, 2), […]

Raycast没有碰撞对撞机

我在一个立方体上有一个胶囊的简单的raycast: bool hit = Physics.Raycast (transform.position, Vector3.down, jumpSettings.groundJumpDistanceCheck, jumpSettings.layerMask); print(hit); 当我的layerMask是8(terrain)时,我已经在我的cube上设置了我的图层,我的groundJumpDistanceCheck是2.然后我的hit是false 。 当我的groundJumpDistanceCheck设置为无穷大。 然后我的hit仍然是错误的 。 但是,当我删除距离参数: bool hit = Physics.Raycast (transform.position, Vector3.down, /* jumpSettings.groundJumpDistanceCheck, */ jumpSettings.layerMask); print(hit); 然后hit返回true 。 这对我来说很奇怪,据我所知,当你排除距离参数时,默认情况下应该是无穷大。 但是当我明确地把Infinity当作距离的时候,它返回false 。 我也使用下面的代码试图debugging我的问题,使用所需的距离2f Debug.DrawRay(transform.position, Vector3.down * jumpSettings.groundJumpDistanceCheck, Color.red, 60f); 正如你所看到的那样,射线确实拦截了立方体。 我需要reycast返回真正的距离2f 。

给定公式的两条线的交点

我有以下公式来检查两个线段的交集: Edge is defined like point2-point1 vector. bool intersects(const Line2D& line2) { float s, t; s = (-edge.y * (point1.x – line2.point1.x) + edge.x * (point1.y – line2.point1.y)) / (-line2.edge.x * edge.y + edge.x * line2.edge.y); t = (line2.edge.x * (point1.y – line2.point1.y) – line2.edge.y * (point1.x – line2.point1.x)) / (-line2.edge.x * edge.y + edge.x […]

matrix乘法顺序多个模型转换

对于一个模型matrix(按照这个顺序),我有一个参考框架的问题,我应该构造,缩放(S),旋转(R)和平移(T)。 让我们假设使用glm(或glsl),即意思是列主要表示。 我相信,它应该是一个matrix乘法: M = T * R * S // S * R * T is what we want to apply, but due to being column major, the order gets reversed, due to (AB)^T =B^T*A^T 现在,如果我已经应用了先前的转换(比如M_prev),并且我想在其上应用转换M,那么是正确的forms: M_new = M_prev * M // M_new and M_prev are both column major. I'm post multiplying due to […]

如何使用角度来包装组件的位置(即水平罗盘)

我正在试着制作一个水平指南针。 指南针由UI组件组成:面板(带面具),带有子UI图像(指南针图像)。 这是来自辐射的指南针: 当你转身时,指南针也是如此。 我想根据玩家的旋转来移动孩子。 我想通过使用transform.position移动孩子,以便任何孩子的组件也将移动(即方式点)。 我在Unity论坛上发现了一些代码。 我得到了它的工作,但是当它包裹,它不包裹到正确的位置。 见GIF。 当我接近南方的旋转时,它包裹着,但没有到正确的位置。 指南针的图像和代码可以在这里find。 我已经确定图像是原生大小,并尝试了“numberOfPixelsNorthToNorth”属性中的各种值。 using UnityEngine; using UnityEngine.UI; using System.Collections; public class CompassHandler : MonoBehaviour { public float numberOfPixelsNorthToNorth; public GameObject target; Vector3 startPosition; float rationAngleToPixel; void Start(){ startPosition = transform.position; rationAngleToPixel = numberOfPixelsNorthToNorth / 360f; } void Update (){ Vector3 perp = Vector3.Cross(Vector3.forward, target.transform.forward); float dir […]