Inheritance: KeyFrameBase
Exemplo n.º 1
0
        /// <summary>
        ///    Reads an animation track section.
        /// </summary>
        /// <param name="track"></param>
        protected void ReadKeyFrame(BinaryMemoryReader reader, NodeAnimationTrack track)
        {
            float time = ReadFloat(reader);

            // create a new keyframe with the specified length
            TransformKeyFrame keyFrame = track.CreateNodeKeyFrame(time);

            // read orientation
            Quaternion rotate = ReadQuat(reader);

            keyFrame.Rotation = rotate;

            // read translation
            Vector3 translate = ReadVector3(reader);

            keyFrame.Translate = translate;

            // read scale if it is in there
            if (currentChunkLength >= 50)
            {
                Vector3 scale = ReadVector3(reader);
                keyFrame.Scale = scale;
            }
            else
            {
                keyFrame.Scale = Vector3.UnitScale;
            }
        }
        protected void TransformTrack(Matrix4 exportTransform,
                                      NodeAnimationTrack newTrack,
                                      NodeAnimationTrack track,
                                      Bone bone)
        {
            Matrix4 invExportTransform = exportTransform.Inverse();
            Bone    oldNode            = (Bone)track.TargetNode;
            Bone    newNode            = (Bone)newTrack.TargetNode;

            for (int i = 0; i < track.KeyFrames.Count; ++i)
            {
                TransformKeyFrame keyFrame       = track.GetTransformKeyFrame(i);
                TransformKeyFrame newKeyFrame    = newTrack.CreateNodeKeyFrame(keyFrame.Time);
                Quaternion        oldOrientation = oldNode.Orientation * keyFrame.Rotation;
                Vector3           oldTranslation = oldNode.Position + keyFrame.Translate;
                Matrix4           oldTransform   = Multiverse.MathLib.MathUtil.GetTransform(oldOrientation, oldTranslation);
                Matrix4           newTransform   = exportTransform * oldTransform * invExportTransform;
                Quaternion        newOrientation = GetRotation(newTransform);
                Vector3           newTranslation = newTransform.Translation;
                newKeyFrame.Rotation  = newNode.Orientation.Inverse() * newOrientation;
                newKeyFrame.Translate = newTranslation - newNode.Position;
                //if (oldNode.Name == "Lower_Torso_BIND_jjj") {
                //    log.DebugFormat("New translation: {0}; New Position: {1}", newTranslation, newNode.Position);
                //}
            }
        }
        public static void DuplicateKeyFrame(NodeAnimationTrack track, TransformKeyFrame orig)
        {
            TransformKeyFrame newKeyFrame = (TransformKeyFrame)track.CreateKeyFrame(orig.Time);

            newKeyFrame.Scale     = orig.Scale;
            newKeyFrame.Rotation  = orig.Rotation;
            newKeyFrame.Translate = orig.Translate;
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        protected override void SetupContent()
        {
            this.ptex = TextureManager.Instance.CreateManual("DynaTex", ResourceGroupManager.DefaultResourceGroupName,
                                                             TextureType.ThreeD, 64, 64, 64, 0, Media.PixelFormat.A8R8G8B8,
                                                             TextureUsage.Default, null);

            SceneManager.AmbientLight = new ColorEx(0.6f, 0.6f, 0.6f);
            SceneManager.SetSkyBox(true, "Examples/MorningSkyBox", 50);

            Light light = SceneManager.CreateLight("VolumeTextureSampleLight");

            light.Diffuse  = new ColorEx(0.75f, 0.75f, 0.80f);
            light.Specular = new ColorEx(0.9f, 0.9f, 1);
            light.Position = new Vector3(-100, 80, 50);
            SceneManager.RootSceneNode.AttachObject(light);

            // Create volume renderable
            this.snode = SceneManager.RootSceneNode.CreateChildSceneNode(Vector3.Zero);

            this.vrend = new VolumeRendable(32, 750, "DynaTex");
            this.snode.AttachObject(this.vrend);

            this.trend          = new ThingRendable(90, 32, 7.5f);
            this.trend.Material = (Material)MaterialManager.Instance.GetByName("Examples/VTDarkStuff");
            this.trend.Material.Load();
            this.snode.AttachObject(this.trend);

            this.fnode = SceneManager.RootSceneNode.CreateChildSceneNode();
            Entity head = SceneManager.CreateEntity("head", "ogrehead.mesh");

            this.fnode.AttachObject(head);

            Animation anim = SceneManager.CreateAnimation("OgreTrack", 10);

            anim.InterpolationMode = InterpolationMode.Spline;

            NodeAnimationTrack track = anim.CreateNodeTrack(0, this.fnode);
            TransformKeyFrame  key   = track.CreateNodeKeyFrame(0);

            key.Translate            = new Vector3(0, -15, 0);
            key                      = track.CreateNodeKeyFrame(5);
            key.Translate            = new Vector3(0, 15, 0);
            key                      = track.CreateNodeKeyFrame(10);
            key.Translate            = new Vector3(0, -15, 0);
            this.animState           = SceneManager.CreateAnimationState("OgreTrack");
            this.animState.IsEnabled = true;

            this.globalReal  = 0.4f;
            this.globalImag  = 0.6f;
            this.globalTheta = 0.0f;

            CreateControls();

            DragLook = true;

            Generate();
        }
Exemplo n.º 5
0
        public override void CreateScene()
        {
            SceneNode node1 = base.sceneMgr.RootSceneNode.CreateChildSceneNode("Tutorial10Node");

            // Create a point light
            Light l = base.sceneMgr.CreateLight("MainLight");
            // Accept default settings: point light, white diffuse, just set position
            // Add light to the scene node
            SceneNode lightNode = base.sceneMgr.RootSceneNode.CreateChildSceneNode();

            lightNode.CreateChildSceneNode(new Vector3(10, 10, 10)).AttachObject(l);

            MeshPtr pMesh = MeshManager.Singleton.Load("knot.mesh",
                                                       ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
                                                       HardwareBuffer.Usage.HBU_DYNAMIC_WRITE_ONLY,
                                                       HardwareBuffer.Usage.HBU_STATIC_WRITE_ONLY,
                                                       true,
                                                       true);//can still read it
            //ushort src, dest;
            //if (!pMesh.SuggestTangentVectorBuildParams(VertexElementSemantic.VES_TANGENT, out src, out dest))
            //    pMesh.BuildTangentVectors(VertexElementSemantic.VES_TANGENT, src, dest);

            //create entity
            Entity entity = sceneMgr.CreateEntity("Tutorial10Entity", "knot.mesh");

            entity.SetMaterialName("CgTutorials/C5E2_Material");
            //attach to main node
            node1.AttachObject(entity);

            // set up spline animation of node
            Animation anim = sceneMgr.CreateAnimation("LightTrack", 10F);

            // Spline it for nice curves

            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);
            // Create a track to animate the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, lightNode);

            // Setup keyframes
            TransformKeyFrame key = track.CreateNodeKeyFrame(0F); // startposition

            key           = track.CreateNodeKeyFrame(2.5F);
            key.Translate = new Vector3(500F, 500F, -1000F);
            key           = track.CreateNodeKeyFrame(5F);
            key.Translate = new Vector3(-1500F, 1000F, -600F);
            key           = track.CreateNodeKeyFrame(7.5F);
            key.Translate = new Vector3(0F, 100F, 0F);
            key           = track.CreateNodeKeyFrame(10F);
            key.Translate = new Vector3(0F, 0F, 0F);

            // Create a new animation state to track this
            animState         = sceneMgr.CreateAnimationState("LightTrack");
            animState.Enabled = true;
        }
