欢迎光临散文网 会员登陆 & 注册

T0R0ブロマガ相关翻译计划(0.3)_PMDE插件的制作方法 骨骼操作篇2

2021-11-07 21:32 作者:文音_  | 我要投稿

※本文不保证百分之百的翻译准确仅供参考,具体内容依然以日文原版为准

原作者T0R0的博客原地址:https://sp.ch.nicovideo.jp/t0r0/blomaga/ar152399

 本文内容与暗锅插件并无关系,但也可能能对他人有所帮助,所以也进行翻译。关于对本文翻译内容玩文字游戏、钻空子,从而违反原文使用规约的行为,本人概不负责

※非原文部分会使用灰色字色。对一些个人认为重要的部分会进行加粗/变色强调。

 PMXe相关名词以Emil制作的“多功能信息处理与汉化插件”中的文本为准。

 文中图片均为本人依照原博客自作而非搬运,请注意。

 对个别词的理解有一定的主观成分,且本文有编程相关专业名词可能会有误译,欢迎评论区理性讨论。

※本篇翻译文章并未获得原作者授权/知悉,仅做交流用途。如有不妥,请评论区留言告知,我会立刻进行删除。

请勿使用本文章内任何文本/图片个人参考以外的其他用途,包括但不限于用于汉化文本,二次上传至公共网络等。
○仅限于「PMDE插件的制作方法」系列文章,请自由地取用文章中的代码部分文本(蓝色文本)。对代码中的注释都进行了翻译,虽然并不专业,但希望能为中文使用者提供些许的便利。

原文投稿日期为2013/03/10 12:06

PMDE插件的制作方法 骨骼操作篇2

虽说是插件但也只是普通的C#所以有很多种记载方法,但为了让文章更加易懂,在此为记载方法添加限制。并不是只有这一种写法,请注意。

在前文中进行了简单操作的说明,不过在实际编写时「想要进行的操作」与「要运行的内容」感觉上会有很大程度的差异。而要解说这种差异是非常麻烦的,所以我事先制作了项目示例文件,总结了骨骼操作所必需的功能。
首先,请下载项目示例文件(http://bowlroll.net/up/dl15339)(和上一期不一样记得下载)。
在此文件中事先记载了骨骼操作所必需的功能。说明也会按照文件内容的顺序进行。以及,可以使用此项目文件中的内容制作插件。


1.打开项目文件
(以下将均以目前最新版本的Visual Studio Community 2019进行画面示范,文章中所有操作也会根据新版本实际情况进行调整。)
请将下载后的文件解压至
「Users」→「(用户名)」→「source」
文件夹。(在此不说明解压等操作的方法。)

点击画面左上角的「文件」→「打开」→「项目/解决方案」

主题颜色可能会根据安装时初次选择的主题而有所不同,但内容与功能实质相同。


如果解压地址正确,应该能看到名为BoneSample的文件夹,点击打开


能够看到名为「BoneSample.sln」的文件,请打开此文件。



项目将会打开。


2.能从骨骼中获取的信息
前文只使用了文字来做解说,所以这次试着将PMDE的画面与骨骼对象中能获取的信息一一对应并做成了图片。


以上的值可以从骨骼对象(记载为this.PMX.Bone[i])中获取。
这其中Local轴相关的操作比较特殊,这方面会之后单独说明。

3.关于3维表示
因为MMD是3D软件所以要和3维空间表示打好关系才行。(虽然我还没打好关系啊!!!w)
首先,在骨骼信息中Position/ToOffset/FixAxis需要3维表示。

3维表示是这样
V3 Position = new V3(0.0f,0.0f,0.0f);
定义的。
从中分别获取值时可以像这样
Position.X
Position.Y
Position.Z

获得。

使用方法如下。
例)改变骨骼的位置。
IPXBone Bone =(IPXBone)this.PMX.Bone[0];
Bone.Position = new V3(0.0f,0.0f,0.0f);


IPXBone Bone =(IPXBone)this.PMX.Bone[0];
V3 NewPosition = new V3(0.0f,0.0f,0.0f);
Bone.Position = NewPosition;

这个操作可以使BoneIndex0的骨骼坐标移至原点。

4.实际操作一下骨骼吧
接下来开始实际操作。
将打开的项目文件中
//-------------------------
//处理由此开始
//-------------------------
(在此处粘贴示例)
//-------------------------
//处理到此结束
//-------------------------

像这样,为了能让已经写入的部分之间能够粘贴所需的处理,示例中记载着上述说明。

由于从项目制作插件的方法在上上回已经进行了说明,所以此处不再赘述。(http://ch.nicovideo.jp/t0r0/blomaga/ar151387)
https://www.bilibili.com/read/cv13892060

・获取骨骼Index吧
接下来获取「頭」骨的骨骼Index。(将使用名为GetBoneIndex的功能来获取BoneIndex。)
MessageBox.Show(this.GetBoneIndex("頭").ToString());

・改变骨骼名称吧
试着将「頭」骨的名称改变为「頭頭」。(将使用名为RenameBone的功能来改变骨骼名。)
IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
HeadBone.Name="頭頭";




this.RenameBone("頭","頭頭");

・改变骨骼的位置吧
试着将「頭」骨的位置改为原点。
IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
HeadBone.Position=new V3(0.0f,0.0f,0.0f);


・将骨骼设置为旋转付予吧
让「頭」骨的动作与首骨连动吧(名为SetAppendRotation的部分将一口气进行旋转付予所需的设置。)

IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
IPXBone NeckBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("首")];
NeckBone.AppendParent = HeadBone;
NeckBone.AppendRatio = 0.3f;
NeckBone.IsAppendRotation = true;
NeckBone.IsAppendTranslation = false;



IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
IPXBone NeckBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("首")];
this.SetAppendRotation(NeckBone, HeadBone, 0.3f);


・复制骨骼吧(因为没有调整骨骼的亲子关系,所以不会成为多段骨。)
将复制頭骨为新骨骼。(名为this.CloneBone的功能将会进行复制骨骼时所必需的操作。)
IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
IPXBone CloneHeadBone = (IPXBone)HeadBone.Clone();
this.PMX.Bone.Add(CloneHeadBone);



IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
IPXBone CloneHeadBone = (IPXBone)this.CloneBone(HeadBone);
this.PMX.Bone.Add(CloneHeadBone);


・设置骨骼为非显示吧
将頭骨设置为非显示骨骼
IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
HeadBone.Visible= false;
HeadBone.Controllable=false;


・为骨骼设置轴限制吧
使頭骨只能沿X轴方向旋转。(SetFixAxis的部分将会进行轴限制所必需的操作。)
IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
HeadBone.IsFixAxis = true;
HeadBone.FixAxis = new V3(1.0f, 0.0f, 0.0f);



IPXBone HeadBone = (IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
this.SetFixAxis(HeadBone, "GX");


还会有很多内容所以下次继续。

T0R0ブロマガ相关翻译计划(0.3)_PMDE插件的制作方法 骨骼操作篇2的评论 (共 条)

分享到微博请遵守国家法律