×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

のぞき穴


 1.はじめに…
場面転換に使えそうなエフェクトをやってみました。




 2.概要

やり方は、下の図のように模様となるテクスチャを拡大縮小するだけです。
うまく穴の中だけが見えるように、今回の実装ではアルファテストを行い、穴をくりぬいています。



アルファテストのやり方ですが、下のコードのようにGraphicsDeviceのRenderStateに色々と設定をします。
00205:  	// レンダリングステートの設定.
00206:  	GraphicsDevice.RenderState.AlphaTestEnable = true;
00207:  	GraphicsDevice.RenderState.AlphaFunction = CompareFunction.Greater;
00208:  	GraphicsDevice.RenderState.DepthBufferEnable = false;
00209:  	
00210:  	// のぞき穴の描画.
00211:  	customEffect.Begin();
00212:  	customEffect.CurrentTechnique.Passes[0].Begin();
00213:  	customEffect.Parameters["Map"].SetValue(texture);
00214:  	customEffect.Parameters["Scale"].SetValue(scale);
00215:  	quad.Draw(GraphicsDevice);
00216:  	customEffect.CurrentTechnique.Passes[0].End();
00217:  	customEffect.End();
00218:  
00219:  	// レンダリングステートを戻す.
00220:  	GraphicsDevice.RenderState.AlphaTestEnable = false;
00221:  	GraphicsDevice.RenderState.DepthBufferEnable = true;
00222:
				
さて、上の概念図を見て「テクスチャの周りは黒くないけどどうすんのよ?」と思った方もいるかもしれませんが、テクスチャの繰返しをBorderに設定して、ボーダーの色を黒に設定すれば、テクスチャの周りを塗りつぶしてくれます。
実際にどうやるかって言うと、sampler_stateに設定をします。
00007:  texture Map;
00008:  sampler Smp = sampler_state
00009:  {
00010:  	Texture = <Map>;
00011:  	MinFilter = Linear;
00012:  	MagFilter = Linear;
00013:  	MipFilter = None;
00014:  	AddressU = Border;
00015:  	AddressV = Border;
00016:  	BorderColor = float4(0, 0, 0, 1);
00017:  };
				
後は、テクスチャの拡大・縮小ですが…これはテクスチャ座標をいじくればいいので問題ないでしょう。


 Download
本ソースコードおよびプログラムを使用したことによる如何なる損害も製作者は責任を負いません。
本ソースコードおよびプログラムは自己責任でご使用ください。
プログラムの作成にはMicrosoft Visual Studio 2008 SP1 Professional,およびXNA Game Studio 3.1を用いています。







Flashを利用するためにはPluginが必要です。 <!-- <div id="ninja-hp-inactive-footer" style="clear:both;margin:15px;padding:0;text-align:center;position:relative;z-index:9999"><div style="padding:5px;margin:0 auto;background:#fff;display:inline-block;"><span onclick="closeHpInactiveCmFooter()" style="border:1px solid #dedede;display:block;width:12px;height:12px;font-size:16px;line-height:0.75;margin:0 0 5px;padding:0;color:#aaa;float:right;cursor:pointer;font-family:'arial','Osaka','MS Pゴシック',sans-serif;">×</span><div style="clear:both"></div><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/encount"></script><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/fire?f=434"></script><p style="font-size:10px;padding:3px;margin:0;text-align:center;color:#aaa;background:#fffffc;">[PR]この広告は3ヶ月以上更新がないため表示されています。<br>ホームページを更新後24時間以内に表示されなくなります。</p></div></div><script type="text/javascript">var headerCookieName="eef81cd2d37248e849ac93f13bc6f236",footerCookieName="9668962c900782ddfab7a625cf84301b",inactiveCmView_header=getInactiveCmViewCookie(headerCookieName),inactiveCmView_footer=getInactiveCmViewCookie(footerCookieName);function closeHpInactiveCm(){document.getElementById("ninja-hp-inactive").style.display="none";setInactiveCmViewCookie(headerCookieName,(new Date).getTime(),3600)} function closeHpInactiveCmFooter(){document.getElementById("ninja-hp-inactive-footer").style.display="none";setInactiveCmViewCookie(footerCookieName,(new Date).getTime(),3600)}function setInactiveCmViewCookie(b,c,d){var e=location.pathname,a=[],a=e.split("/");""!=a[a.length-1]&&(a[a.length-1]="",e=a.join("/"));a=(new Date).getTime();a=(new Date(a+1E3*d)).toUTCString();b=""+(b+"="+escape(c));b+="; path="+e;document.cookie=d?b+("; expires="+a+"; "):b+"; "} function getInactiveCmViewCookie(b){var c="",d="";return 0<document.cookie.length&&(c=document.cookie.indexOf(b+"="),-1!=c)?(c=c+b.length+1,d=document.cookie.indexOf(";",c),-1==d&&(d=document.cookie.length),unescape(document.cookie.substring(c,d))):""};</script><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/encount"></script> <ul class="tdftad"> <li><a href="http://www.ninja.co.jp/hp/">忍者ホームページ</a></li> <li class="tdftlink"><a href="http://xranking.shinobi.jp/" target="_blank">【アクセスUP!】忍者アクセスランキング</a></li> <li class="tdftpr"><a href="http://xr.shinobi.jp/homepage?code=3909101f6a6ce6621cea1d25a4ca4a81&encrypt=RA8gjhICwjx5JWzIZYuJdQsfFPLUzwFoe%2BWdDxGSJlY%3D" rel="nofollow" target="_blank">鈴虫の部屋(野鳥の日記が中...</a></li> <li class="tdftlink"><a href="http://www.ninja.co.jp/admax/" target="_blank" rel="nofollow">最短5分であなたのサイトに広告配信【忍者AdMax】</a></li> <li class="tdftlink"><a href="http://www.ninja.co.jp/" target="_blank" rel="nofollow">忍者ツールズ</a></li> <style> .asumi_ad_frame{display:inline-block;} .asumi_ad_frame div{display:inline-block;} </style> <li class="tdftpr"><div class="asumi_ad_frame"><script type="text/javascript" charset="utf-8" src="//asumi.shinobi.jp/fire?f=184"></script></div></li> </ul></body> -->