public static VertexPositionColor[] CreateBox(Vector3 mins, Vector3 maxs, Color4 color) { VertexPositionColor[] verts = new VertexPositionColor[36]; // Front face verts[0] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); verts[1] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[2] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); verts[3] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[4] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, maxs.Z), color); verts[5] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); // Back face (remember this is facing *away* from the camera, so vertices should be // clockwise order) verts[6] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, mins.Z), color); verts[7] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, mins.Z), color); verts[8] = new VertexPositionColor(new Vector3(mins.X, mins.Y, mins.Z), color); verts[9] = new VertexPositionColor(new Vector3(mins.X, mins.Y, mins.Z), color); verts[10] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, mins.Z), color); verts[11] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, mins.Z), color); // Top face verts[12] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); verts[13] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, mins.Z), color); verts[14] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, mins.Z), color); verts[15] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); verts[16] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); verts[17] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, mins.Z), color); // Bottom face (remember this is facing *away* from the camera, so vertices should be // clockwise order) verts[18] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[19] = new VertexPositionColor(new Vector3(mins.X, mins.Y, mins.Z), color); verts[20] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, mins.Z), color); verts[21] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[22] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, mins.Z), color); verts[23] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, maxs.Z), color); // Left face verts[24] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); verts[25] = new VertexPositionColor(new Vector3(mins.X, mins.Y, mins.Z), color); verts[26] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[27] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, mins.Z), color); verts[28] = new VertexPositionColor(new Vector3(mins.X, mins.Y, mins.Z), color); verts[29] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); // Right face (remember this is facing *away* from the camera, so vertices should be // clockwise order) verts[30] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); verts[31] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, maxs.Z), color); verts[32] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, mins.Z), color); verts[33] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, mins.Z), color); verts[34] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); verts[35] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, mins.Z), color); return verts; }
public static VertexPositionColor[] CreatePlane(Vector3 dir, float lenght, Color4 color) { VertexPositionColor[] verts = new VertexPositionColor[6]; dir = new Vector3(-dir.X, dir.Z, dir.Y); // Front face if (dir.Y == -1f) lenght = -lenght; Vector3 mins = new Vector3(-10000, -10000, lenght); Vector3 maxs = new Vector3(10000, 10000, lenght); if (dir.Y == -1f) lenght = -lenght; verts[0] = new VertexPositionColor(new Vector3(mins.X, maxs.Y, maxs.Z), color); verts[1] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[2] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); verts[3] = new VertexPositionColor(new Vector3(mins.X, mins.Y, maxs.Z), color); verts[4] = new VertexPositionColor(new Vector3(maxs.X, mins.Y, maxs.Z), color); verts[5] = new VertexPositionColor(new Vector3(maxs.X, maxs.Y, maxs.Z), color); Vector3[] vecs; CGame.AnglesToAxis(dir*90f, out vecs); Vector3[] axis = vecs; Matrix View = Matrix.Identity; View.M11 = axis[0].X; View.M12 = axis[1].X; View.M13 = axis[2].X; View.M14 = 0f; View.M21 = axis[0].Y; View.M22 = axis[1].Y; View.M23 = axis[2].Y; View.M24 = 0f; View.M31 = axis[0].Z; View.M32 = axis[1].Z; View.M33 = axis[2].Z; View.M34 = 0f; Vector3 origin = Vector3.Zero; View.M41 = -Vector3.Dot(origin, axis[0]); View.M42 = -Vector3.Dot(origin, axis[1]); View.M43 = -Vector3.Dot(origin, axis[2]); View.M44 = 1f; for (int i = 0; i < 6; i++) { verts[i].Position = Vector3.TransformCoordinate(verts[i].Position, View); } return verts; }