シャドウマップマネージャとモデルを接続
@@ -23,6 +23,8 @@ | ||
23 | 23 | FlipTexture2D faceVertTexture; // 表情の頂点位置を格納するテクスチャ(CPUアニメーション用) |
24 | 24 | //物理エンジンマネージャ |
25 | 25 | MMDPhysics physics; |
26 | + //前回Drawしたタイムの保持 | |
27 | + static long beforeDrawTick = 0; | |
26 | 28 | //モデル名 |
27 | 29 | internal string Name { get; set; } |
28 | 30 | //モデル付随アクセサリ |
@@ -290,6 +292,8 @@ | ||
290 | 292 | Draw(gameTime.TotalGameTime.Ticks); |
291 | 293 | //base.Draw(gameTime); |
292 | 294 | } |
295 | + | |
296 | + | |
293 | 297 | /// <summary> |
294 | 298 | /// モデルの描画 |
295 | 299 | /// </summary> |
@@ -303,9 +307,21 @@ | ||
303 | 307 | Effect effect = ModelData.ModelData.Meshes[0].Effects[0]; |
304 | 308 | mmdXNA.Camera.SetEffectParam(effect, totalTicks, Game.GraphicsDevice); |
305 | 309 | mmdXNA.LightManager.SetEffectParam(effect, totalTicks); |
306 | - //ここでシャドウマップマネージャ(仮)からテクスチャをもらう | |
307 | 310 | if (UseShadowMap) |
308 | - throw new System.NotImplementedException(); | |
311 | + {//シャドウマップ処理 | |
312 | + if (mmdXNA.ShadowMapManager == null) | |
313 | + throw new System.ApplicationException("シャドウマップマネージャがMMDXにセットされていません"); | |
314 | + if (beforeDrawTick < totalTicks) | |
315 | + { | |
316 | + Texture2D shadowTex; | |
317 | + Vector2 shadowOffset; | |
318 | + //シャドウマップマネージャからテクスチャをもらう | |
319 | + mmdXNA.ShadowMapManager.GetShadowMap(out shadowTex, out shadowOffset); | |
320 | + effect.Parameters["ShadowMap"].SetValue(shadowTex); | |
321 | + effect.Parameters["ShadowOffset"].SetValue(shadowOffset); | |
322 | + beforeDrawTick = totalTicks; | |
323 | + } | |
324 | + } | |
309 | 325 | } |
310 | 326 | |
311 | 327 | ModelDraw(Game.GraphicsDevice, "MMDBasicEffect");//モデルの描画 |
@@ -316,7 +332,7 @@ | ||
316 | 332 | /// モデルのシャドウマップの描画 |
317 | 333 | /// </summary> |
318 | 334 | /// <param name="totalTicks">GameTime.TotalGameTime.Ticksの値を入れる</param> |
319 | - /// <remarks>手動更新用</remarks> | |
335 | + /// <remarks>シャドウマップ描画用。シャドウマップ描画時に呼び出す</remarks> | |
320 | 336 | public void DrawShadowMap(long totalTicks) |
321 | 337 | { |
322 | 338 | if (ModelData.ModelData.Meshes.Count > 0 && ModelData.ModelData.Meshes[0].Effects.Count > 0) |
@@ -49,8 +49,11 @@ | ||
49 | 49 | /// 物理エンジン |
50 | 50 | /// </summary> |
51 | 51 | public btDiscreteDynamicsWorld Physic { get; internal set; } |
52 | - | |
53 | 52 | /// <summary> |
53 | + /// シャドウマップマネージャ | |
54 | + /// </summary> | |
55 | + public IShadowMapManager ShadowMapManager { get; set; } | |
56 | + /// <summary> | |
54 | 57 | /// 物理演算を使用フラグ |
55 | 58 | /// </summary> |
56 | 59 | /// <remarks>物理演算完成までデフォルトはfalse</remarks> |
@@ -0,0 +1,23 @@ | ||
1 | +using System; | |
2 | +using System.Collections.Generic; | |
3 | +using System.Linq; | |
4 | +using System.Text; | |
5 | +using Microsoft.Xna.Framework.Graphics; | |
6 | +using Microsoft.Xna.Framework; | |
7 | + | |
8 | +namespace MikuMikuDance.XNA | |
9 | +{ | |
10 | + /// <summary> | |
11 | + /// シャドウマップマネージャインタフェース | |
12 | + /// </summary> | |
13 | + /// <remarks>MMDX内オブジェクトとそれ以外のオブジェクトとの間で正しくシャドウマップを共有するためのインターフェイス。</remarks> | |
14 | + public interface IShadowMapManager | |
15 | + { | |
16 | + /// <summary> | |
17 | + /// シャドウマップ取得 | |
18 | + /// </summary> | |
19 | + /// <param name="texture">テクスチャ</param> | |
20 | + /// <param name="offset">シャドウマップオフセット</param> | |
21 | + void GetShadowMap(out Texture2D texture, out Vector2 offset); | |
22 | + } | |
23 | +} |