プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
ポイントスプライト01
ポイントスプライト非公式サンプル
こちらにサンプルコードが複数掲載されているが、そのままでは動かないものもあるらしい??



◎学習のテーマ

半透明とステンシルは修得したので、他の機能について学習します。

・カラーバッファーチャンネル関連
・カリング モード
・シザー テスト
・ポイントサイズ関連
・完全テクスチャ マッピング

カラーバッファーは、ステンシルバッファの最初のサンプルで使用したのでOKとします。

カリングモードは、こちらの記事の最後尾で説明されています。



◎シザーテストと描画フロー

シザーテストは描画可能な矩形領域を指定する機能のようですが、この機能を利用したサンプルは見当たらないし、こちらの記事に「既定のシザー矩形はビューポート全体です。」とあるので、意識して使用する機会は少なさそうです。

ただ、記事最後尾のフローチャートが気になったのですが、Direct3Dの描画処理フローは

1.HLSLに記述されたコードを実行する
  →深度やアルファ等の各バッファにデータを描き込む

2.フローチャートの順に各バッファを処理する

と認識していたのですが、2番の中にSpecularとFogがあります。SpecularとFogは、HLSL内で色を計算するだけかと思っていたのですが、違うのかな?



◎ポイントサイズ

XNAのヘルプには「ドライバーが 0 か 1 を返す場合、デフォルト値は 64 です。」とありますが、メインPCの初期値は「PointSize = 1」でした。この場合、64になるんじゃないの??

また、こちらの記事では、頂点シェーダの出力構造体にポイントサイズがありました。シェーダ側からレンダーステートをセットするコードを見たのは初めてかも。



◎完全テクスチャマッピング

XNAヘルプを読むと、ポイントプリミティブのテクスチャ座標の有効無効を設定する機能のようですが、こちらの記事では「ポイントスプライトにテクスチャがマップされるかどうか」と説明しています。ヘルプよりこちらの説明の方が正しい気がするのですが…??

実際に試してみると、最初のコードは正常に動作しますが、「テクスチャを貼る」のコードはDrawUserPrimitivesで「予期せぬエラー」が発生します。PointSpriteEnableはtrueでもfalseでも現象変わらず。むうう…。

コンテントマネージャを別途生成したり、画像サイズを2の累乗に修正したり…あれこれ試すも解決の糸口が見付からず、気力萎えまくり(ーー;

しばらくサボって気分転換したら、spriteBatch.Beginを入れることを思い付きました。

ポイントスプライト01

○spriteBatch.Beginのオプション

 SaveStateMode.SaveState → エラー

 SaveStateMode.None → 正常動作

どうやら、レンダーステートの問題っぽいですね。



◎原因調査

こちらの記事を参考に問題箇所を特定しようとしたのですが、記事のコードとspriteBatch.Beginを差し替えるとエラーになります。

XNA4.0ではspriteBatch.Beginの初期化内容が変更されたようですが、XNA3.1でも昔の記事と違う箇所があるのでしょうか?

以前作成したレンダーステート状態出力プログラムで確認すると、レンダーステートに違いはありませんでした。ということは、サンプラーステートの問題?

しかしプログラムを改修して確認すると、サンプラーステートにも違いはありませんでした。これも違うの??う~ん…。


そんなこんなで散々悩まされましたが、結局は頂点宣言の問題でした。new VertexDeclaration()の最後の引数を

VertexPositionColor.VertexElements
   ↓
VertexPositionColorTexture .VertexElements

に修正すると解決しました。


BasicEffect.Biginを入れるとエラーを回避できたのは、BasicEffect.Biginが頂点宣言を初期化したからですね。



◎XNA4.0のレンダーステート

こちらの記事によると、XNA4.0ではレンダーステートがカテゴリ分けされて使いやすくなったそうです。また、こちらの乗算済みアルファ機能があれば、境界線で悩むこともなくなりそうです。

XNA4.0に移行したいけど、SoftimageやACLのライブラリもあるので、簡単にはいかない気がします。ライブラリが更新されて落ち着いた頃に移行する予定。



◎次回予告

今回もテーマと無関係の問題で悩みまくりでした(汗)
もっと早く原因を特定できると良いのですが、こればかりは、経験積むしかなさそうです。

レンダーステートの機能は一通りかじったので、修得シリーズは今回で終了します。次回は旗手モデル作成。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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