コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }