• R/O
  • SSH
  • HTTPS

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FreeTrainの進化系を目指す


File Info

Révision 2
Taille 8,796 octets
l'heure 2013-11-04 02:52:04
Auteur c477
Message de Log

FreeTrainプロジェクトからの移項
https://svn.sourceforge.jp/svnroot/freetrain/NeoFT

Content

・プラグイン関連ファイルをParamReaderで抽象化、最終的にStreamで読み込むように
・前景と背景に分かれた3Dオブジェクト(線路など用)
・選択UIの基本、ステータス表示の基本
・MRT昼夜同時描画/HitTest用マップ

◎開発メモ
ビルドしてobjからbinへのファイルコピー時にNFT.Framework.dllがロックする問題の暫定対処に
\NeoFT\framework\AssemblyInfo.cs
\NeoFT\core\AssemblyInfo.cs

の29行目"AssemblyVersion"をコメントアウトした。最終リリースではコメント外すべき。

■線路・道路の基本パターン
斜めは1:1対角線(45゚)と1:2(30゚)および2:1(60゚)対角線の3種類
1:1線の太さは、TTDX式『1/√2』ではなく、A列車式改『√2』とする
※TTDX式 A列車式 A列車式改『√2』
 ∠|/   □    /□/
∠|/   □    /□/ 
TTDXはマス目の辺の中点を通るが、A列車は対角頂点を通る。
A列車式『改』と銘打つのは斜めに繋がるマスとマスの間も補間するため。

■3D座標空間
XNA空間での座標軸                 NeoFTのゲーム空間
x y z               y z x
 \|/  yは上が正、x,zは奥が正     \|/  zは上が正、x,yは奥が正


北 東  後  
 ×  左◇右 
西 南  前  
(X軸:東が正、Y軸:北が正、Z軸:上が正)
・デフォルトは北東を画面上方とする。
・InterCardinalDirectionはNE(北東)から始まる。
■Ground/Cliff Polygon のID割り当てについて
【×】左後右前→ne,nw,sw,se?TerrainPatternのIDか?
【×】後左前右→ne,nw,sw,se(09/5/3訂正)
【○】前左後右→sw,nw,ne,se(13/2/17再訂正。影響範囲、要確認)
・現仕様:ushortを4bitに分けて高さを格納。使われない頂点には0xfを適用
 MSB<far|right|near|left>LSB 
 →see GroundPolygon.PrivateMakePolygonID()
 Cliffポリゴンではfarを使わない
 →see CliffPolygon.PrivateMakePolygonID()
◎もしもID割り当てを変える場合に留意すること
・TerrainPieceTemplate.TerrainPolygonSetのコンストラクタでは
 Ground/Cliff PolygonのIDの相関性を利用している

World.ProvisionalDistrictクラスの実装
→テラインマップから、実際の地形データを生成

DistrictFactory(=マップの実体を生成する部分)は、
交換は考えなくてもよいだろう。
広範囲のマップで効率のよいデータ保持を行うには?

アイデア:
フォームのGUIを定義できるコントリビューション
プラグインのPreferenceをxmlで記述できるように→設定画面汎用化
プラグイン読み込みをフィルタするプラグイン、プラグインマネージャにそのためのイベント追加

PictureManagerがキャッシュを実装する?→キャッシュのヘルパを用意
SpriteクラスがFilterクラスを呼び出し、生成画をキャッシュに保存する。
イメージのID検索:
・他のコントリビューションから
・デシリアライズ
→デシリアライズの際に、キャッシュに無ければ生成しなければならない。
 生成するのはコントリビューション?ピクチャー?

マップ容量節約のため、ボクセル配列は[x,y,z]→[x,y]とする。
この配列は、地価データなど数値データと、ストラクチャ配列の参照を持つ。
z方向のスタックは、ストラクチャ配列に持たせるため、配列の次元は二次元
(ただし、描画時には、表示範囲のみ3次元配列に展開して、重ね合わせ判定に使用する。かも?)

memo:技術メモ
・PixelShaderでTexCoordを0~1内に収める(Wrap)するにはfrac関数を使う
・BitmapはCloneを使えばメモリ節約。しかもDisposeしても大丈夫。
・int配列は通常参照渡しだが、Cloneを使えば値渡しと同じに扱える。
・Q.いつフィルタを掛けるか。
 A.OffScreenSerfaceを更新時に。→XNAのPSで

