根据提供的位置,旋转和比例计算顶点位置?

时间:2018-10-24 16:46:26

标签: c# math vertex

我有一个名为Cube的类,其中向屏幕渲染了一个基本的多维数据集。我已经尝试过在原始0, 0, 0处渲染任何比例的基本多维数据集。但是,如果要移动多维数据集,缩放其任意轴或旋转多维数据集,请执行以下操作:我不知道从哪里开始,因为我必须在Vertex对象中实现这一目标。

struct Vertex {
    Vector3 Position;
    Vector3 Normal;
    Vector2 TextureUV;
    Color Color;
}

要渲染大小为1000000的多维数据集,我只需用该值填充Position属性(关于生成面的负值和正值)。

new Vertex(new Vector3(-1000000, -1000000, -1000000), new Vector3(-1, -1, -1), Color.White);

Cube具有四个属性:

  • 位置(Vector3)。
  • 规模(Vector3)。
  • 旋转(Vector3)。
  • 颜色(SharpDX.Color)。

我的问题是,当我指定Vertex位置时,应用旋转和位置时如何计算新位置?

我尝试了基本的减法和加法,只是简单地对立方进行了不同的缩放,并且原点仍然位于0, 0, 0(请不要介意速记)。

new Vertex(new Vector3(P.X - S.X, P.Y - S.Y, P.Z - S.Z), new Vector3(1, 1, 1), Color.White);

上面的代码与当前在另一台计算机上的代码不同。

如果您需要其他详细信息,请告诉我,我会澄清。


问题

如何根据提供的位置,比例和旋转矢量设置顶点的位置?


测试用例

以下测试用例仅用于定位,目的是向您展示如何测试给出的答案。

// Renders at origin.
Cube myCube = new Cube(new Vector3(0, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders to the left.
Cube myCubeLeft = new Cube(new Vector3(-250, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders to the right.
Cube myCubeRight = new Cube(new Vector3(250, 0, 0), new Vector3(100, 100, 100), Color.White);
// Renders above.
Cube myCubeUp = new Cube(new Vector3(0, -250, 0), new Vector3(100, 100, 100), Color.White);
// Renders below.
Cube myCubeDown = new Cube(new Vector3(0, 250, 0), new Vector3(100, 100, 100), Color.White);

如果需要,我将在以后添加轮换和扩展测试用例。

0 个答案:

没有答案