Exemplo n.º 6
0
        public virtual TransformKeyFrame createNodeKeyFrame(float timePos)
        {
            global::System.IntPtr cPtr = OgrePINVOKE.NodeAnimationTrack_createNodeKeyFrame(swigCPtr, timePos);
            TransformKeyFrame     ret  = (cPtr == global::System.IntPtr.Zero) ? null : new TransformKeyFrame(cPtr, false);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Exemplo n.º 7
0
        public virtual TransformKeyFrame getNodeKeyFrame(ushort index)
        {
            global::System.IntPtr cPtr = OgrePINVOKE.NodeAnimationTrack_getNodeKeyFrame(swigCPtr, index);
            TransformKeyFrame     ret  = (cPtr == global::System.IntPtr.Zero) ? null : new TransformKeyFrame(cPtr, false);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
    protected override void AddKeyFrame()
    {
        UnSelectedAllKeyFrameList();

        TransformKeyFrame keyFrame = new TransformKeyFrame();

        keyFrame.position   = gogoTransform.transform.localPosition;
        keyFrame.rotation   = gogoTransform.transform.localEulerAngles;
        keyFrame.scale      = gogoTransform.transform.localScale;
        keyFrame.time       = GetCurrTime();
        keyFrame.isSelected = true;

        gogoTransform.transformKeyFrameList.Add(keyFrame);

        base.AddKeyFrame();
    }
        protected XmlElement WriteKeyFrame(TransformKeyFrame keyFrame)
        {
            XmlElement   node = document.CreateElement("keyframe");
            XmlAttribute attr;

            attr       = document.CreateAttribute("time");
            attr.Value = keyFrame.Time.ToString();
            node.Attributes.Append(attr);
            XmlElement translate = WriteTranslate(keyFrame.Translate);

            node.AppendChild(translate);
            XmlElement rotate = WriteRotate(keyFrame.Rotation);

            node.AppendChild(rotate);
            return(node);
        }
Exemplo n.º 10
0
        protected void WriteAnimationTrack(BinaryWriter writer, NodeAnimationTrack track)
        {
            long start_offset = writer.Seek(0, SeekOrigin.Current);

            WriteChunk(writer, SkeletonChunkID.AnimationTrack, 0);

            WriteUShort(writer, (ushort)track.Handle);
            for (ushort i = 0; i < track.KeyFrames.Count; i++)
            {
                TransformKeyFrame keyFrame = track.GetNodeKeyFrame(i);
                WriteKeyFrame(writer, keyFrame);
            }
            long end_offset = writer.Seek(0, SeekOrigin.Current);

            writer.Seek((int)start_offset, SeekOrigin.Begin);
            WriteChunk(writer, SkeletonChunkID.AnimationTrack, (int)(end_offset - start_offset));
            writer.Seek((int)end_offset, SeekOrigin.Begin);
        }
        protected void ReadRotate(XmlNode node, TransformKeyFrame keyFrame)
        {
            float angle = float.Parse(node.Attributes["angle"].Value);

            foreach (XmlNode childNode in node.ChildNodes)
            {
                switch (childNode.Name)
                {
                case "axis":
                    Vector3 axis = ReadVector3(childNode);
                    keyFrame.Rotation = Quaternion.FromAngleAxis(angle, axis);
                    break;

                default:
                    DebugMessage(childNode);
                    break;
                }
            }
        }
Exemplo n.º 12
0
        public override void CreateScene()
        {
            SceneNode node1  = base.sceneMgr.RootSceneNode.CreateChildSceneNode("Tutorial08Node");
            Entity    entity = base.sceneMgr.CreateEntity("Tutorial08Entity", SceneManager.PrefabType.PT_SPHERE);

            entity.SetMaterialName("CgTutorials/C4E1_Material");
            node1.AttachObject(entity);

            // Make sure the camera track this node
            camera.SetAutoTracking(true, node1);

            // Create the camera node & attach camera
            SceneNode camNode = sceneMgr.RootSceneNode.CreateChildSceneNode();

            camNode.AttachObject(camera);

            // set up spline animation of node
            Animation anim = sceneMgr.CreateAnimation("CameraTrack", 10F);

            // Spline it for nice curves

            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);
            // Create a track to animate the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, camNode);

            // Setup keyframes
            TransformKeyFrame key = track.CreateNodeKeyFrame(0F); // startposition

            key           = track.CreateNodeKeyFrame(2.5F);
            key.Translate = new Vector3(500F, 500F, -1000F);
            key           = track.CreateNodeKeyFrame(5F);
            key.Translate = new Vector3(-1500F, 1000F, -600F);
            key           = track.CreateNodeKeyFrame(7.5F);
            key.Translate = new Vector3(0F, 100F, 0F);
            key           = track.CreateNodeKeyFrame(10F);
            key.Translate = new Vector3(0F, 0F, 0F);

            // Create a new animation state to track this
            animState         = sceneMgr.CreateAnimationState("CameraTrack");
            animState.Enabled = true;

            camera.PolygonMode = PolygonMode.PM_WIREFRAME;
        }
Exemplo n.º 13
0
        protected void WriteKeyFrame(BinaryWriter writer, TransformKeyFrame keyFrame)
        {
            var start_offset = writer.Seek(0, SeekOrigin.Current);

            WriteChunk(writer, SkeletonChunkID.KeyFrame, 0);

            WriteFloat(writer, keyFrame.Time);
            WriteQuat(writer, keyFrame.Rotation);
            WriteVector3(writer, keyFrame.Translate);
            if (keyFrame.Scale != Vector3.UnitScale)
            {
                WriteVector3(writer, keyFrame.Scale);
            }

            var end_offset = writer.Seek(0, SeekOrigin.Current);

            writer.Seek((int)start_offset, SeekOrigin.Begin);
            WriteChunk(writer, SkeletonChunkID.KeyFrame, (int)(end_offset - start_offset));
            writer.Seek((int)end_offset, SeekOrigin.Begin);
        }
        protected XmlElement WriteTrack(NodeAnimationTrack track)
        {
            XmlElement   node = document.CreateElement("track");
            XmlAttribute attr;

            attr       = document.CreateAttribute("bone");
            attr.Value = track.TargetNode.Name;
            node.Attributes.Append(attr);
            XmlElement keyFramesNode = document.CreateElement("keyframes");

            foreach (KeyFrame baseKeyFrame in track.KeyFrames)
            {
                TransformKeyFrame keyFrame = (TransformKeyFrame)baseKeyFrame;
                //if (track.TargetNode.Parent != null)
                //    Debug.Assert(keyFrame.Translate.LengthSquared < .01);
                XmlElement keyFrameNode = WriteKeyFrame(keyFrame);
                keyFramesNode.AppendChild(keyFrameNode);
            }
            node.AppendChild(keyFramesNode);
            return(node);
        }
        protected void ReadKeyFrame(XmlNode node, AnimationTrack track)
        {
            float time = float.Parse(node.Attributes["time"].Value);
            // create a new keyframe with the specified length
            TransformKeyFrame keyFrame = (TransformKeyFrame)track.CreateKeyFrame(time);

            foreach (XmlNode childNode in node.ChildNodes)
            {
                switch (childNode.Name)
                {
                case "translate":
                    keyFrame.Translate = ReadVector3(childNode);
                    break;

                case "rotate":
                    ReadRotate(childNode, keyFrame);
                    break;

                default:
                    DebugMessage(childNode);
                    break;
                }
            }
        }
        public static bool CompareKeyFrames(TransformKeyFrame keyFrame1, TransformKeyFrame keyFrame2)
        {
            Vector3 delta = keyFrame1.Translate - keyFrame2.Translate;

            if (delta.LengthSquared > (TranslateEpsilon * TranslateEpsilon))
            {
                return(false);
            }
            Quaternion rot   = keyFrame1.Rotation * keyFrame2.Rotation.Inverse();
            Vector3    axis  = Vector3.Zero;
            float      angle = 0;

            rot.ToAngleAxis(ref angle, ref axis);
            if (Math.Abs(angle) > RotateEpsilon)
            {
                return(false);
            }
            delta = keyFrame1.Scale - keyFrame2.Scale;
            if (delta.LengthSquared > (ScaleEpsilon * ScaleEpsilon))
            {
                return(false);
            }
            return(true);
        }
Exemplo n.º 17
0
        // Scene creation
        public override void CreateScene()
        {
            // Set ambient light
            sceneMgr.AmbientLight = new ColourValue(0.2F, 0.2F, 0.2F);

            // Create a skydome
            sceneMgr.SetSkyDome(true, "Examples/CloudySky", 5, 8);

            // Create a light
            Light l = sceneMgr.CreateLight("MainLight");

            // Accept default settings: point light, white diffuse, just set position
            // NB I could attach the light to a SceneNode if I wanted it to move automatically with
            //  other objects, but I don't
            l.Position = new Vector3(20F, 80F, 50F);

            // Define a floor plane mesh
            Plane p;

            p.normal = Vector3.UNIT_Y;
            p.d      = 200;
            MeshManager.Singleton.CreatePlane("FloorPlane", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, p, 200000F, 20000F, 20, 20, true, 1, 50F, 50F, Vector3.UNIT_Z);

            Entity ent;

            // Create an entity (the floor)
            ent = sceneMgr.CreateEntity("floor", "FloorPlane");
            ent.SetMaterialName("Examples/RustySteel");

            // Attach to child of root node, better for culling (otherwise bounds are the combination of the 2)
            sceneMgr.RootSceneNode.CreateChildSceneNode().AttachObject(ent);

            // Add a head, give it it's own node
            SceneNode headNode = sceneMgr.RootSceneNode.CreateChildSceneNode();

            ent = sceneMgr.CreateEntity("head", "ogrehead.mesh");

            headNode.AttachObject(ent);

            // Make sure the camera track this node
            camera.SetAutoTracking(true, headNode);

            // Create the camera node & attach camera
            SceneNode camNode = sceneMgr.RootSceneNode.CreateChildSceneNode();

            camNode.AttachObject(camera);

            // set up spline animation of node
            Animation anim = sceneMgr.CreateAnimation("CameraTrack", 10F);

            // Spline it for nice curves

            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);
            // Create a track to animate the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, camNode);

            // Setup keyframes
            TransformKeyFrame key = track.CreateNodeKeyFrame(0F); // startposition

            key           = track.CreateNodeKeyFrame(2.5F);
            key.Translate = new Vector3(500F, 500F, -1000F);
            key           = track.CreateNodeKeyFrame(5F);
            key.Translate = new Vector3(-1500F, 1000F, -600F);
            key           = track.CreateNodeKeyFrame(7.5F);
            key.Translate = new Vector3(0F, 100F, 0F);
            key           = track.CreateNodeKeyFrame(10F);
            key.Translate = new Vector3(0F, 0F, 0F);

            // Create a new animation state to track this
            animState         = sceneMgr.CreateAnimationState("CameraTrack");
            animState.Enabled = true;

            // Put in a bit of fog for the hell of it
            sceneMgr.SetFog(FogMode.FOG_EXP, ColourValue.White, 0.0002F);
        }
        public static void CleanupAnimation(Skeleton skel, Animation anim)
        {
            Animation newAnim = skel.CreateAnimation("_replacement", anim.Length);
            Animation tmpAnim = skel.CreateAnimation("_temporary", anim.Length);

            foreach (NodeAnimationTrack track in anim.NodeTracks.Values)
            {
                Bone bone = skel.GetBone((ushort)track.Handle);
                NodeAnimationTrack newTrack = newAnim.CreateNodeTrack(track.Handle, bone);
                NodeAnimationTrack tmpTrack = tmpAnim.CreateNodeTrack(track.Handle, bone);
                int maxFrame     = track.KeyFrames.Count;
                int lastKeyFrame = -1;
                for (int keyFrameIndex = 0; keyFrameIndex < track.KeyFrames.Count; ++keyFrameIndex)
                {
                    if (anim.InterpolationMode == InterpolationMode.Linear)
                    {
                        // Linear is based on one point before and one after.
                        TransformKeyFrame cur = track.GetTransformKeyFrame(keyFrameIndex);
                        if (keyFrameIndex == 0 ||
                            keyFrameIndex == (track.KeyFrames.Count - 1))
                        {
                            // Add the key frame if it is the first or last keyframe.
                            lastKeyFrame = keyFrameIndex;
                            DuplicateKeyFrame(newTrack, cur);
                        }
                        else
                        {
                            // Make sure tmpTrack is clean.. we just use it for interpolation
                            tmpTrack.RemoveAllKeyFrames();
                            TransformKeyFrame prior = track.GetTransformKeyFrame(lastKeyFrame);
                            TransformKeyFrame next  = track.GetTransformKeyFrame(keyFrameIndex + 1);
                            DuplicateKeyFrame(tmpTrack, prior);
                            DuplicateKeyFrame(tmpTrack, next);
                            // Check to see if removing this last keyframe will throw off
                            // any of the other keyframes that were considered redundant.
                            bool needKeyFrame = false;
                            for (int i = lastKeyFrame + 1; i <= keyFrameIndex; ++i)
                            {
                                TransformKeyFrame orig   = track.GetTransformKeyFrame(i);
                                TransformKeyFrame interp = new TransformKeyFrame(tmpTrack, orig.Time);
                                tmpTrack.GetInterpolatedKeyFrame(orig.Time, interp);
                                // Is this interpolated frame useful or redundant?
                                if (!CompareKeyFrames(interp, cur))
                                {
                                    needKeyFrame = true;
                                    break;
                                }
                            }
                            if (needKeyFrame)
                            {
                                lastKeyFrame = keyFrameIndex;
                                DuplicateKeyFrame(newTrack, cur);
                            }
                        }
                    }
                    else if (anim.InterpolationMode == InterpolationMode.Spline)
                    {
                        // Spline is based on two points before and two after.
                        TransformKeyFrame cur = track.GetTransformKeyFrame(keyFrameIndex);
#if DISABLED_CODE
                        if (keyFrameIndex == 0 ||
                            keyFrameIndex == 1 ||
                            keyFrameIndex == (track.KeyFrames.Count - 1) ||
                            keyFrameIndex == (track.KeyFrames.Count - 2))
                        {
                            // Add the key frame if it is the first, second, last or second to last keyframe.
                            DuplicateKeyFrame(newTrack, cur);
                        }
                        else
                        {
                            // Make sure tmpTrack is clean.. we just use it for interpolation
                            tmpTrack.RemoveAllKeyFrames();
                            TransformKeyFrame prior1 = track.GetTransformKeyFrame(keyFrameIndex - 2);
                            TransformKeyFrame prior2 = track.GetTransformKeyFrame(keyFrameIndex - 1);
                            TransformKeyFrame next1  = track.GetTransformKeyFrame(keyFrameIndex + 1);
                            TransformKeyFrame next2  = track.GetTransformKeyFrame(keyFrameIndex + 2);
                            DuplicateKeyFrame(tmpTrack, prior1);
                            DuplicateKeyFrame(tmpTrack, prior2);
                            DuplicateKeyFrame(tmpTrack, next1);
                            DuplicateKeyFrame(tmpTrack, next2);
                            TransformKeyFrame interp = new TransformKeyFrame(tmpTrack, cur.Time);
                            tmpTrack.GetInterpolatedKeyFrame(cur.Time, interp);
                            // Is this interpolated frame useful or redundant?
                            if (!CompareKeyFrames(interp, cur))
                            {
                                DuplicateKeyFrame(newTrack, cur);
                            }
                        }
#else
                        DuplicateKeyFrame(newTrack, cur);
#endif
                    }
                    else
                    {
                        System.Diagnostics.Debug.Assert(false, "Invalid InterpolationMode: " + anim.InterpolationMode);
                    }
                }
            }
            skel.RemoveAnimation(tmpAnim.Name);
            skel.RemoveAnimation(newAnim.Name);
            skel.RemoveAnimation(anim.Name);

            // Recreate the animation with the proper name (awkward)
            anim = skel.CreateAnimation(anim.Name, anim.Length);
            foreach (NodeAnimationTrack track in newAnim.NodeTracks.Values)
            {
                Bone bone = skel.GetBone((ushort)track.Handle);
                NodeAnimationTrack newTrack = anim.CreateNodeTrack(track.Handle, bone);
                foreach (KeyFrame keyFrame in track.KeyFrames)
                {
                    DuplicateKeyFrame(newTrack, (TransformKeyFrame)keyFrame);
                }
            }
        }
