Пример #1
0
        public void SetPointSettings(int Texture, int NumParticles, int DurationSeconds, float MinHorizontalVelocity, float MaxHorizontalVelocity, float MinVerticalVelocity, float MaxVerticalVelocity, R3DVECTOR Gravity, float EndVelocity, float MinRotateSpeed, float MaxRotateSpeed, float MinStartSize, float MaxStartSize, float MinEndSize, float MaxEndSize)
        {
            settings = new PointParticleSettings();
            settings.TextureID = Texture;

            settings.MaxParticles = NumParticles;

            settings.Duration = TimeSpan.FromSeconds(DurationSeconds);

            settings.MinHorizontalVelocity = MinHorizontalVelocity;
            settings.MaxHorizontalVelocity = MaxHorizontalVelocity;

            settings.MinVerticalVelocity = MinVerticalVelocity;
            settings.MaxVerticalVelocity = MaxVerticalVelocity;

            // Create a wind effect by tilting the gravity vector sideways.
            settings.Gravity = Gravity.vector;

            settings.EndVelocity = EndVelocity;

            settings.MinRotateSpeed = MinRotateSpeed;
            settings.MaxRotateSpeed = MaxRotateSpeed;

            settings.MinStartSize = MinStartSize;
            settings.MaxStartSize = MaxStartSize;

            settings.MinEndSize = MinEndSize;
            settings.MaxEndSize = MaxEndSize;

            _psystem.InitializeSettings(settings);
        }
Пример #2
0
 public void Rotate(R3DVECTOR RotationVectors)
 {
     Rotate(RotationVectors.X, RotationVectors.Y, RotationVectors.Z);
 }
Пример #3
0
 public void SetDirection(R3DVECTOR Direction)
 {
     OverallVelocity = Direction.vector;
 }
Пример #4
0
        /// <summary>
        /// Moves the camera the specified distance in the specified direction.
        /// </summary>
        /// <param name="direction">Direction to move.</param>
        /// <param name="distance">How far to move.</param>
        public void Move(R3DVECTOR direction, R3DVECTOR distance)
        {
            if (behavior == Behavior.Orbit)
            {
                // Orbiting camera is always positioned relative to the target
                // position. See UpdateViewMatrix().
                return;
            }

            eye.X += direction.X * distance.X;
            eye.Y += direction.Y * distance.Y;
            eye.Z += direction.Z * distance.Z;

            UpdateViewMatrix();
        }
Пример #5
0
 public void AddPointParticle(R3DVECTOR Position, R3DVECTOR Velocity)
 {
     _psystem.AddParticle(Position.vector, Velocity.vector);
 }
Пример #6
0
 public void SetParam(string ParamName, R3DVECTOR value)
 {
     effect.Parameters[ParamName].SetValue(value.vector);
 }
Пример #7
0
        public void Draw_Line3D(R3DVECTOR start, R3DVECTOR end, R4DVECTOR color)
        {
            VertexPositionColor[] v = new VertexPositionColor[3];
            v[0] = new VertexPositionColor(start.vector, new Color(color.vector));
            v[1] = new VertexPositionColor(end.vector, new Color(color.vector));

            _instance._basicEffect.View = REngine.Instance._camera.viewMatrix;
            _instance._basicEffect.Projection = REngine.Instance._camera.projMatrix;
            _instance._basicEffect.World = Matrix.Identity;
            _instance._basicEffect.VertexColorEnabled = true;

            _instance._basicEffect.CurrentTechnique.Passes[0].Apply();

            // Draw the triangle.

            REngine.Instance._graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineList,
                                              v, 0, 1);
        }
Пример #8
0
 /// <summary>
 /// Builds a look at style viewing matrix.
 /// </summary>
 /// <param name="eye">The camera position.</param>
 /// <param name="target">The target position to look at.</param>
 /// <param name="up">The up direction.</param>
 public void LookAt(R3DVECTOR eye, R3DVECTOR target, R3DVECTOR up)
 {
     camera.LookAt(eye, target, up);
 }
Пример #9
0
 /// <summary>
 /// Moves the camera the specified distance in the specified direction.
 /// </summary>
 /// <param name="direction">Direction to move.</param>
 /// <param name="distance">How far to move.</param>
 public void Move(R3DVECTOR direction, R3DVECTOR distance)
 {
     camera.Move(direction, distance);
 }
Пример #10
0
 public void Sky_SetSunlightDirection(R3DVECTOR LightDirection)
 {
     LightDirection.Normalize();
     _instance.sunDirection = LightDirection.vector;
 }
Пример #11
0
 /// <summary>
 /// Builds a look at style viewing matrix.
 /// </summary>
 /// <param name="target">The target position to look at.</param>
 public void LookAt(R3DVECTOR target)
 {
     camera.LookAt(target);
 }
Пример #12
0
        public void SetPosition(R3DVECTOR Position)
        {
            this.Position = Position.vector;
            Matrix world = Matrix.CreateScale(scale) * Matrix.CreateTranslation(Position.vector);

            //world.Translation = Position.vector;
            water.World = R3DMATRIX.FromMatrix(world);
            //ocean.Position = Position.vector;
        }
