/// <summary> /// 指定の法線の面の頂点データを作成します。 /// </summary> /// <param name="source">対応する面の VertexSource。</param> /// <param name="normal">面の法線。</param> void InitializeSurface(SurfaceVertexSource source, Vector3 normal) { var quadrangle = new Quadrangle(); float s = Size * 0.5f; var side1 = new Vector3(normal.Y, normal.Z, normal.X); var side2 = Vector3.Cross(normal, side1); quadrangle.Position0 = (normal - side1 - side2) * s; quadrangle.Position1 = (normal - side1 + side2) * s; quadrangle.Position2 = (normal + side1 + side2) * s; quadrangle.Position3 = (normal + side1 - side2) * s; quadrangle.Normal = normal; quadrangle.Make(source); }
/// <summary> /// VertexSource へ頂点データを設定します。 /// </summary> /// <param name="source">頂点データが設定される VertexSource。</param> public void Make(VertexSource<VertexPositionNormalColor, ushort> source) { EnsureColors(); var quad = new Quadrangle(); for (int i = 0; i < normals.Length; i++) { ResolvePositionNormal(ref quad, ref normals[i]); quad.Color = colors[i]; quad.Make(source); } }