Exemplo n.º 1
0
        public void RemoveFromBoundary()
        {
            inBoundary = false;
            boundary   = null;

            if (isAttached)
            {
                waterSceneNode.DetachObject(this);
                isAttached = false;
            }
            box = null;

            DisposeBuffers();
        }
Exemplo n.º 2
0
 public static void RemoveAxes(SceneNode node)
 {
     if (EngineConfig.DisplayAxes)
     {
         node.DetachObject("Axes_" + node.Name);
     }
 }
Exemplo n.º 3
0
        private void clearScene(SceneNode node)
        {
            ushort j = 0;

            // Clear Scene
            while (node.NumChildren() > j)
            {
                if (node.GetChild(j).Name.StartsWith("Element"))
                {
                    SceneNode cnode = (SceneNode)node.GetChild(j);
                    clearScene(cnode);
                    while (cnode.NumAttachedObjects() > 0)
                    {
                        string entname = cnode.GetAttachedObject(0).Name;
                        cnode.DetachObject(entname);
                        mgr.DestroyManualObject(entname);
                    }
                    node.RemoveChild(cnode.Name);
                    mgr.DestroySceneNode(cnode.Name);
                }
                else
                {
                    j++;
                }
            }
        }
Exemplo n.º 4
0
 protected void ClearCreatedObjects()
 {
     for (int i = 0; i < sceneNodeList.Count; i++)
     {
         SceneNode node   = sceneNodeList[i];
         Entity    entity = entityList[i];
         node.DetachObject(entity);
         scene.RemoveEntity(entity);
         node.RemoveFromParent();
     }
     sceneNodeList.Clear();
     entityList.Clear();
     foreach (Material material in materialList)
     {
         material.Dispose();
         MaterialManager.Instance.Unload(material);
     }
     materialList.Clear();
     foreach (Texture texture in textureList)
     {
         texture.Dispose();
         TextureManager.Instance.Unload(texture);
     }
     textureList.Clear();
     totalVertexCount = 0;
 }
        public void SceneNode_AddThenRemoveEntity_ShouldNotThrowException()
        {
            var sceneNode = new SceneNode(this.sceneManager, "Root");

            var newEntity = sceneManager.CreateEntity("", "");

            sceneNode.AttachObject(newEntity);

            sceneNode.DetachObject(newEntity); // detach old object

            Assert.IsTrue(sceneNode.ObjectCount == 0);
        }
Exemplo n.º 6
0
        public void Dispose()
        {
            // clean up the scene node
            sceneNode.DetachObject(this);
            sceneNode.Creator.DestroySceneNode(string.Format("DetailVeg-{0}", pageCoord));

            // free the vertex buffer
            if (vertexData != null)
            {
                vertexData.vertexBufferBinding.GetBuffer(0).Dispose();
                vertexData = null;
            }
        }
Exemplo n.º 7
0
        public void Dispose()
        {
            string nodeName = String.Format("TerrainPage[{0},{1}]", (int)(location.x / TerrainManager.oneMeter),
                                            (int)(location.z / TerrainManager.oneMeter));

            sceneNode.DetachObject(this);
            // DEBUG - Console.WriteLine("Disposing {0}", nodeName);
            sceneNode.Creator.DestroySceneNode(nodeName);

            terrainMaterial.Dispose();
            terrainMaterial = null;

            FreeBuffers();
        }
Exemplo n.º 8
0
 public void Dispose()
 {
     parentSceneNode.DetachObject(this);
     ClearBounds();
 }