Exemplo n.º 19
0
        protected void AddKey(AnimationTrack track, float time, Vector3 translate)
        {
            TransformKeyFrame key = (TransformKeyFrame)track.CreateKeyFrame(time);

            key.Translate = translate;
        }
Exemplo n.º 20
0
        void setupLighting()
        {
            /****/
            // Set ambient light
            mSceneManager.SetAmbientLight(Converter.GetColor(0.2f, 0.2f, 0.2f));
            // Point light, movable, reddish
            mLight = mSceneManager.CreateLight("Light2");
            mLight.SetDiffuseColour(mMinLightColour);
            mLight.SetSpecularColour(1.0f, 1.0f, 1.0f);
            mLight.SetAttenuation(8000.0f, 1.0f, 0.0005f, 0.0f);

            // Create light node
            mLightNode = mSceneManager.GetRootSceneNode().CreateChildSceneNode("MovingLightNode");
            mLightNode.AttachObject(mLight);
            // create billboard set
            BillboardSet bbs = mSceneManager.CreateBillboardSet("lightbbs", 1);

            bbs.SetMaterialName("Examples/Flare");
            Billboard bb = bbs.CreateBillboard(0, 0, 0, mMinLightColour);

            // attach
            mLightNode.AttachObject(bbs);



            // create controller, after this is will get updated on its own
            mWFCF   = new WaveformControllerFunction(WaveformType.Sine, 0.0f, 0.5f);
            mCFFPtr = new ControllerFunctionFloatPtr(mWFCF);

            mLightWibbler = new LightWibbler(mLight, bb, mMinLightColour, mMaxLightColour, mMinFlareSize, mMaxFlareSize);
            mCVFPtr       = new ControllerValueFloatPtr(mLightWibbler.mCVFH);

            ControllerManager contMgr = ControllerManager.GetSingleton();

            mLightCtlFlt = contMgr.CreateController(contMgr.GetFrameTimeSource(), mCVFPtr, mCFFPtr);

            mLightNode.SetPosition(new Vector3(300, 250, -300));


            // Create a track for the light
            Animation anim = mSceneManager.CreateAnimation("LightTrack", 20.0f);

            // Spline it for nice curves
            anim.SetInterpolationMode(Animation.InterpolationMode.Spline);
            // Create a track to animate the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, mLightNode);
            // Setup keyframes
            TransformKeyFrame key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(0.0f)).Handle, false);              // A startposition

            key.SetTranslate(new Vector3(300.0f, 550.0f, -300.0f));

            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(2.0f)).Handle, false);             //B
            key.SetTranslate(new Vector3(150.0f, 600.0f, -250.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(4.0f)).Handle, false);             //C
            key.SetTranslate(new Vector3(-150.0f, 650.0f, -100.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(6.0f)).Handle, false);             //D
            key.SetTranslate(new Vector3(-400.0f, 500.0f, -200.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(8.0f)).Handle, false);             //E
            key.SetTranslate(new Vector3(-200.0f, 500.0f, -400.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(10.0f)).Handle, false);            //F
            key.SetTranslate(new Vector3(-100.0f, 450.0f, -200.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(12.0f)).Handle, false);            //G
            key.SetTranslate(new Vector3(-100.0f, 400.0f, 180.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(14.0f)).Handle, false);            //H
            key.SetTranslate(new Vector3(0.0f, 250.0f, 600.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(16.0f)).Handle, false);            //I
            key.SetTranslate(new Vector3(100.0f, 650.0f, 100.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(18.0f)).Handle, false);            //J
            key.SetTranslate(new Vector3(250.0f, 600.0f, 0.0f));
            key = new TransformKeyFrame(KeyFrame.getCPtr(track.CreateKeyFrame(20.0f)).Handle, false);            //K == A
            key.SetTranslate(new Vector3(300.0f, 550.0f, -300.0f));
            // Create a new animation state to track this
            mAnimState = mSceneManager.CreateAnimationState("LightTrack");
            mAnimState.SetEnabled(true);
            /****/
        }
