<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>XNA / DirectX / ゲームプログラミング</title><link>http://blogs.wankuma.com/yo/category/876.aspx</link><description>XNA とDirectX,ゲームプログラミングに関するプログラム</description><managingEditor>おのでら</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>おのでら</dc:creator><title>Zune を手に入れた！</title><link>http://blogs.wankuma.com/yo/archive/2009/02/15/168167.aspx</link><pubDate>Sun, 15 Feb 2009 09:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2009/02/15/168167.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/168167.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2009/02/15/168167.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/168167.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/168167.aspx</trackback:ping><description>&lt;p&gt;　XNA で作ったゲームが Zune で動かせるようになったということで気にはなっていたんですが、なんせアメリカとカナダにしか売ってないのでずっと手を出さないままにしていました。ですがまあ運が良かったというかなんかでようやく入手。フラッシュメモリ版 8GB タイプです。&lt;/p&gt; &lt;p&gt;&lt;img height="196" alt="Zune" src="http://yo.wankuma.com/blog/uploadimage/Zune_88D9/Zune.jpg" width="261" border="0"&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; 写真だと少しわかりにくいですが、大きさ的には iPod nano ぐらいでしょうか。思ったよりは小さかったです。iPod 系は持っていないので普通に音楽プレイヤーとしても使っていこうかと思っています。&lt;/p&gt; &lt;p&gt;　実はもういろいろ触ってはいるんですが、ネタになりそうなものが多いのでそれはおいおい書いてきたいと思います。&lt;/p&gt; &lt;p&gt;&lt;img height="196" alt="Zune2" src="http://yo.wankuma.com/blog/uploadimage/Zune_88D9/Zune2.jpg" width="261" border="0"&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/168167.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>XNA : GamerServicesComponent を追加すると終了時に落ちる？</title><link>http://blogs.wankuma.com/yo/archive/2009/01/02/165459.aspx</link><pubDate>Fri, 02 Jan 2009 16:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2009/01/02/165459.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/165459.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2009/01/02/165459.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/165459.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/165459.aspx</trackback:ping><description>&lt;p&gt;　XNA Game Studio 3.0 で Windows 用ゲームプロジェクトを作成し、コンストラクタに&lt;/p&gt;&lt;pre class="program"&gt;&lt;span class="src_documentcomment"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// GameMain コンストラクタ&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="src_keyword"&gt;public&lt;/span&gt; GameMain()
{
    &lt;span class="src_singlelinecomment"&gt;// グラフィックデバイス管理クラスの作成&lt;/span&gt;
    &lt;span class="src_keyword"&gt;this&lt;/span&gt;.graphics = &lt;span class="src_keyword"&gt;new&lt;/span&gt; GraphicsDeviceManager(&lt;span class="src_keyword"&gt;this&lt;/span&gt;);

    &lt;span class="src_singlelinecomment"&gt;// ゲームコンテンツのルートディレクトリを設定&lt;/span&gt;
    &lt;span class="src_keyword"&gt;this&lt;/span&gt;.Content.RootDirectory = &lt;span class="src_doublequotation"&gt;"Content"&lt;/span&gt;;

    &lt;span class="src_singlelinecomment"&gt;// ゲームサービスコンポーネントを追加&lt;/span&gt;
    &lt;span class="src_keyword"&gt;this&lt;/span&gt;.Components.Add(&lt;span class="src_keyword"&gt;new&lt;/span&gt; GamerServicesComponent(&lt;span class="src_keyword"&gt;this&lt;/span&gt;));
}&lt;/pre&gt;
&lt;p&gt;のように GamerServicesComponent を追加します。&lt;/p&gt;
&lt;p&gt;　そして Debug モードで実行し、そのままゲームを終了すると下のようにアプリケーションエラーになるようです。&lt;/p&gt;
&lt;p&gt;&lt;img height="193" alt="2009-01-02" src="http://yo.wankuma.com/blog/uploadimage/XNAGamerServicesComponent_E2C8/20090102.png" width="366" border="0"&gt; &lt;/p&gt;
&lt;p&gt;　Release 時には落ちないことと、Debug モードでもゲーム終了時にしか落ちないので、実際のゲームリリースには問題ないけどやっぱり気になってしまいますね(^^;)&lt;/p&gt;
&lt;p&gt;【環境】&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Vista Ultimate SP1 (32bit, 64bit) 
&lt;li&gt;Visual Studio 2008 Professional SP1 
&lt;li&gt;XNA Game Studio 3.0&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/165459.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>XNA 3.0 でモデルを読み込んだ時の SpecularColor のデフォルト値がかわった？</title><link>http://blogs.wankuma.com/yo/archive/2008/11/19/161696.aspx</link><pubDate>Wed, 19 Nov 2008 12:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/11/19/161696.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/161696.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/11/19/161696.aspx#Feedback</comments><slash:comments>242</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/161696.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/161696.aspx</trackback:ping><description>&lt;p&gt;　今 XNA 2.0 のプロジェクトを 3.0 に移行している最中なのですが、SpecularColor の値を持たないモデルファイルを読み込んだ時に、BasicEffect.SpecularColor のデフォルトの値が変わったようです。&lt;/p&gt; &lt;p&gt;　まず下が XNA 2.0 で SpecularColor を持たない FBX ファイルを読み込んだ場合の BasicEffect のバラメータ&lt;/p&gt;&lt;pre class="Program"&gt;Alpha	1.0	float
AmbientLightColor	{X:0 Y:0 Z:0}	Microsoft.Xna.Framework.Vector3
DiffuseColor	{X:0.8 Y:0.8 Z:0.8}	Microsoft.Xna.Framework.Vector3
EmissiveColor	{X:0.09799999 Y:1 Z:0.1573816}	Microsoft.Xna.Framework.Vector3
FogColor	{X:0 Y:0 Z:0}	Microsoft.Xna.Framework.Vector3
FogEnabled	false	bool
FogEnd	1.0	float
FogStart	0.0	float
LightingEnabled	false	bool
PreferPerPixelLighting	false	bool
&lt;span class="ImportantText"&gt;SpecularColor	{X:1 Y:1 Z:1}	Microsoft.Xna.Framework.Vector3&lt;/span&gt;
SpecularPower	16.0	float
Texture	{Microsoft.Xna.Framework.Graphics.Texture2D}	Microsoft.Xna.Framework.Graphics.Texture2D
TextureEnabled	true	bool
VertexColorEnabled	false	bool&lt;/pre&gt;
&lt;p&gt;　そして次が XNA 3.0 で SpecularColor を持たない FBX ファイルを読み込んだ場合の BasicEffect のバラメータ&lt;/p&gt;&lt;pre class="Program"&gt;Alpha	1.0	float
AmbientLightColor	{X:0 Y:0 Z:0}	Microsoft.Xna.Framework.Vector3
DiffuseColor	{X:0.8 Y:0.8 Z:0.8}	Microsoft.Xna.Framework.Vector3
EmissiveColor	{X:0.09799999 Y:1 Z:0.1573816}	Microsoft.Xna.Framework.Vector3
FogColor	{X:0 Y:0 Z:0}	Microsoft.Xna.Framework.Vector3
FogEnabled	false	bool
FogEnd	1.0	float
FogStart	0.0	float
LightingEnabled	false	bool
PreferPerPixelLighting	false	bool
&lt;span class="ImportantText"&gt;SpecularColor	{X:0 Y:0 Z:0}	Microsoft.Xna.Framework.Vector3&lt;/span&gt;
SpecularPower	16.0	float
Texture	{Microsoft.Xna.Framework.Graphics.Texture2D}	Microsoft.Xna.Framework.Graphics.Texture2D
TextureEnabled	true	bool
VertexColorEnabled	false	bool
&lt;/pre&gt;
&lt;p&gt;　モデルを表示したときに一瞬「あれ？」と思ってしまうところなので注意が必要ですね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/161696.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>Entertainment - XNA/DirectX のカテゴリーで Microsoft MVP を受賞しました</title><link>http://blogs.wankuma.com/yo/archive/2008/11/08/160756.aspx</link><pubDate>Sat, 08 Nov 2008 11:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/11/08/160756.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/160756.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/11/08/160756.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/160756.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/160756.aspx</trackback:ping><description>&lt;p&gt;　この度、2008 年 10 月に「Entertainment - XNA/DirectX」のカテゴリーで Microsoft MVP を受賞させて頂くことになりました。ほんとはもっと前にお知らせできたのですが、いろいろ忙しく放置状態のままにしてました(^^;)。&lt;/p&gt; &lt;p&gt;　今年もまだ忙しい状態が続きそうでなかなか情報発信できないかもしれませんが、落ち着いてきたら情報発信等やっていきたいと思います。&lt;/p&gt; &lt;p&gt;　皆さまのおかげで受賞できたこと、本当にありがとうございます。また今後ともよろしくお願いしますm(_ _)m&lt;/p&gt; &lt;p&gt;　（ということでわんくま本執筆中ですｗ）&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/160756.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>XNA ３Ｄゲーム制作入門 という本を執筆しました</title><link>http://blogs.wankuma.com/yo/archive/2008/09/26/157511.aspx</link><pubDate>Fri, 26 Sep 2008 09:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/09/26/157511.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/157511.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/09/26/157511.aspx#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/157511.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/157511.aspx</trackback:ping><description>&lt;p&gt;　書こうと思ってそのまま忘れてしまっていたのですが(^^;)、&lt;a href="http://www.vixar.jp/"&gt;大西武&lt;/a&gt;さんと私の共著で「XNA ３Ｄゲーム制作入門」という本を執筆しました。&lt;/p&gt; &lt;p&gt;&lt;iframe style="width: 120px; height: 240px" marginwidth="0" marginheight="0" src="http://rcm-jp.amazon.co.jp/e/cm?t=sorceryforcec-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=4777513726&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_top&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=FFFFFF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;　本書の中も執筆していますが、付属のCDに３Ｄモデルにアニメーションをつけてスキンアニメーション付き X ファイルを出力できる「エルフレイナ Ver 1.2 Light」というツールと、XNA で上記の X ファイルを使ってアニメーションの制御をできるプログラムのライブラリを付けましたので、興味がある方はぜひ買って遊んでみてください。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/157511.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>わんくま大阪勉強会#22お疲れ様でした</title><link>http://blogs.wankuma.com/yo/archive/2008/08/27/154473.aspx</link><pubDate>Wed, 27 Aug 2008 23:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/08/27/154473.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/154473.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/08/27/154473.aspx#Feedback</comments><slash:comments>42</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/154473.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/154473.aspx</trackback:ping><description>&lt;p&gt;　ちょっと遅れていまいましたが、わんくま大阪勉強会#22 に現地参加された方々、USTREAM で参加された方々お疲れ様でした。&lt;/p&gt; &lt;p&gt;　私はLT(ライトニングトーク)で参加させていただきましたが、こういう場で話すのは初めてというのもあり、準備に少し時間を取られてしまいました。（事前にディスプレイが映るか確認しておけばよかったですね(^^;)）&lt;/p&gt; &lt;p&gt;　内容の方は「HLSLを使って高速な画像処理をやってみよー」というお題で、.NET Framework 3.5 SP1 から WPF で使えるようになった HLSL を使って、再生中の動画に対してリアルタイムにエフェクト（画像処理）を掛けるというデモをやってみました。&lt;/p&gt; &lt;p&gt;　結構量が多くて時間的にきつきつだったため早口状態になってしまい、うまく伝わったかなーという心配がありましたがどうだったでしょうか？&lt;/p&gt; &lt;p&gt;　とりあえず LT という短い時間だったので、こんな風に使えばできるよーというよりは、こんなことができるよーという感じで説明してみましたので、まあ頭の片隅にでもこういうものあるんだなー程度でも知っていただければうれしい限りです。&lt;/p&gt; &lt;p&gt;　LT だと資料が残らないので PowerPoint の資料とデモプログラムをアップしておきますので欲しい方はダウンロードしちゃってくださいｗ&lt;/p&gt; &lt;p&gt;【PowerPoint 資料】&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-27_wankuma_oosaka_22_pptx.zip"&gt;2008-08-27_wankuma_oosaka_22_pptx.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;【実行ファイル】&lt;/p&gt; &lt;p&gt;必要な環境&lt;/p&gt; &lt;ul&gt; &lt;li&gt;.NET Framework 3.5 SP1  &lt;li&gt;Windows XP SP2 以降&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;　セピアの固定エフェクトですが DirectX SDK は不要です。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-27_hlslshadertest_exe.zip"&gt;2008-08-27_hlslshadertest_exe.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;【プロジェクト】&lt;/p&gt; &lt;p&gt;必要な環境&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Visual Studio 2008 SP1  &lt;li&gt;Windows XP SP2 以降&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;　以下のプロジェクトは「Microsoft DirectX SDK (August 2008)」が必須です。エフェクトファイル（.fx）ファイルを書き換えれば任意のエフェクトを動画にかけることができます。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-27_hlslshadertest_project.zip"&gt;2008-08-27_hlslshadertest_project.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;　以下のプロジェクトは DirectX SDK が必要ないプロジェクトですが、エフェクトファイルをコンパイルできないので動画にセピアをかけるだけのものになります。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-27_hlslshadertest_compiled_project.zip"&gt;2008-08-27_hlslshadertest_compiled_project.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/154473.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>XNA - XNA で DirectInput を使用し、Xbox360 以外のコントローラーを使う</title><link>http://blogs.wankuma.com/yo/archive/2008/08/20/153727.aspx</link><pubDate>Wed, 20 Aug 2008 22:28:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/08/20/153727.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/153727.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/08/20/153727.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/153727.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/153727.aspx</trackback:ping><description>&lt;p&gt;ネタ元：&lt;a href="http://blogs.wankuma.com/episteme/archive/2008/08/19/153470.aspx"&gt;じんわりたのしい&lt;/a&gt;&lt;/p&gt; &lt;p&gt;　えぴさんが XNA で Xbox 360 以外のコントローラーが使えるの？っという質問がありました。XNA では基本的に Xbox 360 のコントローラーしか対応しないことになっているのですが、Windows 限定であれば、他のコントローラーを使う方法があります。&lt;/p&gt; &lt;p&gt;　今回のサンプルでは XNA のライブラリではなく、Managed DirectX から DirectInput の DLL を参照してジョイスティックの情報を取得してみました。&lt;/p&gt; &lt;p&gt;　Managed DirectX のランタイムは DirectX Web インストーラーからインストールできますし、Windows Vista ならはじめからインストールされているので特に追加インストールは必要ないかと思います。&lt;/p&gt; &lt;p&gt;　XNA のプロジェクトから DirectInput を使うには、参照設定から「Microsoft.DirectX.DirectInput」と「System.Windows.Forms」を追加してください。名前空間も必要であれば追記してください。&lt;br&gt;　サンプルプログラムでは「using MDXDI = Microsoft.DirectX.DirectInput;」と追記して DirectInput のクラスや列挙型にアクセスしやすくしています。&lt;/p&gt; &lt;p&gt;　コードの方はプロジェクトおいておきますのでダウンロードして参照してみてください。&lt;/p&gt; &lt;p&gt;　デバッグ実行すると「LoaderLockが検出されました。」という例外が発生する場合がありますが、特に無視しても問題ないのでそのまま実行してください。（&lt;a href="http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=414428&amp;amp;SiteID=7"&gt;この例外に関しては MSDN フォーラムで NyaRuRu さんが詳しく書いています&lt;/a&gt;。また、Managed DirectX 特有の現象です）&lt;br&gt;　この例外が邪魔な場合は Visual Studio の例外チェックから「LoaderLock」を外してください。&lt;/p&gt; &lt;p&gt;【環境】&lt;/p&gt; &lt;ul&gt; &lt;li&gt;XNA Game Studio 2.0  &lt;li&gt;Visual Studio 2005  &lt;li&gt;Managed DirectX 1.1  &lt;li&gt;Windows XP, Vista&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;【実行ファイル】&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-20_xna_tips_xnadirectinput_2_0_exe.zip"&gt;2008-08-20_xna_tips_xnadirectinput_2_0_exe.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;【プロジェクト】&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-20_xna_tips_xnadirectinput_2_0_project.zip"&gt;2008-08-20_xna_tips_xnadirectinput_2_0_project.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/153727.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>おのでら</dc:creator><title>スクリーン上の位置からモデルを選択</title><link>http://blogs.wankuma.com/yo/archive/2008/08/08/152237.aspx</link><pubDate>Fri, 08 Aug 2008 01:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/08/08/152237.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/152237.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/08/08/152237.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/152237.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/152237.aspx</trackback:ping><description>&lt;p&gt;　今回のサンプルではマウスカーソルの位置にあるモデルを選択できるようにしています。カーソルをモデルに合わせると、Hit テキストが True に変化します。&lt;/p&gt; &lt;p class="CenterPositionArea"&gt;&lt;img alt="スクリーン上の位置からモデルを選択" src="http://yo.wankuma.com/blog/uploadimage/8d156296c84b_F13/xna_tips_modelselectbyscreenposition_001.jpg"&gt;&lt;/p&gt; &lt;h3 class="SectionHeading1"&gt;スクリーン座標から３次元空間座標へ変換&lt;/h3&gt; &lt;p&gt;　マウスなどで３次元空間上のモデルなどを選択したい場合があると思います。この場合は、スクリーン上の２次元座標点からモデルの存在する３次元座標に変換してあたり判定などを行う必要があります。&lt;/p&gt; &lt;p&gt;　しかし、２次元から３次元に要素を拡張するため、X,Y のみの２次元のスクリーン座標から、３次元座標の点を求めることはできません。たとえば、実際に画面をクリックするイメージを考えてもらうとわかるかと思いますが、クリックしたときの３次元空間の位置が、オブジェクトよりも手前の位置なのかオブジェクト自体なのか、はたまたオブジェクトの奥なのかを判定することはできません。&lt;/p&gt; &lt;p class="CenterPositionArea"&gt;&lt;img alt="オブジェクトの選択対象の判断" src="http://yo.wankuma.com/blog/uploadimage/8d156296c84b_F13/xna_tips_modelselectbyscreenposition_002.jpg"&gt;&lt;/p&gt; &lt;p&gt;　そのため、クリックした位置は点で表すのではなく、カメラの位置からクリックした方向に伸ばした&lt;span class="ImportantText"&gt;線&lt;/span&gt;として扱います。その線とオブジェクトとの衝突判定を行うことによってモデルの選択などができるようになります。ちなみに線のパラメータは XNA では &lt;span class="ImportantText"&gt;Ray&lt;/span&gt; という構造体で扱うことができます。&lt;/p&gt; &lt;h4 class="SectionHeading1"&gt;スクリーンの位置から３次元空間の位置を取得&lt;/h4&gt; &lt;p&gt;　XNA にはスクリーンでクリックした方向へ向かうような線を求めるようなメソッドなどはありません。しかし、スクリーン座標と奥行きを指定することで３次元空間の点を求めることができるので、カメラの位置と特定の深度で変換した３次元空間座標点を結ぶことによって線を求めることができます。&lt;/p&gt; &lt;p&gt;　スクリーン空間座標からオブジェクト空間座標を求めるには「Viewport.Unproject」メソッドを使用することで簡単に求めることができます。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// ビューポートを取得&lt;/span&gt;
&lt;span class="src_class"&gt;Viewport&lt;/span&gt; viewport = &lt;span class="src_keyword"&gt;this&lt;/span&gt;.GraphicsDevice.Viewport;