■MultiRenderTargetの用途割り当てについて
ゲームビュー&プレコンバインドでは下記
0:RGB=昼間色、A=透過情報
1:RGB=ID塗り分け、A=深度
2:RGB=夜間色、A=照り返し

IDは24bit枠
・地形は(x-y)値(16bit)+0xff
・物体は global index(16bit) + local index(8bit,0xff以外)

※アイデア:オブジェクトの深度情報は、カメラの最近点のz値をベースに加算すればよさそう
 →複合型オブジェクトの保存とロードのサポート

■地形パターンについて
地形の増減は0~4。それ以上は断崖。
★ただし坂道用に緩やかな斜面のパターンを特殊例として用意。
対角線で三角形ポリゴンに分割して描画。
パターンは基本テクスチャから動的生成。側面は別プラグインとしてパターン生成&描画。

地形テクスチャは向きに関係なく彩度最大で書く。ゲーム画面では明暗加工される。
水平面はオリジナルより若干(≒1/16)暗くなる。もっとも光量の多い面では若干明るくなる。
地形テクスチャの色合わせは、ゲーム画面の色ではなく、オリジナル画像の色で合わせる必要がある。

地形の最少グリッドと建物配置の最少グリッドは同じにする。ポリゴン数低減などの工夫は当面考えない。
線路用勾配は本来の勾配地形+坂の手前1マス使う。
+1マスの延長分は坂の始点と終点それぞれで、水平面との滑らかな弧を描くために使う(予定)。

・
■多言語対応の方針(下準備)
◆アプリケーション・コアのテキスト(エラーメッセージなど)
nftfw.resouce.xml, nftcore.resouce.xmlなど外部ファイル化
動的な言語切替を考えなければ、単純置き換えでよい。
◆プラグイン内テキストの多言語化対応
XmlUtil.LoadFileで読み込んだ際に、ファイルごと翻訳置換処理する。
個々のコントリビューションやGUI側で意識しないように。
◆フォームなどのUI上のテキスト
メニューのようにサイズ自動調整のものはともかく、
カスタムフォームでは文字列長次第ではレイアウトの変更も必要。
フォームそのものを別DLLに切り分けるか、
javaライクにレイアウトを子コントロールに併せて変更させるか。

■XNA4.0ライブラリの特性
◆動作環境
WinXP以降
.NET4.0/XNA4.0/DirectX9.0c以上/
グラフィックボード ShaderModel2.0対応
◆配布
現時点でMS側の明確な指針なし。バイナリを同梱してもOK?という記事を読んだ
ClickOnceを使う?と.NET/XNAを自動インストールしてくれる?要調査

■優先度:高■
ClockEvent指定時間の最少単位を決める必要あり。それより大きくTickを進めるときは
最小単位に分割してループで回して各Queueを巡回する必要あり。
○Zバッファを使った2D描画は可能か?→疑似2D描画:XNAライブラリで実現
OverrideTableもコントリビューション化しよう。
気候を定義するクラス、→季節オーバーライドを定義。パーサー、画像保持配列
■優先度:中■
☆特殊描画系ルーチン16ビットモードは実装不完全→XNAでは常に32bitモードなので不要

■優先度:低■
PreFormatContribution:他のコントリビューションがplugin.xmlを読む前に修正を加えることができる。
地域マップモード:
	+広域マップゲームを読み込む→地域選択→個別ゲーム
	+個別ゲームはマップの人口、産業、需要などと、路線図を広域マップからアクセスできるように保存する。
	+個別マップでマップ外に接続すると、隣の個別マップとの接続口になる。
	+上記で、隣の個別マップでは、接続口からマップ内の路線や駅と繋がないと、機能しない。
	
画像
オーバーライド【高次元】
+早朝:午前:午後:夕方:夜:深夜
+曜日指定(土日祝日)
+日付(毎年)指定(毎月指定)
+春:夏:秋:冬
+月指定
レイヤー【中次元】
アニメーション【低次元】
+フレーム番号、ウェイト