Example #1
0
        private void OnCreated(object sender, OpenGL.GlControlEventArgs e)
        {
            // モデルをリソースから読み込む
            // 第2引数にファイル名からリソースを読み込む関数を与える
            Asset = new CubismAsset(@"hiyori_free_t06.model3.json", (string file_path) =>
            {
                // リソースは拡張子を持たず、他のピリオドもアンダーバーに変換されるのでそれに応じて文字列を加工する
                // 普通、画像ファイルはBitmapとして読み込まれるが、resxファイルを編集してあるのでbyte[]として読み込まれる
                string file_name     = Path.GetFileNameWithoutExtension(file_path);
                string resource_name = file_name.Replace('.', '_');
                byte[] byte_array    = (byte[])Hiyori.ResourceManager.GetObject(resource_name);
                return(new MemoryStream(byte_array));
            });

            // 自動まばたきを設定する
            // 自動まばたきで設定するパラメータはmodel3.json中にパラメータグループ"EyeBlink"で指定されている
            var eye_blink_controller = new CubismEyeBlink(Asset.ParameterGroups["EyeBlink"]);

            Asset.StartMotion(CubismAsset.MotionType.Effect, eye_blink_controller);

            // OpenGL.Netを使ったレンダラーを作成する
            Renderer         = new CubismOpenGlNetRenderer();
            RenderingManager = new CubismRenderingManager(Renderer, Asset);

            Timer = Stopwatch.StartNew();
        }
Example #2
0
            public override void ApplyState()
            {
                base.ApplyState();

                asset            = Source.Asset;
                renderingManager = Source.RenderingManager;
            }
Example #3
0
        private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);
            // see: http://sites.cybernoids.jp/cubism_e/modeler/models/multi-arms/change-arms
            var asset =
                //new CubismAsset(@"avares://AvaloniaLive2DTest/Assets/Live2D/hiyori_free_t06.model3.json");
                //new CubismAsset(@"C:\Users\Yatao\Downloads\TouhouCannonballDump\Live2D\Alice\object_live2d_014_101.asset\object_live2d_014_101.asset.model3.json");
                //new CubismAsset(@"C:\Users\Yatao\Downloads\TouhouCannonballDump\Live2D\Reimu\object_live2d_001_101.asset\object_live2d_001_101.asset.model3.json");
                //new CubismAsset(@"C:\Users\Yatao\Downloads\TouhouCannonballDump\Live2D\Marisa\object_live2d_002_101.asset\object_live2d_002_101.asset.model3.json");
                new CubismAsset(@"C:\Users\Yatao\Downloads\TouhouCannonballDump\Live2D\Eiki\object_live2d_036_101.asset\object_live2d_036_101.asset.model3.json");

            // for RIM
            //asset.Model.PartGroupSwitch("PARTS_LEFT_HAND", "02");
            //asset.Model.PartGroupSwitch("PARTS_RIGHT_HAND", "02");

            // for ALS
            asset.Model.PartGroupSwitch("PartLeftHand", "02");
            asset.Model.PartGroupSwitch("PartRightHand", "02");

            this.FindControl <Live2DControl>("Live2D").Asset = asset;

            var model  = asset.Model;
            var pcount = model.PartCount;

            Console.WriteLine($"part count = {pcount}");
            for (int i = 0; i < pcount; ++i)
            {
                var part = model.GetPart(i);
                Console.WriteLine($"part #{i}: {part.Name}");
            }
        }
Example #4
0
        private void UpdateAsset(CubismAsset asset)
        {
            DisposeRenderer();
            if (m_asset != null)
            {
                m_asset.Dispose();
            }

            m_asset = asset;
            if (asset == null)
            {
                return;
            }

            var eye_blink_controller = new CubismEyeBlink(asset.ParameterGroups["EyeBlink"]);

            asset.StartMotion(MotionType.Effect, eye_blink_controller);
            TryUpdateRenderer();
        }
Example #5
0
        protected override void OnLoad(EventArgs e)
        {
            GL.ClearColor(0.0f, 0.5f, 0.5f, 1.0f);

            Asset = new CubismAsset(@"hiyori_free_t06.model3.json", (string file_path) =>
            {
                string file_name     = Path.GetFileNameWithoutExtension(file_path);
                string resource_name = file_name.Replace('.', '_');
                byte[] byte_array    = (byte[])Hiyori.ResourceManager.GetObject(resource_name);
                return(new MemoryStream(byte_array));
            });

            var eye_blink_controller = new CubismEyeBlink(Asset.ParameterGroups["EyeBlink"]);

            Asset.StartMotion(CubismAsset.MotionType.Effect, eye_blink_controller);

            Renderer         = new CubismOpenTKRenderer();
            RenderingManager = new CubismRenderingManager(Renderer, Asset);

            base.OnLoad(e);
        }
        /// <summary>
        /// Loads a <see cref="CubismAsset"/> used for <see cref="CubismSprite"/>.
        /// </summary>
        /// <param name="name">The path to the model json file.</param>
        /// <returns>The loaded CubismAsset</returns>
        public new CubismAsset Get(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                return(null);
            }

            CubismAsset asset;

            try
            {
                var baseDir = name.Split('.', 2)[0];
                var mdlPath = name.Substring(baseDir.Length + 1, (name.Length - baseDir.Length) - 1);
                asset = new CubismAsset($"{baseDir}/{mdlPath}", (string path) =>
                {
                    // CubismFileLoader internally uses System.IO.Path
                    path = path.Replace(Path.DirectorySeparatorChar, '.');
                    path = path.Replace(Path.AltDirectorySeparatorChar, '.');

                    // osu!framework prepends an underscore to numbers as file names
                    var matches = new Regex(@"\.(\d+)").Matches(path);
                    foreach (Match match in matches)
                    {
                        GroupCollection groups = match.Groups;
                        var start = groups[1].Index;
                        var end   = start + groups[1].Length;
                        path      = path.Substring(0, start) + $"_{groups[1].Value}" + path.Substring(end, path.Length - end);
                    }

                    return(GetStream(path));
                });
            }
            catch (Exception e)
            {
                throw e;
            }

            return(asset);
        }
Example #7
0
 private static void SetAsset(Live2DControl control, CubismAsset asset) => control.UpdateAsset(asset);