&lt;span class="src_singlelinecomment"&gt;// スクリーンの位置を Vector3 で作成 (Z は 1.0 以下を設定)&lt;/span&gt;
&lt;span class="src_class"&gt;Vector3&lt;/span&gt; screenPosition = &lt;span class="src_keyword"&gt;new&lt;/span&gt; &lt;span class="src_class"&gt;Vector3&lt;/span&gt;(&lt;span class="src_keyword"&gt;this&lt;/span&gt;.markPosition, &lt;span class="src_digit"&gt;1.0f&lt;/span&gt;);

&lt;span class="src_singlelinecomment"&gt;// スクリーン座標を３次元座標に変換&lt;/span&gt;
&lt;span class="src_class"&gt;Vector3&lt;/span&gt; worldPoint = viewport.Unproject(screenPosition,
                                        &lt;span class="src_keyword"&gt;this&lt;/span&gt;.projection,
                                        &lt;span class="src_keyword"&gt;this&lt;/span&gt;.view,
                                        &lt;span class="src_class"&gt;Matrix&lt;/span&gt;.Identity);
&lt;/pre&gt;
&lt;p&gt;　第１引数にはスクリーン座標に深度を含めた Vector3 を渡します。X, Y にはスクリーンの座標を設定し、Z に深度の値を設定します。深度はプロジェクションマトリックスの「nearPlaneDistance」と「farPlaneDistance」のパラメータに依存し、0.0f を指定するとカメラの位置から nearPlaneDistance の距離、1.0f を指定するとカメラの位置から farPlaneDistance の距離を求めることができます。&lt;/p&gt;
&lt;p&gt;　第２引数にはプロジェクションマトリックス、第３引数にはビューマトリックスを指定します。&lt;/p&gt;
&lt;p&gt;　戻り値としてオブジェクト空間ベクトルを求めることができます。&lt;/p&gt;
&lt;h3 class="SectionHeading1"&gt;レイの作成&lt;/h3&gt;
&lt;p&gt;　線のパラメータには Ray 構造体が使用できます。コンストラクタの第１引数にレイの開始点を指定し、第２引数にレイの向きを指定します。&lt;/p&gt;
&lt;p&gt;　開始点にカメラの位置を設定し、向きに変換済みの３次元空間座標からカメラの位置を引いて向きを算出します。向きは Vector3.Normalize メソッドで単位ベクトルにしています。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// マークが指す方向へのレイを作成&lt;/span&gt;
&lt;span class="src_class"&gt;Ray&lt;/span&gt; ray = &lt;span class="src_keyword"&gt;new&lt;/span&gt; &lt;span class="src_class"&gt;Ray&lt;/span&gt;(&lt;span class="src_keyword"&gt;this&lt;/span&gt;.cameraPosition,
                    &lt;span class="src_class"&gt;Vector3&lt;/span&gt;.Normalize(worldPoint - &lt;span class="src_keyword"&gt;this&lt;/span&gt;.cameraPosition));&lt;/pre&gt;
