6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

モデルローダーを自作する

Posted at

Pmdローダーの実装を試みる。

#一番簡単なプラグイン

一番シンプルぽいプラグインを作ってみる。
NodeBrowserでTemplate(Value)をctrl+clickする。

現れたノードを右クリックするとC#のソースエディタが表示される。

namespace VVVV.Nodes
{
	#region PluginInfo
	[PluginInfo(Name = "MmdLoader", Category = "Geometry", Help = "Basic template with one value in/out", Tags = "")]
	#endregion PluginInfo
	public class GeometryMmdLoaderNode : IPluginEvaluate
	{
		#region fields & pins
		[Input("Input", DefaultValue = 1.0)]
		public ISpread<double> FInput;

		[Output("Output")]
		public ISpread<double> FOutput;

		[Import()]
		public ILogger FLogger;
		#endregion fields & pins

		//called when data for any output pin is requested
		public void Evaluate(int SpreadMax)
		{
			FOutput.SliceCount = SpreadMax;

			for (int i = 0; i < SpreadMax; i++)
				FOutput[i] = FInput[i] * 2;

			//FLogger.Log(LogType.Debug, "hi tty!");
		}
	}
}

Evaluateが毎フレーム呼ばれると。

  • [Input]ISpread FInput
  • [Output]ISpread FOutput

#今回必要なプラグイン
Mesh.png
Mesh(EX9.Geometry Join)を観察してみると今回必要な入出力はこんな感じになりそうだ。

  • [Input]String FilePath
  • [Output]ISpread Positions
  • [Output]ISpread Normals
  • [Output]ISpread TextureCoords
  • [Output]ISpread Colors
  • [Output]ISpread Indices
入力
	#region fields & pins
	[Input("Path"
		, StringType = StringType.Filename
		, FileMask =  "MMD File (*.pmd)|*.pmd"
		, IsSingle=true
		)]
	public ISpread<string> Path;
出力
	[Output("Positions")]
	public ISpread<Vector3D> Positions;
		
	[Output("Normals")]
	public ISpread<Vector3D> Normals;

	[Output("TextureCoords")]
	public ISpread<Vector2D> TextureCoords;
		
	[Output("Colors")]
	public ISpread<RGBAColor> Colors;
		
	[Output("Indices")]
	public ISpread<int> Indices;

さっそくピンが出現したのでリンクを接続してみた。
loader.png

#中味をゴリゴリ実装する
mikusan.png

途中dynamic pluginのくせのある動作にはまったがなんとか頂点投入に成功。

  • dynamic pluginを編集中に裏から別のアプリで編集したソースを反映する手段が無いっぽい。http://vvvv.org/forum/dynamic-plugin-visual-studio
  • dynamic pluginのファイルに他のクラスを入れるとprojectが認識できなくなるっぽい

外部エディタとの連携が悪いのは遺憾ですな。特定のファイルに他のクラスを入れてはいけないというのはWinFormとかでもありましたな。UIのクラスより前に入れては行けないとかだったか。この辺りは使い手が注意する必要があるようだ。

今回のソース。
GeometryMeshLoaderNode.cs
PmdModel.cs

もうちょっとVVVVの流儀がわかったらちゃんとしたリポジトリを作るんじゃないか。

マテリアル反映とかはちょっとやっかいな気がするができんことはないので後回しにしてスキニングに進まねばなるまい。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?