Exemplo n.º 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="force"></param>
        protected void RenderTextures(bool force)
        {
            Texture       renderTexture  = null;
            RenderTexture renderTarget   = null;
            Camera        renderCamera   = null;
            Viewport      renderViewport = null;
            //Set up RTT texture
            int textureSize = ImpostorPage.ImpostorResolution;

            if (renderTexture == null)
            {
                renderTexture = (Texture)TextureManager.Singleton.CreateManual(GetUniqueID("ImpostorTexture"), "Impostors",
                                                                               TextureType.TwoD, textureSize * ImpostorYawAngles, textureSize * ImpostorPitchAngles, 0,
                                                                               MogreLibMedia.PixelFormat.A8B8G8R8, TextureUsage.RenderTarget, mLoader);
            }

            renderTexture.MipmapCount = 0x7FFFFFFF;

            //Set up render target
            renderTarget = renderTexture.GetBuffer().GetRenderTarget();
            renderTarget.IsAutoUpdated = false;

            //Set up camera
            renderCamera                = mSceneMgr.CreateCamera(GetUniqueID("ImpostorCam"));
            renderCamera.LodBias        = 1000.0f;
            renderViewport              = renderTarget.AddViewport(renderCamera);
            renderViewport.ShowOverlays = false;
#warning why is set == protected?
            // renderViewport.ClearEveryFrame = true;
            renderViewport.ShowShadows     = false;
            renderViewport.BackgroundColor = ImpostorPage.ImpostorBackgroundColor;

            //Set up scene node
            SceneNode node = mSceneMgr.GetSceneNode("ImpostorPage.RenderNode");

            SceneNode oldSceneNode = mEntity.ParentSceneNode;
            if (oldSceneNode != null)
            {
                oldSceneNode.DetachObject(mEntity);
            }

            node.AttachObject(mEntity);
            node.Position = -mEntityCenter;

            //Set up camera FOV
            float objectDist = mEntityRadius * 100;
            float nearDist   = objectDist - (mEntityRadius + 1);
            float farDist    = objectDist + (mEntityRadius + 1);

            renderCamera.AspectRatio = 1.0f;
            renderCamera.FieldOfView = (float)MogreLibMath.Utility.ATan(mEntityDiameter / objectDist);
            renderCamera.Near        = nearDist;
            renderCamera.Far         = farDist;

            //Disable mipmapping (without this, masked textures look bad)
            MaterialManager mm           = MaterialManager.Instance;
            FilterOptions   oldMinFilter = mm.GetDefaultTextureFiltering(FilterType.Min);
            FilterOptions   oldMagFilter = mm.GetDefaultTextureFiltering(FilterType.Mag);
            FilterOptions   oldMipFilter = mm.GetDefaultTextureFiltering(FilterType.Mip);
            mm.SetDefaultTextureFiltering(FilterOptions.Point, FilterOptions.Linear, FilterOptions.None);

            //Disable fog
            FogMode oldFogMode    = mSceneMgr.FogMode;
            ColorEx oldFogColor   = mSceneMgr.FogColor;
            float   oldFogDensity = mSceneMgr.FogDensity;
            float   oldFogStart   = mSceneMgr.FogStart;
            float   oldFogEnd     = mSceneMgr.FogEnd;
            mSceneMgr.FogMode = FogMode.None;

            // Get current status of the queue mode
            SpecialCaseRenderQueueMode oldSpecialCaseRenderQueueMode = mSceneMgr.SpecialCaseRenderQueueList.RenderQueueMode;

            //Only render the entity
            mSceneMgr.SpecialCaseRenderQueueList.RenderQueueMode = SpecialCaseRenderQueueMode.Include;
            mSceneMgr.SpecialCaseRenderQueueList.AddRenderQueue(RenderQueueGroupID.Six + 1);

            RenderQueueGroupID oldRenderGroup = mEntity.RenderQueueGroup;
            mEntity.RenderQueueGroup = RenderQueueGroupID.Six + 1;
            bool oldVisible = mEntity.IsVisible;
            mEntity.IsVisible = true;
#warning implement float oldMaxDistance = entity->getRenderingDistance();
#warning implement entity->setRenderingDistance(0);

            bool needsRegen = true;
            //Calculate the filename used to uniquely identity this render
            string strKey = mEntityKey;
            char[] key    = new char[32];
            int    i      = 0;
            foreach (char c in mEntityKey)
            {
                key[i] ^= c;
                i       = (i + 1) % key.Length;
            }
            for (i = 0; i < key.Length; i++)
            {
                key[i] = (char)((key[i] % 26) + 'A');
            }

            ResourceGroupManager.Instance.AddResourceLocation(".", "Folder", "BinFolder");
            string keyStr = string.Empty;
            foreach (char c in key)
            {
                keyStr += c.ToString();
            }
            string fileName = "Impostor." + keyStr + "." + textureSize + ".png";
            //Attempt to load the pre-render file if allowed
            needsRegen = force;
            if (!needsRegen)
            {
                try
                {
                    mTexture = (Texture)TextureManager.Singleton.Load(fileName, "BinFolder", TextureType.TwoD, 0x7FFFFFFF);
                }
                catch
                {
                    needsRegen = true;
                }
            }

            if (needsRegen)
            {
                //If this has not been pre-rendered, do so now
                float xDivFactor = 1.0f / ImpostorYawAngles;
                float yDivFactor = 1.0f / ImpostorPitchAngles;
                for (int o = 0; o < ImpostorPitchAngles; o++)                                //4 pitch angle renders
                {
                    Radian pitch = (Radian) new Degree((Real)((90.0f * o) * yDivFactor));    //0, 22.5, 45, 67.5
                    for (i = 0; i < ImpostorYawAngles; i++)                                  //8 yaw angle renders
                    {
                        Radian yaw = (Radian) new Degree((Real)((360.0f * i) * xDivFactor)); //0, 45, 90, 135, 180, 225, 270, 315

                        //Position camera
                        renderCamera.Position    = new Vector3(0, 0, 0);
                        renderCamera.Orientation = Quaternion.Identity;
                        renderCamera.Pitch((float)-pitch);
                        renderCamera.Yaw((float)yaw);
                        renderCamera.MoveRelative(new Vector3(0, 0, objectDist));

                        //Render the impostor
                        renderViewport.SetDimensions((float)(i * xDivFactor), (float)(o * yDivFactor), xDivFactor, yDivFactor);
                        renderTarget.Update();
                    }
                }

                //Save RTT to file
                renderTarget.WriteContentsToFile(fileName);

                //Load the render into the appropriate texture view
                mTexture = (Texture)TextureManager.Singleton.Load(fileName, "BinFolder", TextureType.TwoD, 0x7FFFFFFF);
            }

            mEntity.IsVisible        = oldVisible;
            mEntity.RenderQueueGroup = oldRenderGroup;
#warning entity->setRenderingDistance(oldMaxDistance);
            mSceneMgr.SpecialCaseRenderQueueList.RemoveRenderQueue(RenderQueueGroupID.Six + 1);
            // Restore original state
            mSceneMgr.SpecialCaseRenderQueueList.RenderQueueMode = oldSpecialCaseRenderQueueMode;

            //Re-enable mipmapping
            mm.SetDefaultTextureFiltering(oldMinFilter, oldMagFilter, oldMipFilter);

            //Re-enable fog
            mSceneMgr.SetFog(oldFogMode, oldFogColor, oldFogDensity, oldFogStart, oldFogEnd);

            //Delete camera
            renderTarget.RemoveViewport(0);
            renderCamera.SceneManager.DestroyCamera(renderCamera);

            //Delete scene node
            node.DetachAllObjects();
            if (oldSceneNode != null)
            {
                oldSceneNode.AttachObject(mEntity);
            }


            //Delete RTT texture
            Debug.Assert(renderTexture != null);
            string texName2 = renderTexture.Name;

            renderTexture = null;
            if (TextureManager.Singleton != null)
            {
                TextureManager.Singleton.Remove(texName2);
            }
        }
Exemplo n.º 10
0
 public void Drop()
 {
     itemNode.DetachObject(ItemEnt);
 }