• R/O
  • SSH
  • HTTPS

mmdx: Commit


Commit MetaInfo

Revision221 (tree)
Zeit2010-05-03 19:48:27
Autorwilfrem

Log Message

アクセサリのスフィアとスクリーン以外のエフェクトをBasicEffectから変更

Ändern Zusammenfassung

Diff

--- trunk/MMDImporter/Accessory/AccessoryProcessor.cs (revision 220)
+++ trunk/MMDImporter/Accessory/AccessoryProcessor.cs (revision 221)
@@ -95,6 +95,7 @@
9595 //データのコピー
9696 foreach (var i in basicMaterial.OpaqueData)
9797 {
98+ if(i.Key!="ShaderIndex")//仮組み。後でAccessoryEffectに統合
9899 effectMaterial.OpaqueData.Add(i.Key, i.Value);
99100 }
100101 effectMaterial.Name = "mmd-screen";
@@ -119,7 +120,8 @@
119120 //データのコピー
120121 foreach (var i in basicMaterial.OpaqueData)
121122 {
122- effectMaterial.OpaqueData.Add(i.Key, i.Value);
123+ if (i.Key != "ShaderIndex")
124+ effectMaterial.OpaqueData.Add(i.Key, i.Value);
123125 }
124126 effectMaterial.Name = basicMaterial.Name + "-sphere";
125127 effectMaterial.Identity = basicMaterial.Identity;
@@ -176,7 +178,30 @@
176178 }
177179 else
178180 {
179- return base.ConvertMaterial(basicMaterial, context);
181+ EffectMaterialContent effectMaterial = new EffectMaterialContent();
182+ //extディレクトリ作成
183+ string IntDir = "ext";
184+ if (!Directory.Exists(IntDir))
185+ Directory.CreateDirectory(IntDir);
186+ //エフェクトをリソースから作成
187+ FileStream fs = new FileStream(Path.Combine(IntDir, "AccessoryEffect.fx"), FileMode.Create);
188+ BinaryWriter bw = new BinaryWriter(fs);
189+ bw.Write(Resource1.AccessoryEffect);
190+ bw.Close();
191+ effectMaterial.Effect = new ExternalReference<EffectContent>(Path.Combine(IntDir, "AccessoryEffect.fx"));
192+ //データのコピー
193+ foreach (var i in basicMaterial.OpaqueData)
194+ {
195+ effectMaterial.OpaqueData.Add(i.Key, i.Value);
196+ }
197+ effectMaterial.Name = basicMaterial.Name;
198+ effectMaterial.Identity = basicMaterial.Identity;
199+ foreach (var i in basicMaterial.Textures)
200+ {
201+ effectMaterial.Textures.Add(i.Key, i.Value);
202+ }
203+ return base.ConvertMaterial(effectMaterial, context);
204+
180205 }
181206 }
182207 else
@@ -222,6 +247,32 @@
222247 }
223248 }
224249 }
250+ //どのエフェクトを使うのかの種別判定
251+ foreach (var i in geometryCollection)
252+ {
253+ bool Color = false;
254+ bool UseTexture = false;
255+ bool Normal = false;
256+ foreach (var channel in i.Vertices.Channels)
257+ {
258+ if (channel.Name == VertexChannelNames.TextureCoordinate(0)
259+ && i.Material.Textures.Count > 0)
260+ UseTexture = true;
261+ else if (channel.Name == VertexChannelNames.Color(0))
262+ Color = true;
263+ else if (channel.Name == VertexChannelNames.Normal(0))
264+ Normal = true;
265+ }
266+ int ShaderIndex=0;
267+ if (Normal)
268+ ShaderIndex += 4;
269+ if (Color)
270+ ++ShaderIndex;
271+ if (UseTexture)
272+ ShaderIndex += 2;
273+ i.Material.OpaqueData.Add("ShaderIndex", ShaderIndex);
274+ }
275+
225276 base.ProcessGeometryUsingMaterial(material, geometryCollection, context);
226277 }
227278
--- trunk/MMDImporter/Resource1.Designer.cs (revision 220)
+++ trunk/MMDImporter/Resource1.Designer.cs (revision 221)
@@ -60,6 +60,13 @@
6060 }
6161 }
6262
63+ internal static byte[] AccessoryEffect {
64+ get {
65+ object obj = ResourceManager.GetObject("AccessoryEffect", resourceCulture);
66+ return ((byte[])(obj));
67+ }
68+ }
69+
6370 internal static byte[] MMDModel {
6471 get {
6572 object obj = ResourceManager.GetObject("MMDModel", resourceCulture);
--- trunk/MikuMikuDanceXNA/Accessory/MMDAccessory.cs (revision 220)
+++ trunk/MikuMikuDanceXNA/Accessory/MMDAccessory.cs (revision 221)
@@ -171,6 +171,11 @@
171171 effect.Parameters["World"].SetValue(trueWorld);
172172 effect.Parameters["View"].SetValue(View);
173173 effect.Parameters["Projection"].SetValue(Projection);
174+ /*try
175+ {
176+ effect.Parameters["ShaderIndex"].SetValue(2);
177+ }
178+ catch (Exception) { }*/
174179 }
175180 mesh.Draw();
176181 }
Show on old repository browser