&lt;h3 class="SectionHeading1"&gt;球とレイの当たり判定&lt;/h3&gt;
&lt;p&gt;　コンテンツパイプラインから読み込んだ ModelMesh クラスには BoundingSphere プロパティというメッシュを包括した球データが含まれています。このクラスの Intersects メソッドに先ほど作成した Ray を指定することによって球とレイが衝突しているかを調べることができます。&lt;/p&gt;
&lt;p&gt;　衝突する場合はレイの開始点と衝突ポイントの距離が返ります。衝突しない場合は null が返るので、サンプルでは null 判定で衝突しているか調べています。&lt;/p&gt;
&lt;p&gt;　ただし、このメソッドを使用する場合はモデルが原点に配置されていることが前提です。もし、モデルを移動させている場合は、レイをモデルの移動に合わせて座標変換する必要があります。&lt;/p&gt;
&lt;p&gt;　ちなみに今回のサンプルモデルは球なので、正確なあたり判定ができると思います。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// 球とレイとの当たり判定を行う&lt;/span&gt;
&lt;span class="src_keyword"&gt;this&lt;/span&gt;.isHit = &lt;span class="src_keyword"&gt;false&lt;/span&gt;;
&lt;span class="src_keyword"&gt;foreach&lt;/span&gt; (&lt;span class="src_class"&gt;ModelMesh&lt;/span&gt; mesh &lt;span class="src_keyword"&gt;in&lt;/span&gt; &lt;span class="src_keyword"&gt;this&lt;/span&gt;.model.Meshes)
{
    &lt;span class="src_keyword"&gt;if&lt;/span&gt; (mesh.BoundingSphere.Intersects(ray) != &lt;span class="src_keyword"&gt;null&lt;/span&gt;)
    {
        &lt;span class="src_singlelinecomment"&gt;// 球とレイは交差している&lt;/span&gt;
        &lt;span class="src_keyword"&gt;this&lt;/span&gt;.isHit = &lt;span class="src_keyword"&gt;true&lt;/span&gt;;
        &lt;span class="src_keyword"&gt;break&lt;/span&gt;;
    }
}
&lt;/pre&gt;
&lt;p&gt;サンプルプロジェクト&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-08-08_modelselectbyscreenposition_2_0_project.zip"&gt;2008-08-08_modelselectbyscreenposition_2_0_project.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;静的サイト&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;後でまとめますｗ&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/152237.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>オノデラ</dc:creator><title>XNA - ３次元座標からスクリーンへの座標変換</title><link>http://blogs.wankuma.com/yo/archive/2008/07/27/150556.aspx</link><pubDate>Sun, 27 Jul 2008 19:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/07/27/150556.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/150556.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/07/27/150556.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/150556.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/150556.aspx</trackback:ping><description>&lt;p&gt;　３Ｄゲームなどでキャラクターの頭上に名前を表示したい場合など、キャラクターの３次元空間位置から文字を表示すべきスクリーン座標を算出する必要があります。&lt;/p&gt; &lt;p&gt;　一件難しい計算しなければいけないように思えますが、実はポリゴンの頂点データが３次元座標からスクリーン座標に変換される計算式と同じ方法で求められるので、特に新しい知識が必要になることはありません。&lt;/p&gt; &lt;p&gt;　さらに簡単に計算できるメソッドも用意されているので、特に計算しなければいけないようなコードは書かなくても大丈夫です。&lt;/p&gt; &lt;p&gt;&lt;img alt="３次元座標からスクリーンへの座標変換" src="http://yo.wankuma.com/blog/uploadimage/XNA_10EA0/xna_tips_transformtoscreen_001.jpg"&gt;&lt;/p&gt; &lt;h4 class="SectionHeading1"&gt;フィールド&lt;/h4&gt; &lt;p&gt;　サンプルでは３つのモデルを表示させているので、Model と ３つの位置情報である Vector[3] を定義しています。また、動きがわかりやすいようにカメラ用の自動回転角度を定義しています。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_documentcomment"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// モデル&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="src_keyword"&gt;private&lt;/span&gt; &lt;span class="src_class"&gt;Model&lt;/span&gt; model = &lt;span class="src_keyword"&gt;null&lt;/span&gt;;

