<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ひにけにXNA : Xbox360</title><link>http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx</link><description>Tags: Xbox360</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>アバターを使おう その4:カスタムアニメーション</title><link>http://blogs.msdn.com/ito/archive/2009/07/21/avatar-4.aspx</link><pubDate>Wed, 22 Jul 2009 04:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9844163</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/9844163.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9844163</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://creators.xna.com/en-US" target=_blank mce_href="http://creators.xna.com/en-US"&gt;Creators Club Onlineサイト&lt;/A&gt;でアバターの&lt;A href="http://creators.xna.com/en-US/news/customavataranimations" target=_blank mce_href="http://creators.xna.com/en-US/news/customavataranimations"&gt;カスタムアニメーション関連のサンプル等が公開&lt;/A&gt;されました。内容的には以下の三つになります。いずれもプレミアムコンテントになっているので、ダウンロードするにはCCO会員になっている必要があります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://creators.xna.com/en-US/sample/customavataranimation" target=_blank mce_href="http://creators.xna.com/en-US/sample/customavataranimation"&gt;Custom Avatar Animation Sample(カスタムアニメーションサンプル)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://creators.xna.com/en-US/utility/avataranimationrig" target=_blank mce_href="http://creators.xna.com/en-US/utility/avataranimationrig"&gt;Avatar Animation Rig(アバターアニメーション生成用のリグ)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://creators.xna.com/en-US/utility/avataranimationpack" target=_blank mce_href="http://creators.xna.com/en-US/utility/avataranimationpack"&gt;Avatar Animation Pack(アバターアニメーションパック)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Custom Avatar Animation Sample&lt;/H3&gt;
&lt;P&gt;このサンプルではアバターを自分のゲーム内で自由にアニメーションさせるための有用な情報が提供されています。3Dモデリングツール上でアニメーションリグを使って作ったアニメーションデータを作り、カスタムコンテントプロセッサーを介してFbxファイルから読み込み、CustomAvatarAnimationPlayerを使って任意のアニメーションをゲーム内で再生するという流れになっています。&lt;/P&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;Avatar Animation Rig&lt;/H3&gt;
&lt;P&gt;キャラクターアニメーションを作るときにひとつひとつのボーンをアニメーションさせるのは非常に面倒で時間の掛かる作業なので、その作業時間を軽減するためにリグ(Rig)と言われるものを使います。ここでは&lt;A href="http://usa.autodesk.com/adsk/servlet/index?id=7635018&amp;amp;siteID=123112" target=_blank mce_href="http://usa.autodesk.com/adsk/servlet/index?id=7635018&amp;amp;siteID=123112"&gt;Maya&lt;/A&gt;と&lt;A href="http://www.softimage.com/products/modtool/" target=_blank mce_href="http://www.softimage.com/products/modtool/"&gt;Softimage Mod Tool&lt;/A&gt;用のアニメーションリグをダウンロードすることができます。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig02_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig02_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=avatar-rig02 border=0 alt=avatar-rig02 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig02_thumb.png" width=643 height=484 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig02_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;Softimage Mod Toolの画面&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=avatar-rig border=0 alt=avatar-rig src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig_thumb.png" width=581 height=484 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/avatar4_10552/avatar-rig_thumb.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;Maya 2008上での画面&lt;/P&gt;
&lt;H3&gt;Avatar Animation Pack&lt;/H3&gt;
&lt;P&gt;これはゲームなどでよく使われるアニメーションデータをダウンロードすることができます。アニメーションデータはFbxファイル、Maya、そしてSoftimage Mod Tool用の三種類のファイル形式が用意されています。&lt;/P&gt;
&lt;P&gt;アニメーションは21種類あり、歩く、走る、ジャンプといった基本的な移動アニメーションの他にも座る、倒れる、泳ぐといったものがあるので、アニメーションを作るときに参考にしたり、ゲームの雛形を作るときに仮データとして使えます。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9844163" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B330F330C630F330C830FB30D130A430D730E930A430F330_/default.aspx">コンテント・パイプライン</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.1/default.aspx">XNA 3.1</category></item><item><title>アバターを使おう その３:喜怒哀楽</title><link>http://blogs.msdn.com/ito/archive/2009/06/29/avatar-3.aspx</link><pubDate>Tue, 30 Jun 2009 09:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9809327</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/9809327.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9809327</wfw:commentRss><description>&lt;P&gt;警告:画像が沢山あるので、重いかも。&lt;/P&gt;
&lt;H3&gt;アバターの表情(Expression)を自由に設定する&lt;/H3&gt;
&lt;P&gt;AvatarRenderer.Drawメソッドにはアバターのボーンと表情を指定することができます。基本アニメーションを使っている場合はAvatarAnimation.Expressionを指定しますが、ボーンと同じく、AvatarExpressionも自由に作ることができるので、アバターの表情を自由に変えることができます。&lt;/P&gt;
&lt;P&gt;AvatarExpressionには以下のプロパティがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;LeftEye (左目) &lt;/LI&gt;
&lt;LI&gt;LeftEyebrow (左眉) &lt;/LI&gt;
&lt;LI&gt;Mouth (口) &lt;/LI&gt;
&lt;LI&gt;RightEye (右目) &lt;/LI&gt;
&lt;LI&gt;RightEyebrow (右眉) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;LeftEye、RightEyeにはAvatarEye列挙型、LeftEyebrow、RightEyebrowにはAvatarEyebrow列挙型、MouthにはAvatarMouth列挙型を設定することができます。&lt;/P&gt;
&lt;P&gt;左右の目や眉に独立した値を設定できるので、ウィンクさせるといったことも可能です。眉と目、そして口のパターンと合わせると約６万９千通りの表情を設定することができます。これだけの数があるので、喜怒哀楽といった基本的な表情の他にも多彩な表情を表現することができるようになっています。&lt;/P&gt;
&lt;P&gt;以下はそれぞれの列挙型の値と、その説明です。&lt;/P&gt;
&lt;H3&gt;AvatarEyebrow列挙型&lt;/H3&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=400&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;
&lt;P align=center&gt;値&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;
&lt;P align=center&gt;説明&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;Angry&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;怒り、眉を吊り上げる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;Confused&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;困惑、眉を曲げる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;Neutral&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;自然な眉のかたち&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;Raised&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;眉をあげる。驚いたときなどに使える&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=81&gt;Sad&lt;/TD&gt;
&lt;TD vAlign=top width=319&gt;悲しみ、眉がさがる。眠たい表情にも使える&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;AvatarEye列挙型&lt;/H3&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=477&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;
&lt;P align=center&gt;値&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;
&lt;P align=center&gt;説明&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Angry&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;怒り、目がつりあがっている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Blink&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;まばたき、目を閉じている状態&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Confused&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;困惑、より目、または見上げている感じ&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Happy&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;ハッピー、目が大きくひらき、目尻が下がっている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Laughing&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;笑い、目を細めている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;LookDown&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;下を見る&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;LookLeft&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;左を見る&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;LookRight&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;右を見る&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;LookUp&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;上を見る&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Neutral&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;自然な目の形&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Sad&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;悲しみ、目尻が下がる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Shocked&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;驚き、目が点になる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Sleeping&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;眠り、目を閉じている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=100&gt;Yawning&lt;/TD&gt;
&lt;TD vAlign=top width=375&gt;あくび、眠そうな目&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;AvatarMouth列挙型&lt;/H3&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=651&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;
&lt;P align=center&gt;値&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;
&lt;P align=center&gt;説明&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Angry&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;怒り、歯をくいしばってる感じ&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Confused&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;困惑、口がゆがめている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Happy&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;ハッピー、口の両端が上がっている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Laughing&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;笑い&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Neutral&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;自然体、すこし口が開いている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticAi&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のAの発音、日本語の「あ」と「え」の中間&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticDth&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のDまたはThの発音、唇を歯で軽く噛んで発音、日本語では使われない&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticEe&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のEの発音、日本語では「い」の発音&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticFv&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のF、Vの発音、下唇を噛んで発音、日本語では使われない&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticL&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のLの発音、舌のを歯のうらに当てて発音、日本語の「れ」に近い&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticO&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のOの発音、日本語では「お」の発音&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;PhoneticW&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;リップシンク用、英語のWの最後の部分の発音、日本語では「う」の発音&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Sad&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;悲しみ、口の両端が下がっている&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=107&gt;Shocked&lt;/TD&gt;
&lt;TD vAlign=top width=542&gt;驚き、「あ」と口をあけて驚いている&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;百聞は１スクショにすぎず&lt;/H3&gt;
&lt;P&gt;前回の基本アニメーションと同じく、男性、女性アバターにいろいろな表情を設定したものを画像にしてみました。&lt;/P&gt;
&lt;P&gt;まずは、眉、目、口で共通するものが多い表情パターンです。&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=536&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=282&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-72_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-72_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=myxbox-72 border=0 alt=myxbox-72 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-72_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-72_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;自然な表情(Neutral) &lt;BR&gt;&lt;/STRONG&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Neutral &lt;BR&gt;Mouth.Neutral&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=252&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-74_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-74_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-74 border=0 alt=myxbox-74 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-74_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-74_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;怒り(Angry)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Angry &lt;BR&gt;Eye.Angry &lt;BR&gt;Mouth.Angry&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=282&gt;
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-75_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-75_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-75 border=0 alt=myxbox-75 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-75_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-75_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;困惑(Confused)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Confused &lt;BR&gt;Eye.Confused &lt;BR&gt;Mouth.Confused&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=252&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-76_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-76_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-76 border=0 alt=myxbox-76 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-76_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-76_thumb.png"&gt;&lt;/A&gt;&lt;/STRONG&gt;笑い(Laughing) &lt;BR&gt;&lt;/STRONG&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Laughing &lt;BR&gt;Mouth.Laughing&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=282&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-78_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-78_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-78 border=0 alt=myxbox-78 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-78_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-78_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center&gt;&lt;STRONG&gt;ハッピー(Happy)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Happy &lt;BR&gt;Mouth.Happy&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=252&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-73_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-73_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-73 border=0 alt=myxbox-73 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-73_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-73_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center&gt;&lt;STRONG&gt;悲しみ(Sad)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Sad &lt;BR&gt;Eye.Sad &lt;BR&gt;Mouth.Sad &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=282&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-77_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-77_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-77 border=0 alt=myxbox-77 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-77_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-77_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;驚き(Shocked)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Raised &lt;BR&gt;Eye.Shocked &lt;BR&gt;Mouth.Shocked&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=252&gt;
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;つづいて、目特有の表情パターンです。上下左右を見るというパターンがあるので、画面内の物を目で追うといったこともできます。&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=541&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=278&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-85_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-85_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-85 border=0 alt=myxbox-85 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-85_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-85_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;まばたき(Blink)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Blink &lt;BR&gt;Mouth.Neutral &lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=261&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-79_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-79_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-79 border=0 alt=myxbox-79 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-79_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-79_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;あくび(Yawning)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Yawning &lt;BR&gt;Mouth.Shocked&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=278&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-80_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-80_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-80 border=0 alt=myxbox-80 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-80_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-80_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;ねむり(Sleeping)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.Sleeping &lt;BR&gt;Mouth.Happy&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=261&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-81_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-81_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-81 border=0 alt=myxbox-81 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-81_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-81_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;上を見る(LookUp)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.LookUp &lt;BR&gt;Mouth.Neutral&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=278&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-82_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-82_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-82 border=0 alt=myxbox-82 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-82_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-82_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;BR&gt;下を見る(LookDown)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.LookDown &lt;BR&gt;Mouth.Neutral&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=261&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-83_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-83_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-83 border=0 alt=myxbox-83 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-83_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-83_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;左を見る(LookLeft)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.LookLeft &lt;BR&gt;Mouth.Neutral&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=278&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-84_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-84_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-84 border=0 alt=myxbox-84 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-84_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-84_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;BR&gt;右を見る(LookRight)&lt;/STRONG&gt; &lt;BR&gt;Eyebrow.Neutral &lt;BR&gt;Eye.LookRight &lt;BR&gt;Mouth.Neutral&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=261&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;最後に口特有の表情パターンです。表情パターンというよりも、リップシンク用のデータです。プレイヤーが操る以外のアバターには自由に喋らせることができるので、その時に使うパターンです。&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=532&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=274&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-87 border=0 alt=myxbox-87 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;PhoneticAi&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=256&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-92_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-92_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-92 border=0 alt=myxbox-92 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-92_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-92_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;BR&gt;PhoneticDth&lt;/STRONG&gt; &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=274&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-88 border=0 alt=myxbox-88 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;PhoneticEe&lt;/STRONG&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=256&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-89_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-89_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-89 border=0 alt=myxbox-89 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-89_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-89_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;BR&gt;PhoneticFv&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=274&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-86 border=0 alt=myxbox-86 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_thumb.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;STRONG&gt;PhoneticO&lt;/STRONG&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=256&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-91_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-91_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-91 border=0 alt=myxbox-91 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-91_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-91_thumb.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;STRONG&gt;PhoneticL&lt;/STRONG&gt; &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=274&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=myxbox-90 border=0 alt=myxbox-90 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_thumb.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;STRONG&gt;PhoneticW&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=256&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;リップシンク用のデータはもともと欧米向けのデータなので、日本語を喋らせるときには近い口の形を流用することになります。以下は日本語で「あいうえお」の口の形に近いものを順に並べてみました。&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=522&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=257&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-93_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-93_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-93 border=0 alt=myxbox-93 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-93_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-93_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;STRONG&gt;あ (Shocked)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=263&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-88 border=0 alt=myxbox-88 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-88_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;い (PhoneticEe)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=257&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-90 border=0 alt=myxbox-90 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-90_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;う (PhoneticW)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=263&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-87 border=0 alt=myxbox-87 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-87_thumb.png"&gt;&lt;/A&gt;&lt;STRONG&gt;え (PhoneticAi)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=257&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_2.png" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title=myxbox-86 border=0 alt=myxbox-86 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_thumb.png" width=240 height=135 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/d2a7980504e7_13929/myxbox-86_thumb.png"&gt;&lt;/A&gt; 
&lt;P align=center&gt;&lt;STRONG&gt;お (PhoneticO)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=263&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9809327" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.1/default.aspx">XNA 3.1</category></item><item><title>アバターを使おう その2:基本アニメーション</title><link>http://blogs.msdn.com/ito/archive/2009/06/25/avatar-02.aspx</link><pubDate>Fri, 26 Jun 2009 04:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9804574</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/9804574.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9804574</wfw:commentRss><description>&lt;H3&gt;アバターの基本アニメーション&lt;/H3&gt;
&lt;P&gt;AvatarAnimationを生成するときに指定する&lt;STRONG&gt;AvatarAnimationPreset&lt;/STRONG&gt;列挙型には31種類の基本アニメーションが宣言されています。内訳として、11種類の男女共通のアニメーションと、性別毎に違うアニメーションが10種類となっています。&lt;/P&gt;
&lt;P&gt;男性アバター向けのアニメーションはMaleで始まり、女性アバター向けのアニメーションはFemaleで始まるようになっています。通常はAvatarDescription.BodyTypeによって性別ごとにアニメーションを切り替えて使用しますが、アニメーションは性別に関係なく使えるので、意図的に男性アバターに女性アバターのアニメーションを再生させるということもできます。&lt;/P&gt;
&lt;H3&gt;男女共通のアニメーション&lt;/H3&gt;
&lt;P&gt;以下は男女共通アニメーション名と、その説明です。 &lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=677&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;
&lt;P align=center&gt;アニメーション名&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;
&lt;P align=center&gt;説明&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand0&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;基本姿勢アニメーション、身体的アニメーションは殆どなく、瞬きする程度。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand1&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;基本姿勢アニメーションに加えて、数秒間軽く上を見上げる動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand2&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;基本姿勢アニメーションに加えて、左、上方向に顔を向ける動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand3&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;基本姿勢アニメーションに加えて、左右を見渡した後に軽く首をかしげる動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand4&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;軽く右足を上げて、つま先を見つめる。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand5&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;両手を広げて、前後に振る。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand6&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;足元を見回す動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Stand7&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;頭を左右に傾けた後に、首を回す動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Clap&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;笑顔で拍手する。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Wave&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;笑顔で手を振る。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=103&gt;Celebrate&lt;/TD&gt;
&lt;TD vAlign=top width=572&gt;喜びの動作。アバター生成画面でアバターを選択したときにするアニメーションと同じもの。&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;性別によって違うアニメーション&lt;/H3&gt;
&lt;P&gt;以下は性別によって異なるアニメーションをまとめた表です。殆どのアニメーションはMaleLaugh、FemaleLaughといった感じで同じタイプのアニメーションが用意されています。例外としてはMaleIdleCheckHand,FemaleIdleCheckNails,MaleIdleStretch,FemaleIdelFixShoeの四つのアニメーションがあります。&lt;/P&gt;
&lt;P&gt;同じタイプのアニメーションでも、例えば笑うアニメーションの場合、男性はひざを叩いて笑う動作をするのに対して、女性は手を前にかざして笑うといった違いがあります。 &lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=679&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;
&lt;P align=center&gt;男性用アニメーション名&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;
&lt;P align=center&gt;女性用アニメーション名&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;
&lt;P align=center&gt;説明&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleIdleCheckHand&lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleIdleCheckNails &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;男性は肩を軽くまわした後に自分の手を見つめる動作。 &lt;BR&gt;女性は爪を見つめる動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleIdleLookAround &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleIdleLookAround &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;あたりを見回す動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;FemaleIdleShiftWeight &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;MaleIdleShiftWeight &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;重心を左右の足に移動する動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleIdleStretch &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleIdleFixShoe&lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;男性はストレッチ動作、女性は靴の様子を見る動作。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleAngry &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleAngry &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;怒る。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleConfused &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleConfused &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;困惑。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleLaugh &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleLaugh &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;大笑い。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleCry &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleCry &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;泣く。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleSurprised &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleShocked &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;驚き。&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=141&gt;MaleYawn &lt;/TD&gt;
&lt;TD vAlign=top width=156&gt;FemaleYawn &lt;/TD&gt;
&lt;TD vAlign=top width=380&gt;あくび。男性は手を口に当ててあくび。女性は手を広げてあくび。&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;百聞は一動画にしかずということで、全ての基本アニメーションを再生した動画を作ってみました。男性、女性アバターを並べて、それぞれのアニメーションを二回再生するようになっています。 &lt;/P&gt;
&lt;DIV align=center&gt;
&lt;OBJECT width=560 height=340&gt;&lt;PARAM NAME="movie" VALUE="http://www.youtube.com/v/gguyGGX_ls0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;PARAM NAME="allowFullScreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;
&lt;embed src="http://www.youtube.com/v/gguyGGX_ls0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" mce_src="http://www.youtube.com/v/gguyGGX_ls0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9804574" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.1/default.aspx">XNA 3.1</category></item><item><title>vFetchでスキンアニメーション</title><link>http://blogs.msdn.com/ito/archive/2009/05/10/more-bones-10.aspx</link><pubDate>Mon, 11 May 2009 05:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9601289</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9601289.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9601289</wfw:commentRss><description>&lt;p&gt;2009/06/25 追記: XNA GS 3.1用のサンプルを &lt;a href="http://higeneko.net/hinikeni/sample/xna31/vFetchSkinningSample.zip"&gt;http://higeneko.net/hinikeni/sample/xna31/vFetchSkinningSample.zip&lt;/a&gt;にアップしました。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;vFetchでスキンアニメーション&lt;/strong&gt;&lt;strong&gt;、その3:&lt;strong&gt;vFetchでスキンアニメーション&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;スキンアニメーションで使えるボーン数を増やそうシリーズの記事も１０回目となる今回で終わりです。今回はvFetchを使ったスキンアニメーションの実装例を紹介します。&lt;/p&gt;  &lt;p&gt;XNA Game Studio 3.0で動作するサンプルを用意しました。基本的に&lt;a href="http://creators.xna.com/en-US/sample/skinnedmodel" mce_href="http://creators.xna.com/en-US/sample/skinnedmodel"&gt;Skinned Model&lt;/a&gt;サンプルと同じ使い方ですが、今回のサンプルはXbox 360上でのみ動作することに注意してください。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://higeneko.net/hinikeni/sample/vFetchSkinningSample.zip" mce_href="http://higeneko.net/hinikeni/sample/vFetchSkinningSample.zip"&gt;http://higeneko.net/hinikeni/sample/vFetchSkinningSample.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; また、今回のサンプルは&lt;a href="http://blogs.msdn.com/ito/archive/2009/05/05/more-bones-05.aspx" target="_blank" mce_href="http://blogs.msdn.com/ito/archive/2009/05/05/more-bones-05.aspx"&gt;クォータニオンでスキンアニメーションサンプル&lt;/a&gt;に以下の変更を加えたものになっています。 &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;BoneVertexの実装 &lt;/li&gt;    &lt;li&gt;AnimationPlayerの変更 &lt;/li&gt;    &lt;li&gt;モデルの頂点宣言の変更 &lt;/li&gt;    &lt;li&gt;ボーン格納用頂点バッファの生成 &lt;/li&gt;    &lt;li&gt;シェーダーの変更 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;BoneVertexの実装&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;ボーン情報を頂点バッファへ格納するためのBoneVertex構造体を作ります。この構造体には実際のデータの他に頂点要素宣言と、ストライド情報が含まれています。&lt;/p&gt;  &lt;p&gt;この宣言の仕方は独自の頂点データを宣言する基本的な手法です。StructLayoutアトリビュートを使って構造体のメンバーがコンパイラーによって並び替えが起こらないようにし、静的なVertexElements配列と、構造体のバイトサイズを返すSizeInBytesを宣言します。&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color: green"&gt;ボーン格納用の頂点構造体
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;[&lt;span style="color: #2b91af"&gt;StructLayout&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;LayoutKind&lt;/span&gt;.Sequential)]
&lt;span style="color: blue"&gt;public struct &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BoneVertex
&lt;/span&gt;{
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;回転部分(クォータニオン) 
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Quaternion &lt;/span&gt;Rotation;

    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;平行移動部分
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Vector3 &lt;/span&gt;Translation;

    &lt;span style="color: blue"&gt;public &lt;/span&gt;BoneVertex( &lt;span style="color: #2b91af"&gt;Quaternion &lt;/span&gt;rotation, &lt;span style="color: #2b91af"&gt;Vector3 &lt;/span&gt;translation )
    {
        Rotation = rotation;
        Translation = translation;
    }

    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;頂点宣言
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VertexElement&lt;/span&gt;[] VertexElements = {
        &lt;span style="color: green"&gt;// Rotation (16バイト)
        &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VertexElement&lt;/span&gt;(1, 0, &lt;span style="color: #2b91af"&gt;VertexElementFormat&lt;/span&gt;.Vector4,
                                &lt;span style="color: #2b91af"&gt;VertexElementMethod&lt;/span&gt;.Default,
                                &lt;span style="color: #2b91af"&gt;VertexElementUsage&lt;/span&gt;.TextureCoordinate, 1),
        &lt;span style="color: green"&gt;// Traslation (12バイト)
        &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VertexElement&lt;/span&gt;(1,16, &lt;span style="color: #2b91af"&gt;VertexElementFormat&lt;/span&gt;.Vector3,
                                &lt;span style="color: #2b91af"&gt;VertexElementMethod&lt;/span&gt;.Default,
                                &lt;span style="color: #2b91af"&gt;VertexElementUsage&lt;/span&gt;.TextureCoordinate, 2),
    };

    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;ストライドの取得
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="color: blue"&gt;public static int &lt;/span&gt;SizeInBytes
    {
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Marshal&lt;/span&gt;.SizeOf( &lt;span style="color: blue"&gt;typeof&lt;/span&gt;( &lt;span style="color: #2b91af"&gt;BoneVertex &lt;/span&gt;) ); }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;AnimationPlayerの変更&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;クォータニオンによるスキンアニメーションサンプルからの変更点としては、SkinRoataions、SkinTranslationsをSkinTransformsに変換、GetSkinTransformsメソッドはBoneVertex配列を返すように変更します。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;モデルの頂点宣言の変更&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ボーン情報を頂点ストリームに格納するので、頂点宣言を変更する必要があります。元となる頂点宣言に指定した頂点要素を追加するExtendVertexDeclarationメソッドを持つRenderHelperクラスを作ります。&lt;/p&gt;

&lt;p&gt;ModelMeshPart.VertexDecralationは読み込み専用のプロパティなので、変更した頂点宣言はModelMeshPart.Tagプロパティに格納します。 &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// モデルのMeshPartのVertexDeclarationにvFetch用の頂点宣言を
// 追加してMeshPart.Tagに格納する
&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;( &lt;span style="color: #2b91af"&gt;ModelMesh &lt;/span&gt;mesh &lt;span style="color: blue"&gt;in &lt;/span&gt;currentModel.Meshes )
{
    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;( &lt;span style="color: #2b91af"&gt;ModelMeshPart &lt;/span&gt;meshPart &lt;span style="color: blue"&gt;in &lt;/span&gt;mesh.MeshParts )
    {
        meshPart.Tag = &lt;span style="color: #2b91af"&gt;RenderHelper&lt;/span&gt;.ExtendVertexDeclaration(
                meshPart.VertexDeclaration, &lt;span style="color: #2b91af"&gt;BoneVertex&lt;/span&gt;.VertexElements );
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;ボーン格納用頂点バッファの生成&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;続いてボーン情報を格納するための頂点バッファを生成します。これも&lt;a href="http://blogs.msdn.com/ito/archive/2009/05/07/more-bones-07.aspx" target="_blank" mce_href="http://blogs.msdn.com/ito/archive/2009/05/07/more-bones-07.aspx"&gt;「頂点テクスチャでスキンアニメーション」&lt;/a&gt;の時と同じように、連続してデータを書き込むためのWritableVertexBufferというクラスを作って使用します。&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// ボーン情報を書き込むための頂点バッファの生成
&lt;/span&gt;boneVB = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WritableVertexBuffer&lt;/span&gt;( GraphicsDevice,
        animationPlayer.GetSkinTransforms().Length * &lt;span style="color: #2b91af"&gt;BoneVertex&lt;/span&gt;.SizeInBytes, 2 );&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;こうして生成した頂点バッファに以下のようにしてボーン情報を書き込み、ストリーム1として設定します。&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// ボーンの情報を頂点ストリームに書き込む
&lt;/span&gt;boneVB.Flip();
&lt;span style="color: blue"&gt;int &lt;/span&gt;offset = boneVB.SetData&amp;lt;&lt;span style="color: #2b91af"&gt;BoneVertex&lt;/span&gt;&amp;gt;( animationPlayer.GetSkinTransforms() );

gd.Vertices[1].SetSource( boneVB.VertexBuffer, offset, &lt;span style="color: #2b91af"&gt;BoneVertex&lt;/span&gt;.SizeInBytes );&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;実際の描画ですが、ModelMeshPart.Tagに格納した頂点データを使うので、単純にModelMesh.Drawメソッドを呼ばずに、個々のModelMeshPartを描画する必要があります。 &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;( &lt;span style="color: #2b91af"&gt;ModelMesh &lt;/span&gt;mesh &lt;span style="color: blue"&gt;in &lt;/span&gt;currentModel.Meshes )
{
    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;( &lt;span style="color: #2b91af"&gt;Effect &lt;/span&gt;effect &lt;span style="color: blue"&gt;in &lt;/span&gt;mesh.Effects )
    {
        effect.Parameters[&lt;span style="color: #a31515"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;].SetValue( world );
        effect.Parameters[&lt;span style="color: #a31515"&gt;&amp;quot;View&amp;quot;&lt;/span&gt;].SetValue( view );
        effect.Parameters[&lt;span style="color: #a31515"&gt;&amp;quot;Projection&amp;quot;&lt;/span&gt;].SetValue( projection );
    }

    &lt;span style="color: green"&gt;// 
    &lt;/span&gt;gd.Indices = mesh.IndexBuffer;
    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;( &lt;span style="color: #2b91af"&gt;ModelMeshPart &lt;/span&gt;meshPart &lt;span style="color: blue"&gt;in &lt;/span&gt;mesh.MeshParts )
    {
        &lt;span style="color: green"&gt;// ボーン情報の頂点要素を追加した頂点宣言を使う
        &lt;/span&gt;gd.VertexDeclaration = meshPart.Tag &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;VertexDeclaration&lt;/span&gt;;

        gd.Vertices[0].SetSource( mesh.VertexBuffer,
                            meshPart.StreamOffset, meshPart.VertexStride );

        &lt;span style="color: #2b91af"&gt;Effect &lt;/span&gt;effect = meshPart.Effect;
        effect.Begin();
        effect.CurrentTechnique.Passes[0].Begin();

        gd.DrawIndexedPrimitives( &lt;span style="color: #2b91af"&gt;PrimitiveType&lt;/span&gt;.TriangleList, meshPart.BaseVertex,
                                0, meshPart.NumVertices, meshPart.StartIndex,
                                meshPart.PrimitiveCount );

        effect.CurrentTechnique.Passes[0].End();
        effect.End();
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;シェーダーの変更 &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;シェーダーの変更点は、vfetch命令を使って自前で頂点データをフェッチし、boneIndicesを使ってボーン情報をフェッチするだけです。後はクォータニオンを使ったスキンアニメーションと同じ処理をします。&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: green"&gt;//-----------------------------------------------------------------------------
// 頂点シェーダー
//=============================================================================
&lt;/span&gt;&lt;span style="color: blue"&gt;VS_OUTPUT &lt;/span&gt;&lt;span style="color: maroon"&gt;VertexShader&lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;index : INDEX)
{
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;position;
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;normal;
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;texCoord;
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;boneIndices;
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;boneWeights;

    &lt;span style="color: green"&gt;// vfetchはアセンブリ命令なのでasmブロックを使う必要がある
    &lt;/span&gt;asm
    {
        &lt;span style="color: green"&gt;// 頂点データのフェッチ
        &lt;/span&gt;vfetch position,        index, position0
        vfetch normal,            index, normal0
        vfetch texCoord,        index, texcoord0
        vfetch boneIndices,        index, blendindices
        vfetch boneWeights,        index, blendweight
    };
    
    &lt;span style="color: green"&gt;// ボーン情報のフェッチ
    &lt;/span&gt;&lt;span style="color: blue"&gt;float4 &lt;/span&gt;q1, q2, q3, q4;
    &lt;span style="color: blue"&gt;float4 &lt;/span&gt;t1, t2, t3, t4;
    
    asm
    {
        vfetch q1,    boneIndices.x, texcoord1
        vfetch q2,    boneIndices.y, texcoord1
        vfetch q3,    boneIndices.z, texcoord1
        vfetch q4,    boneIndices.w, texcoord1
        
        vfetch t1,    boneIndices.x, texcoord2
        vfetch t2,    boneIndices.y, texcoord2
        vfetch t3,    boneIndices.z, texcoord2
        vfetch t4,    boneIndices.w, texcoord2
    };&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;vfetchを使った開発&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;vfetch命令はXbox 360上でしか使うことができないので、いきなりシェーダー全体をvfetchを使って書いてしまうと、うまく動作しなかったときにvfetchの仕方が悪いのか、シェーダー内の処理自体にバグがあるのかを特定するのが難しくなります。&lt;/p&gt;

&lt;p&gt;ですから、vfetchを使ったシェーダーコードを書く場合、実際にvfetch命令を使ったシェーダーを書く前にWindows上で動作するシェーダーを書き、シェーダーが問題無く動作するのを確認してから、vfetchを使ったものに書き換えるようにすると良いでしょう。ここで問題が起きた場合はvfetch部分が原因だと特定できるので、時間の節約になります。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9601289" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category></item><item><title>vFetchの使い方</title><link>http://blogs.msdn.com/ito/archive/2009/05/09/more-bones-09.aspx</link><pubDate>Sun, 10 May 2009 05:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9599911</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9599911.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9599911</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;vFetchでスキンアニメーション、その２:vFetchの使い方&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Fetchを使ったスキンアニメーションの実装例を紹介する前にvfetchの基本的な使い方を紹介します。&lt;/P&gt;
&lt;P&gt;例えば、以下のシェーダーコードのように頂点位置、色を使用する頂点シェーダーがあるとします。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;VS_OUTPUT &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;VertexShader&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;float4 &lt;/SPAN&gt;position: &lt;SPAN style="COLOR: navy"&gt;POSITION&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;float4 &lt;/SPAN&gt;color : &lt;SPAN style="COLOR: navy"&gt;COLOR &lt;/SPAN&gt;)
{
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;上のコードと同じ動作をするコードはvFetchを使って以下のように書くことができます。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: green"&gt;// INDEXセマンティクスを使ってインデックス値を取得する
&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;VS_OUTPUT &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;VertexShader&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;int &lt;/SPAN&gt;index : INDEX)
{
    &lt;SPAN style="COLOR: blue"&gt;float4 &lt;/SPAN&gt;pos;    &lt;SPAN style="COLOR: green"&gt;// フェッチしたデータを格納するための変数、float4のみ指定できる
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;float4 &lt;/SPAN&gt;col;

    &lt;SPAN style="COLOR: green"&gt;// vfetchはアセンブリ命令なのでasmブロックを使う必要がある
    &lt;/SPAN&gt;asm
    {
        vfetch pos, index, position        &lt;SPAN style="COLOR: green"&gt;// positionのフェッチ
         &lt;/SPAN&gt;vfetch col, index, color        &lt;SPAN style="COLOR: green"&gt;// colorのフェッチ
    &lt;/SPAN&gt;};
    &lt;/PRE&gt;
&lt;P&gt;最初にインデックスバッファから読み込んだインデックス値を取得するためにINDEXセマンティクスを使います。次にフェッチしたデータを格納する為の変数を宣言します。この変数はfloat4型でないといけません。それ以外の型を指定するとコンパイルエラーになります。&lt;/P&gt;
&lt;P&gt;次にvfetch命令を使って頂点データをフェッチします。vfetchはアセンブリ命令なのでasmブロック内に書く必要があります。vfetchの書式は以下の様になっています。今までは読みやすいようにvFetchと書いてきましたが、実際の命令は全て小文字のvfetchになります。&lt;/P&gt;
&lt;P&gt;vfetch &lt;STRONG&gt;取得したデータを格納する変数名&lt;/STRONG&gt;, &lt;STRONG&gt;頂点インデックス&lt;/STRONG&gt;, &lt;STRONG&gt;セマンティクス&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ここではインデックスバッファから取得した頂点インデックスを使用していますが、任意のインデックスを指定することができます。このことを利用して、&lt;A href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx" target=_blank mce_href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx"&gt;GameFest Japan 2009のデモ&lt;/A&gt;では、index内に元の頂点インデックスとインスタンスのインデックスの２つの情報を&lt;A href="http://blogs.msdn.com/ito/archive/2008/02/08/network-arithmetic-encoding.aspx" target=_blank mce_href="http://blogs.msdn.com/ito/archive/2008/02/08/network-arithmetic-encoding.aspx"&gt;算術符号化圧縮&lt;/A&gt;を使って格納し、シェーダー内で展開、頂点データとインスタンス用のデータをvFetchを使って取得しています。&lt;/P&gt;
&lt;P&gt;vfetchに指定するセマンティクスはシェーダーで指定する入力セマンティクスの小文字となっています。大文字が混ざっているとコンパイルエラーになります。また、texcoord&lt;STRONG&gt;0&lt;/STRONG&gt;, texcoord&lt;STRONG&gt;1&lt;/STRONG&gt;のようにセマンティクスの後に数字を指定することもできます。下の表は入力セマンティクスとvFetchで指定するセマンティクスの対応表です。&lt;/P&gt;
&lt;TABLE border=2 cellSpacing=0 cellPadding=2 width=458&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;
&lt;P align=center&gt;&lt;STRONG&gt;入力セマンティクス&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;
&lt;P align=center&gt;&lt;STRONG&gt;vFetchセマンティクス&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;
&lt;P align=center&gt;&lt;STRONG&gt;説明&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;BINORMAL&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;binormal&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;バイノーマル(従法線)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;BLENDINDICES&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;blendindices&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;ブレンドインデックス&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;BLENDWIEHGTS&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;blendweight&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;ブレンドの重み&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;COLOR&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;color&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;カラー&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;NORMAL&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;normal&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;法線&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;POSITION&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;position&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;頂点位置&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;PSIZE&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;psize&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;ポイントサイズ&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;TANGENT&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;tangent&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;タンジェント(接線)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=144&gt;TEXCOORD&lt;/TD&gt;
&lt;TD vAlign=top width=149&gt;texcoord&lt;/TD&gt;
&lt;TD vAlign=top width=163&gt;テクスチャ座標&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;まとめると&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;頂点インデックスはINDEXセマンティクスを使って取得する &lt;/LI&gt;
&lt;LI&gt;フェッチしたデータを格納する変数の型はfloat4にする &lt;/LI&gt;
&lt;LI&gt;vfetchはasmブロック内に記述する &lt;/LI&gt;
&lt;LI&gt;vfetchのセマンティクスは入力セマンティクスの小文字になっている &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;と、なります。&lt;/P&gt;
&lt;P&gt;次回は、このvFetchを使ったスキンアニメーションの実装例を紹介します。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9599911" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category></item><item><title>vFetchってなに？</title><link>http://blogs.msdn.com/ito/archive/2009/05/08/more-bones-08.aspx</link><pubDate>Sat, 09 May 2009 05:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9598402</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9598402.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9598402</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;vFetchでスキンアニメーション、その１:vFetchってなに？&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Xbox 360のGPUはDirect X 9.0とDirect X 10の中間であると言われることがありますが、vFetchはその特徴を示すひとつの機能です。vFetchはシェーダー内で使えるアセンブリ命令で、Vertex Fetchの略、つまり頂点データをフェッチをするための命令です。&lt;/P&gt;
&lt;P&gt;vFetchを使うことで頂点数の増減こそできませんが、Direct X 10で追加されたジオメトリシェーダーを使った&lt;A href="http://developer.download.nvidia.com/SDK/10/direct3d/samples.html#Fur" target=_blank mce_href="http://developer.download.nvidia.com/SDK/10/direct3d/samples.html#Fur"&gt;ファーシェーダー&lt;/A&gt;のように隣接する頂点データをフェッチしてフィンポリゴンをリアルタイムに生成したりすることもできます。&lt;/P&gt;
&lt;P&gt;自由に頂点をフェッチできるというのが最大の利点ですが、弱点もあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows上では使えない &lt;/LI&gt;
&lt;LI&gt;アセンブリ命令なので、頂点フェッチの最適化などを自前でする必要がある &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;vFetchはWindows上では使うことができないので、Windows/Xbox 360両対応のゲームを製作する場合にはそれぞれのプラットフォーム別に違う手法を実装する必要があります。&lt;/P&gt;
&lt;P&gt;vFetch命令はメモリアクセス命令でもあるので、使用する場所を間違えると大きなパフォーマンスロスになってしまいます。通常はシェーダーコンパイラーが最適化してくれるのですが、明示的にvFetchを使うときには注意が必要です。vFetchを最適な状態で使用していないと40%程のパフォーマンスロスになってしまった、という経験が私自身ありました。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GPUはどうやって頂点データを読んでいるのか？&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;vFetchの使い方を知るには、GPUがどのように頂点データを読み込んでいるのかを知っておくと理解しやすいと思います。&lt;/P&gt;
&lt;P&gt;頂点シェーダー内で頂点データを読み込むには以下の三つの情報が不可欠です。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;シェーダー内の入力セマンティクス &lt;/LI&gt;
&lt;LI&gt;頂点宣言(VertexDeclaration) &lt;/LI&gt;
&lt;LI&gt;頂点ストリーム &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;シェーダー内の入力セマンティクス指定は以下のコードように&lt;STRONG&gt;「変数名 : セマンティクス名」&lt;/STRONG&gt;となります。この宣言によって、以下の例では、position変数にはPOSITIONセマンティクス、normal変数にはNORMALセマンティクスをといった感じに、任意の変数に指定したセマンティクスを割り当てています。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;VS_OUTPUT &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;VertexShader&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;float4 &lt;/SPAN&gt;position : &lt;SPAN style="COLOR: navy"&gt;POSITION&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;float3 &lt;/SPAN&gt;normal : &lt;SPAN style="COLOR: navy"&gt;NORMAL&lt;/SPAN&gt;)
{
    &lt;SPAN style="COLOR: green"&gt;// ...

&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;次に、頂点宣言では複数の頂点要素(VertexElement)を指定することで、セマンティクスとメモリレイアウトとの関連付けをします。セマンティクスは&lt;A href="http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.vertexelementusage.aspx" target=_blank mce_href="http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.vertexelementusage.aspx"&gt;VertexElementUsage&lt;/A&gt;で表されます。頂点宣言によって、任意のセマンティクスがどのストリームのどのメモリアドレスからどんなフォーマットで読み込むのかを指定します。&lt;/P&gt;
&lt;P&gt;下の頂点要素の宣言は&lt;STRONG&gt;「POSITIONはストリーム番号0番、頂点データの12バイト目からVector3フォーマットで格納されている」&lt;/STRONG&gt;という意味になります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;VertexElement&lt;/SPAN&gt;(0, 12, &lt;SPAN style="COLOR: #2b91af"&gt;VertexElementFormat&lt;/SPAN&gt;.Vector3,
                        &lt;SPAN style="COLOR: #2b91af"&gt;VertexElementMethod&lt;/SPAN&gt;.Default,
                        &lt;SPAN style="COLOR: #2b91af"&gt;VertexElementUsage&lt;/SPAN&gt;.Position, 0),&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;そして、最後に頂点ストリームの設定です。頂点ストリームの設定は&lt;A href="http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.vertexstream.setsource.aspx" target=_blank mce_href="http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.vertexstream.setsource.aspx"&gt;VertexStream.SetSource&lt;/A&gt;メソッドで行います。以下のコードの意味は&lt;STRONG&gt;「ストリーム0番はメッシュの頂点バッファの100バイト目から始まり、ストライドサイズは64バイト」&lt;/STRONG&gt;という意味です。通常、ストライドサイズはひとつの頂点データと同じサイズですが、別のサイズでも問題ありません。例えば頂点サイズは20バイトだけど、他にも頂点データ以外のデータが入っているのでストライドサイズは48バイトなんていう指定の仕方もできます。&lt;/P&gt;&lt;PRE class=code&gt;GraphicsDevice.Vertices[0].SetSource( mesh.VertexBuffer, 100, 64 );&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;ストリームと頂点宣言の関係をまとめると以下の図のようになります。&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=stream border=0 alt=stream src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/morebones08_117F5/stream_3.png" width=604 height=483 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/morebones08_117F5/stream_3.png"&gt; &lt;/P&gt;
&lt;P&gt;頂点バッファには頂点という名前がついているので、GPUが読み込める頂点データ形式だけを格納するべきものだと思われがちですが、GPUからすると頂点バッファは単なるメモリの塊に過ぎないので上図のように、GPUで読み込むべきPosition, Normal, Color以外にGPUが呼ぶ必要がないSpeedがあっても全く問題ありません。GPUが気にするのはストリーム情報と頂点宣言だけです。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx" target=_blank mce_href="http://blogs.msdn.com/ito/archive/2008/12/12/gamefest-japan-2008-demo.aspx"&gt;GameFest Japan 2008のデモ&lt;/A&gt;では、このことを利用してゲームオブジェクトのリストをそのまんま頂点バッファに設定して使用することでCPU側の無駄なコピー処理を省くDirect Mapping(私が勝手に命名)は、この仕組みを利用しています。&lt;/P&gt;
&lt;P&gt;ただし、ストライドの最大サイズは256バイトなので、大きなデータ構造を指定できないことに注意してください。&lt;/P&gt;
&lt;P&gt;GPUはシェーダー内のセマンティクス、頂点宣言、そしてストリームの情報を元に以下のように頂点データを読み込んでいます。ここではDrawIndexedPrimitiveを使い、頂点シェーダー内でposition変数の値を取得するまでの過程を説明します。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;インデックスバッファから頂点インデックスを取得 &lt;/LI&gt;
&lt;LI&gt;POSITIONセマンティクスに該当する頂点要素の情報を見つける &lt;/LI&gt;
&lt;LI&gt;頂点アドレスの計算 
&lt;UL&gt;
&lt;LI&gt;頂点アドレス = 頂点バッファのアドレス + ストリームオフセット + ストライド × 頂点インデックス &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;頂点要素のメモリアドレスの計算 
&lt;UL&gt;
&lt;LI&gt;頂点要素アドレス = 頂点アドレス + 頂点要素のオフセット &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;頂点要素のメモリアドレスから指定されたフォーマット形式でデータをposition変数に読み込む &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;以上のステップは普段はGPUで自動的に行われているのですが、この過程の1と2の部分をシェーダー内でやってしまおうというのがvFetch命令です。&lt;/P&gt;
&lt;P&gt;次回に続く&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9598402" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B030E930D530A330AF30B930_/default.aspx">グラフィクス</category></item><item><title>ローカライゼーション・サンプル</title><link>http://blogs.msdn.com/ito/archive/2008/11/17/localization-sample.aspx</link><pubDate>Mon, 17 Nov 2008 13:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9109153</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9109153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9109153</wfw:commentRss><description>&lt;P&gt;Creators Club Onlineに以下の３つの新しいサンプルが追加されました。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/localization" mce_href="http://creators.xna.com/en-US/sample/localization"&gt;ローカライゼーション サンプル(Localization)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/safearea" mce_href="http://creators.xna.com/en-US/sample/safearea"&gt;セーフエリア サンプル(Safe Area)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A target=_blank href="http://creators.xna.com/en-US/sample/invites" mce_href="http://creators.xna.com/en-US/sample/invites"&gt;招待 サンプル(Invites)&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;一気に紹介すると長くなるので、三回に分けてそれぞれのサンプルを紹介していきます。今回はローカライゼーション サンプルについて紹介します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライゼーション&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;コミュニティゲームでゲームを投稿する場合、配信地域を選ぶことができます。現状ではアメリカ、カナダ、イギリス、フランス、イタリア、そしてスペインの６カ国で、2009年の前半には日本が加わり７カ国になります。世界の複数の国々の人達に自分の作ったゲームを楽しんで貰うためには必要な作業としてローカライズがあります。そこで、このサンプルではローカライズされた文字列とアセットの使い方のコードが含まれています。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライズされた文字列表示&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;このサンプルでは言語別のリソースファイル(.resxファイル)を用意し、ゲームクラスコンストラクタの中で実行環境の言語情報を以下のコードのように指定して文字列を変更しています。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Strings&lt;/SPAN&gt;.Culture = &lt;SPAN style="COLOR: #2b91af"&gt;CultureInfo&lt;/SPAN&gt;.CurrentCulture;&lt;BR&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;SpriteFontDescriptionクラスから派生したLocalizedFontDescriptionクラスに複数のリソースファイルを指定できるようになっていて、ここに各言語の文字列が入ったリソースファイルを指定し、コンテント･パイプライン内でLocalizedFontProcessorによって変換されます。&lt;/P&gt;
&lt;P&gt;言語別のリソースファイルは、&lt;STRONG&gt;リソース名.言語コード.resx&lt;/STRONG&gt;のようになっています。このサンプルではリソース名がStringsになっていて日本語のリソースファイル名は&lt;STRONG&gt;Strings.ja.resx&lt;/STRONG&gt;となっています。この言語コードは&lt;A target=_blank href="http://ja.wikipedia.org/wiki/ISO_639" mce_href="http://ja.wikipedia.org/wiki/ISO_639"&gt;ISO 639-1&lt;/A&gt;で定義されているアルファベット２文字になっています。&lt;/P&gt;
&lt;P&gt;殆どの場合は言語コードを指定するだけで済むのですが、言語コードだけでは足りなくなる場合もあります。例えば、同じ英語でもアメリカの場合はcolorでもイギリスの場合はcolourと違いがあります。その場合は言語コードと国名コードの組み合わせを使います。国名コードは&lt;A target=_blank href="http://ja.wikipedia.org/wiki/ISO_3166-1" mce_href="http://ja.wikipedia.org/wiki/ISO_3166-1"&gt;ISO 3166-1&lt;/A&gt;で定義されているアルファベット２文字を使います。アメリカの英語の場合は&lt;STRONG&gt;en-US&lt;/STRONG&gt;、イギリスの英語の場合は&lt;STRONG&gt;en-GB&lt;/STRONG&gt;となります。&lt;/P&gt;
&lt;P&gt;この&lt;STRONG&gt;言語コード-国名コード&lt;/STRONG&gt;の組み合わせをカルチャ名と呼び、カルチャを表すCultureInfoクラスを生成する時に以下のコードのようにして使用します。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Strings&lt;/SPAN&gt;.Culture = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;CultureInfo&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"en-GB"&lt;/SPAN&gt;);&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;ローカライズされたアセット読み込み&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ローカライズ作業の大半は文章の翻訳になりますが、中にはテクスチャ等のアセット自体をローカライズしたい時があります。このサンプルでは読み込むアセット名を前述のリソースファイル名と同じように、&lt;STRONG&gt;アセット名.カルチャ名&lt;/STRONG&gt;の組み合わせであることを前提として使うGetLocalizedAssetNameメソッドがゲームクラスに宣言されていて、国別の国旗テクスチャを変更しています。&lt;/P&gt;
&lt;P&gt;以下はコミュニティゲームがサポートする国と言語の表です。&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=441&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;国名&lt;/TD&gt;
&lt;TD vAlign=top width=109&gt;公用語&lt;/TD&gt;
&lt;TD vAlign=top width=78&gt;言語コード&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;国名コード&lt;/TD&gt;
&lt;TD vAlign=top width=100&gt;カルチャ名&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;アメリカ&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語&lt;/TD&gt;
&lt;TD vAlign=top width=79&gt;en&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;US&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-US&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;カナダ&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語、フランス語&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;en,fr&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;CA&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-CA,fr-CA&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;イギリス&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;英語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;en&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;GB&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;en-GB&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;フランス&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;フランス語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;fr&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;FR&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;fr-FR&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;イタリア&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;イタリア語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;it&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;IT&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;it-IT&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;スペイン&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;スペイン語&lt;/TD&gt;
&lt;TD vAlign=top width=81&gt;es&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;ES&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;es-ES&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=71&gt;日本&lt;/TD&gt;
&lt;TD vAlign=top width=108&gt;日本語&lt;/TD&gt;
&lt;TD vAlign=top width=82&gt;ja&lt;/TD&gt;
&lt;TD vAlign=top width=80&gt;JP&lt;/TD&gt;
&lt;TD vAlign=top width=99&gt;ja-JP&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;特徴として、カナダでは公用語が英語とフランス語の２つの言語が使われていることです。&lt;/P&gt;
&lt;P&gt;このサンプルは複数の言語へのローカライズの参考にもなりますが、リソースファイルを使った日本語表示の方法としても参考になるサンプルだと思います。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9109153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category><category domain="http://blogs.msdn.com/ito/archive/tags/Windows/default.aspx">Windows</category></item><item><title>XNA Game Studio Connect関連の新機能</title><link>http://blogs.msdn.com/ito/archive/2008/10/31/xna-game-studio-connect.aspx</link><pubDate>Fri, 31 Oct 2008 13:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9026372</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9026372.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9026372</wfw:commentRss><description>&lt;P&gt;XNA Game Studio Connectに関連する新機能として以下の二つがあります。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;スクリーンキャプチャー機能&lt;/LI&gt;
&lt;LI&gt;配置の高速化&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;スクリーンキャプチャー&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;以前から要望として多かった機能の一つとしてXbox 360上で動作しているゲームのスクリーンキャプチャーがあります。XNA GS 3.0ではこのスクリーンキャプチャーが使えるようになりました。&lt;/P&gt;
&lt;P&gt;スクリーンキャプチャーはゲームをデバッガにアタッチした状態、つまりVisual Studio上からF5キーを押して実行した時と、XNA Framework Remote Performance Monitorを使った時にしか使えないことに注意してください。&lt;/P&gt;
&lt;P&gt;キャプチャ自体は非常に簡単でXNA Game Studio Device Centerでキャプチャーしたいデバイスのアイコンの右クリックメニューから&lt;STRONG&gt;Take Screen Capture&lt;/STRONG&gt;を選択するだけです。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=Untitled-1 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-1_5.png" width=422 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-1_5.png"&gt;&lt;/P&gt;
&lt;P&gt;スクリーンキャプチャーされた画像はピクチャフォルダに&lt;STRONG&gt;デバイス名-番号&lt;/STRONG&gt;というファイル名、PNG形式で保存されます。複数のスクリーン画像を続けてキャプチャーすると、デバイス名-1.png、デバイス名-2.pngといった感じに複数の画像ファイルが作られます。&lt;/P&gt;
&lt;P&gt;Xbox 360上で動作しているゲーム画面をブログなどで紹介するときには、今まではデジカメで画面を撮ったり、自前でキャプチャープログラムを書かないといけませんでしたが(&lt;A target=_blank href="http://blogs.msdn.com/shawnhar/archive/2007/01/08/capturing-screenshots-from-xbox-xna-games.aspx" mce_href="http://blogs.msdn.com/shawnhar/archive/2007/01/08/capturing-screenshots-from-xbox-xna-games.aspx"&gt;こんな方法もあったりしました&lt;/A&gt;)、これからはキャプチャー、ブログ書き込みプログラム上にドラッグ＆ドロップするだけで、以下のようなスクリーンショットをブログに載せることが簡単になりました。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=cheiron-3 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_thumb.png" width=644 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/cheiron-3_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;配置の高速化&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNA GS 2.0以前ではXbox 360上でゲームを開発している時にゲームの配置、特にコンテントの配置に時間が掛かるという問題がありました。XNA GS 3.0ではこの問題を解決するために二つの改良が施されました。&lt;/P&gt;
&lt;P&gt;一つ目はファイルの圧縮です。&lt;/P&gt;
&lt;P&gt;XNA GS 3.0ではプロジェクトプロパティにContent Buildタブが追加され、その中にコンテントパイプラインの出力ファイルの圧縮オプションが追加されました。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=Untitled-2 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-2_3.png" width=451 height=93 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGameStudioConnect_3254/Untitled-2_3.png"&gt; &lt;/P&gt;
&lt;P&gt;デフォルトではWindows用プロジェクトでは圧縮せず、Xbox 360用プロジェクトでは圧縮するようになっています。Windows用とXbox 360用のプロジェクトでデフォルトの設定が違うのは次の理由があります。PCにはXbox 360より高速で大容量なHDDがあり、圧縮に掛かる時間に見合うだけのメリットが少ないのに対して、Xbox 360ではコミュニティゲームの150MBという容量制限があるのと、圧縮した方がコンパイルと配置の全体時間の短縮になるからです。もちろん、このオプションは自由に変えられるようになっています。&lt;/P&gt;
&lt;P&gt;圧縮率はコンテントによって左右されますが、通常は元のサイズの70%～50%程度です。中には元のサイズの25%まで圧縮されたというケースもありました。この圧縮効果によって、配置に掛かる時間は三割から二倍程度速くなりました。&lt;/P&gt;
&lt;P&gt;そして、二つ目は配置用のプログラムのチューニングです。&lt;/P&gt;
&lt;P&gt;XNA Game Studio Connectの待機画面では、メインスレッド以外の5つのスレッドは暇を持て余していたので配置プログラムをマルチスレッド用に特化させることで配置に掛かる時間が大幅に短縮されました。&lt;/P&gt;
&lt;P&gt;この二つの相乗効果によって、Xbox 360へのコンテントの配置が劇的に速くなりました。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9026372" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>XNA Game Studio 3.0がリリース</title><link>http://blogs.msdn.com/ito/archive/2008/10/31/xna-gs-3-0-released.aspx</link><pubDate>Fri, 31 Oct 2008 11:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9026220</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ito/comments/9026220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=9026220</wfw:commentRss><description>&lt;P&gt;XNA Game Studio 3.0がリリースされました。&lt;A target=_blank href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;displaylang=en"&gt;ここからダウンロード&lt;/A&gt;することができます。細かい注意点などは&lt;A target=_blank href="http://creators.xna.com/en-US/XNAGS3readme" mce_href="http://creators.xna.com/en-US/XNAGS3readme"&gt;Readmeページ&lt;/A&gt;が参考になりますが、ここではPCへのインストールと、Xbox 360用の新しいXNA Game Studio Connectの導入の仕方について説明します。&lt;/P&gt;
&lt;P&gt;XNA Game Studio 3.0がサポートしてる開発環境はVisual Studio 2008と&lt;A target=_blank href="http://www.microsoft.com/japan/msdn/vstudio/Express/" mce_href="http://www.microsoft.com/japan/msdn/vstudio/Express/"&gt;Visual C# 2008 Express(無償)&lt;/A&gt;です。これらの開発環境を持っていない場合はXNA Game Studio 3.0をインストール前にあらかじめインストールする必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;XNA Game Studio 3.0 Beta版をインストールした人への注意点&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNA Game Studio 3.0のベータ版をインストールしてた人は、リリース版をインストールする前にベータ版をアンインストールする必要があります。ベータ版がアンインストールされていない状態でリリース版をインストールしようとすると以下のメッセージが表示され、インストールが終了します。&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=無題 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/%E7%84%A1%E9%A1%8C_3.png" width=494 height=235 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/%E7%84%A1%E9%A1%8C_3.png"&gt;&lt;/P&gt;
&lt;P&gt;ベータ版では以下の3つのコンポーネントがインストールされています。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft XNA Framework Redistributable 3.0(Beta)&lt;/LI&gt;
&lt;LI&gt;Microsoft XNA Game Studio 3.0(Beta)&lt;/LI&gt;
&lt;LI&gt;Microsoft XNA Game Studio Platform Tools(Beta)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;これらのコンポーネントを全てアンインストールしてください。特に３番めのコンポーネントはアンインストールし忘れることが多いようです(私もよく忘れてました)。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;XNA Game Studio Connectの導入について&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Xbox 360上でゲームを開発するには、1.0と2.0で別々のプログラムを実行する必要がありましたが、3.0の新しいXNA Game Studio Connectは2.0と3.0の両方のゲームを実行、開発することができます。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=GSConnect_2 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_thumb.png" width=644 height=364 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/GSConnect_2_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Xbox 360の通常のゲームの場合、ゲームのバグなどを修正することができるタイトルアップデートという仕組みがありますが、新しいXNA Game Studio Connectはバグ修正ではないこと、そしてタイトルアップデートの枠内に収まりきらないということで、新しいXNA Game Studio Connectをインストールするには古いXNA Game Studio Connectを消して、新しいXNA Game Studio Connectをダウンロードするという二つのステップを踏む必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;古いXNA Game Studio Connectを消す&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;古いXNA Game Studio Connectを起動しようとすると、アップデートを促す画面が表示されるだけになっています。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Xbox 360のダッシュボード画面の&lt;STRONG&gt;ゲーム&lt;/STRONG&gt;ブレード内で、&lt;STRONG&gt;ゲームライブラリー&lt;/STRONG&gt;を選択、そして&lt;STRONG&gt;マイゲーム&lt;/STRONG&gt;を選択する&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;を選択し、&lt;STRONG&gt;ゲームを消す&lt;/STRONG&gt;を選択する。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;重要:&lt;/STRONG&gt;新しいXNA Game Studio Connectをダウンロードする前に、古いXNA Game Studioを消すようにしてください。新しいXNA Game Studio Connectをダウンロードした後に古いXNA Game Studio Connectを消した場合、Xbox 360自体がフリーズするので電源ボタンを押して電源を切る必要があります。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;新しいXNA Game Studio Connectをダウンロードする&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Xbox 360のダッシュボード画面の&lt;STRONG&gt;マーケットプレース&lt;/STRONG&gt;ブレード内で&lt;STRONG&gt;ゲームストア&lt;/STRONG&gt;を選択し、&lt;STRONG&gt;すべて: ゲーム&lt;/STRONG&gt;を選択。&lt;/LI&gt;
&lt;LI&gt;XNA Creators Clubを選択後に&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;を選択。ダウンロードしなおすを選択すると、新しい&lt;STRONG&gt;XNA Game Studio Connect&lt;/STRONG&gt;がインストールされます。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;先に新しいXNA Game Studio Connectをダウンロードしてしまうと、画面上には二つのXNA Game Studio Connectが表示されますが、新旧のXNA Game Studio Connectではアイコンが違うので見分けがつきます。&lt;/P&gt;
&lt;DIV align=center&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=400 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=200&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=creator_icon_2[1] src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_thumb.png" width=64 height=64 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/creator_icon_2%5B1%5D_thumb.png"&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=XnaIcon[1] src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/XnaIcon%5B1%5D_3.png" width=64 height=64 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/XNAGS3.0released_1AA7/XnaIcon%5B1%5D_3.png"&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=200&gt;新しい&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;古い&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9026220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+3.0/default.aspx">XNA 3.0</category></item><item><title>XNA Game Studio 2.0がリリース</title><link>http://blogs.msdn.com/ito/archive/2007/12/13/xna20-released.aspx</link><pubDate>Fri, 14 Dec 2007 04:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6766605</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/6766605.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=6766605</wfw:commentRss><description>&lt;P&gt;と、言うわけでXNA Game Studio 2.0がリーリスされました。&lt;/P&gt;
&lt;P&gt;以下のリンクからダウンロードできます。&lt;/P&gt;
&lt;P&gt;&lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;インストール時の注意としてはXNA 2.0のベータ版をアンインストールしてからリリース版をインストールしてください。このとき、Games for Windows Live Redistもアンインストールするのを忘れないでください。&lt;/P&gt;
&lt;P&gt;その他は&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;GSE 1.0をアンイーストールしなくても 2.0を使える(Side-by-Side) &lt;/LI&gt;
&lt;LI&gt;Visual Studio 2005はもちろん、C# Express 2005上でも使える。でもVisual Studio 2008には未対応 &lt;/LI&gt;
&lt;LI&gt;GSE 1.0のプロジェクトは&lt;A href="http://creators.xna.com/gamestudio2/UpgradeWizardSetup.msi" mce_href="http://creators.xna.com/gamestudio2/UpgradeWizardSetup.msi"&gt;Project Upgrade Wizard for XNA Game Studio 2.0&lt;/A&gt;で2.0用に更新できる 
&lt;UL&gt;
&lt;LI&gt;使い方は&lt;A href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm" mce_href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm"&gt;こちら(英文)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Xbox 360上でXNA 2.0のゲーム開発や遊ぶ為にはXNA Game Studio Connectを使う(要XNAクリエータークラブ会員)&lt;/LI&gt;
&lt;LI&gt;Xbox Live、またはGames for Windows Liveを利用したゲームを作るのにも遊ぶのにも&lt;STRONG&gt;Liveゴールド会員&lt;/STRONG&gt;であることと&lt;STRONG&gt;XNAクリエータークラブ会員&lt;/STRONG&gt;である必要がある&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;といった感じです。&lt;/P&gt;
&lt;P&gt;ネットワークゲームの開発環境としてはクリエータークラブ会員である場合はXbox 360とWindowsマシンをLAN接続している環境、つまりXbox 360用ゲームを開発できる環境があればXbox 360、Windows間で遊べるネットワークゲームを作ることができます。&lt;/P&gt;
&lt;P&gt;クリエータークラブ会員でなくとも、Windowsマシンを2つ用意してLAN接続することで実現できます。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6766605" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/_397DCB4E_/default.aspx">紹介</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+2.0/default.aspx">XNA 2.0</category></item><item><title>XNA Game Studio 2.0の細かな修正点</title><link>http://blogs.msdn.com/ito/archive/2007/11/28/xna-game-studio-2-0-small-changes.aspx</link><pubDate>Thu, 29 Nov 2007 04:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6588752</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/6588752.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=6588752</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/shawnhar/archive/2007/11/21/lots-of-little-improvements-in-xna-game-studio-2-0.aspx" target=_blank mce_href="http://blogs.msdn.com/shawnhar/archive/2007/11/21/lots-of-little-improvements-in-xna-game-studio-2-0.aspx"&gt;Shawn Hargreaves氏のブログ&lt;/A&gt;から拝借+ちょっと補足説明&lt;/P&gt;
&lt;P&gt;XNA Game Studio 2.0になって追加、または修正された細かな機能を紹介します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GamePadState.IsButtonDownとIsButtonUpメソッドの追加&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;今まではコントローラーのボタンが押されているかの判定はButtons.A == ButtonState.Pressedと言う様に長いコードを書かなければいけませんでした。特に複数のボタンのいずれかが押されているケースを判定するのには以下のようなコードになってしまいました。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// AボタンもBボタンもXボタンも全部ジャンプだ！！
&lt;/SPAN&gt;    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;if&lt;/SPAN&gt; (padState.Buttons.A == &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ButtonState&lt;/SPAN&gt;.Pressed ||
        padState.Buttons.B == &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ButtonState&lt;/SPAN&gt;.Pressed ||
        padState.Buttons.X == &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ButtonState&lt;/SPAN&gt;.Pressed )
        Jump();
&lt;/PRE&gt;
&lt;P&gt;XNA GS 2.0で追加されたIsButtonDownとIsButtonUpメソッドを使うことによって以下のようにスッキリとしたコードを書くことができます。&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;if&lt;/SPAN&gt; ( padState.IsButtonDown(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Buttons&lt;/SPAN&gt;.A|&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Buttons&lt;/SPAN&gt;.B|&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Buttons&lt;/SPAN&gt;.X) )
        Jump();
&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Keyboard.GetState(PlayeIndex player)オーバーロードの追加&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;このオーバーロードメソッドを使うことで、Xbox 360コントローラーにつけることのできる&lt;A href="http://www.xbox.com/ja-JP/hardware/x/xbox360messengerkit/" target=_blank mce_href="http://www.xbox.com/ja-JP/hardware/x/xbox360messengerkit/"&gt;チャットパッド&lt;/A&gt;からの入力を取得することができます。以前の引数なしのメソッドを呼んだ場合はPlayerIndex.Oneを指定するのと同じ動作をします。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Audio.Cueの再生が途切れてしまう問題の解消&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;これは、1.0では参照されていないCueのインスタンスがガーベージコレクションが発生した場合、音声の再生の途中に関わらずに破棄されてしまい、その段階で音声が途切れてしまうという不具合がありました。、2.0ではCue.Finalizer内で音声再生中はインスタンスが破棄されないようにすることで解決しています。&lt;/P&gt;
&lt;P&gt;この問題は特に3Dオーディオを再生する場合、Cueに対してリスナーとエミッターを関連付けるときに&lt;/P&gt;&lt;PRE class=code&gt;    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Cue&lt;/SPAN&gt; cue = soundBank.GetCue(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"fire"&lt;/SPAN&gt;);
    cue.Apply3D( listener, emitter );
&lt;/PRE&gt;
&lt;P&gt;のようなコードを書く必要があり、このcueのインスタンスを保持するというのが面倒な作業になっていました。&lt;/P&gt;
&lt;P&gt;2.0ではこの問題を解決し、上のように書いた場合でも問題なく動作するようになりました。また、SoundBank.PlayCue(string name, Listener listner, Emitter emitter)メソッドが追加されたので、簡単に3Dオーディオをサポートした効果音を再生することができます。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;フレームワーク内での不要なメモリ確保の削除&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;不要なメモリ確保をすることはガーベージコレクションの頻繁な発生につながり、結果的にパフォーマンス低下に繋がります。特に世代別GCを実装していないXbox 360上では大きな問題になります。&lt;/P&gt;
&lt;P&gt;2.0ではフレームワーク内で不必要なメモリ確保している部分の修正をしました。&lt;/P&gt;
&lt;P&gt;簡単なところでは&lt;STRONG&gt;GamePad.GetState&lt;/STRONG&gt;、&lt;STRONG&gt;SpriteBatch.DrawString&lt;/STRONG&gt;メソッド内でメモリ確保しないようになりました。SpriteBatch.DrawString内では、&lt;STRONG&gt;Dictionary&amp;lt;K,T&amp;gt;&lt;/STRONG&gt;を使って実装していたのですが、キーがバリュータイプだと不要なメモリ確保がXbox 360上で発生することがありました。興味深いのはデバッガ使用時と、未使用時でJITが生成するコードに違いがあり、デバッガ上で実行させるとボクシングが発生することがあります。ですから、GCの発生の有無を調べる場合はF5ではなく、&lt;STRONG&gt;Ctrl+F5&lt;/STRONG&gt;で実行することをお勧めします。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ModelMeshCollection&lt;/STRONG&gt;、&lt;STRONG&gt;ModelMeshPartCollection&lt;/STRONG&gt;、&lt;STRONG&gt;ModelEffectCollection&lt;/STRONG&gt;、そして&lt;STRONG&gt;ModelBoneCollection&lt;/STRONG&gt;クラスの&lt;STRONG&gt;GetEnumerator&lt;/STRONG&gt;メソッドの実装がIEnumeratorを返す代わりに、Enumerator構造体を返すように実装されました。&lt;/P&gt;
&lt;P&gt;これはモデルを描画するのによく使われるパターンとして&lt;/P&gt;&lt;PRE class=code&gt;    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ModelMesh&lt;/SPAN&gt; mesh &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;in&lt;/SPAN&gt; model.Meshes)
    {
        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Effect&lt;/SPAN&gt; effect &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;in&lt;/SPAN&gt; mesh.Effects)
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;BasicEffect&lt;/SPAN&gt; be = effect &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;as&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;BasicEffect&lt;/SPAN&gt;;
            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;if&lt;/SPAN&gt; (be != &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;null&lt;/SPAN&gt;)
            {
                be.Projection = proj;
                be.View = view;
            }
        }
        mesh.Draw();
    }
&lt;/PRE&gt;
&lt;P&gt;のように&lt;STRONG&gt;foreach&lt;/STRONG&gt;を多用します。この時、コレクションがIEnumeratorを返すと暗黙的なメモリ確保が発生してしまいます。&lt;BR&gt;せっかく便利なforeach文なのに、GCを避けるためにわざわざfor文に書き換える必要がありましたが、2.0ではforeachを使ってもメモリ確保は発生しません。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SpriteFontのカーニングサポート&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;カーニング(Kerning)とは、英数字で&lt;STRONG&gt;WAIT&lt;/STRONG&gt;のような文字を表示したときに全体の見た目のバランスを取るためにAとWの間を意図的に狭めるような処理のことです。これはspritefontファイル内に&lt;STRONG&gt;&amp;lt;UseKerning&amp;gt;ture&amp;lt;/UseKerning&amp;gt;&lt;/STRONG&gt;を指定することで設定できます。spritefontファイルで何も指定しない場合はカーニング処理をしないので、1.0で作ったファイルをカーニングさせるのには&lt;STRONG&gt;UseKerning&lt;/STRONG&gt;エレメントを追加して&lt;STRONG&gt;Spacing&lt;/STRONG&gt;の値を0することをお勧めします。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6588752" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ito/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+2.0/default.aspx">XNA 2.0</category></item><item><title>ゲームプログラミング開始</title><link>http://blogs.msdn.com/ito/archive/2007/03/06/1824882.aspx</link><pubDate>Wed, 07 Mar 2007 08:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1824882</guid><dc:creator>Yuichi Ito</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ito/comments/1824882.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ito/commentrss.aspx?PostID=1824882</wfw:commentRss><description>&lt;P&gt;前回は、XNA Game Studio Expressでゲームプロジェクトを新規作成したときに生成されるテンプレートコードの中身の説明をしました。今回は、ゲームプログラムの基本となる以下のものを実装、つまりコーディングをします。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;コンテントの読み込み 
&lt;LI&gt;&lt;STRONG&gt;SpriteBatch&lt;/STRONG&gt;を使ったスプライト表示 
&lt;LI&gt;コントローラーによる移動&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;今回は、簡単な説明に留めますが、次回からはそれぞれについて詳しく説明していきます。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;コンテントの読み込み&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNAにはビットマップ、3Dモデル、オーディオといったゲームを作る上で必要なコンテントを簡単に、効率よく使うための&lt;STRONG&gt;コンテント・パイプライン&lt;/STRONG&gt;というものがあります。全てのコンテントは、プロジェクトをビルドした時に、コンテント・パイプラインによって処理され、Windows/Xbox360上で効率良く使えるデータ形式に変換されるようになっています。また、それぞれのゲームで独自形式のフォーマットを取り扱えるようにカスタマイズできる機能を持っています。&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=64 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/air-plane%5B3%5D.png" width=128 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/air-plane%5B3%5D.png"&gt;&lt;/P&gt;
&lt;P&gt;今回使うコンテントは、左の飛行機の絵が一枚だけです。XNAでは全ての画像データはテクスチャとして変換されます。コンテントのプロジェクトへの追加はソートコードの追加と同じで、ソリューション エクスプローラからコンテントを追加するプロジェクトを右クリックしてメニューを開き、その中の&lt;STRONG&gt;追加/既存の項目&lt;/STRONG&gt;を選びます。&amp;nbsp;ダイアログボックスが開いたら、ファイルの種類を&lt;STRONG&gt;Content Pipeline Files&lt;/STRONG&gt;にしてから追加したいコンテントを選びます。&lt;/P&gt;
&lt;P&gt;GSE 1.0では以下のファイルフォーマット形式がサポートされています。&lt;/P&gt;
&lt;P align=center&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=399 border=1 unselectable="on"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=98&gt;3Dモデル&lt;/TD&gt;
&lt;TD class="" vAlign=top width=102&gt;2D画像&lt;BR&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=97&gt;マテリアル&lt;/TD&gt;
&lt;TD class="" vAlign=top width=100&gt;オーディオ&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=97&gt;.FBX&lt;BR&gt;.X&lt;/TD&gt;
&lt;TD class="" vAlign=top width=104&gt;.DDS .BMP&lt;BR&gt;.JPG .PNG&lt;BR&gt;.TGA&lt;/TD&gt;
&lt;TD class="" vAlign=top width=97&gt;.FX&lt;/TD&gt;
&lt;TD class="" vAlign=top width=100&gt;.XAP(XACT)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;プロジェクトディレクトリ直下に直接コンテントを追加してもいいのですが、コンテントとコードの区別がつくようにプロジェクトディレクトリの下に&lt;STRONG&gt;Content&lt;/STRONG&gt;というディレクトリを作っておくと便利です。また、この場合、ContentManagerの初期化の時(&lt;STRONG&gt;Initialize&lt;/STRONG&gt;メソッド内)にコンテントのルートディレクトリを指定しておくと、コンテントの読み込みの時に&lt;STRONG&gt;"Content/アセット名"&lt;/STRONG&gt;と書かずに済みます。&lt;/P&gt;&lt;PRE class=code&gt;        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// コンテントのルートディレクトリを"Content"に設定する
&lt;/SPAN&gt;        content = &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ContentManager&lt;/SPAN&gt;(Services, &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Content"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;実際のコンテントの読み込みをする為には以下のようなコードを&lt;STRONG&gt;LoadGraphicsContent&lt;/STRONG&gt;メソッド内に書きます。&lt;/P&gt;&lt;PRE class=code&gt;        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// 飛行機用のテクスチャを読み込む
&lt;/SPAN&gt;        airPlaneTexture = content.Load&amp;lt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Texture2D&lt;/SPAN&gt;&amp;gt;(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"air-plane"&lt;/SPAN&gt;);

&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;ContentManager&lt;/STRONG&gt;クラスには&lt;STRONG&gt;Load&amp;lt;T&amp;gt;&lt;/STRONG&gt;という、ジェネリクスメソッドがあり、どのような型のコンテントでも同じようにして読み込むことができます。.Net 2.0ならではの機能であるジェネリクスを使うことによって、今までのように&lt;STRONG&gt;LoadTexture2D&lt;/STRONG&gt;、&lt;STRONG&gt;LoadMeshFromFile&lt;/STRONG&gt;といった、長い関数名を覚える必要もなく簡単にコンテントを読み込むことができます。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;スプライトの描画&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;XNAでは簡単にテクスチャイメージを描画する為の&lt;STRONG&gt;SpriteBatch&lt;/STRONG&gt;というクラスがあります。なぜ単に&lt;STRONG&gt;Sprite&lt;/STRONG&gt;ではなく、&lt;STRONG&gt;SpriteBatch&lt;/STRONG&gt;という名前になっているかというと、このクラスは複数のスプライトをまとめて処理(バッチ処理)する機能をもっているからです。詳細については別の投稿で説明しますが、簡単に言うとWindows/Xbox360の違いを気にせずに、高パフォーマンスを実現しながらも、簡単に使える便利なものといった感じです。&lt;/P&gt;&lt;PRE class=code&gt;        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// SpriteBatchに描画開始を伝える
&lt;/SPAN&gt;        spriteBatch.Begin();

        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// 飛行機のテクスチャを指定した座標に表示する
&lt;/SPAN&gt;        spriteBatch.Draw(airPlaneTexture, airPlanePos, &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Color&lt;/SPAN&gt;.White);

        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// SpriteBatchに描画終了を伝える
&lt;/SPAN&gt;        spriteBatch.End();

&lt;/PRE&gt;
&lt;P&gt;以上のコードを&lt;STRONG&gt;Draw&lt;/STRONG&gt;メソッド内に書き加えます。&lt;STRONG&gt;SpriteBatch.Begin&lt;/STRONG&gt;と&lt;STRONG&gt;SpriteBatch.End&lt;/STRONG&gt;の間に&lt;STRONG&gt;SpriteBatch.Draw&lt;/STRONG&gt;メソッドを書くようにします。&lt;STRONG&gt;Begin&lt;/STRONG&gt;と&lt;STRONG&gt;End&lt;/STRONG&gt;の間には何回でも&lt;STRONG&gt;Draw&lt;/STRONG&gt;を呼ぶことができます。&lt;STRONG&gt;SpriteBatch.Begin&lt;/STRONG&gt;を呼ぶ前にDrawを呼んだり、&lt;STRONG&gt;SpriteBatch.Begin&lt;/STRONG&gt;を続けて呼んだりすると、実行時に例外が発生します。&lt;/P&gt;
&lt;P&gt;スプライトは回転、スケールといった機能もサポートしていますが、ここでは単にテクスチャを指定した座標に描画しています。座標を表すのが&lt;STRONG&gt;Vector2&lt;/STRONG&gt;構造体なので、2D描画に浮動小数点を使って大丈夫なの？と思う人もいるかもしれませんが、最近のGPUの殆どがピクセル以下の描画をサポートしていて、画面をゆっくりとスクロールさせる時などの滑らかさに違いが現れます。&lt;/P&gt;
&lt;P&gt;ですから、XNAでゲームを作った場合は、昔の日本製パソコンで出てたシューティングゲームのように&lt;STRONG&gt;「脅威の0.5ドットスクロール」&lt;/STRONG&gt;と宣伝することが奨励されています(ウソです)。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;コントローラーによる移動&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;ここまでで、画面には飛行機が表示されるようになっていますが、ここではその飛行機をコントローラーによって動かすコードを実装します。&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;PRE class=code&gt;    &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// 飛行機の座標をコントローラー及び、キーボードの入力によって変更する
&lt;/SPAN&gt;    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Vector2&lt;/SPAN&gt; dir;
    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;if&lt;/SPAN&gt; (ProcessKeyboardInput(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;out&lt;/SPAN&gt; dir) == &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;false&lt;/SPAN&gt;)
    {
        &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// キー入力が無かったので、コントローラーの左スティックの状態を取得する
&lt;/SPAN&gt;        dir = &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;GamePad&lt;/SPAN&gt;.GetState(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;PlayerIndex&lt;/SPAN&gt;.One).ThumbSticks.Left;
    }

    dir.Y = -dir.Y; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// スクリーン座標のY方向とキー入力の上下を合わせる

&lt;/SPAN&gt;    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;const&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;float&lt;/SPAN&gt; speed = 400.0f; &lt;SPAN style="COLOR: rgb(0,128,0)"&gt;// ピクセル/秒の速度
&lt;/SPAN&gt;    airPlanePos += dir * (&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;float&lt;/SPAN&gt;)gameTime.ElapsedGameTime.TotalSeconds * speed;

&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;&amp;nbsp;上のコードを&lt;STRONG&gt;Update&lt;/STRONG&gt;メソッド内に書き加えます。日本では北米程にXbox360が普及していない、つまりXbox360コントローラーを持っている人が少ないと思われるので、&lt;STRONG&gt;ProcessKeyboardInput&lt;/STRONG&gt;というメソッドでキーボード入力をサポートしましたが、ここでは割愛します。&lt;/P&gt;
&lt;P&gt;ゲームコントローラーの入力は、自由な時に&lt;STRONG&gt;GamePad.GeState&lt;/STRONG&gt;を使うことによって、その状態を知ることができます。コントローラーが繋がっていない場合でも、プログラム自体は問題なく動作するので上のように非常に簡単にコントローラーの入力を処理することができます。&lt;/P&gt;
&lt;P&gt;ここでは&lt;STRONG&gt;ThumbSticks.Left&lt;/STRONG&gt;という、コントローラーの左スティックの状態を取得しています。&lt;STRONG&gt;ThumbSticks.Left&lt;/STRONG&gt;は&lt;STRONG&gt;Vector2&lt;/STRONG&gt;構造体で、スティックの左右は&lt;STRONG&gt;Vector2.X&lt;/STRONG&gt;に格納され、左が-1、右の状態が1の値を示し、スティックの上下は&lt;STRONG&gt;Vector2.Y&lt;/STRONG&gt;に格納され、上が1、下が-1の値を示します。アナログスティックなので傾け方によって、-1から1までの値に変化します。&lt;/P&gt;
&lt;P&gt;コントローラーから、移動したい方向を取得した後は、その方向への移動量を現在の座標に加えることによって移動します。ここでは単に一定量の速度で移動させるのではなく、&lt;STRONG&gt;GameTime.ElapsedGameTime&lt;/STRONG&gt;を使うことで、&lt;STRONG&gt;Game.IsFixedTimeStep&lt;/STRONG&gt;が&lt;STRONG&gt;false&lt;/STRONG&gt;の時にフレームレートが変化した場合でも、飛行機が同じ速度で移動するようになっています。&lt;STRONG&gt;Game.IsFixedTimeStep&lt;/STRONG&gt;によるゲーム更新の仕方の違いは次の投稿で詳しく説明します。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ゲームの基本ができた&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/Sample01-screenshot%5B8%5D.jpg" target=_blank mce_href="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/Sample01-screenshot%5B8%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=187 src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/Sample01-screenshot_thumb%5B8%5D.jpg" width=240 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/ito/WindowsLiveWriter/3c74cae540bf_1073C/Sample01-screenshot_thumb%5B8%5D.jpg"&gt;&lt;/A&gt;ここまででゲーム製作の基本である、コンテントの読み込み、メインループでの更新、描画、そしてコントローラーの入力といった処理のXNA上でのやり方を紹介してきました。これだけでも、簡単な2Dベースのゲームを作る下地はできたのではないでしょうか？&lt;/P&gt;
&lt;P&gt;今回、実装したコードをアップしておきます。下に表示されている&lt;STRONG&gt;Attachment&lt;/STRONG&gt;のSample01.zipをクリックすることでダウンロードできます。Windows用とXbox360用のソリューションファイルが入っているので、どちらのプラットフォームでも動作します。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1824882" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/ito/attachment/1824882.ashx" length="12957" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/ito/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/ito/archive/tags/XNA+_D530EC30FC30E030EF30FC30AF30_/default.aspx">XNA フレームワーク</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B330F330C630F330C830FB30D130A430D730E930A430F330_/default.aspx">コンテント・パイプライン</category><category domain="http://blogs.msdn.com/ito/archive/tags/Xbox360/default.aspx">Xbox360</category><category domain="http://blogs.msdn.com/ito/archive/tags/_B230FC30E0308B957A76_/default.aspx">ゲーム開発</category></item></channel></rss>