Exemplo n.º 21
0
        private void SetupLighting()
        {
            scene.AmbientLight = new ColorEx(0.2f, 0.2f, 0.2f);
            Light = scene.CreateLight("Light2");
            Light.DiffuseColour = MinLightColour;
            Light.SetAttenuation(8000, 1, 0.0005f, 0);
            Light.SpecularColour = new ColorEx(1, 1, 1);

            LightNode = scene.RootSceneNode.CreateChildSceneNode("MovingLightNode");
            LightNode.AttachObject(Light);
            //create billboard set

            BillboardSet bbs = scene.CreateBillboardSet("lightbbs", 1);

            bbs.SetMaterialName("Examples/Flare");
            Billboard bb = bbs.CreateBillboard(new Vector3(0, 0, 0), MinLightColour);

            LightNode.AttachObject(bbs);

            mLightController = new LightGrassWibbler(Light, bb, MinLightColour, this.MaxLightColour, MinFlareSize, MaxFlareSize);

            // create controller, after this is will get updated on its own
            //WaveformControllerFunction func = new WaveformControllerFunction(WaveformType.Sine, 0.0f, 0.5f);

            //ControllerManager.Instance.CreateController(val, func);

            LightNode.Position = new Vector3(300, 250, -300);

            Animation anim = scene.CreateAnimation("LightTrack", 20);

            //Spline it for nce curves
            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);// = Mogre.Animation.InterpolationMode.IM_SPLINE;
            //create a srtack to animte the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, LightNode);
            //setup keyframes
            TransformKeyFrame key = track.CreateNodeKeyFrame(0);

            key.Translate = new Vector3(300, 550, -300);
            key           = track.CreateNodeKeyFrame(2);  //B
            key.Translate = new Vector3(150, 600, -250);
            key           = track.CreateNodeKeyFrame(4);  //C
            key.Translate = new Vector3(-150, 650, -100);
            key           = track.CreateNodeKeyFrame(6);  //D
            key.Translate = new Vector3(-400, 500, -200);
            key           = track.CreateNodeKeyFrame(8);  //E
            key.Translate = new Vector3(-200, 500, -400);
            key           = track.CreateNodeKeyFrame(10); //F
            key.Translate = new Vector3(-100, 450, -200);
            key           = track.CreateNodeKeyFrame(12); //G
            key.Translate = new Vector3(-100, 400, 180);
            key           = track.CreateNodeKeyFrame(14); //H
            key.Translate = new Vector3(0, 250, 600);
            key           = track.CreateNodeKeyFrame(16); //I
            key.Translate = new Vector3(100, 650, 100);
            key           = track.CreateNodeKeyFrame(18); //J
            key.Translate = new Vector3(250, 600, 0);
            key           = track.CreateNodeKeyFrame(20); //K == A
            key.Translate = new Vector3(300, 550, -300);
            // Create a new animation state to track this

            AnimState         = scene.CreateAnimationState("LightTrack");
            AnimState.Enabled = true;
        }
