示例#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;
        }