Пример #13
0
        public void SetScale(R3DVECTOR Scale)
        {
            scale = Scale.vector;
            R3DMATRIX world = R3DMATRIX.FromMatrix(Matrix.CreateScale(Scale.vector));

            water.World = world;
            //ocean.Scale = Scale.vector;
        }
Пример #14
0
 public R3DVECTOR Unproject(R3DVECTOR Position, RSceneNode Node)
 {
     Vector3 v = REngine.Instance.GetViewport().Unproject(Position.vector, REngine.Instance._camera.projMatrix, REngine.Instance._camera.viewMatrix, Matrix.Identity);
     return R3DVECTOR.FromVector3(v);
 }
Пример #15
0
 public void SetPosition(R3DVECTOR Position)
 {
     this.Position = Position.vector;
     if (_type == CONST_REACTOR_PARTICLETYPE.Billboard)
         _emitter.targetPos = Position.vector;
 }
Пример #16
0
 /// <summary>
 /// Builds a look at style viewing matrix.
 /// </summary>
 /// <param name="target">The target position to look at.</param>
 public void LookAt(R3DVECTOR target)
 {
     LookAt(R3DVECTOR.FromVector3(eye), target, R3DVECTOR.FromVector3(yAxis));
 }
Пример #17
0
 public void SetScale(R3DVECTOR Scale)
 {
     if (_type == CONST_REACTOR_PARTICLETYPE.Billboard)
     _emitter.myScale = Scale.vector;
 }
Пример #18
0
        /// <summary>
        /// Builds a look at style viewing matrix.
        /// </summary>
        /// <param name="eye">The camera position.</param>
        /// <param name="target">The target position to look at.</param>
        /// <param name="up">The up direction.</param>
        public void LookAt(R3DVECTOR eye, R3DVECTOR target, R3DVECTOR up)
        {
            this.eye = eye.vector;
            this.target = target.vector;

            zAxis = eye.vector - target.vector;
            zAxis.Normalize();

            viewDir.X = -zAxis.X;
            viewDir.Y = -zAxis.Y;
            viewDir.Z = -zAxis.Z;
            viewDir.Normalize();
            Vector3.Cross(ref up.vector, ref zAxis, out xAxis);
            xAxis.Normalize();

            Vector3.Cross(ref zAxis, ref xAxis, out yAxis);
            yAxis.Normalize();
            xAxis.Normalize();

            viewMatrix.M11 = xAxis.X;
            viewMatrix.M21 = xAxis.Y;
            viewMatrix.M31 = xAxis.Z;
            Vector3.Dot(ref xAxis, ref eye.vector, out viewMatrix.M41);
            viewMatrix.M41 = -viewMatrix.M41;

            viewMatrix.M12 = yAxis.X;
            viewMatrix.M22 = yAxis.Y;
            viewMatrix.M32 = yAxis.Z;
            Vector3.Dot(ref yAxis, ref eye.vector, out viewMatrix.M42);
            viewMatrix.M42 = -viewMatrix.M42;

            viewMatrix.M13 = zAxis.X;
            viewMatrix.M23 = zAxis.Y;
            viewMatrix.M33 = zAxis.Z;
            Vector3.Dot(ref zAxis, ref eye.vector, out viewMatrix.M43);
            viewMatrix.M43 = -viewMatrix.M43;

            viewMatrix.M14 = 0.0f;
            viewMatrix.M24 = 0.0f;
            viewMatrix.M34 = 0.0f;
            viewMatrix.M44 = 1.0f;

            accumPitchDegrees = MathHelper.ToDegrees((float)Math.Asin(viewMatrix.M23));
            Quaternion.CreateFromRotationMatrix(ref viewMatrix, out orientation);

            Pitch = MathHelper.ToDegrees(orientation.X);
            Heading = MathHelper.ToDegrees(orientation.Y);
            Roll = MathHelper.ToDegrees(orientation.Z);
        }
Пример #19
0
 public void SetParam(string ParamName, R3DVECTOR[] values)
 {
     Vector3[] q = new Vector3[values.Length];
     int index = 0;
     foreach (R3DVECTOR rm in values)
     {
         q[index] = rm.vector;
     }
     effect.Parameters[ParamName].SetValue(q);
     q = null;
 }