Exemplo n.º 22
0
        void SetupTrailLights()
        {
            sceneMgr.AmbientLight = new ColourValue(0.5f, 0.5f, 0.5f);
            Vector3 dir = new Vector3(-1, -1, 0.5f);

            dir.Normalise();
            Light l = sceneMgr.CreateLight("light1");

            l.Type      = Light.LightTypes.LT_DIRECTIONAL;
            l.Direction = dir;

            NameValuePairList pairList = new NameValuePairList();

            pairList["numberOfChains"] = "2";
            pairList["maxElements"]    = "80";
            RibbonTrail trail = (RibbonTrail)(
                sceneMgr.CreateMovableObject("1", "RibbonTrail", pairList));

            trail.MaterialName = "Examples/LightRibbonTrail";
            trail.TrailLength  = 400;

            sceneMgr.RootSceneNode.CreateChildSceneNode().AttachObject(trail);

            // Create 3 nodes for trail to follow
            SceneNode animNode = sceneMgr.RootSceneNode.CreateChildSceneNode();

            animNode.Position = new Vector3(50, 30, 0);
            Animation anim = sceneMgr.CreateAnimation("an1", 14);

            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);
            NodeAnimationTrack track = anim.CreateNodeTrack(1, animNode);
            TransformKeyFrame  kf    = track.CreateNodeKeyFrame(0);

            kf.Translate = new Vector3(50, 30, 0);
            kf           = track.CreateNodeKeyFrame(2);
            kf.Translate = new Vector3(100, -30, 0);
            kf           = track.CreateNodeKeyFrame(4);
            kf.Translate = new Vector3(120, -100, 150);
            kf           = track.CreateNodeKeyFrame(6);
            kf.Translate = new Vector3(30, -100, 50);
            kf           = track.CreateNodeKeyFrame(8);
            kf.Translate = new Vector3(-50, 30, -50);
            kf           = track.CreateNodeKeyFrame(10);
            kf.Translate = new Vector3(-150, -20, -100);
            kf           = track.CreateNodeKeyFrame(12);
            kf.Translate = new Vector3(-50, -30, 0);
            kf           = track.CreateNodeKeyFrame(14);
            kf.Translate = new Vector3(50, 30, 0);

            AnimationState animState = sceneMgr.CreateAnimationState("an1");

            animState.Enabled = true;
            mAnimStateList.Add(animState);

            trail.SetInitialColour(0, 1.0f, 0.8f, 0);
            trail.SetColourChange(0, 0.5f, 0.5f, 0.5f, 0.5f);
            trail.SetInitialWidth(0, 5);
            trail.AddNode(animNode);

            // Add light
            Light l2 = sceneMgr.CreateLight("l2");

            l2.DiffuseColour = (trail.GetInitialColour(0));
            animNode.AttachObject(l2);

            // Add billboard
            BillboardSet bbs = sceneMgr.CreateBillboardSet("bb", 1);

            bbs.CreateBillboard(Vector3.ZERO, trail.GetInitialColour(0));
            bbs.MaterialName = "Examples/Flare";
            animNode.AttachObject(bbs);

            animNode          = sceneMgr.RootSceneNode.CreateChildSceneNode();
            animNode.Position = new Vector3(-50, 100, 0);
            anim = sceneMgr.CreateAnimation("an2", 10);
            anim.SetInterpolationMode(Animation.InterpolationMode.IM_SPLINE);
            track        = anim.CreateNodeTrack(1, animNode);
            kf           = track.CreateNodeKeyFrame(0);
            kf.Translate = new Vector3(-50, 100, 0);
            kf           = track.CreateNodeKeyFrame(2);
            kf.Translate = new Vector3(-100, 150, -30);
            kf           = track.CreateNodeKeyFrame(4);
            kf.Translate = new Vector3(-200, 0, 40);
            kf           = track.CreateNodeKeyFrame(6);
            kf.Translate = new Vector3(0, -150, 70);
            kf           = track.CreateNodeKeyFrame(8);
            kf.Translate = new Vector3(50, 0, 30);
            kf           = track.CreateNodeKeyFrame(10);
            kf.Translate = new Vector3(-50, 100, 0);

            animState         = sceneMgr.CreateAnimationState("an2");
            animState.Enabled = true;
            mAnimStateList.Add(animState);

            trail.SetInitialColour(1, 0.0f, 1.0f, 0.4f);
            trail.SetColourChange(1, 0.5f, 0.5f, 0.5f, 0.5f);
            trail.SetInitialWidth(1, 5);
            trail.AddNode(animNode);

            // Add light
            l2 = sceneMgr.CreateLight("l3");
            l2.DiffuseColour = trail.GetInitialColour(1);
            animNode.AttachObject(l2);

            // Add billboard
            bbs = sceneMgr.CreateBillboardSet("bb2", 1);
            bbs.CreateBillboard(Vector3.ZERO, trail.GetInitialColour(1));
            bbs.MaterialName = "Examples/Flare";
            animNode.AttachObject(bbs);
        }
