代码之家  ›  专栏  ›  技术社区  ›  Hazel へいぜる

根据提供的位置、旋转和缩放计算顶点位置?

  •  0
  • Hazel へいぜる  · 技术社区  · 6 年前

    我有一个班叫 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);
    

    有四个属性:

    • 职位( Vector3 ).
    • 比例尺( 矢量3
    • 旋转( 矢量3
    • 颜色( SharpDX.Color

    我的问题是 顶点 位置,应用旋转和位置时如何计算新位置?

    我尝试了基本的减法和加法,简单地改变了立方体的比例,原点保持不变 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 回复  |  直到 6 年前