我对此进行了搜索,但没有发现一个与我所追求的完全相符的问题。我希望用户能够定义一个纹理平面。我掌握的参数是:
A Vector2)
)
所以,我想要能够计算出矩形的4个顶点,给出上面的信息。所以,如果我想要一架面朝上的飞机,宽度和高度都是1000:
1000)
因此,这将定义一个平面在X&Z轴上,朝上。我不明白的是,如何计算三维空间中的4个角,给出这些信息。我需要额外的信息,还是有更好的方法任意指定飞机?
编辑:当前代码
在以下代码中:
Vector3 arb =新Vector3(1,1,1);Vector3 planeY = Vector3.Normalize(Vector3.Cross(Normal,arb));Vector3 planeX =Vector3.Normal(Vector3.Cross(Normal,planeY));planeX *= Size.X / 2;planeY *= Size.Y / 2;Vector3[] ret =新Vector34 { (Center - planeX - planeY),(Center - planeX + planeY),(Center + planeX - planeY),(Center + planeX + planeY) };
发布于 2011-10-20 09:04:18
你的飞机还没有完全确定。你需要另一个向量沿着平面,所谓的“切线”向量。在上面的例子中,纹理的Y轴应该指向哪里?沿着X轴,沿着Z轴?或者是一个完全不同的用户定义的轴?你的切线向量是一个向量,它应该指向平面的X轴的总方向。
假设我们也有一个切线向量,它不需要沿着平面点。您可以按以下方式构造该飞机:
Vector3[] vertices(Vector2 size, Vector3 center, Vector3 normal, Vector3 tangent)
{
Vector3 planeY = Vector3.Normalize(Vector3.Cross(normal, tangent));
Vector3 planeX = Vector3.Normalize(Vector3.Cross(normal, planeY));
planeX *= size.X / 2;
planeY *= size.Y / 2;
vertices = new Vector3[]
{
(center - planeX - planeY),
(center - planeX + planeY),
(center + planeX - planeY),
(center + planeX + planeY),
};
return vertices;
}
planeX和planeY是沿着平面本身的X和Y轴点的归一化向量。通过把这些乘以大小/ 2,我们得到了两个向量,它们从平面的中心到平面的边缘,在X和Y方向上都有。通过以不同的方式将这两者相加,我们得到了这四个角。
这是一个图表,这样你就能在脑海中得到一幅更好的画面。切线向量T在X轴上被“扁平”.
发布于 2011-10-20 08:33:54
这就像一个平面的定义一样好:你有一个点和法向量。您需要在平面上得到两个向量(A & B),并向原点添加一个(A *之一的大小值)才能得到第二个拐角。添加第二个向量(B *另一个大小值)以获得第三个角,并将两个向量*它们对应的大小值添加到原点以得到第四个角。
要得到第一个向量,计算法向量(方向)与任意向量(不等于方向)的交叉积。这将给你向量A,得到向量B,计算A的交叉积和方向。
https://stackoverflow.com/questions/7838582
复制相似问题