プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
自作地形01
自作地形モデル
2枚の画像から地形を自動生成する機能を目指している。形は再現できたようだが、テクスチャが乱れている。



◎地形の作成

サンプルのモデル作成アルゴリズムと、ソーサリーフォースのtipsを参考にプログラムしたら、冒頭の画面になりました。
(コードは自作です)

このままだとテクスチャの乱れ方がわかりにくいので、デバッグ用に適当に文字を描いた画像と差し替えてみました。

自作地形02

文字をよく見ると、等間隔に細い横線が入ってますね。

テクスチャ座標の設定ミスじゃないか?と思ったのですが、テクスチャ座標の算出式は縦横同じです。なぜ横線のみ?



◎原因判明

横線の謎にハマッて半日ほど唸っていましたが、マップ上を飛行できる(カメラを自由に操作できる)ようにしたら、意外な事実が判明しました。
図解すると、こんな風になっていたのです。

断面図

テクスチャ座標の設定ミスではなくて、インデックスバッファの設定ミスでした。なるほど、縦線が無い理由も納得できました。

これって、カメラの角度を単発で変えただけじゃわからないものですね。カメラの角度を連続的に変化させることによって、初めて気付くことができました。
こ~ゆ~時は、マップ上の飛行テストが有効なんだなぁ。
1つ教訓になりました。



◎ミスの経緯

あまり参考にならないかもしれませんが、一応ミスの経緯を説明しておきます。

話はHeightmapCollisionのグレースケール画像にさかのぼります。この画像の解像度は2のn乗プラス1ですが、プラス1には理由がありました。

自分で頂点を配置するようになって、ようやく気付いたのですが、256×256のマス目のマップを作ろうと思ったら、257×257の頂点が必要です。257×257の頂点を準備するために、グレースケールの解像度も257×257必要だったのです。

しかし私のPCでは257×257だとエラーになるので、画像を256×256に修正すると、プログラムが誤動作します。サンプル実行時に黒い線が表示されるのは、このためです。

この状態で、GetHeight()で高さを取得可能なXZ座標範囲は、-3839~3809でした(TerrainScale=30の場合)。
30で割ると分かりますが、両端が1座標欠けています。

この対処がややこしくて適当にやっていたら、インデックスバッファの設定でさらに混乱して、ミスってしまいました。



◎インデックスバッファの修正

混乱を防ぐには、基本的な事から整理することが大切です。

グレーマップの画像解像度が256×256の場合
GetHeight()で取得可能な頂点数:254×254(最大)
頂点を最大数作成する場合、
・作成するポリゴン数:253×253×2
・作成するインデックス数:253×253

画像解像度が256×256の場合、インデックス数が253×253になることを理解できなくてミスったわけですが、最初から上記のように整理していれば、余計なミスは防止できたかもしれません。反省します。

…で、頭を整理して修正したらこうなりました。

自作地形03

おお、横線が綺麗に直りました!
でも、テクスチャの継ぎ目がまだちょっとおかしいですね。
惜しい!



◎次回予告

ここまで来ればあと一息!
次回いよいよクライマックス!?
(クライマックスって何?(^^;)

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。