Exemplo n.º 23
0
        protected void CreateRibbons()
        {
            viewport.BackgroundColor = ColorEx.Black;
            float scale = 100f;

            scene.AmbientLight = new ColorEx(0.5f, 0.5f, 0.5f);
            //scene.SetSkyBox(true, "Examples/SpaceSkyBox", 20f * oneMeter);
            Vector3 dir = new Vector3(-1f, -1f, 0.5f);

            dir.Normalize();
            Light light1 = scene.CreateLight("light1");

            light1.Type      = LightType.Directional;
            light1.Direction = dir;

            // Create a barrel for the ribbons to fly through
            Entity    barrel     = scene.CreateEntity("barrel", "barrel.mesh");
            SceneNode barrelNode = scene.RootSceneNode.CreateChildSceneNode();

            barrelNode.ScaleFactor = 5f * Vector3.UnitScale;
            barrelNode.AttachObject(barrel);

            RibbonTrail trail = new RibbonTrail("DemoTrail", "numberOfChains", 2, "maxElementsPerChain", 80);

            trail.MaterialName = "Examples/LightRibbonTrail";
            trail.TrailLength  = scale * 400f;
            scene.RootSceneNode.CreateChildSceneNode().AttachObject(trail);

            // Create 3 nodes for trail to follow
            SceneNode animNode = scene.RootSceneNode.CreateChildSceneNode();

            animNode.Position = scale * new Vector3(50f, 30f, 0);
            Animation anim = scene.CreateAnimation("an1", 14);

            anim.InterpolationMode = InterpolationMode.Spline;
            NodeAnimationTrack track = anim.CreateNodeTrack(1, animNode);
            TransformKeyFrame  kf    = track.CreateNodeKeyFrame(0);

            kf.Translate = scale * new Vector3(50f, 30f, 0f);
            kf           = track.CreateNodeKeyFrame(2);
            kf.Translate = scale * new Vector3(100f, -30f, 0f);
            kf           = track.CreateNodeKeyFrame(4);
            kf.Translate = scale * new Vector3(120f, -100f, 150f);
            kf           = track.CreateNodeKeyFrame(6);
            kf.Translate = scale * new Vector3(30f, -100f, 50f);
            kf           = track.CreateNodeKeyFrame(8);
            kf.Translate = scale * new Vector3(-50f, 30f, -50f);
            kf           = track.CreateNodeKeyFrame(10);
            kf.Translate = scale * new Vector3(-150f, -20f, -100f);
            kf           = track.CreateNodeKeyFrame(12);
            kf.Translate = scale * new Vector3(-50f, -30f, 0f);
            kf           = track.CreateNodeKeyFrame(14);
            kf.Translate = scale * new Vector3(50f, 30f, 0f);

            AnimationState animState = scene.CreateAnimationState("an1");

            //animState.Enabled = true;
            animStateList = new List <AnimationState>();
            animStateList.Add(animState);

            trail.SetInitialColor(0, 1.0f, 0.8f, 0f, 1.0f);
            trail.SetColorChange(0, 0.5f, 0.5f, 0.5f, 0.5f);
            trail.SetInitialWidth(0, scale * 5f);
            trail.AddNode(animNode);

            // Add light
            Light light2 = scene.CreateLight("light2");

            light2.Diffuse = trail.GetInitialColor(0);
            animNode.AttachObject(light2);

            // Add billboard
            BillboardSet bbs = scene.CreateBillboardSet("bb", 1);

            bbs.CreateBillboard(Vector3.Zero, trail.GetInitialColor(0));
            bbs.MaterialName = "flare";
            animNode.AttachObject(bbs);

            animNode          = scene.RootSceneNode.CreateChildSceneNode();
            animNode.Position = scale * new Vector3(-50f, 100f, 0f);
            anim = scene.CreateAnimation("an2", 10);
            anim.InterpolationMode = InterpolationMode.Spline;
            track        = anim.CreateNodeTrack(1, animNode);
            kf           = track.CreateNodeKeyFrame(0);
            kf.Translate = scale * new Vector3(-50f, 100f, 0f);
            kf           = track.CreateNodeKeyFrame(2);
            kf.Translate = scale * new Vector3(-100f, 150f, -30f);
            kf           = track.CreateNodeKeyFrame(4);
            kf.Translate = scale * new Vector3(-200f, 0f, 40f);
            kf           = track.CreateNodeKeyFrame(6);
            kf.Translate = scale * new Vector3(0f, -150f, 70f);
            kf           = track.CreateNodeKeyFrame(8);
            kf.Translate = scale * new Vector3(50f, 0f, 30f);
            kf           = track.CreateNodeKeyFrame(10);
            kf.Translate = scale * new Vector3(-50f, 100f, 0f);

            animState = scene.CreateAnimationState("an2");
            //animState.setEnabled(true);
            animStateList.Add(animState);

            trail.SetInitialColor(1, 0.0f, 1.0f, 0.4f, 1.0f);
            trail.SetColorChange(1, 0.5f, 0.5f, 0.5f, 0.5f);
            trail.SetInitialWidth(1, scale * 5f);
            trail.AddNode(animNode);


            // Add light
            Light light3 = scene.CreateLight("l3");

            light3.Diffuse = trail.GetInitialColor(1);
            animNode.AttachObject(light3);

            // Add billboard
            bbs = scene.CreateBillboardSet("bb2", 1);
            bbs.CreateBillboard(Vector3.Zero, trail.GetInitialColor(1));
            bbs.MaterialName = "flare";
            animNode.AttachObject(bbs);
        }
