Exemple #1
0
 /// <summary>
 /// The dynamic texture update exclude
 /// </summary>
 /// <param name="dtexture">No more dynamic textures</param>
 public void RemoveDynamicTexture(IDynamicTexture dtexture)
 {
     if (this.dynamicTextures.Contains(dtexture))
     {
         this.dynamicTextures.Remove(dtexture);
     }
 }
        /// <summary>
        /// Called by code which actually renders the dynamic texture to supply texture data.
        /// </summary>
        /// <param name="updaterId"></param>
        /// <param name="texture"></param>
        public void ReturnData(UUID updaterId, IDynamicTexture texture)
        {
            DynamicTextureUpdater updater = null;

            if (Updaters.TryGetValue(updaterId, out updater))
            {
                Scene scene;
                if (RegisteredScenes.TryGetValue(updater.SimUUID, out scene))
                {
                    UUID newTextureID = updater.DataReceived(texture.Data, scene);

                    if (ReuseTextures &&
                        !updater.BlendWithOldTexture &&
                        texture.IsReuseable &&
                        (ReuseLowDataTextures || IsDataSizeReuseable(texture)))
                    {
                        m_reuseableDynamicTextures[GenerateReusableTextureKey(texture.InputCommands, texture.InputParams)] = newTextureID;
                    }
                }
            }

            if (updater.UpdateTimer == 0)
            {
                Updaters.Remove(updater.UpdaterID);
            }
        }
Exemple #3
0
        /// <summary>
        /// Determines whether the texture is reuseable based on its data size.
        /// </summary>
        /// <remarks>
        /// This is a workaround for a viewer bug where very small data size textures relative to their pixel size
        /// are not redisplayed properly when pulled from cache.  The calculation here is based on the typical discard
        /// level of 2, a 'rate' of 0.125 and 4 components (which makes for a factor of 0.5).
        /// </remarks>
        /// <returns></returns>
        private bool IsDataSizeReuseable(IDynamicTexture texture)
        {
//            Console.WriteLine("{0} {1}", texture.Size.Width, texture.Size.Height);
            int discardLevel2DataThreshold = (int)Math.Ceiling((texture.Size.Width >> 2) * (texture.Size.Height >> 2) * 0.5);

//            m_log.DebugFormat(
//                "[DYNAMIC TEXTURE MODULE]: Discard level 2 threshold {0}, texture data length {1}",
//                discardLevel2DataThreshold, texture.Data.Length);

            return(discardLevel2DataThreshold < texture.Data.Length);
        }
        /// <summary>
        /// Called by code which actually renders the dynamic texture to supply texture data.
        /// </summary>
        /// <param name="updaterId"></param>
        /// <param name="texture"></param>
        public void ReturnData(UUID updaterId, IDynamicTexture texture)
        {
            DynamicTextureUpdater updater = null;

            lock (Updaters)
            {
                if (Updaters.ContainsKey(updaterId))
                {
                    updater = Updaters[updaterId];
                }
            }

            if (updater != null)
            {
                if (RegisteredScenes.ContainsKey(updater.SimUUID))
                {
                    Scene scene        = RegisteredScenes[updater.SimUUID];
                    UUID  newTextureID = updater.DataReceived(texture.Data, scene);

                    if (ReuseTextures &&
                        !updater.BlendWithOldTexture &&
                        texture.IsReuseable &&
                        (ReuseLowDataTextures || IsDataSizeReuseable(texture)))
                    {
                        m_reuseableDynamicTextures.Store(
                            GenerateReusableTextureKey(texture.InputCommands, texture.InputParams), newTextureID);
                    }
                }
            }

            if (updater.UpdateTimer == 0)
            {
                lock (Updaters)
                {
                    if (!Updaters.ContainsKey(updater.UpdaterID))
                    {
                        Updaters.Remove(updater.UpdaterID);
                    }
                }
            }
        }
        /// <summary>
        /// Called by code which actually renders the dynamic texture to supply texture data.
        /// </summary>
        /// <param name="updaterId"></param>
        /// <param name="texture"></param>
        public void ReturnData(UUID updaterId, IDynamicTexture texture)
        {
            DynamicTextureUpdater updater = null;

            if(Updaters.TryGetValue(updaterId, out updater))
            {
                Scene scene;
                if (RegisteredScenes.TryGetValue(updater.SimUUID, out scene))
                {
                    UUID newTextureID = updater.DataReceived(texture.Data, scene);

                    if (ReuseTextures
                        && !updater.BlendWithOldTexture
                        && texture.IsReuseable
                        && (ReuseLowDataTextures || IsDataSizeReuseable(texture)))
                    {
                        m_reuseableDynamicTextures[GenerateReusableTextureKey(texture.InputCommands, texture.InputParams)] = newTextureID;
                    }
                }
            }

            if (updater.UpdateTimer == 0)
            {
                Updaters.Remove(updater.UpdaterID);
            }
        }