&lt;span class="src_documentcomment"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// 位置の配列&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="src_keyword"&gt;private&lt;/span&gt; &lt;span class="src_class"&gt;Vector3&lt;/span&gt;[] positions = &lt;span class="src_keyword"&gt;new&lt;/span&gt; &lt;span class="src_class"&gt;Vector3&lt;/span&gt;[&lt;span class="src_digit"&gt;3&lt;/span&gt;];

&lt;span class="src_documentcomment"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// カメラの水平回転角度&lt;/span&gt;
&lt;span class="src_documentcomment"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="src_keyword"&gt;private&lt;/span&gt; &lt;span class="src_typekeyword"&gt;float&lt;/span&gt; theta = &lt;span class="src_digit"&gt;0.0f&lt;/span&gt;;
&lt;/pre&gt;
&lt;h3 class="SectionHeading1"&gt;更新処理&lt;/h3&gt;
&lt;p&gt;　カメラを自動回転させるための回転角度をゲーム経過時間から求めています。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// カメラの水平角度を自動更新&lt;/span&gt;
&lt;span class="src_keyword"&gt;this&lt;/span&gt;.theta = (&lt;span class="src_typekeyword"&gt;float&lt;/span&gt;)gameTime.TotalGameTime.TotalSeconds / &lt;span class="src_digit"&gt;2.0f&lt;/span&gt;;
&lt;/pre&gt;
&lt;h3 class="SectionHeading1"&gt;描画前処理&lt;/h3&gt;
&lt;p&gt;　スプライトを描画後は深度バッファが無効になっている場合があるので、DepthBufferEnable プロパティを true に設定しておきます。&lt;/p&gt;
&lt;p&gt;　すでに作成済みのビューマトリックスに対して Y軸回転マトリックスを掛け合わせると、カメラの位置を注視点を軸に回転させることができます。マトリックスの掛け合わせる順番には注意してください。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// Zバッファを有効にする&lt;/span&gt;
&lt;span class="src_keyword"&gt;this&lt;/span&gt;.GraphicsDevice.RenderState.DepthBufferEnable = &lt;span class="src_keyword"&gt;true&lt;/span&gt;;

&lt;span class="src_singlelinecomment"&gt;// ビューマトリックスに回転を合成算出&lt;/span&gt;
&lt;span class="src_class"&gt;Matrix&lt;/span&gt; rotatedView = &lt;span class="src_class"&gt;Matrix&lt;/span&gt;.CreateRotationY(&lt;span class="src_keyword"&gt;this&lt;/span&gt;.theta) * &lt;span class="src_keyword"&gt;this&lt;/span&gt;.view;
&lt;/pre&gt;
&lt;h3 class="SectionHeading1"&gt;ビューポートの取得&lt;/h3&gt;
&lt;p&gt;　Viewport は３次元空間座標からスクリーン座標に変換するメソッドが用意されているので、GraphicsDevice から取得しておきます。&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// ビューポート取得&lt;/span&gt;
&lt;span class="src_class"&gt;Viewport&lt;/span&gt; viewport = &lt;span class="src_keyword"&gt;this&lt;/span&gt;.GraphicsDevice.Viewport;
&lt;/pre&gt;
&lt;h3 class="SectionHeading1"&gt;３次元座標からスクリーンの座標算出&lt;/h3&gt;
&lt;p&gt;　３次元空間座標からスクリーン座標を求めるには &lt;span class="ImportantText"&gt;Viewport.Project&lt;/span&gt; メソッドを使うだけで簡単に求められます。&lt;/p&gt;
&lt;p&gt;　第１引数に変換元の３次元空間位置を指定し、第２引数にプロジェクションマトリックス、第３引数にビューマトリックスを指定します。すると、戻り値としてスクリーン上の座標が取得できます。&lt;/p&gt;
&lt;p&gt;　あとは、Vector3 から X, Y の値を取り出せば、テキストの表示位置をして使用することができます。(&lt;span class="AnnotationText"&gt;Z は深度位置になります&lt;/span&gt;)&lt;/p&gt;&lt;pre class="Program"&gt;&lt;span class="src_singlelinecomment"&gt;// ３次元座標からスクリーンの座標算出&lt;/span&gt;
&lt;span class="src_class"&gt;Vector3&lt;/span&gt; v3 = viewport.Project(&lt;span class="src_keyword"&gt;this&lt;/span&gt;.positions[i],
                                &lt;span class="src_keyword"&gt;this&lt;/span&gt;.projection,
                                rotatedView,
                                &lt;span class="src_class"&gt;Matrix&lt;/span&gt;.Identity);
