HeightmapCollision地形の高さを取得するXNA公式サンプル。ボールを地表に沿って動かすことができる。
◎シリーズ化決定!「高さを取得するだけ」ってことで、最初は軽く見てましたが、どうやら一筋縄ではいかなさそうです。
他のサイトやサンプルでも1つのテーマとして扱っているので、改めてシリーズ化することとし、過去記事のタイトルを付け直しました。
見ての通り試行錯誤でやってますので、最終的にどうなるかは自分でもわかりません(笑)
◎色情報取得方法の追求(前回B案)前回記事で「GetPixcelメソッドを見つけたものの、使い方がよくわからない」と書きましたが、進展がありました。
後日HPにまとめるつもりなので、この場で技術詳細は書きませんが、
1.名前空間の指定とDLLの登録が必要
2.「BitmapContent」と「PixelBitmapContent」は別モノ
この2点に気付かずに長いことハマってました(^^;
ようやくGetPixelがインテリセンスに現われたので、これで一気にいけるかな?
…と思ったのも束の間、すぐに次の壁が立ち塞がりました。
PixelBitmapContentに画像データをセットする方法がよくわからないのです。う〜む…。
◎サンプルのエラー原因判明(前回CD案)一方、naroさんのコメントを拝見して、CD案はサンプル解析から進めることにしました。
最初の問題は、サンプルがエラーになる点ですが…原因が判明しました!
「HeightmapCollision」と「TankOnAHeightmap」の両サンプルには、terrain.bmpが付属しています。その解像度が257*257なので、256*256に変更したら動きました。
ガーン!これは私にはちょっとショックでした。
◎2のn乗の問題画像ファイルの解像度は2のn乗でないと動かないことがあるので、それに合わせて作るものだと思ってました。
(確かDirectX関連の記事にそんなことが書かれてました)
そのために結構苦労したんですけど、公式サンプルでこの状態ということは、2のn乗を無視した作品も多いってこと?
まぁXNA開発者の大半はまともなグラボを装備してるだろうから、開発側は問題無いと思いますが、一般ユーザの大半は、グラボ増設してません。
2のn乗で統一すると少しはユーザが増えることになりますが、普通は気にしないものなのか!?
…以上が、私がショックを受けた理由です。
ちなみに、サンプルは2のn乗プラス1でした。プラス1に何か特別な意味があるのかな?
まさかケアレスミスってことは無いと思いますが…。
それと余談ですが、もう1つの「BillboardSample」は、Xファイル読み込み時に例のエラーになります。前例からして、多分ハードが原因でしょう。このサンプルは今回扱わないことにします。
[2009/1/16追記]
この記事には間違いがありました。訂正記事は
こちら
◎サンプルの解析2のn乗の是非はともかく、サンプルが動くようになったので、HeightmapCollisionの内容解析に移ります。
…おや?コンテンツパイプライン内でグレースケールマップを読み込み、GetPixelで色を取得してますね。こんな所でGetPixelにお目にかかれるとは思いませんでした(笑)
色取得に関する情報がなかなか見当たらなかったので、色取得方式は邪道なのかと思い始めてましたが、公式サンプルでやってるってことは、一般的な方式ってことですね。少し安心しました(^^)
◎次回予告まだサンプル解析中ですが、長くなってきたので続きは次回にします。
ちなみに、もう1つのTankOnAHeightmapは、高さだけでなく地面の傾斜も取得できるので高機能なんですが、
「今回そこまで必要なのか?」という疑問があるので、解析に踏み込まないかもしれません。
(城を傾けて配置するわけじゃないので…ユニットは微妙ですけど)
テーマ : ゲーム製作 関連 - ジャンル : ゲーム
コメントの投稿