Exemple #6
0
 /// <summary>
 /// Add dynamic texture update
 /// </summary>
 /// <param name="dtexture">Dynamic textures need to be updated</param>
 public void AddDynamicTexture(IDynamicTexture dtexture)
 {
     this.dynamicTextures.Add(dtexture);
 }
Exemple #7
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            WorldSpace.AddDrawableGroup(new ControllerDrawableGroup(1, "Controller", RenderContext));
            KeyPreview = true;
            KinectDeviceManager dev = null;

            //BasicGrid grid=new BasicGrid();
            //grid.Load(RenderContext);
            Controller = new TransformController(RenderContext, ScreenContext.HitChekcer);
            WorldSpace.AddResource(Controller, "Controller");
            //if (!String.IsNullOrEmpty(Settings.Default.InitLoadModel))
            //{
            //    MMDModel model = MMDModelWithPhysics.OpenLoad(Settings.Default.InitLoadModel, RenderContext);
            //    WorldSpace.AddResource(model);
            //    if (!String.IsNullOrEmpty(Settings.Default.InitLoadMotion))
            //    {
            //        model.MotionManager.ApplyMotion(model.MotionManager.AddMotionFromFile(Settings.Default.InitLoadMotion, false));
            //    }
            //}
            //更新する必要のあるワールドスペースは、UpdateRequireWorldsに追加しなけれbなりません。
            //PlaneBoard bill = new PlaneBoard(RenderContext, resourceView, new Vector2(800, 800));
            //WorldSpace.AddResource(bill);
            //bill.Transformer.Position = new Vector3(0, 0, 20);
            #region Kinectテストコード

#if KINECT
            OpenNIManager.Initialize();
            dev = OpenNIManager.getDevice();

            ColTexture = new ColorTexture(RenderContext, dev);
            tex2       = new DepthTexture(RenderContext, 1000, dev);
#endif

            #endregion

            //format = SpriteBatch.CreateTextformat("Meiriyo", 30, FontWeight.ExtraBold);


            //brush = SpriteBatch.CreateRadialGradientBrush(g,
            //    new RadialGradientBrushProperties() {CenterPoint = new PointF(100,100),GradientOriginOffset = new PointF(0,0),HorizontalRadius = 100f,VerticalRadius = 200f}).Brush;
            //brush = SpriteBatch.CreateSolidColorBrush(Color.Aquamarine);
            ScreenContext.CameraMotionProvider = new BasicCameraControllerMotionProvider(this, this);
            BasicGrid gird = new BasicGrid();
            gird.Visibility = true;
            gird.Load(RenderContext);

            ScreenContext.WorldSpace.AddResource(gird);
            //textureの世界には、childウィンドウに追加からできるようにしてあります。
            ControlForm controlForm = new ControlForm(RenderContext, ScreenContext, null, dev);
            controlForm.Show(this);

            //OpenFileDialog ofd = new OpenFileDialog();
            //if (ofd.ShowDialog() == DialogResult.OK)
            //{
            //    VMDCameraMotionProvider camMotion=VMDCameraMotionProvider.OpenFile(ofd.FileName);
            //    ScreenContext.CameraMotionProvider = camMotion;
            //    camMotion.Start();
            //}


            #region Kinectテストコード
#if KINECT
            PlaneBoard bill = new PlaneBoard(RenderContext, ColTexture.TextureResourceView);
            bill.Transformer.Position = new Vector3(0, 0, 50);
            //bill.Transformer.Rotation *= Quaternion.RotationAxis(new Vector3(0,1,0),(float) (Math.PI));
            form.WorldSpace.AddResource(bill);
            form.WorldSpace.AddDynamicTexture(ColTexture);
#endif

            #endregion
        }