Пример #20
0
        public void CreateSphere(R3DVECTOR Center, float Radius, int NumPhiSides, int NumThetaSides)
        {
            AABB = RBOUNDINGBOX.CreateFromSphere(new BoundingSphere(Center.ToVector3(), Radius));
            RVERTEXFORMAT[] vertices = new RVERTEXFORMAT[NumThetaSides * 2 * (NumPhiSides + 1)];
            vertCount = NumThetaSides * 2 * (NumPhiSides + 1);
            int index = 0;
            for (int i = 0; i < NumThetaSides; ++i)
            {
                float theta1 = ((float)i / (float)NumThetaSides) * MathHelper.ToRadians(360f);
                float theta2 = ((float)(i + 1) / (float)NumThetaSides) * MathHelper.ToRadians(360f);

                for (int j = 0; j <= NumPhiSides; ++j)
                {
                    float phi = ((float)j / (float)NumPhiSides) * MathHelper.ToRadians(180f);

                    float x1 = (float)(Math.Sin(phi) * Math.Cos(theta1)) * Radius;
                    float z1 = (float)(Math.Sin(phi) * Math.Sin(theta1)) * Radius;
                    float x2 = (float)(Math.Sin(phi) * Math.Cos(theta2)) * Radius;
                    float z2 = (float)(Math.Sin(phi) * Math.Sin(theta2)) * Radius;
                    float y = (float)Math.Cos(phi) * Radius;

                    Vector3 position = Center.vector + new Vector3(x1, y, z1);

                    vertices[index] = new RVERTEXFORMAT(position,new Vector2((float)i / (float)NumThetaSides, (float)j / (float)NumPhiSides), Vector3.Zero,
                         Vector3.Zero, Vector3.Zero);
                    index++;

                    position = Center.vector + new Vector3(x2, y, z2);

                    vertices[index] = new RVERTEXFORMAT(position,new Vector2((float)(i + 1) / (float)NumThetaSides, (float)j / (float)NumPhiSides), Vector3.Zero,
                        Vector3.Zero, Vector3.Zero);
                    index++;
                }
            }
            for (int x = 1; x < NumThetaSides - 1; ++x)
                for (int y = 1; y <= NumPhiSides - 1; ++y)
                {
                    Vector3 X = vertices[y * NumPhiSides + x].position - vertices[y * NumPhiSides + x + 1].position;
                    Vector3 Z = vertices[(y) * NumPhiSides + x].position - vertices[(y + 1) * NumPhiSides + x].position;
                    Vector3 normal = Vector3.Cross(Z, X);
                    //Normal.Normalize();
                    vertices[y * NumPhiSides + x].texture = new Vector2(((float)x - 1.0f) / (float)NumThetaSides, ((float)y - 1.0f) / (float)NumPhiSides);
                    // Tangent Data.
                    if (x != 0 && x < NumThetaSides - 1)
                        vertices[y * NumPhiSides + x].tangent = vertices[y * NumPhiSides + x - 1].position - vertices[y * NumPhiSides + x + 1].position;
                    else
                        if (x == 0)
                            vertices[y * NumPhiSides + x].tangent = vertices[y * NumPhiSides + x].position - vertices[y * NumPhiSides + x+1].position;
                        else
                            vertices[y * NumPhiSides + x].tangent = vertices[y * NumPhiSides + x-1].position - vertices[y * NumPhiSides + x].position;

                    // Bi Normal Data.
                    if (y != 0 && y < NumPhiSides - 1)
                        vertices[y * NumPhiSides + x].binormal = vertices[(y - 1) * NumPhiSides + x].position - vertices[(y+1) * NumPhiSides + x].position;
                    else
                        if (y == 0)
                            vertices[y * NumPhiSides + x].binormal = vertices[y * NumPhiSides + x].position - vertices[(y+1) * NumPhiSides + x].position;
                        else
                            vertices[y * NumPhiSides + x].binormal = vertices[(y - 1) * NumPhiSides + x].position - vertices[y * NumPhiSides + x].position;

                    vertices[x + y * NumThetaSides].normal = normal;
                    vertices[x + y * NumThetaSides].normal.Normalize();

                }
            int[] Indices = new int[((NumThetaSides - 1) * (NumPhiSides - 1)) * 6];
            for (int i = 0; i < NumThetaSides; ++i)
            {
                for (int j = 0; j <= NumPhiSides; ++j)
                {
                    Indices[(i + j * (NumThetaSides - 1)) * 6] = ((i + 1) + (j + 1) * NumPhiSides);
                    Indices[(i + j * (NumThetaSides - 1)) * 6 + 1] = (i + j * NumPhiSides);
                    Indices[(i + j * (NumThetaSides - 1)) * 6 + 2] = ((i + 1) + j * NumPhiSides);

                    Indices[(i + j * (NumThetaSides - 1)) * 6 + 3] = ((i + 1) + (j + 1) * NumPhiSides);
                    Indices[(i + j * (NumThetaSides - 1)) * 6 + 4] = (i + (j + 1) * NumPhiSides);
                    Indices[(i + j * (NumThetaSides - 1)) * 6 + 5] = (i + j * NumPhiSides);
                }
            }

            _buffer = new VertexBuffer(REngine.Instance._game.GraphicsDevice, typeof(VertexPositionNormalTexture), vertices.Length,
                BufferUsage.WriteOnly);

            _buffer.SetData<RVERTEXFORMAT>(vertices);
            vertices = null;

            _index = new IndexBuffer(REngine.Instance._game.GraphicsDevice, typeof(int), Indices.Length, BufferUsage.WriteOnly);
            _index.SetData<int>(Indices);
            Indices = null;
        }