/// <summary> /// Actualizar parámetros del plano en base a los valores configurados /// </summary> public void updateValues() { CustomVertex.PositionColored[] vertices = new CustomVertex.PositionColored[6]; //Crear un Quad con dos triángulos sobre XZ con normal default (0, 1, 0) Vector3 min = new Vector3(-size.X / 2, 0, -size.Y / 2); Vector3 max = new Vector3(size.X / 2, 0, size.Y / 2); int c = color.ToArgb(); vertices[0] = new CustomVertex.PositionColored(min, c); vertices[1] = new CustomVertex.PositionColored(min.X, 0, max.Z, c); vertices[2] = new CustomVertex.PositionColored(max, c); vertices[3] = new CustomVertex.PositionColored(min, c); vertices[4] = new CustomVertex.PositionColored(max, c); vertices[5] = new CustomVertex.PositionColored(max.X, 0, min.Z, c); //Obtener matriz de rotacion respecto de la normal del plano normal.Normalize(); float angle = FastMath.Acos(Vector3.Dot(ORIGINAL_DIR, normal)); Vector3 axisRotation = Vector3.Cross(ORIGINAL_DIR, normal); axisRotation.Normalize(); Matrix t = Matrix.RotationAxis(axisRotation, angle) * Matrix.Translation(center); //Transformar todos los puntos for (int i = 0; i < vertices.Length; i++) { vertices[i].Position = Vector3.TransformCoordinate(vertices[i].Position, t); } //Cargar vertexBuffer vertexBuffer.SetData(vertices, 0, LockFlags.None); }
/// <summary> /// Actualizar parámetros de la línea en base a los valores configurados /// </summary> public void updateValues() { int c = color.ToArgb(); CustomVertex.PositionColored[] vertices = new CustomVertex.PositionColored[36]; //Crear caja en vertical en Y con longitud igual al módulo de la recta. Vector3 lineVec = Vector3.Subtract(pEnd, pStart); float lineLength = lineVec.Length(); Vector3 min = new Vector3(-thickness, 0, -thickness); Vector3 max = new Vector3(thickness, lineLength, thickness); //Vértices de la caja con forma de linea // Front face vertices[0] = new CustomVertex.PositionColored(min.X, max.Y, max.Z, c); vertices[1] = new CustomVertex.PositionColored(min.X, min.Y, max.Z, c); vertices[2] = new CustomVertex.PositionColored(max.X, max.Y, max.Z, c); vertices[3] = new CustomVertex.PositionColored(min.X, min.Y, max.Z, c); vertices[4] = new CustomVertex.PositionColored(max.X, min.Y, max.Z, c); vertices[5] = new CustomVertex.PositionColored(max.X, max.Y, max.Z, c); // Back face (remember this is facing *away* from the camera, so vertices should be clockwise order) vertices[6] = new CustomVertex.PositionColored(min.X, max.Y, min.Z, c); vertices[7] = new CustomVertex.PositionColored(max.X, max.Y, min.Z, c); vertices[8] = new CustomVertex.PositionColored(min.X, min.Y, min.Z, c); vertices[9] = new CustomVertex.PositionColored(min.X, min.Y, min.Z, c); vertices[10] = new CustomVertex.PositionColored(max.X, max.Y, min.Z, c); vertices[11] = new CustomVertex.PositionColored(max.X, min.Y, min.Z, c); // Top face vertices[12] = new CustomVertex.PositionColored(min.X, max.Y, max.Z, c); vertices[13] = new CustomVertex.PositionColored(max.X, max.Y, min.Z, c); vertices[14] = new CustomVertex.PositionColored(min.X, max.Y, min.Z, c); vertices[15] = new CustomVertex.PositionColored(min.X, max.Y, max.Z, c); vertices[16] = new CustomVertex.PositionColored(max.X, max.Y, max.Z, c); vertices[17] = new CustomVertex.PositionColored(max.X, max.Y, min.Z, c); // Bottom face (remember this is facing *away* from the camera, so vertices should be clockwise order) vertices[18] = new CustomVertex.PositionColored(min.X, min.Y, max.Z, c); vertices[19] = new CustomVertex.PositionColored(min.X, min.Y, min.Z, c); vertices[20] = new CustomVertex.PositionColored(max.X, min.Y, min.Z, c); vertices[21] = new CustomVertex.PositionColored(min.X, min.Y, max.Z, c); vertices[22] = new CustomVertex.PositionColored(max.X, min.Y, min.Z, c); vertices[23] = new CustomVertex.PositionColored(max.X, min.Y, max.Z, c); // Left face vertices[24] = new CustomVertex.PositionColored(min.X, max.Y, max.Z, c); vertices[25] = new CustomVertex.PositionColored(min.X, min.Y, min.Z, c); vertices[26] = new CustomVertex.PositionColored(min.X, min.Y, max.Z, c); vertices[27] = new CustomVertex.PositionColored(min.X, max.Y, min.Z, c); vertices[28] = new CustomVertex.PositionColored(min.X, min.Y, min.Z, c); vertices[29] = new CustomVertex.PositionColored(min.X, max.Y, max.Z, c); // Right face (remember this is facing *away* from the camera, so vertices should be clockwise order) vertices[30] = new CustomVertex.PositionColored(max.X, max.Y, max.Z, c); vertices[31] = new CustomVertex.PositionColored(max.X, min.Y, max.Z, c); vertices[32] = new CustomVertex.PositionColored(max.X, min.Y, min.Z, c); vertices[33] = new CustomVertex.PositionColored(max.X, max.Y, min.Z, c); vertices[34] = new CustomVertex.PositionColored(max.X, max.Y, max.Z, c); vertices[35] = new CustomVertex.PositionColored(max.X, min.Y, min.Z, c); //Obtener matriz de rotacion respecto del vector de la linea lineVec.Normalize(); float angle = FastMath.Acos(Vector3.Dot(ORIGINAL_DIR, lineVec)); Vector3 axisRotation = Vector3.Cross(ORIGINAL_DIR, lineVec); axisRotation.Normalize(); Matrix t = Matrix.RotationAxis(axisRotation, angle) * Matrix.Translation(pStart); //Transformar todos los puntos for (int i = 0; i < vertices.Length; i++) { vertices[i].Position = Vector3.TransformCoordinate(vertices[i].Position, t); } //Cargar vertexBuffer vertexBuffer.SetData(vertices, 0, LockFlags.None); }