Exemplo n.º 24
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(TransformKeyFrame obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
Exemplo n.º 25
0
            public void AddAnimation(MogreAnimation animation, AnimationState animationState)
            {
                Children.ForEach(x => x.AddAnimation(animation, animationState));

                if (!animation.HasNodeTrack(ReferenceBone.Handle))
                    return;

                TimeIndex index = new TimeIndex(animationState.TimePosition);
                TransformKeyFrame keyFrame = new TransformKeyFrame(null, 0);
                animation.GetNodeTrack(ReferenceBone.Handle).GetInterpolatedKeyFrame(index, keyFrame);
                Node.Position += keyFrame.Translate * animationState.Weight;
                Node.Orientation *= Quaternion.Slerp(animationState.Weight, Quaternion.IDENTITY, keyFrame.Rotation);
            }
Exemplo n.º 26
0
        protected override void CreateScene()
        {
            // Set ambient light
            sceneMgr.AmbientLight = new ColourValue(0.75f, 0.75f, 0.75f);

            // Create a light
            Light l = sceneMgr.CreateLight("MainLight");

            // Accept default settings: point light, white diffuse, just set position
            // NB I could attach the light to a SceneNode if I wanted it to move automatically with
            //  other objects, but I don't
            l.Position = new Vector3(200, 700, 100);

            sceneMgr.ShadowTechnique = ShadowTechnique.SHADOWTYPE_TEXTURE_MODULATIVE;

            // Create a skydome
            sceneMgr.SetSkyDome(true, "Examples/CloudySky", 30, 5);

            // Put in a bit of fog for the hell of it
            sceneMgr.SetFog(FogMode.FOG_EXP, ColourValue.White, 0.0001f, 0.5f);

            // Define a floor plane mesh
            Plane p = new Plane();

            p.normal = Vector3.UNIT_Y;
            p.d      = 180;
            MeshManager.Singleton.CreatePlane("FloorPlane",
                                              ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
                                              p, PLANE_SIZE * 1000, PLANE_SIZE * 1000, 20, 20, true, 1, 50, 50, Vector3.UNIT_Z);

            Entity ent = sceneMgr.CreateEntity("floorEntity", "FloorPlane");

            ent.SetMaterialName("Examples/RustySteel");
            ent.CastShadows = false;
            SceneNode floorNode = sceneMgr.RootSceneNode.CreateChildSceneNode("floorSceneNode");

            floorNode.AttachObject(ent);

            // Add a head, give it it's own node
            // The Ogre head faces to Z
            headNode        = sceneMgr.RootSceneNode.CreateChildSceneNode("headSceneNode");
            ent             = sceneMgr.CreateEntity("head", "ogrehead.mesh");
            ent.CastShadows = true;
            headNode.AttachObject(ent);

            atheneNode = sceneMgr.RootSceneNode.CreateChildSceneNode("atheneSceneNode");
            //Entity *Athene = mSceneMgr->createEntity( "Razor", "razor.mesh" );
            Entity Athene = sceneMgr.CreateEntity("Athene", "athene.mesh");

            Athene.SetMaterialName("Examples/Athene/NormalMapped");
            Athene.CastShadows = true;
            atheneNode.AttachObject(Athene);
            atheneNode.SetPosition(500, -100, 500);

            // Obstacle for collisions detection
            SceneNode barrelNode = sceneMgr.RootSceneNode.CreateChildSceneNode("barrelSceneNode");
            Entity    barrel     = sceneMgr.CreateEntity("barrel", "barrel.mesh");

            barrel.CastShadows = true;
            barrelNode.AttachObject(barrel);
            barrelNode.SetPosition(1300, -100, 500);
            barrelNode.SetScale(40, 40, 40);

            // Create light node
            SceneNode lightNode = sceneMgr.RootSceneNode.CreateChildSceneNode("lightSceneNode");

            lightNode.AttachObject(l);
            goto cameraControl;

            // set up spline animation of node
            Animation anim = sceneMgr.CreateAnimation("HeadTrack", 20);

            // Spline it for nice curves

            anim.SetInterpolationMode(Mogre.Animation.InterpolationMode.IM_SPLINE);
            // Create a track to animate the camera's node
            NodeAnimationTrack track = anim.CreateNodeTrack(0, headNode);
            // Setup keyframes
            TransformKeyFrame key = track.CreateNodeKeyFrame(0); // startposition

            key.Translate = new Vector3(0, 0, 0);
            key.Rotation  = Quaternion.IDENTITY;

            key           = track.CreateNodeKeyFrame(2.5f);
            key.Translate = new Vector3(0, 0, 1000);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(1000, 0, 1000));

            key           = track.CreateNodeKeyFrame(5);
            key.Translate = new Vector3(1000, 0, 1000);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(1000, 0, 0));

            key           = track.CreateNodeKeyFrame(7.5f);
            key.Translate = new Vector3(1000, 0, 0);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(Vector3.NEGATIVE_UNIT_X);

            key           = track.CreateNodeKeyFrame(10);
            key.Translate = new Vector3(0, 0, 0);

            // Second round
            key           = track.CreateNodeKeyFrame(11);
            key.Translate = new Vector3(0, 0, 400);
            key.Rotation  = new Quaternion(new Radian(3.14f / 4.0f), Vector3.UNIT_Z);

            key           = track.CreateNodeKeyFrame(11.5f);
            key.Translate = new Vector3(0, 0, 600);
            key.Rotation  = new Quaternion(new Radian(-3.14f / 4.0f), Vector3.UNIT_Z);

            key           = track.CreateNodeKeyFrame(12.5f);
            key.Translate = new Vector3(0, 0, 1000);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(500, 500, 1000));

            key           = track.CreateNodeKeyFrame(13.25f);
            key.Translate = new Vector3(500, 500, 1000);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(1000, -500, 1000));

            key           = track.CreateNodeKeyFrame(15);
            key.Translate = new Vector3(1000, 0, 1000);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(1000, 0, -500));

            key           = track.CreateNodeKeyFrame(16);
            key.Translate = new Vector3(1000, 0, 500);

            key           = track.CreateNodeKeyFrame(16.5f);
            key.Translate = new Vector3(1000, 0, 600);

            key           = track.CreateNodeKeyFrame(17.5f);
            key.Translate = new Vector3(1000, 0, 0);
            key.Rotation  = Vector3.UNIT_Z.GetRotationTo(new Vector3(-500, 500, 0));

            key           = track.CreateNodeKeyFrame(118.25f);
            key.Translate = new Vector3(500, 500, 0);
            key.Rotation  = new Quaternion(new Radian(3.14f), Vector3.UNIT_X) * Vector3.UNIT_Z.GetRotationTo(new Vector3(-500, -500, 0));

            key           = track.CreateNodeKeyFrame(20);
            key.Translate = new Vector3(0, 0, 0);

            key           = track.CreateNodeKeyFrame(2000);
            key.Translate = new Vector3(-20000000, 0, 0);

            // Create a new animation state to track this
            mAnimState         = sceneMgr.CreateAnimationState("HeadTrack");
            mAnimState.Enabled = true;

            cameraControl :;
            setupCameraControlSystem();
        }
