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(); }
public override void ApplyState() { base.ApplyState(); asset = Source.Asset; renderingManager = Source.RenderingManager; }
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}"); } }
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(); }
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); }
private static void SetAsset(Live2DControl control, CubismAsset asset) => control.UpdateAsset(asset);