[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/10 14:37 / Filesize : 200 KB / Number-of Response : 863
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【みんな】XNA 質問・相談スレッド1【初心者】



1 名前:デフォルトの名無しさん [2007/09/23(日) 23:43:41 ]
Microsoft XNA はマイクロソフトによって提供された、ゲーム開発のためのツールである。
XNA はマネージ実行環境を完備する。
2004 年 3 月 24 日、カリフォルニア州のサンノゼの Game Developers Conference で発表され、
2006 年 12 月 11 日にリリースされた。

XNA は「 XNA's Not Acronymed」 ( XNA は頭字語ではない)の頭字語である。


XNA デベロッパーセンター
www.microsoft.com/japan/msdn/xna/

xna スタジオ
xna-studio.jp/

XNA Game Studioメモ
www.saturn.dti.ne.jp/~npaka/xna/

ということで立ててみた。


721 名前:>>719 mailto:sage [2010/03/04(木) 22:42:30 ]
なるほど。とりあえず、
エフェクトの変更時は spriteBatch.Begin() - End() で囲んであげた方がよさそうですね

ちょっと実験してみて、Effect の動作が少々分かったので書いておきます。(役に立てれば、と)

spriteBatch.Begin() - End() で囲った中で、
エフェクトの変更を行い描画を行うと、
1 回前に描画したテクスチャの描画方法も
変更後のエフェクトで描画されるようです。
ただし、連続して同じテクスチャを描画する場合は、
それらをひとまとまりのグループとしてみる必要があります。

( ただし、 SpriteSortMode.Immediate の時のみ。 )
( 他は全て BasicEffect によって描画されてる気がした。)

サンプルコードは書くととても長くなるので、
簡単な記述で例(実験結果)を示します。

その前に書いておきますが、CommitChanges() は
使ってもまったく効果がありませんでした。

また、以下の例では全て technique の変更についてのみ
書いてありますが、 pass の変更も同様の動作をします。
( pass の実験はちょっとしかやってないから、 )
( 自身はあまりありませんが... )
また、
spriteBatch.Begin(SpriteBlendMode.AlphaBlend,
SpriteSortMode.Immediate,
SaveStateMode.None);

spriteBatch.End()
で囲っていると、脳内補完してください

722 名前:>>719 続き mailto:sage [2010/03/04(木) 22:43:31 ]
以下、例(実験結果)
-----------------------------------------------
@ technique1 で texture1 を描画しようとする
A technique2 で texture2 を描画しようとする
B technique3 で texture3 を描画しようとする
C technique4 で texture4 を描画しようとする
-----------------------------------------------
@は 1 つ後ろのAの影響を受け、
Aの描画方法である technique2 で描画されます。

Aも同様にBの technique3 で描画され、
Bも同様にCの technique4 で描画され、
Cは 1 つ後ろに何も描画命令が無いため、
普通に、自身の technique4 で描画されます。

-----------------------------------------------
@ technique1 で texture1 を描画しようとする
A technique2 で texture1 を描画しようとする
B technique3 で texture1 を描画しようとする
C technique4 で texture1 を描画しようとする
-----------------------------------------------
@ABCは全て texture1 を描画しようとしている為、
これらを 1 つのグループとして扱います。
この場合は、1 番最後の描画方法である technique4 で
このグループは描画されます。


723 名前:>>719 続きの続き mailto:sage [2010/03/04(木) 22:44:48 ]
-----------------------------------------------
@ technique1 で texture1 を描画しようとする
A technique2 で texture1 を描画しようとする
B technique3 で texture1 を描画しようとする
C technique4 で texture1 を描画しようとする
D technique5 で texture2 を描画しようとする
-----------------------------------------------
@ABCは全て texture1 を連続で描画しようとしている為、
これらを 1 つのグループとして扱います。
しかし、このグループは、次の描画命令Dの影響を受け、
technique5 で描画されます。
D は普通に technique5 で描画されます

724 名前:>>719 続きの続きの続き mailto:sage [2010/03/04(木) 22:45:30 ]
-----------------------------------------------
@ technique1 で texture1 を描画しようとする
A technique2 で texture1 を描画しようとする
B technique3 で texture2 を描画しようとする
C technique4 で texture1 を描画しようとする
D technique5 で texture1 を描画しようとする
E technique6 で texture3 を描画しようとする
-----------------------------------------------
@Aは連続で texture1 を描画しようとする為、
形式上、これをグループA として扱います。
グループA は 1 つ後ろの描画方法である technique3 で
描画されます。
Bは 1 つ後ろの描画方法である technique4 で描画されます。
CDは連続で texture1 を描画しようとする為、
形式上、これをグループB として扱います。
グループB は 1 つ後ろの描画方法である technique6 で
描画されます。
Eは普通に technique6 で描画されるようです。
( グループA とグループBは、間にtexture2(B)の描画命令が )
( 入っているので、別物として扱います。 )

以上が実験結果です。動作原因なんかは当然分かりません。

725 名前:>>719 mailto:sage [2010/03/04(木) 22:46:24 ]
解決策を考えてみました

@全ての描画命令を spriteBatch.Begin()-End()で囲ってやる
A連続しないテクスチャ描画の場合は 1 つだけ描画方法
 をずらして描画する
 (最後の描画方法は、画面外にテクスチャを描画することで解決)
B1 つテクスチャを描画するごとに、同じ描画方法でもう一度
 画面外に別のテクスチャを描画する。

726 名前:>>719 [2010/03/04(木) 22:58:19 ]
@は 1 番簡単な方法です。が、グラボを効果的に使用できない可能性が
 あります。
 ( グラボは描画自体は速いが、描画の準備にかかる時間がとても長い )
( らしいので )
Aは全ての状況には対応出来ない上、苦労に伴わない。
 (if文などで描画命令を制御する時なんかはとてもしんどいと思う。)
Bの方法は、画面外へ描画したテクスチャが、1 つ後ろの描画方法の
 影響を受けても、見えないので問題はない。しかし、画面外に描画す
 るテクスチャは、そのゲーム中では使わないものを使う必要があります。
( 連続で同じテクスチャの描画を行う時は、3 番目の例から分かるように )
( グループ化されてしまう為、グループごと描画方法が変わってしまう )
ただし、描画枚数が 2 倍になるため、速度がどうなるかはわかりません。

他に方法があれば、教えてください。
と、いうよりここまで書いておいて、もし根本的に違うなら
教えてください orz






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef