<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2668318495729539121</id><updated>2012-01-05T10:22:19.057+09:00</updated><category term='Unity'/><category term='DirectX+Billboard'/><category term='その他のコーディング'/><category term='Processing'/><category term='Android'/><category term='日記'/><category term='XNAでFPS'/><category term='Lua+DirectX'/><title type='text'>Code on canvas</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4161041838492744585</id><published>2012-01-05T09:30:00.002+09:00</published><updated>2012-01-05T09:41:43.963+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク05:インベントリメニューや陰影の調整など</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/_vzA8FEk2r8" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;久々にこのプロジェクトに手を付けて、インベントリーやステータスのメニューの仮実装と探索エリアを示す陰影の調整をしました。仕様書も書いたのでそのあたりまではつくりたいところです。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4161041838492744585?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4161041838492744585/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2012/01/processing05.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4161041838492744585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4161041838492744585'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2012/01/processing05.html' title='Processingでローグライク05:インベントリメニューや陰影の調整など'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/_vzA8FEk2r8/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3657258149802847093</id><published>2012-01-04T01:35:00.001+09:00</published><updated>2012-01-05T10:22:19.194+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>現在のプロジェクトまとめ</title><content type='html'>&lt;p&gt;年が明けて2012年となり、ブログのエントリーも増えてきたのでプロジェクトの進捗状況をまとめてみました。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff6666;"&gt;&amp;lt;鋭意制作中&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/Android"&gt;AndroidでSTG&lt;/a&gt; 　完成度50%.鋭意制作中。(4人チーム)&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/Unity"&gt;Unityで3Dゲーム&lt;/a&gt; 　試作が完成しつつあるが今後の方針の検討が必要。(5人チーム )&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/Processing"&gt;Processingでローグライク&lt;/a&gt; 　ゲームシステムの基礎部分構築中。(1人 )&lt;br /&gt;&lt;/p&gt;&lt;p&gt;・SPHで流体シミュ　本業です。一段落ついたらSPHとMPSについて解かりやすい解説エントリーをします。(1人)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff6666;"&gt;&amp;lt;制作完了&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/2011/06/2010flowoooot.html"&gt;DSの某ゲーム&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#ff6666;"&gt;&amp;lt; 技術デモ &amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/XNA%E3%81%A7FPS"&gt;XNAでFPS&lt;/a&gt; 　シェーダや3Dゲームコーディングの基礎知識とオブジェクト指向の設計能力がかなり向上したのでよい経験となった。が、ガチでFPSつくろうとしたときにXNAが最善の選択肢と思えなくなりデモの域で終了。(1人制作)&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/2010/04/c_23.html"&gt;C#によるチャットプログラム&lt;/a&gt; 　コマンドラインでチャットができる。スゴい！(笑)　Socket通信とスレッド処理の練習。(1人制作)&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/2010/01/xna1pvp9.html"&gt;XNAでチェス&lt;/a&gt; 　Player VS Playerのチェスが完成。本来はCOM対戦も実装したかったが大変なので放置。どちらかというと24時間以内にどこまでつくれるかを試した感じ。(1人制作)&lt;br /&gt;&lt;br /&gt;・A*による経路探索 　オライリーのゲームAI本に触発されて制作。当時は自分でアルゴリズムを調べて自力実装したことがあまりなく、かなり苦戦。何故ソースを消してしまったのか・・・。(1人制作)&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://youtu.be/-o5mYhI2r1c"&gt;HLSLによる鏡面シェーダ&lt;/a&gt; 　シェーダ本に載っていないオリジナルのエフェクトをつくってみたくて制作。ハマりにハマって半月も浪費したけど完成。(1人制作)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff6666;"&gt;&lt;strong&gt;&amp;lt;プロジェクト離脱&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/2011/07/processingflash.html"&gt;Processingでステージエディタ&lt;/a&gt; 　Flashゲームのプロジェクトに助っ人として参加。ステージエディタのベースをProcessingで制作して離脱。(5-6人制作)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff6666;"&gt;&amp;lt;ペンディング&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/Lua%2BDirectX"&gt;LuaとDirectXでパズルゲーム&lt;/a&gt;　Luaをつかってみたくて一人でちょろちょろと。Lua熱が冷めたのでお蔵入り。&lt;br /&gt;　&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/2010/05/rpgdirectx.html"&gt;XNAでRPG&lt;/a&gt; 　企画としてまとめず、だらだらコーディングしながら模索していたためお蔵入り。ネタ的にはProcessingのローグに統合。&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://codeoncanvas.blogspot.com/search/label/DirectX%2BBillboard"&gt;DirectXでBillboard使ったゲーム&lt;/a&gt; 　他の制作とかぶってきたので終了。(2人制作)&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://youtu.be/O6_6vvuOw3g"&gt;Seleneでファミコンウォーズクローン&lt;/a&gt; 　システムの基礎が完成し、1ステージ遊べるようになって満足して終了。生まれて初めてオブジェクト指向を意識ししてコーディングし、大苦戦。コマンドメニューの実装にすごく手間取った。(1人制作) &lt;/p&gt;&lt;p&gt;・&lt;a href="http://youtu.be/fBHNfVQC0J4"&gt;Seleneでリバーシ&lt;/a&gt; 　対人戦を実現して満足して終了。OpenGLで無駄に3Dになってるリバーシ。(1人制作)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;  他にもプロジェクトと呼べないほどの細々したプログラムもたくさんありますが、時系列順だとこんな感じのようです。&lt;br /&gt;&lt;br /&gt;2009&lt;br /&gt;・Seleneでリバーシ&lt;br /&gt;・Seleneでファミコンウォーズクローン&lt;br /&gt;・A*による経路探索&lt;br /&gt;・XNAでFPS&lt;br /&gt;・HLSLで鏡面シェーダ&lt;br /&gt;・XNAでFPS&lt;br /&gt;&lt;br /&gt;2010&lt;br /&gt;・XNAでチェス&lt;br /&gt;・C#によるチャットプログラム&lt;br /&gt;・XNAでRPG&lt;br /&gt;・LuaとDirectXでパズルゲーム&lt;br /&gt;・DirectXでBillboardを使ったゲーム&lt;br /&gt;・DS&lt;br /&gt;&lt;br /&gt;2011&lt;br /&gt;・Processingでステージエディタ  &lt;br /&gt;・AndroidでSTG &lt;br /&gt;・Processingでローグライク  &lt;br /&gt;・Unityで3Dゲーム &lt;br /&gt;・SPHで流体シミュ&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2012←いまココ&lt;br /&gt;・(引き続き)AndroidでSTG &lt;br /&gt;・(引き続き) Processingでローグライク  &lt;br /&gt;・(引き続き) Unityで3Dゲーム &lt;br /&gt;・(引き続き) SPHで流体シミュ&lt;br /&gt;&lt;/p&gt;&lt;p&gt;こう振り返ると色々やってるように見えますが、実際のところ、反省というか、今後の目標というか。&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color:#ff0000;"&gt;未完が多いので完成品を増やしたい。&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt; というのが現実。精進します。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3657258149802847093?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3657258149802847093/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3657258149802847093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3657258149802847093'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/blog-post.html' title='現在のプロジェクトまとめ'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-659274433690153408</id><published>2011-09-10T01:29:00.003+09:00</published><updated>2011-09-19T18:21:20.946+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>AndroidでSTG02:進捗②</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/-4LoLPQoWk80/Tmo_IcEF44I/AAAAAAAAAKY/iqzpLqeQkyQ/s1600/stg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 246px; height: 400px;" src="http://3.bp.blogspot.com/-4LoLPQoWk80/Tmo_IcEF44I/AAAAAAAAAKY/iqzpLqeQkyQ/s400/stg.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5650398096694567810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;徐々にゲームシステムがまとまり、グラフィックやサウンド素材もつくりはじめ、ステージ編集方法を改善されてきた段階です。&lt;/p&gt;&lt;p&gt;画面タッチとドラッグにより、プレイヤから扇型の領域が出現し、扇領域ないの敵の弾(ミサイル)の方向を誘導できるシステムでまとまりつつあります。&lt;/p&gt;&lt;p&gt;プロジェクトとしては、この後も素材をつくりつつ、遊べるレベルデザインを行い、STGとして完成させていきます。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-659274433690153408?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/659274433690153408/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/androidstg02.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/659274433690153408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/659274433690153408'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/androidstg02.html' title='AndroidでSTG02:進捗②'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-4LoLPQoWk80/Tmo_IcEF44I/AAAAAAAAAKY/iqzpLqeQkyQ/s72-c/stg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3661858856654697452</id><published>2011-09-10T01:08:00.002+09:00</published><updated>2012-01-05T10:15:10.885+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク04:アイテムとインベントリの仮実装</title><content type='html'>&lt;p&gt;&lt;iframe width="420" height="345" src="http://www.youtube.com/embed/dSeEGoKOudQ" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;操作方法やUIを仮実装しつつ、アイテム取得やインベントリ選択を実装しました。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3661858856654697452?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3661858856654697452/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/processing04.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3661858856654697452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3661858856654697452'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/09/processing04.html' title='Processingでローグライク04:アイテムとインベントリの仮実装'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/dSeEGoKOudQ/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5183035545912458427</id><published>2011-07-25T00:37:00.005+09:00</published><updated>2011-09-10T01:34:59.559+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>AndroidでSTG01:進捗①</title><content type='html'>仲間内で制作しているAndroidのSTG。鋭意制作中。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-H_nomkFtfS4/Tiw9pBjZNSI/AAAAAAAAAKQ/J1VRVrJ8Vm4/s1600/androidStg01.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 400px;" src="http://4.bp.blogspot.com/-H_nomkFtfS4/Tiw9pBjZNSI/AAAAAAAAAKQ/J1VRVrJ8Vm4/s400/androidStg01.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632945008934466850" /&gt;&lt;/a&gt;&lt;p&gt;&lt;br /&gt;傾けてプレイヤを移動させて、画面タッチで敵の弾を操る変わり種のSTGです。&lt;br /&gt;良く言えば新しい、悪く言えば邪道なSTG。&lt;br /&gt;プロジェクトの目的が「Androidでゲーム開発の経験を得る」なので別に問題ないのです。&lt;/p&gt;&lt;p&gt;プロジェクトメンバの内分けは、今のところメインプログラマ、ディレクタ兼プログラマ(私)、グラフィッカの3人。ひと段落ついたら公開できたらいいな。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5183035545912458427?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5183035545912458427/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/androidstg01.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5183035545912458427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5183035545912458427'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/androidstg01.html' title='AndroidでSTG01:進捗①'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-H_nomkFtfS4/Tiw9pBjZNSI/AAAAAAAAAKQ/J1VRVrJ8Vm4/s72-c/androidStg01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5309979257241497430</id><published>2011-07-24T23:30:00.010+09:00</published><updated>2011-08-02T00:25:39.316+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでステージエディタ：Flashゲーム用のディタ</title><content type='html'>&lt;p&gt;仲間内でFlashゲームを制作していたときに、ステージエディタを作ってみました。&lt;/p&gt;&lt;p&gt;エディタはProcessingで書かれていて、Flash側のゲームで読み込める形式でステージ情報を保存できます。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;①これがエディタ画面&lt;/p&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/-JQliIOoFOws/Tiw3hQVctpI/AAAAAAAAAJw/IUiJaUTFOdk/s1600/FlashGameStageEditor1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://4.bp.blogspot.com/-JQliIOoFOws/Tiw3hQVctpI/AAAAAAAAAJw/IUiJaUTFOdk/s400/FlashGameStageEditor1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632938278393788050" /&gt;&lt;/a&gt;&lt;br /&gt;②マウスクリックでオブジェクトを配置して、&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 298px;" src="http://3.bp.blogspot.com/-H1mOCQLtR5s/Tiw3oD2sWSI/AAAAAAAAAJ4/-_MxoPj6CVo/s400/FlashGameStageEditor2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632938395302648098" /&gt;&lt;br /&gt;③Enterでゲーム内の動きでオブジェクトの再生をします。&lt;br /&gt;ウサギが左から、チーターが右から走ってきます。&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-9gDtHSyfBEI/Tiw3s74MR2I/AAAAAAAAAKA/ZFBL1rnAIrE/s400/FlashGameStageEditor3.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632938479060797282" /&gt;&lt;br /&gt;④オブジェクトをたくさん配置するとこんな感じに。&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://2.bp.blogspot.com/-YNVh1vDQdac/Tiw37nxxflI/AAAAAAAAAKI/h4_1YSo18Mg/s400/FlashGameStageEditor4.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632938731363204690" /&gt;&lt;br /&gt;矢印キーでオブジェクトの種類を変更したり、オブジェクトの出現時間を変更したりできます。上の画像にたくさん出ている赤いバーがオブジェクトとその出現時間を表しています。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dl.dropbox.com/u/27472267/processing0003StageEditor/StageEditor.zip"&gt;ここ&lt;/a&gt;からダウンロードできます。&lt;br /&gt;たいして面白いものでもないですが、興味がある方はどうぞ。(実行ファイルはJavaAppletとして出力しています。)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Flashゲームそのものは現在鋭意制作中のようです。私自身はAndroidのプロジェクトへ移行するためFlashゲームのプロジェクトからは離脱しました。Flashゲームが完成したらまた紹介したいです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5309979257241497430?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5309979257241497430/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/processingflash.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5309979257241497430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5309979257241497430'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/processingflash.html' title='Processingでステージエディタ：Flashゲーム用のディタ'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-JQliIOoFOws/Tiw3hQVctpI/AAAAAAAAAJw/IUiJaUTFOdk/s72-c/FlashGameStageEditor1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1708538631163841378</id><published>2011-07-24T22:39:00.006+09:00</published><updated>2011-07-26T23:42:56.625+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><title type='text'>Unityの練習01:プレイヤ操作とSpawner</title><content type='html'>&lt;p&gt;数か月前にもチュートリアルをやってみましたがなかなか慣れずに断念していましたが、&lt;a href="http://www.nzqr.net/content/zengeren/wiki/index.php?%C2%E89%B2%F3%B8%F2%CE%AE%B2%F1"&gt;全ゲ連のエントリー&lt;/a&gt;に触発されてUnityをもう一度練習してみました。&lt;/p&gt;&lt;p&gt;XNAでC#を使っていたので、JavaScriptよりもC#に愛着があり、&lt;br /&gt;&lt;a href="http://forum.unity3d.com/threads/51017-5-Unity-game-examples-C-scripting-tutorial-for-beginners"&gt;Unity game examples - C# scripting tutorial for beginners&lt;br /&gt;&lt;/a&gt;を参考にして、C#によるUnityでのゲーム制作の練習することに。&lt;/p&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/-e8PX-Lo1DXo/TiwhCPb6WAI/AAAAAAAAAJo/TdkW9hiGOdk/s1600/unity_training01.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://1.bp.blogspot.com/-e8PX-Lo1DXo/TiwhCPb6WAI/AAAAAAAAAJo/TdkW9hiGOdk/s400/unity_training01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5632913556320704514" /&gt;&lt;/a&gt;&lt;br /&gt;空のプロジェクトをつくって、上記リンク先のサンプルをトレースしてみました。&lt;/p&gt;&lt;p&gt;「日常」の背景を配置して、「ハカセ」が左右キーで左右に動き、上から降ってくる「坂本」にあたると坂本が消えます。見えないSpawnerが上で左右に動いていて、「坂本」はいろんな位置から降ってくるという簡単なものです。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Unityは使い勝手がいいのですが、無料版では複数人でデータを共有する術が無く。SVNなど外部のツールを使ってデータ共有することになります。しかし同じシーンを同時に編集すると競合してしまうらしく(?)、「一人でゲームを作って素材だけ発注する」という形でないと無料版での制作は難しい気がします。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1708538631163841378?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1708538631163841378/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/unity01spawner.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1708538631163841378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1708538631163841378'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/unity01spawner.html' title='Unityの練習01:プレイヤ操作とSpawner'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-e8PX-Lo1DXo/TiwhCPb6WAI/AAAAAAAAAJo/TdkW9hiGOdk/s72-c/unity_training01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1441433971092226697</id><published>2011-07-24T22:30:00.002+09:00</published><updated>2011-07-24T23:00:04.922+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク03:ランダムダンジョン生成</title><content type='html'>&lt;p&gt;ランダムなダンジョン生成のアルゴリズムが仮完成したので、テキストで表示してみました。「.」が壁、「R」が部屋、「#」「3」「0」「1」が通路となっています。&lt;/p&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/-pwlK9Cvy5R4/TiwfApBaDdI/AAAAAAAAAJY/Yp687ghYuFo/s1600/rogue_dungeon2.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 397px; height: 400px;" src="http://3.bp.blogspot.com/-pwlK9Cvy5R4/TiwfApBaDdI/AAAAAAAAAJY/Yp687ghYuFo/s400/rogue_dungeon2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632911329805864402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;a href="http://2.bp.blogspot.com/-fsToOMC-hT8/Tiwe7qv9UNI/AAAAAAAAAJQ/y39S9MIVUIY/s1600/rogue_dungeon1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 395px;" src="http://2.bp.blogspot.com/-fsToOMC-hT8/Tiwe7qv9UNI/AAAAAAAAAJQ/y39S9MIVUIY/s400/rogue_dungeon1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5632911244370202834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;対応したタイルのグラフィックを表示させて、ゲームの処理部分に生成したマップを組み込めば一応完成です。&lt;/p&gt;&lt;p&gt;生成方法はマップを縦横ランダムに分割していってランダムな大きさの部屋を分割領域内につくるやり方です。分割線を通路にして部屋までさらに通路を伸ばすことで各部屋を繋げました。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1441433971092226697?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1441433971092226697/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/processing03.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1441433971092226697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1441433971092226697'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/07/processing03.html' title='Processingでローグライク03:ランダムダンジョン生成'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-pwlK9Cvy5R4/TiwfApBaDdI/AAAAAAAAAJY/Yp687ghYuFo/s72-c/rogue_dungeon2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2727154836494731043</id><published>2011-06-02T03:23:00.001+09:00</published><updated>2011-06-02T03:34:32.636+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>任天堂ゲームセミナー2010作品『FloWooooT』</title><content type='html'>今期、イチ押しでーす！&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;iframe width="480" height="390" src="http://www.youtube.com/embed/4wklE8Y7mqI" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2727154836494731043?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2727154836494731043/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/06/2010flowoooot.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2727154836494731043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2727154836494731043'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/06/2010flowoooot.html' title='任天堂ゲームセミナー2010作品『FloWooooT』'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/4wklE8Y7mqI/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5405218735936794398</id><published>2011-05-29T01:44:00.007+09:00</published><updated>2011-05-29T02:16:59.619+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク02:暗さと敵の仮実装　　～Processing+Eclipseで作った実行可能jarをBloggerに貼る際の注意～</title><content type='html'>制作中のローグライクの試作です。&lt;br /&gt;左クリックで移動。右クリック押し続けで攻撃範囲を表示し、右クリックを離すと攻撃します。&lt;p&gt;ブラウザだと処理落ちが酷いです。ローカルだと問題ないんですが・・・・。困った。&lt;br /&gt;&lt;/p&gt;&lt;applet width="400" height="300" codebase="http://dl.dropbox.com/u/27472267/rogue0002" code="GameSample1" archive="rogue0002.jar"&gt;&lt;br /&gt;&lt;/applet&gt;&lt;br /&gt;&lt;p&gt;前回Bloggerへの貼り方がさっぱりだって言ってたんですが解決しました。&lt;strong&gt;PApplet.mainを書くメソッドをメインクラス内で最初にメソッド定義していなかった&lt;/strong&gt;ことが原因でした。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;自分が忘れないように、同じ原因でお悩みの方のために、「Processing+Eclipseで作った実行可能jarのBloggerへの貼り方」をまとめておきます。&lt;/p&gt;&lt;p&gt;1.EclipseでProcessingのプロジェクト作成してコードを書きます。&lt;/p&gt;&lt;p&gt;2.メインクラスに&lt;br /&gt;public static void main(final String args[]){&lt;br /&gt;PApplet.main(new String[] { "--present", "main1" });&lt;br /&gt;}&lt;br /&gt;を記述します。ただし、メインクラス内で一番最初に定義(他のメソッドよりも上に)する必要があります。フィールドよりも下の位置でも大丈夫なようです。&lt;br /&gt;※上記"main1"の部分は自分のソースコードのメインクラス名を使います。&lt;/p&gt;&lt;p&gt;3. &lt;a href="http://ken-nou-kou.blogspot.com/2009/06/processing.html"&gt;建築農業工作ゼミ&lt;/a&gt; さんのエントリーを参考にBlogger投稿時にHTML編集をします。&lt;a href="http://ken-nou-kou.blogspot.com/2009/06/processing.html"&gt;&lt;br /&gt;&lt;/a&gt; DropBoxへjarファイルをアップロードするのが楽でお勧めです。&lt;br /&gt;アップロードするファイルは、.jarと使用する素材(pngやbmpなど)だけで大丈夫です。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5405218735936794398?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5405218735936794398/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5405218735936794398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5405218735936794398'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/blog-post.html' title='Processingでローグライク02:暗さと敵の仮実装　　～Processing+Eclipseで作った実行可能jarをBloggerに貼る際の注意～'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4421475891229702748</id><published>2011-05-21T04:24:00.015+09:00</published><updated>2011-05-29T02:17:14.941+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク02:暗さと敵の仮実装</title><content type='html'>&lt;p&gt;適当にプレイヤのHPや敵などを実装して、視野範囲もつけてみました。&lt;/p&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/-sMk1QQWlsyQ/TeEfRtKbmtI/AAAAAAAAAJE/mS-to-Y3CqE/s1600/rogue0002.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 365px; height: 363px;" src="http://1.bp.blogspot.com/-sMk1QQWlsyQ/TeEfRtKbmtI/AAAAAAAAAJE/mS-to-Y3CqE/s400/rogue0002.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5611800999721933522" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;本当はJavaAppletとして投稿したかったのですが、どうにもこうにもBloggerに投稿できなかったので画像だけ貼りました。(前回の投稿ではeclipse+processingでつくったjarを投稿できてたのに・・・・・・　)&lt;/p&gt;&lt;p&gt;eclipseから実行可能jarをエクスポートしても、Blogger投稿時にHTML編集してJavaAppletを表示させると、メインクラスが見つからないというエラーが出てプログラムが起動しませんでした。10時間ぐらい試行錯誤したり検索したりシンプルなプログラムで試したりしマニュフェスト確認したりしたんですが、何一つアップロードできなくなってしまったので流石に心折れました。　&lt;/p&gt;&lt;p&gt;前回投稿したファイルだと問題なく再アップロードできるのでますます謎。歯がゆすぎる・・・・・・　orz&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4421475891229702748?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4421475891229702748/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing02_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4421475891229702748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4421475891229702748'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing02_21.html' title='Processingでローグライク02:暗さと敵の仮実装'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-sMk1QQWlsyQ/TeEfRtKbmtI/AAAAAAAAAJE/mS-to-Y3CqE/s72-c/rogue0002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2979725067444043652</id><published>2011-05-06T04:38:00.003+09:00</published><updated>2011-05-29T02:17:14.941+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでローグライク01:クリック移動</title><content type='html'>なんとなく&lt;a href="http://yozvox.web.infoseek.co.jp/526F677565.html"&gt;ローグ&lt;/a&gt;っぽい&lt;a href="http://ja.wikipedia.org/wiki/ハックアンドスラッシュ"&gt;ハクスラ&lt;/a&gt;がつくりたくなったのでとりあえずプレイヤの移動だけ仮実装。&lt;br /&gt;左クリックで自キャラ"@"が移動します。&lt;br /&gt;白は床、黒は壁、ピンクは通路です。&lt;br /&gt;&lt;applet width="481" height="481" codebase="http://dl.dropbox.com/u/27472267/rogue0001" code="GameSample1" archive="rogue0001.jar"&gt;&lt;/applet&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2979725067444043652?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2979725067444043652/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing01.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2979725067444043652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2979725067444043652'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing01.html' title='Processingでローグライク01:クリック移動'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2003831644127608257</id><published>2011-05-02T00:59:00.005+09:00</published><updated>2011-05-29T02:17:14.942+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでなんかつくった02：クリックゲー試作</title><content type='html'>身内がつくってるらしいゲームの超簡易試作版をつくってみました。企画自体はinponoizeさんのものです。モチベーションと勢いにまかせて2時間弱でつくってみました。GameOver時のスコア周りの挙動があやしいですが、遊びの確認のための試作なのでまぁ大目に･･････。&lt;br /&gt;&lt;br /&gt;マウスを動かして沢山の円を赤く変化させ、円が消えるまえにクリックすると得点が入ります。制限時間内に沢山スコアを稼ぐ単純な遊びです。&lt;br /&gt;&lt;applet width="600" height="600" codebase="http://dl.dropbox.com/u/27472267/processing0002" code="sketch_may01bGameSample1" archive="sketch_may01bGameSample1.jar"&gt;&lt;/applet&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2003831644127608257?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2003831644127608257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing02.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2003831644127608257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2003831644127608257'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/05/processing02.html' title='Processingでなんかつくった02：クリックゲー試作'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-235150293110532306</id><published>2011-04-28T01:29:00.009+09:00</published><updated>2011-05-29T02:17:14.942+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Processing'/><title type='text'>Processingでなんかつくった01</title><content type='html'>&lt;p&gt;ゲームの試作を素早く作るのにProcessingがいいという話を聞いたので、試しに触ってみました。&lt;/p&gt;&lt;p&gt;描画もキー入力もかなり簡潔なコードで書け、あまり深く考えずにつくってみても面白い絵が出来上がるので結構ハマります。&lt;/p&gt;&lt;p&gt;プログラムになじみの無いデザイナのために開発されてきた経緯があるようで、環境構築も一瞬で終わり、初めての人にも10分しないうちに絵を表示できるようになると思うのでプログラム初心者の方にもお勧めです。&lt;/p&gt;&lt;p&gt;本家ProcessingのHPはこちらです。&lt;br /&gt;&lt;a href="http://processing.org/"&gt;Processing&lt;/a&gt;&lt;br /&gt;「Processing」で検索すれば日本語のすぐれた情報はいくらでもあるので、英語で困ることはあまりないと思います。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;applet width="400" height="400" codebase="http://dl.dropbox.com/u/27472267/processing0001" code="sketch_apr21a_clock" archive="sketch_apr21a_clock.jar"&gt;&lt;/applet&gt;&lt;br /&gt;&lt;p&gt;とりあえず何かつくりたくなったので適当につくってみました。Processingに備わっている時計の関数をつかってみたかったので、1秒ごとに変化のある絵を試しに組んでみたものです。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;BloggerへのProcessingの貼り方はこちらを参考させていただきました。&lt;br /&gt;&lt;a href="http://ken-nou-kou.blogspot.com/2009/06/processing.html"&gt;建築農業工作ゼミ&lt;/a&gt;&lt;br /&gt;こちらではFC2の鯖へデータをアップロードしているようですが、自分はDropboxのパブリックフォルダにデータをアップロードしたリンクをHTMLに埋め込んでいます。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;C++やXNAで試作をつくっても動画を撮ってYoutubeにあげないと公開できないのですが、Processingの場合はJavaAppletとしてすぐにブログで公開できるのが嬉しいです。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-235150293110532306?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/235150293110532306/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/processing01.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/235150293110532306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/235150293110532306'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/processing01.html' title='Processingでなんかつくった01'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2706932433885342039</id><published>2011-04-21T02:11:00.002+09:00</published><updated>2011-07-25T00:49:30.245+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android開発環境導入</title><content type='html'>&lt;p&gt;Androidの開発をしようじゃないかという声がかかったので、とりあえず開発環境だけでも整えてみました。実際につくるかどうかは分かりません。&lt;/p&gt;&lt;p&gt;1.OracleからJDKを入手&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;&lt;br /&gt;Java Platform(JDK)のアイコンをクリックし、&lt;br /&gt;プルダウンからWindowsを選択しダウンロード。&lt;br /&gt;(Android SDKは64bit版で動かないようなので、&lt;br /&gt;eclipseが64bit版の場合、Windows x64もダウンロードする必要あり。)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.Android SDKを入手&lt;br /&gt;&lt;a href="http://developer.android.com/index.html"&gt;http://developer.android.com/index.html&lt;/a&gt;&lt;br /&gt;インストール後、Android SDK ADV Managerが起動したら即終了する。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;3.eclipseを入手&lt;br /&gt;こちらのサイトを参考にして、eclipseとその日本語化をする。&lt;br /&gt;&lt;a href="http://www.javadrive.jp/eclipse3/install/"&gt;http://www.javadrive.jp/eclipse3/install/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;4.ADT Plugin for Eclipseをインストール&lt;br /&gt;同じくこちらのサイトを参考にして（略&lt;br /&gt;ただし、SDK Platformのインストールには1時間弱かかった気がするので注意。&lt;br /&gt;&lt;a href="http://www.javadrive.jp/android/adt/"&gt;http://www.javadrive.jp/android/adt/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;5.サンプルを動かす&lt;br /&gt;ここを参考に、アンドロイドのサンプルを動かしてみる。Snakeとかお勧め。&lt;br /&gt;&lt;a href="http://android.akjava.com/cms/develop/sdk/eclipse_newproject.html"&gt;http://android.akjava.com/cms/develop/sdk/eclipse_newproject.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;(おまけ).eclipseのショートカット&lt;br /&gt;初めてeclipseを触る人は覚えておくと便利かも。&lt;br /&gt;&lt;a href="http://fukata.org/2010/05/30/useful-eclipse-keyboard-shortcut-java/"&gt;http://fukata.org/2010/05/30/useful-eclipse-keyboard-shortcut-java/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.chrisryu.com/2007/01/eclipse10.html"&gt;http://dev.chrisryu.com/2007/01/eclipse10.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2706932433885342039?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2706932433885342039/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2706932433885342039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2706932433885342039'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/android.html' title='Android開発環境導入'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5190134880270204974</id><published>2011-04-21T01:54:00.005+09:00</published><updated>2011-05-29T02:18:50.299+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>DSで流れアクション</title><content type='html'>&lt;p&gt; &lt;p&gt;諸事情により9月からブログ休止してました。&lt;/p&gt;&lt;p&gt;ところで、このゲームお勧めです。&lt;br /&gt;&lt;a href="http://www.nintendo.co.jp/n10/seminar2010/sakuhin/no4.html"&gt;任天堂ゲームセミナー2010　FloWooooT&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5190134880270204974?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5190134880270204974/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/ds.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5190134880270204974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5190134880270204974'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2011/04/ds.html' title='DSで流れアクション'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1217724922938338646</id><published>2010-09-01T00:54:00.005+09:00</published><updated>2011-05-29T02:18:57.343+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX+Billboard'/><title type='text'>DirectXでBillboard使ったゲームその2：ラフと草</title><content type='html'>タラバガニさんから機体イメージのラフがあがってきました。とてもいい感じです！&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/TH0oHWb7utI/AAAAAAAAAIA/N7CACCNguBU/s1600/DirectXBillboard0002_rough.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/TH0oHWb7utI/AAAAAAAAAIA/N7CACCNguBU/s400/DirectXBillboard0002_rough.jpeg" border="0" alt="" id="BLOGGER_PHOTO_ID_5511605625718291154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;草のテクスチャも描いて頂いたので、とりあえず貼ってみました。 その１と比べると見栄えしますね。流石です。あと対戦用に画面分割をしています。&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/TH0mm9QNrzI/AAAAAAAAAH4/G3mgpNytp_4/s400/DirectXBillboard0002.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5511603969690808114" /&gt;&lt;/p&gt;&lt;p&gt;絵があがってきたので、プログラム側としては本格的に後に引けなくなってきた感じです。お互い時間の無い中での制作ですが、なんとか形になるものにさせたいです。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1217724922938338646?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1217724922938338646/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/09/directxbillboard2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1217724922938338646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1217724922938338646'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/09/directxbillboard2.html' title='DirectXでBillboard使ったゲームその2：ラフと草'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/TH0oHWb7utI/AAAAAAAAAIA/N7CACCNguBU/s72-c/DirectXBillboard0002_rough.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1790507354275808520</id><published>2010-08-28T02:30:00.005+09:00</published><updated>2010-08-28T02:42:12.572+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX+Billboard'/><title type='text'>DirectXでBillboard使ったゲームその1：とにかく動くものをつくってみた</title><content type='html'>&lt;p&gt;てんやわんやで、タラバガニさんとPCゲームをつくることになりました。&lt;br /&gt;クォータービューで対戦ものでビルボード表現をつかった3Dゲームです。索敵が重要で、いかに相手の裏をかけるかがポイントとなるゲームデザインにする方針です。&lt;/p&gt;&lt;p&gt;キーワードは「錆び臭い」です。&lt;/p&gt;&lt;p&gt;まだ試験段階なので私の描いたモブで動いていますが、いずれ「見れるモノ」ができあがってくると思います。&lt;/p&gt;&lt;object width="480" height="385"&gt;&lt;embed src="http://www.youtube.com/v/5lq0jvWs4aU?fs=1&amp;amp;hl=ja_JP&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;p&gt;グラフィック的な心配はないと思うのですが、私のスキル不足という点でプログラム的な問題が色々とあります。もはや私一人の企画ではないのでなんとしてでもリリースに漕ぎつけたいです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1790507354275808520?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1790507354275808520/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/08/directxde3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1790507354275808520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1790507354275808520'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/08/directxde3.html' title='DirectXでBillboard使ったゲームその1：とにかく動くものをつくってみた'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-799526651268366245</id><published>2010-08-26T03:21:00.003+09:00</published><updated>2010-08-26T03:25:00.220+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lua+DirectX'/><title type='text'>LuaとDirectXでパズルゲームその3：四色定理でリンクチェック</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NkZDk5yZnUw/THVfYG9p5TI/AAAAAAAAAHo/9rrnzxoq7_c/s1600/LuaDirectX0005.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/THVfYG9p5TI/AAAAAAAAAHo/9rrnzxoq7_c/s400/LuaDirectX0005.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5509414586948379954" /&gt;&lt;/a&gt;パネル同士のつながりをチェックしています。まだ、できていません。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;良い意味で多忙過ぎたため、7月中に公開は無理でした。ごめんなさい。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-799526651268366245?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/799526651268366245/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/08/luadirectx3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/799526651268366245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/799526651268366245'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/08/luadirectx3.html' title='LuaとDirectXでパズルゲームその3：四色定理でリンクチェック'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/THVfYG9p5TI/AAAAAAAAAHo/9rrnzxoq7_c/s72-c/LuaDirectX0005.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4992378939422554883</id><published>2010-06-23T23:39:00.003+09:00</published><updated>2010-06-23T23:42:46.697+09:00</updated><title type='text'>LuaとDirectXでパズルゲームその2：時間の導入とテクスチャ管理</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NkZDk5yZnUw/TCIcuXIRtyI/AAAAAAAAAHg/7lC5lA-d2V0/s1600/LuaDirectX0004.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 224px; height: 103px;" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/TCIcuXIRtyI/AAAAAAAAAHg/7lC5lA-d2V0/s400/LuaDirectX0004.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5485978878898976546" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;時間の管理用のクラスを導入しました。あとすべてのオブジェクトで律儀にテクスチャを読み込んでいたのを、一度読み込んだテクスチャを使いまわせるようにstd::mapでテクスチャ管理をしました。他にも細々したところを弄ったり、リファクタしたりしてますが、今回はこんな感じです。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4992378939422554883?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4992378939422554883/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4992378939422554883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4992378939422554883'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2_23.html' title='LuaとDirectXでパズルゲームその2：時間の導入とテクスチャ管理'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NkZDk5yZnUw/TCIcuXIRtyI/AAAAAAAAAHg/7lC5lA-d2V0/s72-c/LuaDirectX0004.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8046941017029006879</id><published>2010-06-17T00:03:00.012+09:00</published><updated>2010-06-17T00:16:45.339+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lua+DirectX'/><title type='text'>LuaとDirectXでパズルゲームその2：タイトルとかロードとか</title><content type='html'>&lt;p style="'margin:0in;font-family:"&gt;とりあえず現状報告。こんな感じです。&lt;/p&gt;&lt;p&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NkZDk5yZnUw/TBjqTh1ssdI/AAAAAAAAAHI/SX01uK0hfgE/s1600/LuaDirectX0003a.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/TBjqTh1ssdI/AAAAAAAAAHI/SX01uK0hfgE/s200/LuaDirectX0003a.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5483390167545590226" /&gt;&lt;/a&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/TBjqYXgFD_I/AAAAAAAAAHQ/GerFm4TG92M/s200/LuaDirectX0003b.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5483390250669903858" /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/TBjqdF1366I/AAAAAAAAAHY/oFR49Efgio8/s200/LuaDirectX0003c.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5483390331828824994" /&gt;&lt;/p&gt;&lt;p&gt;  &lt;p style="'margin:0in;font-family:"&gt;実装したのは次の３つ。&lt;br /&gt;&lt;span lang="ja" style="'"&gt;・タイトル、ロード、ゲームの&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;3&lt;/span&gt;&lt;span lang="ja" style="'"&gt;つの遷移の実装&lt;br /&gt;&lt;/span&gt;&lt;span lang="ja" style="'"&gt;・マルチスレッドによる「&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Now Loading&lt;/span&gt;&lt;span lang="ja" style="'"&gt;」のアニメーションをしながらゲームをローディング&lt;br /&gt;&lt;/span&gt;・ゲーム画面をちょっとだけオサレになった&lt;br /&gt;&lt;br /&gt;ゲーム画面でできるのがカーソルの移動だけで、ゲーム内容はまだ手をつけていません。あとメモリ管理をしていなくていろいろ酷い状態です。最優先事項は「時間」の導入です。実はフレームカウントはしてますが、ゲーム内に時間を表現したクラスが無いのでとっとと実装したいです。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8046941017029006879?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8046941017029006879/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2_17.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8046941017029006879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8046941017029006879'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2_17.html' title='LuaとDirectXでパズルゲームその2：タイトルとかロードとか'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/TBjqTh1ssdI/AAAAAAAAAHI/SX01uK0hfgE/s72-c/LuaDirectX0003a.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3969438829934748900</id><published>2010-06-04T00:49:00.005+09:00</published><updated>2010-06-04T00:55:50.777+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lua+DirectX'/><title type='text'>LuaとDirectXでパズルゲームその2：なんかできつつある</title><content type='html'>&lt;p&gt;パズルゲームができつつある。タイプとしてはBIOSHOCKのハッキングゲームっぽいやつ(名前があったはずだけどなんていうのか忘れました)。&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NkZDk5yZnUw/TAfPlBQZuNI/AAAAAAAAAGA/JBcY2T1q-sU/s1600/LuaDirectX0002.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/TAfPlBQZuNI/AAAAAAAAAGA/JBcY2T1q-sU/s320/LuaDirectX0002.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5478575706618837202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ゲームパートの表示とカーソル移動が完了した程度でまだまだこれからです。7月中に公開できたら運がいいかなってところです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3969438829934748900?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3969438829934748900/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3969438829934748900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3969438829934748900'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/06/luadirectx2.html' title='LuaとDirectXでパズルゲームその2：なんかできつつある'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NkZDk5yZnUw/TAfPlBQZuNI/AAAAAAAAAGA/JBcY2T1q-sU/s72-c/LuaDirectX0002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4821420018827821635</id><published>2010-05-29T00:50:00.005+09:00</published><updated>2010-05-29T01:13:55.872+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lua+DirectX'/><title type='text'>LuaとDirectXその1：とりあえず表示と制御</title><content type='html'>&lt;p&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;C++&lt;/span&gt;&lt;span lang="ja" style="'"&gt;のクラスを&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Lua&lt;/span&gt;&lt;span lang="ja" style="'"&gt;へバインドする方法も一通り理解できたので、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;C++&lt;/span&gt;&lt;span lang="ja" style="'"&gt;で実装した&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;DirectX&lt;/span&gt;&lt;span lang="ja" style="'"&gt;の描画用クラスを使って&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Lua&lt;/span&gt;&lt;span lang="ja" style="'"&gt;からモデルの表示と操作をさせてみました。&lt;/span&gt;&lt;span lang="ja" style="'"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S__m92xRn3I/AAAAAAAAAF4/MsU3WnqPrs4/s1600/LuaDirectX0001.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 294px; height: 297px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S__m92xRn3I/AAAAAAAAAF4/MsU3WnqPrs4/s320/LuaDirectX0001.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5476349622254411634" /&gt;&lt;/a&gt;&lt;span lang="ja" style="'"&gt;トラが自動で回転して、黄色い板を&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;WASD&lt;/span&gt;&lt;span lang="ja" style="'"&gt;で移動と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;QE&lt;/span&gt;&lt;span lang="ja" style="'"&gt;で回転ができるコードです。&lt;/span&gt;&lt;span lang="ja" style="'"&gt;今はまだモデルの表示をしているだけなので、できるだけ近いうちに&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;.fx&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を使ったシェーディングを実装して、とっととゲーム制作に入っていきたいです。&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4821420018827821635?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4821420018827821635/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/luadirectx1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4821420018827821635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4821420018827821635'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/luadirectx1.html' title='LuaとDirectXその1：とりあえず表示と制御'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NkZDk5yZnUw/S__m92xRn3I/AAAAAAAAAF4/MsU3WnqPrs4/s72-c/LuaDirectX0001.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-7062642690440604359</id><published>2010-05-20T21:59:00.006+09:00</published><updated>2010-05-20T22:14:52.856+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>日記:RPGをつくろうと思ったけどDirectXへシフトすることにした</title><content type='html'>&lt;p&gt;急にRPGが作りたくなってきたので、5月の頭から何日かXNAでRPGを組んでいました。&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S_Uzgc7_4UI/AAAAAAAAAFo/lDv6OA5LP2Q/s1600/diary0001a.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S_Uzgc7_4UI/AAAAAAAAAFo/lDv6OA5LP2Q/s320/diary0001a.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5473337554755379522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S_UzgqNa2TI/AAAAAAAAAFw/P5UT7h6lT8Q/s1600/diary0001b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S_UzgqNa2TI/AAAAAAAAAFw/P5UT7h6lT8Q/s320/diary0001b.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5473337558318111026" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;別にBioshockとL4Dの同人とかっていうわけじゃなく、ただそれっぽい画像を試作に使っただけです。完成したのは探索パートと戦闘パートが10%ずつぐらい。&lt;/p&gt;&lt;p&gt;とは言っても少しばかり思い立つことがあり、実のところ5月中旬からずっとDirectXとLuaの使い方を調べてました。まだC++からLuaへ公開する描画用のクラスのコーディング中です。おそらくこのRPGをC++とDirectXとLuaの環境へ移したり、新しく3Dのゲームをつくるになると思います。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-7062642690440604359?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/7062642690440604359/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/rpgdirectx.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7062642690440604359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7062642690440604359'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/rpgdirectx.html' title='日記:RPGをつくろうと思ったけどDirectXへシフトすることにした'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S_Uzgc7_4UI/AAAAAAAAAFo/lDv6OA5LP2Q/s72-c/diary0001a.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5970416621809612303</id><published>2010-05-03T04:36:00.018+09:00</published><updated>2010-05-29T01:12:18.358+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその33:歩くアニメの作製②</title><content type='html'>ずいぶんヒドイできですが歩くアニメを創ったのでXNAに読み込ませてみました。データが完成してれば３０分かからずに動かせると思います。私は入出力方法が分からずに６時間ぐらい悩んでましたがｗ&lt;br /&gt;&lt;p&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VPuKiDAkrsQ&amp;hl=ja_JP&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/VPuKiDAkrsQ&amp;hl=ja_JP&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;まず初めにエクスポータを落とします。Blender標準のエクスポータでは正しく表示できなかったのでこちらのPythonスクリプトが必要です。&lt;br /&gt;&lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://www.triplebgames.com/downloads.html"&gt;http://www.triplebgames.com/downloads.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="'margin:0in;font-family:"&gt;&lt;br /&gt;&lt;/p&gt;ページ下部の「Script for exporting skinned anims to XNA from blender」を落としてBlenderのscriptsフォルダに入れます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Blenderで普通にモデリング&amp;amp;アニメーションを制作して吐き出すだけですが、いくつか注意事項があります。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;１.全てのrootとなるボーンが一つだけ必要&lt;/span&gt;&lt;br /&gt;&lt;p&gt;　アニメーションを創る際、いくつかのボーンには親子関係を持たせていると思いますが、XNAで扱う際には全てのボーンは一つの親から派生しているようなツリー構造ではないといけないようです。親が無いボーンにはChild Ofに親の名前を入れます。&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93VixqPIYI/AAAAAAAAAFA/O2xNJRPNFZ0/s1600/xna0034a.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 106px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93VixqPIYI/AAAAAAAAAFA/O2xNJRPNFZ0/s400/xna0034a.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5466760316120408450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;２．Blenderの座標系からXNAの座標系の変換&lt;/span&gt;&lt;br /&gt;　標準のFBXエクスポータには出力時に回転をすることができますが、上のエクスポータではそれができません。なので事前にrootのボーンをX軸回転90度、Z軸回転180度をして全てのアクションの１フレーム目にLocRotしてキーフレームを打っておく必要があります。&lt;br /&gt;　Objectモーﾄﾞで全てのオブジェクトを回転させて座標系を修正しようとしても、XNA側ではボーンの動きにモデルが連動してしまうので無理なようです。(この記述には自信が無いので鵜呑みにしないでください、とりあえずXNA側でモデルの座標系が違うようなら新しくrootボーンを設定してアニメーション丸ごとLocRotするのがお勧めです。)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;３．Action Editorでアニメーションの名前付け&lt;/span&gt;&lt;br /&gt;Action Editorのアクション名入力欄でアニメーションに名前を付けます。複数のアニメーションを一つのfbxに入れるには、上三角下三角のボタンでAdd Newします。ここで付けた名前をXNA側でも使います。またXNAのサンプルでは各アニメのキーフレームを最後まで再生したら初めに戻ってループするように再生されます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93V00YHfQI/AAAAAAAAAFI/PznsnFQk0r8/s1600/xna00342.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 188px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93V00YHfQI/AAAAAAAAAFI/PznsnFQk0r8/s400/xna00342.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5466760626087361794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;4.エクスポータで出力&lt;/span&gt;&lt;br /&gt;基本的には下のSSのような設定でいいと思いまが、ボーンに対応してないメッシュは表示されないので注意が必要です。&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93V910vH4I/AAAAAAAAAFQ/doCyQOMG6l4/s1600/xna00343.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 365px; height: 400px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S93V910vH4I/AAAAAAAAAFQ/doCyQOMG6l4/s400/xna00343.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5466760781094657922" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="color:#cc0000;"&gt;5．.fbxのテクスチャパス変更&lt;/span&gt;&lt;br /&gt;エクスポートした.fbxをテキストエディタで開いて「RelativeFilename」で検索します。そこに書かれているのがテクスチャのパスなので、XNAのContentフォルダの構造に適応するように書き換えます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;実際、注意事項というほどでもないんですが、私が失敗したり初めての人が間違えそうなところだけ書いておきました。.fbxの出力ができたら完成したも同然です。&lt;br /&gt;&lt;br /&gt;次はXNAに読み込ませる方法を説明します。&lt;br /&gt;&lt;br /&gt;このサンプルをダウンロード。&lt;br /&gt;&lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://creators.xna.com/ja-JP/sample/skinnedmodel"&gt;http://creators.xna.com/ja-JP/sample/skinnedmodel&lt;/a&gt;&lt;/p&gt;&lt;p&gt;制作した.fbxをプロジェクトのContentに入れ、&lt;br&gt;入れたファイルに右クリ-&gt;プロパティをしてコンテンツプロセッサをSkinnedModelProcessorに変更します。&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;またコード中の次の箇所を変更します。&lt;br /&gt;currentModel = Content.Load&lt;model&gt;("dude");&lt;br /&gt;↓&lt;br /&gt;currentModel = Content.Load&lt;model&gt;("自分のモデル名");&lt;br /&gt;&lt;br /&gt;AnimationClip clip = &lt;br&gt;   skinningData.AnimationClips["Take 001"];&lt;br /&gt;↓&lt;br /&gt;AnimationClip clip = &lt;br&gt;   skinningData.AnimationClips["アニメーション名"];&lt;br /&gt;&lt;br /&gt;あとは実行するだけで動くはずです。&lt;br /&gt;&lt;br /&gt;ターン制RPGなんかだとこれで十分だと思いますが、自分のFPSではTriagnleProcessorのコンテンツパイプラインも使っているのでSkinnedModelProcessorと同時に使えるように改良しなければならないんですよね。単純なXMLを読み込むパイプラインの書き方しか知らないのでこちらも骨が折れそうです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/model&gt;&lt;/model&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5970416621809612303?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5970416621809612303/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/xnafps33.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5970416621809612303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5970416621809612303'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/05/xnafps33.html' title='XNAでFPSその33:歩くアニメの作製②'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NkZDk5yZnUw/S93VixqPIYI/AAAAAAAAAFA/O2xNJRPNFZ0/s72-c/xna0034a.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5923626647799172458</id><published>2010-04-30T07:04:00.003+09:00</published><updated>2010-05-29T01:12:18.359+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその32:歩くアニメの作製①</title><content type='html'>&lt;p style="'margin:0in;font-family:"&gt;こちらのページを参考に歩くアニメーションの制作中です。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://gamemotion.livedoor.biz/archives/50339837.html"&gt;http://gamemotion.livedoor.biz/archives/50339837.html&lt;/a&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S9oCpzwyxkI/AAAAAAAAAEw/m8KSFS-Ck-c/s1600/xna0032.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 215px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S9oCpzwyxkI/AAAAAAAAAEw/m8KSFS-Ck-c/s400/xna0032.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5465684015060272706" /&gt;&lt;/a&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;とりあえずアニメーションは完成しそうですが、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Blender&lt;/span&gt;&lt;span lang="ja" style="'"&gt;からのエクスポートと&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;XNA&lt;/span&gt;&lt;span lang="ja" style="'"&gt;へのインポートに時間をとられそうです。&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5923626647799172458?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5923626647799172458/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/xnafps32.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5923626647799172458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5923626647799172458'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/xnafps32.html' title='XNAでFPSその32:歩くアニメの作製①'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NkZDk5yZnUw/S9oCpzwyxkI/AAAAAAAAAEw/m8KSFS-Ck-c/s72-c/xna0032.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-6945581664800090478</id><published>2010-04-23T00:50:00.004+09:00</published><updated>2010-05-29T01:11:53.169+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>C#によるチャットプログラムその２:簡易チャット完成</title><content type='html'>TCPを使ったサーバクライアント型のチャットができました。基本的にはその1にあるリンク先のサンプルとキー入力用のスレッドを組み合わせただけの簡単なものです。&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NkZDk5yZnUw/S9BxX1EjitI/AAAAAAAAAEo/ZzapLOR4adE/s1600/chat0002.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S9BxX1EjitI/AAAAAAAAAEo/ZzapLOR4adE/s400/chat0002.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5462991002197527250" /&gt;&lt;/a&gt;基本的な使い方が理解できたので自作ゲームに生かしていきたいです。しかしながらTCPからUDPによる通信になるし、データの圧縮や予測が必要になってくるのでこれほど単純にできるとは思いませんが……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-6945581664800090478?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/6945581664800090478/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/c_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/6945581664800090478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/6945581664800090478'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/c_23.html' title='C#によるチャットプログラムその２:簡易チャット完成'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/S9BxX1EjitI/AAAAAAAAAEo/ZzapLOR4adE/s72-c/chat0002.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1935636897134278716</id><published>2010-04-16T10:30:00.012+09:00</published><updated>2010-05-29T01:11:53.170+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>C#によるチャットプログラムその１:ネットワークとスレッド</title><content type='html'>&lt;span lang="ja" style="'"&gt;自作&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;FPS&lt;/span&gt;&lt;span lang="ja" style="'"&gt;にマルチプレイを実装する必要があるのでネットワークプログラミングについて色々調べたところ、どうやら&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Socket&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を使う方法が良さそうです。簡単な解説とサンプルもありました。&lt;/span&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/b6xa24z5(v=VS.100).aspx"&gt;http://msdn.microsoft.com/ja-jp/library/b6xa24z5(v=VS.100).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;クライアントからの接続や受信待ちのときプログラムが待機するから、サーバとクライアントで交互にしか通信できないじゃないかと思ったら非同期に処理する方法があるんですね。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;上記リンクのサンプルを元にコンソールのチャットプログラムを書こうと思ったんですが、普通に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Console.Read()&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を使うとキーボードからの入力待ち受けをすると処理が止まってしまいます。こちらも非同期処理を使ってもいいらしんですが、どうやらスレッドを使うのがよさげだったので、&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://ufcpp.net/study/csharp/sp_thread.html"&gt;http://ufcpp.net/study/csharp/sp_thread.html&lt;/a&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;のサンプルを元にスレッドを使ったコードを書いてみました。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="'margin:0in;font-family:"&gt;仕様としては、&lt;br /&gt;・秒単位で起動後の経過時間を表示&lt;br /&gt;・文字列の入力&lt;br /&gt;&lt;span lang="ja" style="'"&gt;・入力された文字列の先頭に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;"&gt;&gt;"&lt;/span&gt;&lt;span lang="ja" style="'"&gt;をつけてそのまま出力&lt;br /&gt;&lt;/span&gt;・上記３つの動作をそれぞれ違う行で表示&lt;br /&gt;という単純なプログラムです。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;以下ソース。&lt;/p&gt;&lt;br /&gt;&lt;pre name="code" class="c#"&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Threading;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class TestThread&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt; class TimeCounter&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  private int i;&lt;br /&gt;  private StringContainer container;&lt;br /&gt;&lt;br /&gt;  public TimeCounter(StringContainer container) { i = 0; this.container = container; }&lt;br /&gt;&lt;br /&gt;  public void Run()&lt;br /&gt;  {&lt;br /&gt;   while (true)&lt;br /&gt;   {&lt;br /&gt;    //入力行のカーソル位置を保存&lt;br /&gt;    container.CorsurLeft = Console.CursorLeft;&lt;br /&gt;&lt;br /&gt;    //時間出力行へカーソル移動&lt;br /&gt;    Console.CursorTop = 0;&lt;br /&gt;    Console.CursorLeft = 0;&lt;br /&gt;    &lt;br /&gt;    Console.Write("{0}sec...\r", i);&lt;br /&gt;    &lt;br /&gt;    //入力行のカーソル位置へ移動&lt;br /&gt;    Console.CursorTop = 1;&lt;br /&gt;    Console.CursorLeft = container.CorsurLeft;&lt;br /&gt;    &lt;br /&gt;    Thread.Sleep(1000);&lt;br /&gt;    i++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; class KeyReader&lt;br /&gt; {&lt;br /&gt;  StringContainer container;&lt;br /&gt;&lt;br /&gt;  public KeyReader(StringContainer container)&lt;br /&gt;  {&lt;br /&gt;   this.container = container;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void Run()&lt;br /&gt;  {&lt;br /&gt;   while (true)&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;    container.Msg = Console.ReadLine();&lt;br /&gt;    container.MsgNum++;&lt;br /&gt;&lt;br /&gt;    //文字列入力行をリセット&lt;br /&gt;    Console.CursorTop = 1;&lt;br /&gt;    Console.CursorLeft = 0;&lt;br /&gt;    Console.WriteLine("                                            ");&lt;br /&gt;&lt;br /&gt;    //文字列出力行をリセット&lt;br /&gt;    Console.CursorTop = 2;&lt;br /&gt;    Console.CursorLeft = 0;&lt;br /&gt;    Console.WriteLine("                                            ");&lt;br /&gt;&lt;br /&gt;    //カーソル位置リセット&lt;br /&gt;    Console.CursorLeft = 0;&lt;br /&gt;    Console.CursorTop = 0;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; class KeyWriter&lt;br /&gt; {&lt;br /&gt;  StringContainer container;&lt;br /&gt;  private int writeNum;&lt;br /&gt;  public KeyWriter(StringContainer container)&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;   this.container = container;&lt;br /&gt;   writeNum = 0;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void Run()&lt;br /&gt;  {&lt;br /&gt;   while (true)&lt;br /&gt;   {&lt;br /&gt;    if (container.MsgNum - writeNum == 1)&lt;br /&gt;    {&lt;br /&gt;     //文字列入力行へカーソル移動&lt;br /&gt;     Console.CursorTop = 2;&lt;br /&gt;     Console.CursorLeft = 0;&lt;br /&gt;     Console.WriteLine("&gt;&gt;" + container.Msg);&lt;br /&gt;     writeNum++;&lt;br /&gt;     Console.CursorTop = 1;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //クラス間へ文字列などの情報をわたすためのクラス&lt;br /&gt; class StringContainer&lt;br /&gt; {&lt;br /&gt;  public string Msg;&lt;br /&gt;  public int MsgNum;&lt;br /&gt;  public int CorsurLeft;&lt;br /&gt;&lt;br /&gt;  public StringContainer() { MsgNum = 0; CorsurLeft = 0; }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; static void Main()&lt;br /&gt; {&lt;br /&gt;  const int N = 3;&lt;br /&gt;  Thread[] threads = new Thread[N];&lt;br /&gt;  StringContainer container = new StringContainer();&lt;br /&gt;&lt;br /&gt;  TimeCounter timeCounter = new TimeCounter(container);&lt;br /&gt;  threads[0] = new Thread(new ThreadStart(timeCounter.Run));&lt;br /&gt;&lt;br /&gt;  KeyReader keyReader = new KeyReader(container);&lt;br /&gt;  threads[1] = new Thread(new ThreadStart(keyReader.Run));&lt;br /&gt;&lt;br /&gt;  KeyWriter keyWirter = new KeyWriter(container);&lt;br /&gt;  threads[2] = new Thread(new ThreadStart(keyWirter.Run));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  foreach (Thread a in threads)&lt;br /&gt;  {&lt;br /&gt;   a.Start();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  foreach (Thread a in threads)&lt;br /&gt;  {&lt;br /&gt;   a.Join();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Console.ReadKey();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;実行結果&lt;/p&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S8e-qdqZfsI/AAAAAAAAAEY/Nk0j8HeFZKM/s1600/chat0001.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 284px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S8e-qdqZfsI/AAAAAAAAAEY/Nk0j8HeFZKM/s400/chat0001.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5460542709936258754" /&gt;&lt;/a&gt; &lt;p style="'margin:0in;font-family:"&gt;静止では分かりにくいですが、１行目で時間を数えつつ、２行目でキーボード入力を受け付け、３行目に入力をそのまま出力します。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1935636897134278716?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1935636897134278716/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/c.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1935636897134278716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1935636897134278716'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/c.html' title='C#によるチャットプログラムその１:ネットワークとスレッド'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S8e-qdqZfsI/AAAAAAAAAEY/Nk0j8HeFZKM/s72-c/chat0001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2264755824278217550</id><published>2010-04-11T05:17:00.006+09:00</published><updated>2010-05-29T01:12:18.360+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその31:アルファテストで木の描画</title><content type='html'>&lt;p&gt;前回、透明なオブジェクトを描画するときに前後関係がおかしくなるのでソートする必要があるようなことを言いましたが、アルファテスト使えば簡単に透明なオブジェクトの重なりあいも実現できました。&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NkZDk5yZnUw/S8DeADE65DI/AAAAAAAAAEI/-qRNaDKAtf8/s1600/xna0031b.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S8DeADE65DI/AAAAAAAAAEI/-qRNaDKAtf8/s400/xna0031b.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5458606840780350514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NkZDk5yZnUw/S8Dd_jDslwI/AAAAAAAAAEA/uGxjJiO-idc/s1600/xna0031a.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S8Dd_jDslwI/AAAAAAAAAEA/uGxjJiO-idc/s400/xna0031a.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5458606832185284354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S8DeAXMYaqI/AAAAAAAAAEQ/52tZxFoYKuE/s1600/xna0031c.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S8DeAXMYaqI/AAAAAAAAAEQ/52tZxFoYKuE/s400/xna0031c.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5458606846180354722" /&gt;&lt;/a&gt;&lt;span  lang="ja" style="'"&gt;木の葉っぱはただの四角形メッシュで、葉っぱの画像の周りはα&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;=1&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;の透明色になっています。&lt;/span&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;span  lang="ja" style="'"&gt;自分で作ったモデルなので不格好な木ですが、それっぽさはでてると思います。木の影もちゃんとでてるのを見ると&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;PSM&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;実装しておいてよかったぁーっと思ったりします。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;span  lang="ja" style="'"&gt;&lt;a href="http://blogs.msdn.com/shawnhar/archive/2009/02/18/depth-sorting-alpha-blended-objects.aspx"&gt;こちらのページ&lt;/a&gt;をもとに実装しましたが、どうやら&lt;/span&gt;&lt;a href="http://creators.xna.com/en-US/sample/billboard"&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;XNA&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;のビルボードサンプル&lt;/span&gt;&lt;/a&gt;&lt;span  lang="ja" style="'"&gt;と同じ方法だったようです。&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2264755824278217550?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2264755824278217550/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/xnafps31.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2264755824278217550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2264755824278217550'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/04/xnafps31.html' title='XNAでFPSその31:アルファテストで木の描画'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/S8DeADE65DI/AAAAAAAAAEI/-qRNaDKAtf8/s72-c/xna0031b.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4102568140647545620</id><published>2010-03-31T21:38:00.002+09:00</published><updated>2010-05-29T01:12:18.361+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその30:透明なテクスチャの描画とその影</title><content type='html'>&lt;p&gt;&lt;span  lang="ja" style="'"&gt;長方形の&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;3D&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;モデルにα値をもった&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;png&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;画像を張り付けて、透明なオブジェクトの描画をしてみました。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S7NCXzmfV4I/AAAAAAAAADg/jskRWBmDP6Q/s1600/xna0030.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S7NCXzmfV4I/AAAAAAAAADg/jskRWBmDP6Q/s400/xna0030.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5454776550431872898" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p style="'margin:0in;font-family:"&gt;シャドウボリュームと違い、テクスチャが透明でもその見た目通りに影の描画ができるのはシャドウマップ系のシャドウ生成のメリットですね。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;透明なモデルを描画する前に、以下のようなコードでレンダステートを変更することで実装してみました。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;graphicsDevice.RenderState.AlphaBlendEnable = true;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;graphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;graphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;graphicsDevice.RenderState.DepthBufferWriteEnable = false;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;graphicsDevice.RenderState.CullMode = CullMode.None;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;この方法の場合、Ｚバッファと隠面消去をオフにしているので木の葉っぱなどのように透明なテクスチャが重なり合うような場合は上手く表現できません。解決方法としては不透明なオブジェクトを描画してから透明なオブジェクトを視点に対して奥から順番に描画する等があります。&lt;a href="http://blogs.msdn.com/shawnhar/archive/2009/02/18/depth-sorting-alpha-blended-objects.aspx"&gt;その他の方法&lt;/a&gt;もあるようです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4102568140647545620?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4102568140647545620/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps30.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4102568140647545620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4102568140647545620'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps30.html' title='XNAでFPSその30:透明なテクスチャの描画とその影'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S7NCXzmfV4I/AAAAAAAAADg/jskRWBmDP6Q/s72-c/xna0030.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2098074210493632091</id><published>2010-03-27T02:39:00.003+09:00</published><updated>2010-05-29T01:12:18.361+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその29:セミオート、フルオート、バーストと銃声の追加</title><content type='html'>&lt;p style="MARGIN: 0in;font-size:10pt;" &gt;&lt;span lang="ja"&gt;かなりチープさがありますが、若干&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;FPS&lt;/span&gt;&lt;span lang="ja"&gt;らしさが出てきた気がします。&lt;/span&gt;&lt;/p&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Eyp1dtcN7lo&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Eyp1dtcN7lo&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;まだまだ練れる個所は多く、フルオートよりもバーストの集団率を高くしたり、連射し続けるごとに散弾するような調整が必要ですが銃については一段落とします。&lt;/p&gt;&lt;p&gt; 人型の的が倒れても銃痕が残るのはなんとかしないといけませんね。現状は弾が当たった場所に銃痕の平面ポリゴンを表示させてるだけですが、本来ならばステンシルを使ったりして銃痕を表現するんでしょうか？　メジャーな銃痕の実装方法がよくわかりません。うーん。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2098074210493632091?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2098074210493632091/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps29.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2098074210493632091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2098074210493632091'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps29.html' title='XNAでFPSその29:セミオート、フルオート、バーストと銃声の追加'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5533818871899007565</id><published>2010-03-16T22:59:00.003+09:00</published><updated>2010-05-29T01:12:18.362+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその28:散弾の実装</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S5-O5Gf-ZDI/AAAAAAAAADY/YXEnYDm6F84/s1600-h/xna0028.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S5-O5Gf-ZDI/AAAAAAAAADY/YXEnYDm6F84/s400/xna0028.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449231185790002226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="'margin:0in;font-family:"&gt;銃を撃ったときに弾がバラけるようにしました。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5533818871899007565?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5533818871899007565/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5533818871899007565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5533818871899007565'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps28.html' title='XNAでFPSその28:散弾の実装'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S5-O5Gf-ZDI/AAAAAAAAADY/YXEnYDm6F84/s72-c/xna0028.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-7145151289674949429</id><published>2010-03-16T22:13:00.005+09:00</published><updated>2010-05-29T01:12:18.363+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその27:ラジオ実装。XACTで3Dサウンド</title><content type='html'>サウンド関係は全く手をつけてなかったので試しにラジオを実装してみました。  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;ラジオに焦点を合わせて&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;E&lt;/span&gt;&lt;span lang="ja" style="'"&gt;キーを押すとポーズ&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;/&lt;/span&gt;&lt;span lang="ja" style="'"&gt;レジュームが切り替わります。下の動画は距離による音量の減衰と音源の方向による左右の音量の違いを録画したものです。&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;object width="480" height="385"&gt;&lt;embed src="http://www.youtube.com/v/onRnu2LpC_U&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;span lang="en-US"  style="font-family:Verdana;"&gt;Cue&lt;/span&gt;&lt;span lang="ja" style="'"&gt;クラスの&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Apply3D&lt;/span&gt;&lt;span lang="ja" style="'"&gt;関数を見つけた時に、「これは！」と思い適当に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;AudioListener&lt;/span&gt;&lt;span lang="ja" style="'"&gt;と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;AudioEmitter&lt;/span&gt;&lt;span lang="ja" style="'"&gt;をインスタンス化して試したところ音源の方向は簡単に表現できたのに距離による減衰がなかなかできないのでなんでかなーっと思ったら、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;XACT&lt;/span&gt;&lt;span lang="ja" style="'"&gt;側でデータを設定しておく必要があったようです。冷静に考えればあたりまえかｗ&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;そんなわけで実装する際に迷ったところをメモしておきます。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;&lt;a href="http://sky.geocities.jp/kmaedam/xna/backmusic.htm"&gt;超初心者のプログラム入門(XNA)&lt;/a&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;のページよりサウンドを再生できるようにします。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;次に、距離による音量の減衰は&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;XACT&lt;/span&gt;&lt;span lang="ja" style="'"&gt;上で設定します。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;①&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Variables-&gt;Cue Instance-&gt;Distance&lt;/span&gt;&lt;span lang="ja" style="'"&gt;の&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;VariableRange&lt;/span&gt;&lt;span lang="ja" style="'"&gt;の右側の入力ボックスの値を「&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;1,000.00&lt;/span&gt;&lt;span lang="ja" style="'"&gt;」ほどに設定します。この値はゲーム内の距離とのスケールによります。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;②&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;RPC Present&lt;/span&gt;&lt;span lang="ja" style="'"&gt;上で右クリ&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;-&gt;New RPC Present&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を選択し、&lt;/span&gt;&lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;出てきたウィンドウの次の項目を&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Variable-&gt;Distance&lt;/span&gt;&lt;span lang="ja" style="'"&gt;、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Object-&gt;Sound&lt;/span&gt;&lt;span lang="ja" style="'"&gt;、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Parameter-&gt;Volume&lt;/span&gt;&lt;span lang="ja" style="'"&gt;のように設定するとグラフが出現します。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;あとは距離に応じた音量の減衰をグラフ上にあるポイントを適当にドラッグしてグラフの形を変えることで実装します。 &lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 335px;" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S5-EMDIrWRI/AAAAAAAAADQ/hiKvbjUNUWI/s400/xna0027.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449219416676587794" /&gt;&lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;このグラフでは500以上の距離では消音されることになります。この値は適切に決めてください。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'"&gt;③&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Sound Banks&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;W&lt;/span&gt;&lt;span lang="ja" style="'"&gt;クリして出てきた&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;SoundBanks&lt;/span&gt;&lt;span lang="ja" style="'"&gt;のウィンドウで、距離減衰を適用したいサウンド上で右クリ&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;-&gt;Attach/Deattach RPC(s)&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を選択し、先ほど作製した&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;RPC&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を適用して完了です。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;C#&lt;/span&gt;&lt;span lang="ja" style="'"&gt;のコード内では適当に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;AudioListener&lt;/span&gt;&lt;span lang="ja" style="'"&gt;と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;AudioEmitter&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を設定して、&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Cue&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="'"&gt;再生する前&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="'"&gt;と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;"Update&lt;/span&gt;&lt;span lang="ja" style="'"&gt;毎&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="'"&gt;に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Apply3D&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を呼び出すだけです。&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;AudioEmitter&lt;/span&gt;&lt;span lang="ja" style="'"&gt;側の&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;.Up&lt;/span&gt;&lt;span lang="ja" style="'"&gt;と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;.Front&lt;/span&gt;&lt;span lang="ja" style="'"&gt;は適当に&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Vector3.Up&lt;/span&gt;&lt;span lang="ja" style="'"&gt;と&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;Vector3.Front&lt;/span&gt;&lt;span lang="ja" style="'"&gt;を設定しました。距離減衰と音方向はこれで実装できたので、恐らくですがドップラー効果を実装しない限り関係ない設定ではないかと思います&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="'"&gt;違うかも&lt;/span&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="'"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-7145151289674949429?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/7145151289674949429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps27xact3d.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7145151289674949429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7145151289674949429'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps27xact3d.html' title='XNAでFPSその27:ラジオ実装。XACTで3Dサウンド'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/S5-EMDIrWRI/AAAAAAAAADQ/hiKvbjUNUWI/s72-c/xna0027.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3000498206146799755</id><published>2010-03-15T04:27:00.003+09:00</published><updated>2010-05-29T01:12:18.364+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその26:人型の的の追加</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S5049mP6eRI/AAAAAAAAADI/eJYYUBiBTPw/s1600-h/xna0026.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 235px;" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S5049mP6eRI/AAAAAAAAADI/eJYYUBiBTPw/s400/xna0026.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5448573755078637842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;撃ったら倒れるだけの的です。&lt;br /&gt;現状だと的が倒れても銃痕がその場に残ったままなのでなんとかする必要があります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3000498206146799755?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3000498206146799755/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps25.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3000498206146799755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3000498206146799755'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/03/xnafps25.html' title='XNAでFPSその26:人型の的の追加'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S5049mP6eRI/AAAAAAAAADI/eJYYUBiBTPw/s72-c/xna0026.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5939666418791040296</id><published>2010-02-26T02:28:00.003+09:00</published><updated>2010-05-29T01:12:18.365+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその25:BlenderのExportがおかしい気がする その3</title><content type='html'>&lt;p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;Blender&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;の&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;Exporter&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;でも頂点の法線ベクトルを正しくだせたようです。&lt;/span&gt;&lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="ja" style="'"&gt;「&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;no smooth &lt;/span&gt;&lt;span  lang="ja" style="'"&gt;」&lt;/span&gt;&lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="ja" style="'"&gt;のボタンをオンにしてから&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;Export&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;するだけでできました。&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S4azfpx7loI/AAAAAAAAADA/6uXhO261qxQ/s1600-h/xna25.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 307px; height: 392px;" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S4azfpx7loI/AAAAAAAAADA/6uXhO261qxQ/s400/xna25.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5442234556096419458" /&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="ja" style="'"&gt;かなり色々試していたんですが、&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;no smooth&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;を完全に見落としていたみたいです。&lt;/span&gt;&lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;x&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;ファイルはこれでいいんですが、&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;fbx&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;ではどうも無理っぽい。&lt;/span&gt;&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt;うーん。&lt;/p&gt;  &lt;p style="'margin:0in;font-family:"&gt; &lt;/p&gt;  &lt;p  style="margin:0in;font-size:10.0pt;"&gt;&lt;span  lang="ja" style="'"&gt;おとなしく&lt;/span&gt;&lt;span  lang="en-US" style="font-family:Verdana;"&gt;x&lt;/span&gt;&lt;span  lang="ja" style="'"&gt;ファイル使うことにします。&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5939666418791040296?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5939666418791040296/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps24blenderexport-3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5939666418791040296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5939666418791040296'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps24blenderexport-3.html' title='XNAでFPSその25:BlenderのExportがおかしい気がする その3'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NkZDk5yZnUw/S4azfpx7loI/AAAAAAAAADA/6uXhO261qxQ/s72-c/xna25.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4838373978986680768</id><published>2010-02-18T16:32:00.003+09:00</published><updated>2010-05-29T01:12:18.366+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその24:Parallel Split Shadow Maps</title><content type='html'>&lt;div  style=" margin: 0in;font-size:10.0pt;"&gt;&lt;span lang="en-US"  style="font-family:Verdana;"&gt;PSSM完成しました。&lt;/span&gt;&lt;/div&gt;&lt;div  style=" margin: 0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'font-family:"&gt;&lt;a href="http://appsrv.cse.cuhk.edu.hk/~fzhang/pssm_vrcia/"&gt;本家&lt;/a&gt;&lt;/span&gt;&lt;span lang="ja" style="'font-family:"&gt;で公開されているXNAのコードを、自分のFPSに組み込めるようにリファクタしただけですが３つ４つかなり苦労する部分がありました。&lt;/span&gt;&lt;span lang="ja" style="'font-family:"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style=" margin: 0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'font-family:"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style=" margin: 0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'font-family:"&gt;&lt;object width="425" height="344"&gt;&lt;embed src="http://www.youtube.com/v/GvdNjOkZW7w&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style=" margin: 0in;font-size:10.0pt;"&gt;&lt;span lang="ja" style="'font-family:"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="'font-family:"&gt;中でも一番苦労したのが、苦労したっていうか解決策に気付かなくて無駄な時間をすごしてしまったことなんですが、下のコードのようにレンダリングターゲットを複数回変更すると画面が紫色に初期化されてかなり悩んでいました。&lt;br /&gt;for(split = 0; split &lt; splitMax; split++)&lt;br /&gt;{&lt;br /&gt;GraphicsDevice.SetRenderTarget(0, shadowMapRenderTarget);&lt;br /&gt;//影描画&lt;br /&gt;GraphicsDevice.SetRenderTarget(0, sceneRenderTarget);&lt;br /&gt;//シーン描画&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;いろいろググったところ、&lt;br /&gt;&lt;/div&gt;&lt;div style="'font-family:"&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/8ec678eb-8d72-4b10-9623-7c39f0912256"&gt;http://social.msdn.microsoft.com/Forums/ja-JP/xnagameja/thread/8ec678eb-8d72-4b10-9623-7c39f0912256&lt;/a&gt;&lt;/div&gt;&lt;div style="'font-family:"&gt;に解決方法が載ってました。&lt;br /&gt;&lt;br /&gt;なるほど、箱○は毎回レンダリングターゲットを初期化するためWindows向けに組んだコードでも箱○に合わせて初期化するということらしいです。そこでレンダーターゲットを確保する際に、&lt;br /&gt;sceneRenderTarget = new RenderTarget2D(&lt;br /&gt;   GraphicsDevice,Width,Height, 1,&lt;br /&gt;   BackBufferFormat, MultiSampleType,MultiSampleQuality, &lt;span style="color:#ff0000;"&gt;RenderTargetUsage.PreserveContents&lt;/span&gt;);&lt;br /&gt;とすることで、プラットフォームに合わせて初期化処理を変更できるようです。&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;PreserveContents&lt;/span&gt;ではWindowsでは初期化しない。箱○では初期化する。という処理になるようです。&lt;br /&gt;そのため箱○では表示できないことになります。&lt;br /&gt;&lt;br /&gt;これに気付くまで2，3日かかり、その間かなり滅入ってたんですが何とか完成できてよかったです。&lt;br /&gt;&lt;br /&gt;このPSSMではあまりに広いマップで動作できないので、次は本家のOpenGLの広域PSSMのサンプルを解読してなんとかデカイマップで影付けできるようにしたいです。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4838373978986680768?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4838373978986680768/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps24parallel-split-shadow-maps.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4838373978986680768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4838373978986680768'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps24parallel-split-shadow-maps.html' title='XNAでFPSその24:Parallel Split Shadow Maps'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8644957122326650136</id><published>2010-02-18T02:21:00.003+09:00</published><updated>2010-05-29T01:12:18.367+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその23:BlenderのExportがおかしい気がする その２</title><content type='html'>&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10pt; margin: 0in;"&gt;前回XNAでFPSその22:BlenderのExportがおかしい気がするからの追記です。&lt;/div&gt;&lt;div style="font-size: 10pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;FPS&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;そのもとは関係ないんですけどね……。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;色々調べた結果、&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Blender&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;のデータ形式が面UVなのに対して&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;DirectX&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;のデータ形式が頂点&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;UV&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;であるため&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10pt; margin: 0in;"&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Blender&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;の&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Exporter&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;からは右の画像のような法線しか得られないようです。どうやら&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Python Script&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;を自分で手直しすればいいようですが……無理です。やはり他の&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;3D&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデリングソフトを使ったほうが現実的な気がします。仕方ない探すかぁー&lt;/span&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/S3wlG8CFEVI/AAAAAAAAAC4/Wj6SFQY6XbU/s1600-h/xna23.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ct="true" height="177" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/S3wlG8CFEVI/AAAAAAAAAC4/Wj6SFQY6XbU/s400/xna23.PNG" width="400" /&gt;.&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; font-size: 10pt; margin: 0in;"&gt;(縮小した写真じゃ分かりにくいですが、各頂点の法線に違いがあります。)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8644957122326650136?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8644957122326650136/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps22blenderexport_18.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8644957122326650136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8644957122326650136'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps22blenderexport_18.html' title='XNAでFPSその23:BlenderのExportがおかしい気がする その２'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NkZDk5yZnUw/S3wlG8CFEVI/AAAAAAAAAC4/Wj6SFQY6XbU/s72-c/xna23.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-929267922060516594</id><published>2010-02-12T00:27:00.000+09:00</published><updated>2010-05-29T01:12:18.368+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその22:BlenderのExportがおかしい気がする</title><content type='html'>&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;XNA&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;で法線マップを出力した際の挙動がどうもおかしい。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;これはもしかするとポリゴンモデルのほうに問題があるんじゃないかと調べたところ、&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Blender&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;からの出力で法線がおかしなことになっていることに気付きました。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;ただの立方体です。本来は左のように各面それぞれの法線であるべきですが、&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Blender&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;の出力では頂点法線から補間された法線が面法線として割り当てられているようです。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NkZDk5yZnUw/S2_UoEBvcHI/AAAAAAAAACw/nhz9TpC73QI/s1600-h/22a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S2_UoEBvcHI/AAAAAAAAACw/nhz9TpC73QI/s320/22a.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;なんとかしようと色々試したり調べたりしたんですが無理でした。&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;当面はモデルのポリゴン数を増やすことでしのぐことにします。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-929267922060516594?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/929267922060516594/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps22blenderexport.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/929267922060516594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/929267922060516594'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps22blenderexport.html' title='XNAでFPSその22:BlenderのExportがおかしい気がする'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NkZDk5yZnUw/S2_UoEBvcHI/AAAAAAAAACw/nhz9TpC73QI/s72-c/22a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4562309406578945814</id><published>2010-02-08T18:04:00.000+09:00</published><updated>2010-05-29T01:12:18.368+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその21: ステンシルで自分の銃を表示</title><content type='html'>&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;普段&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;FPS&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;やってても気づいていませんでした。銃って壁に埋まらないんですね。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;自然すぎで自分でゲーム描くまで気づきませんでした。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S2_SprtMKLI/AAAAAAAAACo/XZR9JC4jnHw/s1600-h/21a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S2_SprtMKLI/AAAAAAAAACo/XZR9JC4jnHw/s320/21a.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;これは両方ともプレイヤーがしゃがんでいる状態の画像です。上の画像は地面に銃が埋まっていますが、下の画像はステンシルテストを使っているので埋もれてません。&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;  &lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;ステンシルを使うよりも、二つのレンダリングターゲットに描画してからそれぞれを合成するほうが簡単かもしれません。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4562309406578945814?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4562309406578945814/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4562309406578945814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4562309406578945814'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps21.html' title='XNAでFPSその21: ステンシルで自分の銃を表示'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/S2_SprtMKLI/AAAAAAAAACo/XZR9JC4jnHw/s72-c/21a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3242400025361729923</id><published>2010-02-04T02:19:00.002+09:00</published><updated>2010-05-29T01:12:18.369+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその20: トゥーンのエッジ処理の方法を変更</title><content type='html'>トゥーンレンダのエッジの部分はポリゴンモデルを一回り大きくする方法で処理していましたが、問題がでてきたのでやり方を変えました。&lt;br /&gt;いままではサルや立方体のような小さなモデルしか表示してなかったんで気付かなかったんですが、マップのような大きなモデルにした場合にちょっと無視できない問題がでてきました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;図のように水色の平面に対して赤い柱が突き抜けてるようなモデルの場合、黒丸で囲った場所に柱と輪郭のスキマが見えてしまいます。それに加えて輪郭として強調されるべき黄色の部分がまったく強調されてません。というか分かりにくい図ですみません。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2msx5ws1TI/AAAAAAAAAB4/Q_5AO79vBuc/s1600-h/aa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2msx5ws1TI/AAAAAAAAAB4/Q_5AO79vBuc/s400/aa.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;  &lt;br /&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;そこで色々調べた結果。法線を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;RGB&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;に深度を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;W&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;に書き込んだ法線深度マップを作り、法線深度マップからエッジ抽出をして、通常のシーンにエッジを加える方法が一番よさそうだと分かりました。早い話が&lt;/span&gt;&lt;a href="http://creators.xna.com/ja-JP/sample/nonrealisticrendering"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;XNA Creaters Club Online&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;の非写実的なレンダリング&lt;/span&gt;&lt;/a&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;のやり方です。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;とにかく百聞は一見に如かずということで、実行結果から。というか分かりにくいテクスチャ張っててすいません。&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;一回り大きなモデルの方法&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2mtN8CgW9I/AAAAAAAAACA/CYzWjARjo2A/s1600-h/ee.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2mtN8CgW9I/AAAAAAAAACA/CYzWjARjo2A/s400/ee.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;エッジ検出の方法&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2muFvoBvWI/AAAAAAAAACI/0aWfUVxRnU4/s1600-h/dd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/S2muFvoBvWI/AAAAAAAAACI/0aWfUVxRnU4/s400/dd.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;これはいいトゥーン！！！！！！！！！！&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;やはり一回りモデルを大きくする方法だと妙な隙間が生まれたり、谷の部分にエッジが描かれてませんね。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;上記のサンプルが英語でちょっと面食らったのでひょっとしたら需要があるかもということで解説を載せておきます。ぜんぜん大した話じゃないんですけどね……&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;以後のコードはこちらの一部引用一部改変版です。本家のプログラムはトゥーン以外も色々実装しており、やや読むのに時間がかかったので必要な部分だけ抜き出しておきます。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;とりあえず方針から。エッジとは何か、何を基準に&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;3D&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデルの輪郭に黒い線を引くかという問題ですが、この方法では&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;面の法線が急激に変化している&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;ところと、&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;物と物が重なっている&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;ところをエッジとしています。&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;あたまりまえっちゃあたりまえか&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div align="left" lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;・面の法線が急激に変化している&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;これは、紙を山折や谷折にしたような場面です。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;核必要があった図なのか謎ですが、赤い線に切り込みを入れた紙を右図のように折った物を想像すれば分かりやすいかと思います。&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_NkZDk5yZnUw/S2muf_Gn3FI/AAAAAAAAACQ/kPHKgtgnp4Y/s1600-h/cc.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/S2muf_Gn3FI/AAAAAAAAACQ/kPHKgtgnp4Y/s400/cc.jpg" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;  &lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;・物と物が重なっている&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;こちらは説明不要ですね。重なり合ってる部分はそのまま縁です。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;この二つをどうにかして検出するために、法線深度マップを制作します。頂点シェーダの入力として受けることのできる法線を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;RGB&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;値に、各頂点の深度を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;A&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;値&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;アルファ&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;に保存し色情報として処理をします。&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NkZDk5yZnUw/S2muqGBE8QI/AAAAAAAAACY/qyahVXvDUNw/s1600-h/gg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/S2muqGBE8QI/AAAAAAAAACY/qyahVXvDUNw/s400/gg.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;さて、法線と深度を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;2&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;次元画像として得ることができたとします。次に急激に変化している箇所というのはどこかを、注目画素の周囲&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;4&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;近傍&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;このプログラムでは&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;4&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;近傍ではなく左上、右上、左下、右下の斜め&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;4&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;方向&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;の変化の差を調べ、その差が大きなところが急激に変化しているところとします。何を基準に&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;大きな&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;や&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;急激&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;"&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;な変化と判断するかはあらかじめ閾値や重み&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;強度&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;を用意しておくことで解決します。&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;よって手順としては、&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;１．法線深度マップを作る。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;２．シーンをレンダリングする。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;３．レンダリングしたシーンに法線深度マップから抽出したエッジを載せる。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;の３手順になり、必要なコードは、&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;①法線深度マップを得るための&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;HLSL&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;②&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;エッジ検出のための&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;HLSL&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;③&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;1.~3.&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;を処理するための&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;の&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;3&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;つになります。&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;①法線深度マップを得るための&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;HLSL&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;法線方向はピクセルシェーダが勝手に入力として引数でとってくれます。&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;深度はワルドビュープロジェクション変換した頂点の&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Z/W&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;ですぐでます。&lt;/span&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;以上です。簡単です。&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&amp;nbsp;  &lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;struct NormalDepthVertexShaderOutput&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 Position : POSITION0;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 Color : COLOR0;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;};&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;NormalDepthVertexShaderOutput NormalDepthVertexShader(&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;float4 Position : POSITION0,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float3 Normal : NORMAL0,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float2 TextureCoordinate : TEXCOORD0&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;)&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;NormalDepthVertexShaderOutput output;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// 通常通りのワールドビュープロジェクション変換&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;output.Position = mul(mul(mul(Position, World), View), Projection);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;頂点の法線をワールド変換&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float3 worldNormal = mul(Normal, World);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線を&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;RGB&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;値として保存。　&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//1&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;足して&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;2&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;で割るのは&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;0~1&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;の範囲に収めるため&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線の取りうる値は&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;-1~1)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;output.Color.rgb = (worldNormal + 1) / 2;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// 深度をアルファ値として保存。&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;output.Color.a = output.Position.z / output.Position.w;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return output;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;ピクセルシェーダはそのまま色をだすだけです。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float4 NormalDepthPixelShader(float4 color : COLOR0) : COLOR0&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return color;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;technique NormalDepth{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;pass P0{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .75in; margin: 0in;"&gt;VertexShader = compile vs_1_1 NormalDepthVertexShader();&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;PixelShader = compile ps_1_1 NormalDepthPixelShader();&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&amp;nbsp;  &lt;br /&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;②エッジ検出のための&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;HLSL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;閾値や重みとしていくつかの定数を用意しておきます。これらは本家のプログラムをそのまま引用しました。本来ならば何度か試行錯誤してちょうどいい値を探す必要があると思います。&lt;/div&gt;&lt;div style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;また、シーンをレンダリングしたものと法線深度マップの２つを格納するためのテクスチャサンプラも用意します。&lt;/div&gt;&lt;div style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;あとは上で説明したとおりに斜め四近傍の法線深度マップの差よりエッジを検出、シーンのテクスチャへ適用するだけです。&lt;/div&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;エッジの幅とエッジの強さ&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;暗さ&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float EdgeWidth = 1;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float EdgeIntensity = 1;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線の変化量と深度の変化量のための閾値です。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;あまり小さな変化量は無視するために使います。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float NormalThreshold = 0.5;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float DepthThreshold = 0.1;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;// 閾値を超えた、急激に変化している思われる法線と深度に掛け合わせて&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;　その変化量を大きくするためのいわば重みです。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float NormalSensitivity = 1;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float DepthSensitivity = 10;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;画面の解像度&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float2 ScreenResolution;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;普通にレンダリングしたシーン用のテクスチャ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;texture SceneTexture;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;sampler SceneSampler : register(s0) = sampler_state&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Texture = (SceneTexture);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MinFilter = Linear;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MagFilter = Linear;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AddressU = Clamp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AddressV = Clamp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;};&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線深度マップ用のテクスチャ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;texture NormalDepthTexture;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;sampler NormalDepthSampler : register(s1) = sampler_state&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Texture = (NormalDepthTexture);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MinFilter = Linear;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MagFilter = Linear;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AddressU = Clamp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AddressV = Clamp;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;};&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;float4 EdgeDetectColorSketchPixelShader(float2 texCoord : TEXCOORD0) : COLOR0&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float3 scene = tex2D(SceneSampler, texCoord);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt; //&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;画面の解像度からエッジのオフセットを算出。&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float2 edgeOffset = EdgeWidth / ScreenResolution;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;注目画素に対して左上、右上、左下、右下方向へオフセット分の距離進んだ画素の深度を読み取る&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;（何故、上下左右ではなく斜め方向の４つにしたのか疑問ですが…&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 n1 = tex2D(NormalDepthSampler, texCoord + float2(-1, -1) * edgeOffset);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 n2 = tex2D(NormalDepthSampler, texCoord + float2( 1,&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1) * edgeOffset);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 n3 = tex2D(NormalDepthSampler, texCoord + float2(-1,&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;1) * edgeOffset);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 n4 = tex2D(NormalDepthSampler, texCoord + float2( 1, -1) * edgeOffset);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//　法線と深度の左上と右上の差、左下と右したの差を足したものを傾きとして格納&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float4 diagonalDelta = abs(n1 - n2) + abs(n3 - n4);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;傾きから法線の変化量と深度の変化量をそれぞれ格納&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float normalDelta = dot(diagonalDelta.xyz, 1);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float depthDelta = diagonalDelta.w;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;閾値以下の変化を無視し、閾値を超えたものに一定の強度を乗算したものを変化量とする。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;これにより綺麗にできるようです。）&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;normalDelta = saturate((normalDelta - NormalThreshold) * NormalSensitivity);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;depthDelta = saturate((depthDelta - DepthThreshold) * DepthSensitivity);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;対象のピクセルはどれぐらいエッジに乗っているかを法線と深度の変化量より調べます&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;エッジの中心ほど法線と深度の変化量は大きくなるため、&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;ＭＳ ゴシック&amp;quot;;"&gt;エッジの中心ほどこの値は大きくなることになる&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;float edgeAmount = saturate(normalDelta + depthDelta) * EdgeIntensity;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// シーンのテクスチャの対象ピクセルをエッジの量だけ暗くする。&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;scene *= (1 - edgeAmount);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return float4(scene, 1);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;technique EdgeDtectColorSketch&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;pass P0&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;{&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .75in; margin: 0in;"&gt;Pixelshader = compile ps_2_0 EdgeDetectColorSketchPixelShader();&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: .375in; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;③&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;XNA&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;側です。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;大まかな流れだけしか書いていません。&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;HLSL&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;の適用の仕方やレンダリングなどは適切な関数内でお願いします。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;レンンダーターゲットを用意します。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;RenderTarget2D sceneRenderTarget;&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;シーン用&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;RenderTarget2D normalDepthRenderTarget;&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線深度マップ用&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;適切な場所で&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;new&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;してください。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;PresentationParameters pp = graphics.GraphicsDevice.PresentationParameters;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.125in; margin: 0in;"&gt;sceneRenderTarget = new RenderTarget2D(graphics.GraphicsDevice,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.5in; margin: 0in;"&gt;pp.BackBufferWidth, pp.BackBufferHeight, 1,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.5in; margin: 0in;"&gt;pp.BackBufferFormat, pp.MultiSampleType, pp.MultiSampleQuality);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.125in; margin: 0in;"&gt;normalDepthRenderTarget = new RenderTarget2D(graphics.GraphicsDevice,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.5in; margin: 0in;"&gt;pp.BackBufferWidth, pp.BackBufferHeight, 1,&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin-left: 1.5in; margin: 0in;"&gt;pp.BackBufferFormat, pp.MultiSampleType, pp.MultiSampleQuality);&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線深度マップの製作&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;graphics.GraphicsDevice.SetRenderTarget(0, normalDepthRenderTarget);&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;//TODO&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;上記①のNormalDepthテクニックでモデルをレンダリング&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデル&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt; foo.fx&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデル&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt; bar.fx&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;通常のシーンをレンダリング&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(BasicEffect&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;や自作の&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;Effect&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;で問題ないです&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;graphics.GraphicsDevice.SetRenderTarget(0, sceneRenderTarget);&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;//TODO&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデル&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt; foo.fx&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;モデル&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt; bar.fx&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;通常のシーンに法線深度マップから得られたエッジを載せる&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;graphics.GraphicsDevice.SetRenderTarget(0, sceneRenderTarget);&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;//TODO&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;上記②のピクセルシェーダへ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線深度マップと通常のシーンをテクスチャとして渡し&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;通常のシーンにエッジを載せたものをレンダリングする。&lt;/span&gt;&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;//&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;最終的な結果を出力&lt;/span&gt;&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;spriteBatch.Begin();&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;spriteBatch.Draw(sceneRenderTarget&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;.GetTexture()&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;, Vector2.Zero, Color.White);&lt;/span&gt;&lt;/div&gt;&lt;div lang="en-US" style="font-family: Verdana; font-size: 10.0pt; margin: 0in;"&gt;spriteBatch.End();&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;ここまで言っといてなんなんですが、このやり方では山折の部分がエッジとして検出されません。これは各テクセルの法線を自動で補完してしまっていることと、面の法線ではなく頂点の法線をもとの法線マップを作っているためじゃないかと思います。&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;この図の立方体の凸の部分の色&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;法線&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;が同じような色になってしまって、法線の変化がないことになってしまっています。本来はグラデーションがついた色じゃなく、面ごとに決まった色でぬるべきなのですが……。やり方が分かりませんでした。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NkZDk5yZnUw/S2mv0vR_m6I/AAAAAAAAACg/u6qxZ74yEmo/s1600-h/hh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/S2mv0vR_m6I/AAAAAAAAACg/u6qxZ74yEmo/s400/hh.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&amp;nbsp;  &lt;br /&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;というか、最近&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;xna&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;や&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;hlsl&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;についてググっていると自分のブログが上のほうに出てくるようになりました。これ自体はかなり嬉しいのですがあまりの情報の無さに悲しくもなります。海外のサイトも活用しますがやはり読むのに労力がかかるのでもっと日本語で&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;XNA&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;の情報が入ればいいんですが……。もちろん&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;DirectX&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;や&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;OpenGL&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;で解説しているサイトも読んだりしますがそれでも情報の絶対量がすくない気がします。そんなわけで、あまり大したことのない解説でも余裕があれば載せてみたいです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align="left" style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3242400025361729923?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3242400025361729923/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps20.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3242400025361729923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3242400025361729923'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps20.html' title='XNAでFPSその20: トゥーンのエッジ処理の方法を変更'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NkZDk5yZnUw/S2msx5ws1TI/AAAAAAAAAB4/Q_5AO79vBuc/s72-c/aa.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1694125788406636536</id><published>2010-02-01T19:20:00.002+09:00</published><updated>2010-05-29T01:12:18.370+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその19: ガンレンジの試作</title><content type='html'>&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JD7_Nq6tMmg&amp;hl=ja_JP&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JD7_Nq6tMmg&amp;hl=ja_JP&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;色々爪は甘いですが、FPSとして見れる程度にはコーディングが進んできたのでBlenderでガンレンジの3Dモデルを作ってプログラムに入れてみました。テクスチャや3Dモデルなどのチープさは後から幾らでも差し替えられるので、試作プログラムとしては上場の出来といったところだと思います。&lt;br /&gt;&lt;br /&gt;問題点をいくつか&lt;br /&gt;・影がおかしい(影が落ちる表示範囲、影の解像度)&lt;br /&gt;・3Dモデルの比率がおかしい(特に銃)&lt;br /&gt;・プレイヤーと壁の当たり判定がない&lt;br /&gt;・銃の挙動(リコイルが適当すぎ、弾のバラつきがない、フルオートができない)&lt;br /&gt;&lt;br /&gt;とりあえず、ゲームとして致命的な当たり判定から書く必要がありそうです。FPSのプレイヤーとマップの当たり判定のセオリーがよくわかりませんが、いまのところレイを飛ばしてポリゴンとの衝突判定をとろうかと思っています。やはり普通はバウンディングボックスでやったりするのかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1694125788406636536?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1694125788406636536/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps19.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1694125788406636536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1694125788406636536'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/xnafps19.html' title='XNAでFPSその19: ガンレンジの試作'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-4566179682701725187</id><published>2010-02-01T18:28:00.000+09:00</published><updated>2010-05-29T01:11:53.171+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>チェスAIに関してメモ書き</title><content type='html'>チェスＡＩについてのメモ書き&lt;br /&gt;&lt;br /&gt;自分用のメモです。&lt;br /&gt;&lt;br /&gt;チェスとは"二人零和有限確定完全情報ゲーム"&lt;br /&gt;&lt;br /&gt;&lt;キーワード&gt;&lt;br /&gt;α-βカット&lt;br /&gt;ミニマックスorネガマックス&lt;br /&gt;NegaScout(null window search),SSS,DUAL,MTD(f),(Minimaxからの派生)&lt;br /&gt;評価関数(eval = Σwi*fi 重みを用いる)&lt;br /&gt;ハッシュ、ハッシュ法、ハッシュ値、マップ&lt;br /&gt;木探索(幅優先探索、深さ優先探索、反復深化優先探索、深ささ制限探索、双方向探索、均一コスト探索)&lt;br /&gt;評価関数の重みの学習&lt;br /&gt;完全読み&lt;br /&gt;必勝読み&lt;br /&gt;&lt;br /&gt;&lt;キーとなる概念&gt;&lt;br /&gt;ヒューリスティックの利用&lt;br /&gt;枝狩り（意味のない手は調べない、αβ法のこと）&lt;br /&gt;定石をしらべるのにハッシュを使い、譜面を数字に変えておく。検索は数字との比較をすれば早い。(文字列は数字より遅いという意で)&lt;br /&gt;↑探索でマップツリーも使えそう？&lt;br /&gt;各譜面を保存するのにハッシュを使う必要がある。おそらく全パターンはunsigned long intに収まらないのでマップをする必要がある。&lt;br /&gt;&lt;br /&gt;膨大な定石データベース&lt;br /&gt;将棋(?)でいう"地"とは？&lt;br /&gt;得点テーブル(あまり使えないらしいが、探索のデバッグとして使いやすいらしい)&lt;br /&gt;重みの最適化、学習&lt;br /&gt;&lt;br /&gt;&lt;序盤、中盤、終盤でアルゴリズムを切り替える&gt;&lt;br /&gt;&lt;br /&gt;序盤-定石&lt;br /&gt;中盤-定石で終えなくなったら評価関数と探索で&lt;br /&gt;終盤-？（少ない駒なら全てのパターンが完成しているらしく、どこかで公開されているとか）&lt;br /&gt;&lt;br /&gt;何が序盤か？　定石にしたがっているうちが序盤&lt;br /&gt;何が中盤か？　定石が適用不可能になったら中盤&lt;br /&gt;何が終盤か？　？&lt;br /&gt;将棋で言う"寄せ"とは？　寄せが終盤なのか？　寄せがあるか、必至があるか、詰みがあるか、これが終盤？&lt;br /&gt;完全読みより必勝読みのほうが早いので終盤では必勝読み→完全読みへアルゴリズムを切り替える？&lt;br /&gt;&lt;br /&gt;&lt;終盤の勝ち方&gt;&lt;br /&gt;「ジャック・ピノーのダイナミックチェス入門」&lt;br /&gt;・キング対キング＋クイーン&lt;br /&gt;・キング対キング＋ルーク&lt;br /&gt;・キング対キング＋2ビショップ&lt;br /&gt;・キング対キング＋ビショップ＋ナイト&lt;br /&gt;・キング対キング＋2ナイト&lt;br /&gt;・正方形の定理&lt;br /&gt;・オポジション（見合い）&lt;br /&gt;・デュランの法則&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;どいういう探索が強いだろうか？＞単純な幅優先探索とα-βカットでことたりる気がするが・・・単純なα-βカットではもっとも強い手意外は刈ることになる-&gt;２番目に強い手などもガン無視していいのか？&lt;br /&gt;意味のない手を切る"枝狩り"とは？　-&gt;枝狩りという概念がある以上、２番目に強い手なども探索するべきか&lt;br /&gt;&lt;br /&gt;&lt;どういう評価が強いだろうか？&gt;&lt;br /&gt;・自分の持ち駒の点数化&lt;br /&gt;・取れる駒の点数化&lt;br /&gt;・取れる駒の数&lt;br /&gt;・とられる可能性のある駒の点数化&lt;br /&gt;・とられる可能性のある駒の数&lt;br /&gt;・自分の動ける駒の数&lt;br /&gt;・敵の動ける駒の数&lt;br /&gt;・自分の移動範囲の数&lt;br /&gt;・敵の移動範囲の数&lt;br /&gt;・自分の攻撃範囲の数&lt;br /&gt;・敵の攻撃範囲の数&lt;br /&gt;・チェックがとれるか&lt;br /&gt;・チェックされるか&lt;br /&gt;・ステイルメイトになるか（有利なときの引き分け、不利なときの引き分け）&lt;br /&gt;&lt;br /&gt;&lt;おそらく簡単なこと&gt;&lt;br /&gt;・ミニorネガマックス&lt;br /&gt;・α-βカット&lt;br /&gt;&lt;br /&gt;&lt;面倒なこと&gt;&lt;br /&gt;・定石データベースの収集&lt;br /&gt;・定石データベースの生成&lt;br /&gt;・定石データベースへのアクセス&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;方向性&gt;&lt;br /&gt;上に述べてきたようなことがチェスマシンの中身の概略でありディープブルーなどこの手法を使っているようだ。&lt;br /&gt;しかし、チェスアルゴリズムの大会があるぐらい世界的には大きな分野で、強いソフトがいくつも無償で公開（中にはソースまで公開しているものもあるようだ）しているらしい。&lt;br /&gt;違うアプローチから入ってみるのもいいかもしれない。ユーザと対戦して手癖を学ぶとか、だんだん強くなるとか、指し方を教えてくれるとか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-4566179682701725187?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/4566179682701725187/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/ai.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4566179682701725187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/4566179682701725187'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/02/ai.html' title='チェスAIに関してメモ書き'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8015249318553384685</id><published>2010-01-18T00:34:00.000+09:00</published><updated>2010-05-29T01:11:53.171+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他のコーディング'/><title type='text'>XNAでチェスその1:PvP部分9割完成</title><content type='html'>チェスです。&lt;br /&gt;FPS創ってる最中ですが、孫うことなきチェスです。&lt;br /&gt;&lt;br /&gt;左クリックドラッグで駒を移動可能な位置まで移せるという操作です。F1でゲームリセット。まだAIは作ってないのでPvPのみです。この画像の時点では千日手とプロモーションが未実装です。&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PBsPwdFqztM&amp;hl=ja_JP&amp;fs=1&amp;color1=0xcc2550&amp;color2=0xe87a9f"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PBsPwdFqztM&amp;hl=ja_JP&amp;fs=1&amp;color1=0xcc2550&amp;color2=0xe87a9f" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;いつものようにPCに向かって、FPSの続きをやろうかと思ったんですが、なんか「別にいまから本気でやるわけじゃないけどチェスつくってみるか、とりあえずXNAのプロジェクトだけ……」ってノリで夜９時ぐらいから始めたら、やめられなくなって日の出までにはほとんどできてしまいました。&lt;br /&gt;&lt;br /&gt;今回はめずらしく、タイトルから決まりました。捻ったのか安直なのかよくわからない名前ですが、ググって類似品がなかったのでこれでいくことにしました。ゲームに限らず自分が創るものでタイトルから決まるのはほんとに珍しい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8015249318553384685?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8015249318553384685/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xna1pvp9.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8015249318553384685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8015249318553384685'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xna1pvp9.html' title='XNAでチェスその1:PvP部分9割完成'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-7938077678495019113</id><published>2010-01-12T00:33:00.004+09:00</published><updated>2010-05-29T01:12:18.371+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその18: パーティクル</title><content type='html'>パーティクルの雛型が完成しました。パーテクル画像、パーティクル数、速度、速度のバラつき、寿命、寿命のバラつきなどが設定でき、見栄えはともかく炎から煙まで大抵のモノは表現できると思います。&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/k1j9bSk0pn4&amp;hl=ja_JP&amp;fs=1&amp;color1=0xe1600f&amp;color2=0xfebd01"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/k1j9bSk0pn4&amp;hl=ja_JP&amp;fs=1&amp;color1=0xe1600f&amp;color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;今は１種類のパーティクルですが、種類や表示数が増やすためParticleMangerクラスを作る必要があります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-7938077678495019113?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/7938077678495019113/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xnafps17_12.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7938077678495019113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7938077678495019113'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xnafps17_12.html' title='XNAでFPSその18: パーティクル'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8738227934050646105</id><published>2010-01-02T17:27:00.000+09:00</published><updated>2010-05-29T01:12:18.372+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその17: 鏡の修正</title><content type='html'>&lt;div style="clear: left; float: left; font-size: 10pt; margin-bottom: 1em; margin-right: 1em; margin-top: 0in;"&gt;鏡の挙動おかしいことに気付いたので修正しました。&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: left; float: left; font-size: 10pt; margin-bottom: 1em; margin-right: 1em; margin-top: 0in;"&gt;下の上側の写真のように、カメラの目線が鏡から構成される平面と交わらないときに鏡の中の世界が描画されないという状況を改善しました。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NkZDk5yZnUw/Sz7_wxTQjWI/AAAAAAAAABg/f7DV80MkRaQ/s1600-h/XNA_FPS_Game_Demo15c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/Sz7_wxTQjWI/AAAAAAAAABg/f7DV80MkRaQ/s320/XNA_FPS_Game_Demo15c.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/Sz8BpuT3yoI/AAAAAAAAABw/FShPaadaR88/s1600-h/XNA_FPS_Game_Demo15f.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://1.bp.blogspot.com/_NkZDk5yZnUw/Sz7_16Kt7gI/AAAAAAAAABo/EaD4Etkomo4/s1600-h/XNA_FPS_Game_Demo15d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/Sz7_16Kt7gI/AAAAAAAAABo/EaD4Etkomo4/s320/XNA_FPS_Game_Demo15d.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;鏡の中のカメラの位置を特定するのに、カメラ目線と鏡面の交点を算出&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;(&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;線と面の衝突判定&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;)&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;をしていたのですが、冷静に考えるとそんなまどろっこしいことはする必要なく、以下の図のような方法で算出できることに気づき修正しました。これにより目線と鏡面の交点が算出できないような状況でも鏡の中の描画ができます。&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/Sz8BpuT3yoI/AAAAAAAAABw/FShPaadaR88/s1600-h/XNA_FPS_Game_Demo15f.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/Sz8BpuT3yoI/AAAAAAAAABw/FShPaadaR88/s320/XNA_FPS_Game_Demo15f.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8738227934050646105?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8738227934050646105/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xnafps17.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8738227934050646105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8738227934050646105'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2010/01/xnafps17.html' title='XNAでFPSその17: 鏡の修正'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/Sz7_wxTQjWI/AAAAAAAAABg/f7DV80MkRaQ/s72-c/XNA_FPS_Game_Demo15c.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1514168612030112348</id><published>2009-12-27T10:56:00.001+09:00</published><updated>2010-05-29T01:12:18.373+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその16: 鏡</title><content type='html'>鏡の実装が一向に完成する気配がなかったので「リソース食うからいいや」と逃ようとしましたが、むしろ逃げるどころか毎日毎日アホみたいにトライ＆エラーで試行錯誤した末、ようやく鏡が完成しました。&lt;br /&gt;&lt;br /&gt;鏡そのものの原理を誤解していて数日。&lt;br /&gt;原理を理解していたのに計算方法を誤解していて数日。&lt;br /&gt;&lt;br /&gt;散々家の鏡と睨めっこしましたよ……。&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-o5mYhI2r1c&amp;hl=ja_JP&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-o5mYhI2r1c&amp;hl=ja_JP&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;どの様に勘違いしていたかというと、この図の下側のように「鏡の位置から鏡の中のカメラが物体を見た」時のスクリーンをそのまま鏡に張ればいいと思っていました。もちろん実装してすぐ気がついたんですが……(実装する前に気付けよｗ)&lt;br /&gt;&lt;br /&gt;で、冷静に考える直したところ。上側の図のように、鏡を軸に奥行反転をし、その位置にカメラを設置した後、「鏡の中のカメラから物体を見た時に鏡の枠を通して見える部分をテクスチャとして実世界の鏡に張る」というのを実装するのに手間どりました。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_NkZDk5yZnUw/Sza-DvALpbI/AAAAAAAAABI/Mls_WSRZzsY/s1600-h/XNA_FPS_Game.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_NkZDk5yZnUw/Sza-DvALpbI/AAAAAAAAABI/Mls_WSRZzsY/s320/XNA_FPS_Game.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;てきとーな図ですが、紫色のスクリーンの部分が上側と下側の図で「実世界のカメラと鏡の中のカメラで重なるかどうか」の違いがあるような感じです。  &lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;どうしようもなくテキトーな図なので間違っているように見えますが、たぶんそんな感じの説明であってます。(あってないかも)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;鏡の3Dモデルの各頂点に割り当てるべきUV座標がテクスチャ外にでるような時、VertexShader側で無理に頂点とUV座標を関連させると、サンプラで設定したClampやBoader等が反映されまるようです。PixelShader側でテクスチャ色を置くようにすると、各頂点にUV座標を割り当てるのではなくテクセルに直接書き込むので奇麗に補完してくれます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/Sza-L0yTogI/AAAAAAAAABQ/_edluyjgGTo/s1600-h/XNA_FPS_Game_Demo15a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/Sza-L0yTogI/AAAAAAAAABQ/_edluyjgGTo/s320/XNA_FPS_Game_Demo15a.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;頂点に割り当てるUV座標が0~1外の時にVertexShaderを使った場合&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NkZDk5yZnUw/Sza-Q24hZOI/AAAAAAAAABY/h6v2N8RxsOg/s1600-h/XNA_FPS_Game_Demo15b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NkZDk5yZnUw/Sza-Q24hZOI/AAAAAAAAABY/h6v2N8RxsOg/s320/XNA_FPS_Game_Demo15b.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;頂点に割り当てるUV座標が0~1外の時にPixelShaderを使った場合&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;キャプチャ画像内の左上は鏡の中のカメラから見た画像です。この左上の画像中の鏡の部分を実世界の鏡に書き込むようにしますが。上の画像ではテクスチャ座標と頂点座標の整合性がとれていないので黒くつぶれている部分があります。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;言葉で説明するのは難しいですかが、とにかくこれに気付くのにも手間取りました。最もこの説明で正しいという保証もありませんが。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;ただ、このプログラムでは鏡の中のカメラと鏡の間にあるものも描画されてしまうので何とかしないといけません。流石に疲れたのでそれはまた今度ということで。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1514168612030112348?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1514168612030112348/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps16.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1514168612030112348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1514168612030112348'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps16.html' title='XNAでFPSその16: 鏡'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NkZDk5yZnUw/Sza-DvALpbI/AAAAAAAAABI/Mls_WSRZzsY/s72-c/XNA_FPS_Game.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1459229670493130232</id><published>2009-12-23T00:57:00.003+09:00</published><updated>2010-05-29T01:12:18.373+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその15: モニター</title><content type='html'>鏡を作ろうと思って、まずためしにライブモニタを作ってみました。途中で気づいたんですがモニタや鏡の場合、その画面の数だけ影も含めてレンダリングが必要になるわけでリソース面で実用に耐えないような気が……。&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vQ_TqMmzkmE&amp;hl=ja_JP&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vQ_TqMmzkmE&amp;hl=ja_JP&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;今画面に映ってる内容をモニターのテクスチャに張っているように見えますが、鏡にしようと思っていたのでモニターの中はカメラからの視点とは別でレンダリングしています。そのためトゥーンやシャドウマップのエフェクトも2回していることになります。&lt;strike&gt;このライブモニタの法線とカメラの視線の反射ベクトル方向を見たレンダリング結果を左右反転させて鏡のテクスチャに張り付ければ鏡が完成するんですが、&lt;/strike&gt;結局実用することはない気がするのでここらでやめておくことにしました。&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;（追記）&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;　取り消し線部分の方法では無理です。勘違いしていました。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1459229670493130232?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1459229670493130232/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps15.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1459229670493130232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1459229670493130232'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps15.html' title='XNAでFPSその15: モニター'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8522214948866662273</id><published>2009-12-19T23:11:00.014+09:00</published><updated>2010-05-29T01:12:18.374+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその14: レンズフレア</title><content type='html'>&lt;a href="http://creators.xna.com/ja-jp/sample/lensflare"&gt;XNA Creators Clubよりレンズフレア&lt;/a&gt;のサンプルよりレンズフレアの実装を自分のコードでも行ってみました。&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/RsdF3GYHgaA&amp;hl=ja_JP&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/RsdF3GYHgaA&amp;hl=ja_JP&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;キャプチャソフトとYoutubeの解像度の都合で激しくわかりにくいです……&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NkZDk5yZnUw/Syzhe-qJeZI/AAAAAAAAABA/_WaYQMIYw9U/s1600-h/XNA_Game_Demo13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_NkZDk5yZnUw/Syzhe-qJeZI/AAAAAAAAABA/_WaYQMIYw9U/s320/XNA_Game_Demo13.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;このフレア、遮蔽物で隠れたり描画領域の端で半分だけ描かれている時などは隠れている割合で明るささが変わるようになっています。この「何割画面内に表示されているか」を知るためにオクルージョンクエリというXNAのクラスを使っいることをサンプルで知りました。これはなかなか使えそうです。CoD4のジャベリンでターゲットのロックオンみたいに、ターゲット対象を画面内にとらえ続けないといけなんていう状況で有効ではないかと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8522214948866662273?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8522214948866662273/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8522214948866662273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8522214948866662273'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/blog-post.html' title='XNAでFPSその14: レンズフレア'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NkZDk5yZnUw/Syzhe-qJeZI/AAAAAAAAABA/_WaYQMIYw9U/s72-c/XNA_Game_Demo13.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1637258462893216060</id><published>2009-12-19T23:02:00.004+09:00</published><updated>2010-05-29T01:12:18.375+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその13: スケッチ調ポストプロセス</title><content type='html'>&lt;a href="http://creators.xna.com/ja-JP/sample/nonrealisticrendering"&gt;XNA Creators Clubにあった&lt;/a&gt;&lt;a href="http://creators.xna.com/ja-JP/sample/nonrealisticrendering"&gt;非写実的なレンダリング&lt;/a&gt;のサンプルよりスケッチ調のポストプロセスを自分のコードに実装してみました。キャプチャソフトとYoutubeの都合で、この動画では分かりにくいですが……。&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/l5uOp2r9B9U&amp;hl=ja_JP&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/l5uOp2r9B9U&amp;hl=ja_JP&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;画面にスケッチ画像のようなストロークがでてきます。これはそのピクセルの色に対応して向きが決まっており、RGB値の割合によって透明度が変わるため色によってストロークの向きが変わるようになっているようです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NkZDk5yZnUw/Syzd2xEWtOI/AAAAAAAAAAw/87YBbHKhja0/s1600-h/XNA_FPS_Game_Demo12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NkZDk5yZnUw/Syzd2xEWtOI/AAAAAAAAAAw/87YBbHKhja0/s320/XNA_FPS_Game_Demo12.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1637258462893216060?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1637258462893216060/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1637258462893216060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1637258462893216060'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps13.html' title='XNAでFPSその13: スケッチ調ポストプロセス'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NkZDk5yZnUw/Syzd2xEWtOI/AAAAAAAAAAw/87YBbHKhja0/s72-c/XNA_FPS_Game_Demo12.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-5060788548030341388</id><published>2009-12-12T03:05:00.000+09:00</published><updated>2010-05-29T01:12:18.376+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその12: シャドウマッピング</title><content type='html'>ついに影付けができました。実装方法はシャドウマッピングです。&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aheQonfEuKY&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aheQonfEuKY&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;画面上方に位置するライトから下に向かって光が走るように影を描画しています。&lt;br /&gt;ライトにもビューが設定してあるため、明るい領域が四角形に切り取られるようになっています。ゲームにする時はカメラ方向に合わせてライトも移動させればいいのかな？　その方法で問題はないと思うんですが、違った方法がセオリーな気もします。なにはともあれ大きな一歩。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-5060788548030341388?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/5060788548030341388/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps12.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5060788548030341388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/5060788548030341388'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps12.html' title='XNAでFPSその12: シャドウマッピング'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1119231567168610111</id><published>2009-12-08T21:28:00.002+09:00</published><updated>2010-05-29T01:12:18.376+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその11: トゥーンレンダリング</title><content type='html'>HLSLを使ってトゥーンレンダリングを実装しました。思っていたよりもすんなり&lt;br /&gt;書けてほっとしてます。&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/29UeuVew8_8&amp;hl=ja_JP&amp;fs=1&amp;color1=0x5d1719&amp;color2=0xcd311b"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/29UeuVew8_8&amp;hl=ja_JP&amp;fs=1&amp;color1=0x5d1719&amp;color2=0xcd311b" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;陰影の付け方は光源とメッシュの法線ベクトルの内積をトゥーン用のテクスチャのU座標に割りあ&lt;br /&gt;て、該当するピクセルの明るさをトゥーン用テクスチャの濃さに反映させる方法です。輪郭の付け方はモデルを少し拡大させ通常のモデルと逆回りのカリングで黒で描画する方法を取っています。&lt;br /&gt;&lt;br /&gt;次は影付けです。こちらのほうが難しそう……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1119231567168610111?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1119231567168610111/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1119231567168610111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1119231567168610111'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps11.html' title='XNAでFPSその11: トゥーンレンダリング'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8247698463491560364</id><published>2009-12-07T22:10:00.002+09:00</published><updated>2010-05-29T01:12:18.377+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその10: HLSLをはじめる前に……</title><content type='html'>「その9」の段階ですでにゲームとして完成させる目処がたってきました。AIバリバリの超絶FPSというわけにはいきませんが、的を撃つタイムアタックみたいなものなら出来そうです。というか創ります。&lt;br /&gt;&lt;br /&gt;ToDoリストとしては以下が挙げられます。&lt;br /&gt;・&lt;span style="color: #990000;"&gt;時間の表示&lt;/span&gt;&lt;br /&gt;→数字の表示にフォントを使うか絵を使うか、アニメーションさせるかさせないかでクオリティが変わってきますが、フォントで数字を表示させる方法は分かっているのでできます。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;HUDの表示&lt;/span&gt;&lt;br /&gt;→所謂フロントエンドのことです。残弾や残り的数を表示させたいのですが、これも時間の表示と同程度の問題です。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;弾痕表示の修正&lt;/span&gt;&lt;br /&gt;→弾痕クラスをゲーム内オブジェクトごとに持たせることで修正できます。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;タイトル画面などのシーケンス&lt;/span&gt;&lt;br /&gt;→コンポーネントを使うか、Gameクラスを取り替えるかで実装できます。おそらくコンポーネントを使うと思う。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;プレイヤーとマップの衝突判定&amp;nbsp;&lt;/span&gt;&lt;br /&gt;→FPSという性質上、ハイトマップは使えなくもないですが、Blenderで作り上げたマップモデルとの衝突をさせたほうがいいと思われます。結構悩みどころです。プレイヤーに衝突用の立方体を持たせてマップとプレイヤー立方体のメッシュ同士の衝突で移動制御をさせるか、邪道な気がしますがプレイヤーからいくつかのレイを飛ばしてマップモデルと衝突判定をさせるつもりです。後者はC++での実装経験があるので問題ないとは思います。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;各素材のブラッシュアップ&amp;nbsp;&lt;/span&gt;&lt;br /&gt;→えーっと……まぁ自分のセンス次第ですが、なんとかします。&lt;br /&gt;&lt;br /&gt;・&lt;span style="color: #990000;"&gt;レベル製作&lt;/span&gt;&lt;br /&gt;→ここでいうレベルっていうのはステージの事です。どうやってレベルデザインしようか？　ゲームエンジン……というか、マップ製作用のツールなんか これっぽっちも書く予定ないですし、むしろ、そんなものまで書いてたらいつにたってもゲーム完成しない気がして仕方がないです。最もプログラム知らないデザイナと組んでるわけでもないので、自分でコード弄ればいいといえばいいんです。&lt;br /&gt;&amp;nbsp;　というのは流石にキツいので、最低でもテキストファイルにマップ番号やマップ上のオブジェクトの種類と位置と向きを書き込んで、そこからレベル生成できるようにはしたいのです。これはフォーマットの決め方と文字の読み書きなんでそんなに難しくないはず。&lt;br /&gt;&lt;br /&gt;以上が最低限実装必要なものです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここからが課題なんですが、現状は”影も太陽の眩しさも無い”なんともレトロな3Dゲームなんですよね。なのでHLSLを使って多少見栄えのできるものを創ろうかと思っています。といっても、いつも遊んでるFPSみたいに最新の3Dグラフィックスを華やかに使ったような物は流石に無理ですが。&lt;br /&gt;&lt;br /&gt;そんなわけでHLSLについて下調べをし、様々な優良なサイトと書籍をみつけたんですが、とりあえずは&lt;a href="http://creators.xna.com/ja-JP"&gt;XNA Creators Club&lt;/a&gt;のサンプル達と &lt;a href="http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8B%E3%82%A2%E3%83%83%E3%82%AF%E3%82%B9-C-MAGAZINE-%E6%9D%BE%E6%B5%A6%E5%81%A5%E4%B8%80%E9%83%8E/dp/4797332956/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1260190733&amp;amp;sr=8-1"&gt;ゲームエフェクトマニアックス&lt;/a&gt;を参考にしてシェーディングを学びつつ、クオリティアップを目指していきます。&lt;br /&gt;&lt;br /&gt;この投稿の執筆時には、以前からモブとして使っている白地に赤線のテクスチャの立方体をHLSLでの表示に成功したところです。&lt;a href="http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8B%E3%82%A2%E3%83%83%E3%82%AF%E3%82%B9-C-MAGAZINE-%E6%9D%BE%E6%B5%A6%E5%81%A5%E4%B8%80%E9%83%8E/dp/4797332956/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1260190733&amp;amp;sr=8-1"&gt;ゲームエフェクトマニアックス&lt;/a&gt; の最初の項目がトゥーンなのと、前からトゥーンは自分で実装してみたかったので、まずはトゥーンレンダリングを成功させてみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8247698463491560364?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8247698463491560364/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps10-hlsl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8247698463491560364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8247698463491560364'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps10-hlsl.html' title='XNAでFPSその10: HLSLをはじめる前に……'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-240155903576271185</id><published>2009-12-03T00:36:00.002+09:00</published><updated>2010-05-29T01:12:18.378+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその9:撃つとリアクションをとる3Dモデル</title><content type='html'>射撃の当たり判定とモデルのアニメーションを合わせて、撃つと箱が下にさがるようにしました。今まで適当にクラスを作っていたのをある程度リファクタしたので以前より使いやすいコードにもしておきました。&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8WJGBlDE09c&amp;hl=ja_JP&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8WJGBlDE09c&amp;hl=ja_JP&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;あとはこの箱のモデルを「的」に置き換えればそれっぽくなりそうです。銃痕がモデルの動作に追随していないのでモデルのクラスに銃痕を持たせるようにし対処もしておきたいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-240155903576271185?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/240155903576271185/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps83d.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/240155903576271185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/240155903576271185'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/12/xnafps83d.html' title='XNAでFPSその9:撃つとリアクションをとる3Dモデル'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-9145694948398870736</id><published>2009-11-29T23:31:00.001+09:00</published><updated>2010-05-29T01:12:18.380+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその8:最も単純なアニメーションの実装</title><content type='html'>上下するだけのアニメーションです。当たり判定に含めていないので銃痕が貫通しています。&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BK0Bbwz83n4&amp;hl=ja_JP&amp;fs=1&amp;color1=0xcc2550&amp;color2=0xe87a9f"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/BK0Bbwz83n4&amp;hl=ja_JP&amp;fs=1&amp;color1=0xcc2550&amp;color2=0xe87a9f" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Microsfotに戦車のアニメーションとスキニングアニメーションのデモが置いてあるのですが、当たり判定のためのTrianglePickingのコンテンツプロセッサを指定した上に、アニメーション用プロセッサも指定する方法、つまり複数のコンテツプロセッサを指定する方法が分からないため自作クラスでまにあわせました。&lt;br /&gt;&lt;br /&gt;今回作ったクラスに限ったことではないですが、そろそろコードを全体的にリファクタリングしたいです。ゲームとして最低限の機能が整ったら一旦整頓をしたいと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-9145694948398870736?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/9145694948398870736/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps8.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/9145694948398870736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/9145694948398870736'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps8.html' title='XNAでFPSその8:最も単純なアニメーションの実装'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3293793915718001951</id><published>2009-11-28T20:28:00.001+09:00</published><updated>2010-05-29T01:12:18.381+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその7:弾痕の表示3</title><content type='html'>ようやくできました。右クリで弾痕が表示されるようになっています。&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VnJX0tj_8Bs&amp;hl=ja_JP&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/VnJX0tj_8Bs&amp;hl=ja_JP&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;次は「的」を表示させて、射撃すると的が引っ込むようなギミックを実装したいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3293793915718001951?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3293793915718001951/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps73.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3293793915718001951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3293793915718001951'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps73.html' title='XNAでFPSその7:弾痕の表示3'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-9221053691858077688</id><published>2009-11-28T00:51:00.005+09:00</published><updated>2010-05-29T01:12:18.382+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその6:弾痕の表示2(レーザーの焦げのよう)</title><content type='html'>&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;銃痕作ってる最中になんか面白いができました。レーザー系の武器の焦げ目に使えそうです。100個の銃痕を1フレームに1個ずつ生成しているので、一定時間で古いものから消失します。&lt;br /&gt;&lt;/div&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zIaHRvPQMt4&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zIaHRvPQMt4&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-9221053691858077688?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/9221053691858077688/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps51_28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/9221053691858077688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/9221053691858077688'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps51_28.html' title='XNAでFPSその6:弾痕の表示2(レーザーの焦げのよう)'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8172903088134204354</id><published>2009-11-27T21:10:00.002+09:00</published><updated>2010-05-29T01:12:18.383+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその5:弾痕の表示1</title><content type='html'>&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;銃を撃った後の弾痕を表示させるために四苦八苦しています。&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;MS Gothic&amp;quot;; font-size: 10.0pt; margin: 0in;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PMUH5bcvhPw&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PMUH5bcvhPw&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10.0pt; margin: 0in;"&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;画面中央からレイを飛ばし、衝突したポリゴンの中で最もカメラに近いポリゴンを構成する&lt;/span&gt;&lt;span lang="en-US" style="font-family: Verdana;"&gt;3&lt;/span&gt;&lt;span lang="ja" style="font-family: &amp;quot;MS Gothic&amp;quot;;"&gt;点を元に、弾痕テクスチャの表示位置を算出するやり方です。現状だと弾痕がついた物が動いても弾痕はその場で表示され続けるので、動くものには使わない方向でいきます。他のやり方も思いつきませんし、物の移動に合わせて弾痕も移動させるのが面倒なので……。&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8172903088134204354?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8172903088134204354/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps51.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8172903088134204354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8172903088134204354'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps51.html' title='XNAでFPSその5:弾痕の表示1'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-1378191523982479282</id><published>2009-11-26T20:01:00.003+09:00</published><updated>2010-05-29T01:12:18.384+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその4:空と地面。FOVとズーム。</title><content type='html'>&lt;p&gt;前回までの状態だと背景が無くて位置が把握しずらいので、やっつけテクスチャの空と地面を追加しました。またFOVが45度°でかなり狭かったので90°に変更し、アイアンサイトを覗いている時はFOVを半分にすることで2倍にズームするようにもしました。&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;embed src="http://www.youtube.com/v/K1oNKg2ol4Y&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;かなりFPSらしくなってきました。プロジェクタイルもそろそろ実装しないといけませんが……これがまた厄介そうです。画面中心からレイを飛ばしてモデルとの当たり判定をとるのはすでに完成していますが、銃の反動によるバラけを導入するのが１つ目の難所と思われます。また、ヒットしたメッシュ上に弾痕のメッシュを表示するのも難しそう。銃の反動のアニメーションしばらく無しでいくことにします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-1378191523982479282?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/1378191523982479282/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps4fov.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1378191523982479282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/1378191523982479282'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps4fov.html' title='XNAでFPSその4:空と地面。FOVとズーム。'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-3232547566033003326</id><published>2009-11-25T02:38:00.002+09:00</published><updated>2010-05-29T01:12:18.384+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその3</title><content type='html'>&lt;p&gt;トライアンドエラーで色々ためしていたらようやく腰だめが実装できました。右クリでアイアンサイトを使ったエイムができるようになっています。今は一瞬で切り替わってしまうので、後々アニメーションを付けることとエイム時のズームが課題といったところです。&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZIE8nGyi4VU&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZIE8nGyi4VU&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-3232547566033003326?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/3232547566033003326/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3232547566033003326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/3232547566033003326'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps3.html' title='XNAでFPSその3'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-2137292114017707080</id><published>2009-11-24T22:59:00.003+09:00</published><updated>2010-05-29T01:12:18.385+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその2</title><content type='html'>&lt;p&gt;とりあえずP90に見立てたモデルをゲーム中に使用する銃として表示できるようにしてみました。&lt;/p&gt;&lt;p&gt;↓アイアンサイト&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/D9FnS29G0kY&amp;amp;hl=ja_JP&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/D9FnS29G0kY&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;↓腰だめ&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ycAVxIib9UE&amp;amp;hl=ja_JP&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/ycAVxIib9UE&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;ってなわけで、腰だめでの表示に苦戦しています。銃の向きはカメラとリンクできているので、あとは表示座標だけなんですが……困ったなぁ。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-2137292114017707080?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/2137292114017707080/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/p90.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2137292114017707080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/2137292114017707080'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/p90.html' title='XNAでFPSその2'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-7678946409640089780</id><published>2009-11-22T21:37:00.001+09:00</published><updated>2010-05-29T01:12:18.386+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNAでFPS'/><title type='text'>XNAでFPSその１</title><content type='html'>&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/A1XxDrBG_qc&amp;amp;hl=ja_JP&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/A1XxDrBG_qc&amp;amp;hl=ja_JP&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;いま製作中のFPSです。&lt;/p&gt;&lt;p&gt;３DモデルをBlenderで制作しFBX形式で吐き出させた後、XNAを使って表示します。&lt;/p&gt;&lt;p&gt;FBXで出力する際に、Scaleを０．０１倍ぐらいにしないとモデルが大きすぎで表示されていないのに気付かず27時間消費するという……とにかくテクスチャ付3Dモデルが表示できるようになったのでよしとします。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;今後の当面の目標は銃の実装です。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-7678946409640089780?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/7678946409640089780/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7678946409640089780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/7678946409640089780'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/xnafps.html' title='XNAでFPSその１'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2668318495729539121.post-8690854579235720941</id><published>2009-11-10T23:13:00.002+09:00</published><updated>2010-02-01T18:29:32.916+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>祝開設</title><content type='html'>&lt;p&gt;衝動的にブログ開設しました。&lt;/p&gt;&lt;p&gt;C#のコーディングを中心として雑記を展開していくことになると思います。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2668318495729539121-8690854579235720941?l=codeoncanvas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeoncanvas.blogspot.com/feeds/8690854579235720941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8690854579235720941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2668318495729539121/posts/default/8690854579235720941'/><link rel='alternate' type='text/html' href='http://codeoncanvas.blogspot.com/2009/11/blog-post.html' title='祝開設'/><author><name>Mlle.Irene</name><uri>http://www.blogger.com/profile/16034114942016171216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_NkZDk5yZnUw/Svl2PsJlVnI/AAAAAAAAAAM/VH8DpDduaBM/S220/mlleirene.jpg'/></author><thr:total>0</thr:total></entry></feed>