Exemplo n.º 27
0
        // Just override the mandatory create scene method
        protected override void CreateScene()
        {
            RAND               = new Random(0);                    // najak: use a time-based seed
            GuiMgr             = OverlayElementManager.Instance;
            scene.AmbientLight = new ColorEx(0.75f, 0.75f, 0.75f); // default Ambient Light

            // Customize Controls - speed up camera and slow down the input update rate
            this.camSpeed = 5.0f;
            inputInterval = inputTimer = 0.02f;

            // Create water mesh and entity, and attach to sceneNode
            waterMesh   = new WaterMesh("WaterMesh", PLANE_SIZE, CMPLX);
            waterEntity = scene.CreateEntity("WaterEntity", "WaterMesh");
            SceneNode waterNode = scene.RootSceneNode.CreateChildSceneNode();

            waterNode.AttachObject(waterEntity);

            // Add Ogre head, give it it's own node
            headNode = waterNode.CreateChildSceneNode();
            Entity ent = scene.CreateEntity("head", "ogrehead.mesh");

            headNode.AttachObject(ent);

            // Create the camera node, set its position & attach camera
            camera.Yaw(-45f);
            camera.Move(new Vector3(1500f, 700f, PLANE_SIZE + 700f));
            camera.LookAt(new Vector3(PLANE_SIZE / 2f, 300f, PLANE_SIZE / 2f));
            camera.SetAutoTracking(false, headNode);             // Autotrack the head, but it isn't working right

            //scene.SetFog(FogMode.Exp, ColorEx.White, 0.000020f); // add Fog for fun, cuz we can

            // show overlay
            waterOverlay = (Overlay)OverlayManager.Instance.GetByName("Example/WaterOverlay");
            waterOverlay.Show();

            // Create Rain Emitter, but default Rain to OFF
            particleSystem  = ParticleSystemManager.Instance.CreateSystem("rain", "Examples/Water/Rain");
            particleEmitter = particleSystem.GetEmitter(0);
            particleEmitter.EmissionRate = 0f;

            // Attach Rain Emitter to SceneNode, and place it 3000f above the water surface
            SceneNode rNode = scene.RootSceneNode.CreateChildSceneNode();

            rNode.Translate(new Vector3(PLANE_SIZE / 2.0f, 3000, PLANE_SIZE / 2.0f));
            rNode.AttachObject(particleSystem);
            particleSystem.FastForward(20);             // Fastforward rain to make it look natural

            // It can't be set in .particle file, and we need it ;)
            particleSystem.BillboardOrigin = BillboardOrigin.BottomCenter;

            // Set Lighting
            lightNode             = scene.RootSceneNode.CreateChildSceneNode();
            lightSet              = scene.CreateBillboardSet("Lights", 20);
            lightSet.MaterialName = "Particles/Flare";
            lightNode.AttachObject(lightSet);
            SetLighting("Ambient");             // Add Lights - added by Najak to show lighted Water conditions - cool!

            #region STUBBED LIGHT ANIMATION
            // Create a new animation state to track this
            // TODO: Light Animation not working.
            //this.animState = scene.CreateAnimationState("WaterLight");
            //this.animState.Time = 0f;
            //this.animState.IsEnabled = false;

            // set up spline animation of light node.  Create random Spline
            Animation          anim  = scene.CreateAnimation("WaterLight", 20);
            NodeAnimationTrack track = anim.CreateNodeTrack(0, this.lightNode);
            TransformKeyFrame  key   = (TransformKeyFrame)track.CreateKeyFrame(0);
            for (int ff = 1; ff <= 19; ff++)
            {
                key = (TransformKeyFrame)track.CreateKeyFrame(ff);
                Random  rand = new Random(0);
                Vector3 lpos = new Vector3(
                    (float)rand.NextDouble() % (int)PLANE_SIZE,                    //- PLANE_SIZE/2,
                    (float)rand.NextDouble() % 300 + 100,
                    (float)rand.NextDouble() % (int)PLANE_SIZE);                   //- PLANE_SIZE/2
                key.Translate = lpos;
            }
            key = (TransformKeyFrame)track.CreateKeyFrame(20);
            #endregion STUBBED LIGHT ANIMATION

            // Initialize the Materials/Demo
            UpdateMaterial();  UpdateInfoParamC();  UpdateInfoParamD();  UpdateInfoParamU();
            UpdateInfoParamT();  UpdateInfoNormals();  UpdateInfoHeadDepth();  UpdateInfoSkyBox();
            UpdateInfoHeadSpeed(); UpdateInfoLights(); UpdateInfoTracking();

            // Init Head Animation:  Load adds[] elements - Ogre head animation
            adds[0]  = 0.3f; adds[1] = -1.6f; adds[2] = 1.1f; adds[3] = 0.5f;
            sines[0] = 0; sines[1] = 100; sines[2] = 200; sines[3] = 300;
        }         // end CreateScene()