&lt;span class="src_class"&gt;Vector2&lt;/span&gt; screenPosition = &lt;span class="src_keyword"&gt;new&lt;/span&gt; &lt;span class="src_class"&gt;Vector2&lt;/span&gt;(v3.X, v3.Y);

&lt;span class="src_singlelinecomment"&gt;// テキスト描画&lt;/span&gt;
&lt;span class="src_keyword"&gt;this&lt;/span&gt;.spriteBatch.DrawString(&lt;span class="src_keyword"&gt;this&lt;/span&gt;.font, &lt;span class="src_doublequotation"&gt;"Model "&lt;/span&gt; + (i + &lt;span class="src_digit"&gt;1&lt;/span&gt;).ToString(),
    screenPosition, &lt;span class="src_class"&gt;Color&lt;/span&gt;.White);
&lt;/pre&gt;
&lt;p&gt;サンプルプロジェクト&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yo.wankuma.com/blog/data/2008-07-26_transformtoscreen_2_0_project.zip"&gt;2008-07-26_transformtoscreen_2_0_project.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;静的サイト&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="http://sorceryforce.com/xna/tips_transformtoscreen.html" href="http://sorceryforce.com/xna/tips_transformtoscreen.html"&gt;http://sorceryforce.com/xna/tips_transformtoscreen.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/150556.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>オノデラ</dc:creator><title>XNA - BasicEffect</title><link>http://blogs.wankuma.com/yo/archive/2008/07/23/149826.aspx</link><pubDate>Wed, 23 Jul 2008 01:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/yo/archive/2008/07/23/149826.aspx</guid><wfw:comment>http://blogs.wankuma.com/yo/comments/149826.aspx</wfw:comment><comments>http://blogs.wankuma.com/yo/archive/2008/07/23/149826.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yo/comments/commentRss/149826.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yo/services/trackbacks/149826.aspx</trackback:ping><description>&lt;p&gt;　XNA では 3D のポリゴンを表示する場合には、通常のプログラムとは別にシェーダ用のプログラム(エフェクトファイル(.fx))を書かなければいけません。エフェクトファイルにプログラムを記述すると様々な描画効果を演出できるのですが、大抵は単純に描画したいことも多く、そのためにエフェクトファイルを用意するのは意外と面倒です。&lt;/p&gt; &lt;p&gt;　そこで XNA では BasicEffect というクラスが用意され、これを使えば基本的なパラメータをクラスのプロパティとして設定するだけで描画できるようになります。コンテンツパイプラインから読み込んだ Model データにはデフォルトで BasicEffect が適用されているので簡単に描画することができるのです。&lt;/p&gt; &lt;p&gt;&lt;img height="156" alt="マテリアル" src="http://yo.wankuma.com/blog/uploadimage/XNABasicEffect_16AA/20080723_01.jpg" width="200" border="0"&gt; &lt;img height="156" alt="ライト" src="http://yo.wankuma.com/blog/uploadimage/XNABasicEffect_16AA/20080723_02.jpg" width="200" border="0"&gt; &lt;img height="156" alt="フォグ" src="http://yo.wankuma.com/blog/uploadimage/XNABasicEffect_16AA/20080723_03.jpg" width="200" border="0"&gt; &lt;/p&gt; &lt;p&gt;　一応３つほど記事をまとめたのですが、ブログに書くと長くなってしまうので、静的サイトにまとめました。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://sorceryforce.com/xna/tips_basiceffectmaterial.html"&gt;BasicEffect のマテリアル&lt;/a&gt;  &lt;li&gt;&lt;a href="http://sorceryforce.com/xna/tips_basiceffectlight.html"&gt;BasicEffect のライト&lt;/a&gt;  &lt;li&gt;&lt;a href="http://sorceryforce.com/xna/tips_basiceffectfog.html"&gt;BasicEffect のフォグ&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/yo/aggbug/149826.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>