具体的なゲーム名を挙げて、
どのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/
テンプレ追加事項あったらよろすく
探検
ゲームにおけるデータ構造・クラス設計・パターン2
■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
2008/05/23(金) 21:10:59ID:8M1gqhPX553名前は開発中のものです。
2009/12/13(日) 15:40:07ID:Pf4hrG82 よく読んでないけどEmptyProject風に
void Create(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki = new Jiki();
jiki->Create(lpD3DDEV);
}
void Draw(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki->Draw(lpD3DDEV);
}
って風にやったら問題あるの?
void Create(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki = new Jiki();
jiki->Create(lpD3DDEV);
}
void Draw(LPDIRECT3DDEVICE9 lpD3DDEV)
{
jiki->Draw(lpD3DDEV);
}
って風にやったら問題あるの?
554名前は開発中のものです。
2009/12/14(月) 01:36:46ID:etpwNEHL deviceの作成は一箇所のクラスでシングルトン
device呼び出しが長くなるが、面倒なら#define
俺はこんな感じ
無知なんだけど、デバイスて何個も必要になることあんの?
device呼び出しが長くなるが、面倒なら#define
俺はこんな感じ
無知なんだけど、デバイスて何個も必要になることあんの?
555名前は開発中のものです。
2009/12/14(月) 01:57:52ID:ViaP5WDz デバイスが複数あったら複数必要なんじゃね。
556名前は開発中のものです。
2009/12/14(月) 03:13:37ID:etpwNEHL その複数てのがさ、動的に管理しないといけないものなら複数個保持するクラスにすればいいし
そうでないなら同じようなクラスを用意するかな
便利だからグローバルにしてるわけだし
仕方ないとおもってる
必要な関数ごとにデバイス渡すとか面倒すぎる
まあ、何十個もデバイスがいるわけじゃないからできる荒い方法ではあるんだけどな
そうでないなら同じようなクラスを用意するかな
便利だからグローバルにしてるわけだし
仕方ないとおもってる
必要な関数ごとにデバイス渡すとか面倒すぎる
まあ、何十個もデバイスがいるわけじゃないからできる荒い方法ではあるんだけどな
557名前は開発中のものです。
2009/12/14(月) 11:05:57ID:QE4kvqHr ボンバーマンを拡張して繋がれてるコントローラの数だけ
プレイヤーが増えるとかいった仕様にしたいなら
コントローラのデバイスは動的に管理した方がいいと思う。
プレイヤーが増えるとかいった仕様にしたいなら
コントローラのデバイスは動的に管理した方がいいと思う。
558名前は開発中のものです。
2009/12/14(月) 14:08:44ID:lLcah1pB プレイヤが一人でも全てのコントローラで操作できるようにしているが
(左右同時に押された場合は後からの入力を優先)
コントローラが壊れて常に右側に入力があるみたいな状態になるとうざったそうだな
(左右同時に押された場合は後からの入力を優先)
コントローラが壊れて常に右側に入力があるみたいな状態になるとうざったそうだな
559名前は開発中のものです。
2009/12/14(月) 15:35:13ID:ViaP5WDz 壊れたコントローラーはサポートしなくてもいいと思うよw
560名前は開発中のものです。
2009/12/21(月) 22:25:25ID:F5CW/HFF sharedptrみたいなの実装したいのですが、
それらしいことがのってる
more effective c++と、Accelarated C++
のどちらの本が役立ちそうでしょうか?
boostソース読めってのは無しでお願いします。
それらしいことがのってる
more effective c++と、Accelarated C++
のどちらの本が役立ちそうでしょうか?
boostソース読めってのは無しでお願いします。
561名前は開発中のものです。
2009/12/21(月) 23:10:45ID:yYVJ9W7O >>560
「スマートポインタ」でググれば解説もサンプルも見つかるよ。
「スマートポインタ」でググれば解説もサンプルも見つかるよ。
562名前は開発中のものです。
2009/12/22(火) 01:26:27ID:Q5u6VebD >>560
なんで boost::shared_ptr 使わないの?
なんで boost::shared_ptr 使わないの?
563501
2009/12/30(水) 05:37:23ID:CHdRD74o >>552
描画スクリプトっぽく進めてる。>>510 の言うとおりの方法。
>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
描画スクリプトみたいなのを作るほうがプログラム構造は単純になった。
>>511に書いたやり方は結局デバイスアクセス処理が分散していて大して煩雑さは改善されなかった。
簡単な2Dゲームだと描画は大部分が画像描画コマンドだけで構成されてた。思ってたより単純。
あとは少ないながらもカメラ位置変更コマンドと文字列描画コマンドも使った。
コマンド構造体を配列に突っ込んでカウンタを+1とかしてコマンド列(描画スクリプトみたいの)を作ってる。
あと画像描画コマンドでは描画すべき画像は番号で指定してる。番号に対応する画像を用意するのは解釈側の責任。
デバイスデータの引き回しはなるべく避けたかったので。
デバイスを関数間で無闇に引き回さなくても済むようになったので気が楽だし、
メモリデータの変更だけで描画内容が変わるのもおもしろい。
やって良かったと思ってる。
描画スクリプトっぽく進めてる。>>510 の言うとおりの方法。
>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
描画スクリプトみたいなのを作るほうがプログラム構造は単純になった。
>>511に書いたやり方は結局デバイスアクセス処理が分散していて大して煩雑さは改善されなかった。
簡単な2Dゲームだと描画は大部分が画像描画コマンドだけで構成されてた。思ってたより単純。
あとは少ないながらもカメラ位置変更コマンドと文字列描画コマンドも使った。
コマンド構造体を配列に突っ込んでカウンタを+1とかしてコマンド列(描画スクリプトみたいの)を作ってる。
あと画像描画コマンドでは描画すべき画像は番号で指定してる。番号に対応する画像を用意するのは解釈側の責任。
デバイスデータの引き回しはなるべく避けたかったので。
デバイスを関数間で無闇に引き回さなくても済むようになったので気が楽だし、
メモリデータの変更だけで描画内容が変わるのもおもしろい。
やって良かったと思ってる。
564501
2009/12/30(水) 22:40:42ID:CHdRD74o >>563を読み返したらちょっと違うところがあったので訂正。引用したこの文。
>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
自分の場合、描画スクリプトを作るのは「各オブジェクト」というより「各シーン管理オブジェクト」になった。
つまり
シーン管理オブジェクトが自身の所有する各オブジェクトの情報をアクセサ経由で読み取って
描画スクリプトみたいなものを組み立てる。
たくさんある細かい各オブジェクトに描画スクリプト的なものを作成させるのは責任というか依存性が散らばりすぎて複雑になる。
だから数の少ない管理オブジェクトがconst修飾済みの読み取り専用オブジェクトから得た情報だけを元に描画スクリプト的なものを組み立ててる。
>各オブジェクトには描画スクリプトみたいのを作らせておいて、draw()がそれを解釈して描画とか?
自分の場合、描画スクリプトを作るのは「各オブジェクト」というより「各シーン管理オブジェクト」になった。
つまり
シーン管理オブジェクトが自身の所有する各オブジェクトの情報をアクセサ経由で読み取って
描画スクリプトみたいなものを組み立てる。
たくさんある細かい各オブジェクトに描画スクリプト的なものを作成させるのは責任というか依存性が散らばりすぎて複雑になる。
だから数の少ない管理オブジェクトがconst修飾済みの読み取り専用オブジェクトから得た情報だけを元に描画スクリプト的なものを組み立ててる。
565名前は開発中のものです。
2009/12/31(木) 08:32:52ID:QBEbvaiT sqliteを組み込んで、画像やモデルを相互変換可能な名前/IDで管理するとか夢が広がるわな
内部で使うのは番号(ID)だとしても、人間にとっては名前の方が分かりやすいし
内部で使うのは番号(ID)だとしても、人間にとっては名前の方が分かりやすいし
566名前は開発中のものです。
2009/12/31(木) 15:10:35ID:wXwu3da7 >>565
Google App Engine+Flash(Flex)でノベルもどき作ってるけど、まさにそれやってるわ。
GaeなんでsqliteじゃなくてGoogle Big Table使ってるけどね。
スクリプトはForthベースの俺々スクリプトだけど、
SilverlightだとPythonやRubyエンジンが使えるので、
次作るときはそっち使おうかなと思ってる。
Google App Engine+Flash(Flex)でノベルもどき作ってるけど、まさにそれやってるわ。
GaeなんでsqliteじゃなくてGoogle Big Table使ってるけどね。
スクリプトはForthベースの俺々スクリプトだけど、
SilverlightだとPythonやRubyエンジンが使えるので、
次作るときはそっち使おうかなと思ってる。
567名前は開発中のものです。
2010/01/04(月) 06:09:33ID:JxRYn/a0 おおー、ゲームのバックエンドサーバーにもGAE使う時代かw
たしか、mixiアプリのモバイルゲームでGAE使った事例があったな。
3000万PV/月をかなり安価で乗りきれるとか
Togetter(トゥギャッター) - まとめ「100万PV/日のmixiアプリモバイルをGoogle App Engineで実装した@gclue_akira氏に直撃インタビュー」
http://togetter.com/li/494
すれ違いの話題になるが、昨今のネットが絡むゲームの場合バックエンドの技術も必要だけど、
そういう話題を扱ったスレってないものかな
この板にネットゲームの開発時代が少ないみたいだから、需要はないのかもだけど
まーGAEならWebProg板のAppengineスレ行けばいいしな
たしか、mixiアプリのモバイルゲームでGAE使った事例があったな。
3000万PV/月をかなり安価で乗りきれるとか
Togetter(トゥギャッター) - まとめ「100万PV/日のmixiアプリモバイルをGoogle App Engineで実装した@gclue_akira氏に直撃インタビュー」
http://togetter.com/li/494
すれ違いの話題になるが、昨今のネットが絡むゲームの場合バックエンドの技術も必要だけど、
そういう話題を扱ったスレってないものかな
この板にネットゲームの開発時代が少ないみたいだから、需要はないのかもだけど
まーGAEならWebProg板のAppengineスレ行けばいいしな
568名前は開発中のものです。
2010/01/04(月) 06:10:39ID:JxRYn/a0 x 開発時代
o 開発自体
o 開発自体
569名前は開発中のものです。
2010/04/20(火) 00:42:02ID:pYU4LjYZ 前スレの最後のほうに出てた描画の話題って結局どうなりました?(928ぐらい)
570名前は開発中のものです。
2010/05/11(火) 16:43:34ID:mK0DmPV5571名前は開発中のものです。
2010/09/20(月) 21:23:17ID:Qy1aznUB アクションゲーム作ってるんですが
どういう風にクラス分けすればいいか悩んでます
MAPクラス
Playerクラス
GameFrameクラスの3つがあって
mainループで
switch(MODE)
{
case TITLE:~~~~;break;
case MENU:~~~~;break;
case STAGE01:~~~~;break;
case STAGE02:~~~~;break;
.
.
.
}
みたいなことをしています。
各Stageに行くたびに、ステージ前処理と、ステージ後処理をしたいです
というとコンストラクタとデストラクタ……つまりはクラスを使えばいいんじゃないか?
という感じなのですが
Playerクラスの持っている情報と、操作関連を上手く融合させたり
Mapクラスの持っている情報と、Playerクラスを上手く組み合わせたりが出来ません……
こういう部分はどういう風にデザインするのがいいのでしょうか
どういう風にクラス分けすればいいか悩んでます
MAPクラス
Playerクラス
GameFrameクラスの3つがあって
mainループで
switch(MODE)
{
case TITLE:~~~~;break;
case MENU:~~~~;break;
case STAGE01:~~~~;break;
case STAGE02:~~~~;break;
.
.
.
}
みたいなことをしています。
各Stageに行くたびに、ステージ前処理と、ステージ後処理をしたいです
というとコンストラクタとデストラクタ……つまりはクラスを使えばいいんじゃないか?
という感じなのですが
Playerクラスの持っている情報と、操作関連を上手く融合させたり
Mapクラスの持っている情報と、Playerクラスを上手く組み合わせたりが出来ません……
こういう部分はどういう風にデザインするのがいいのでしょうか
572名前は開発中のものです。
2010/09/21(火) 03:43:33ID:l4LB0P7i STAGE01とSTAGE02を分ける必要は無いだろ。
ファミコンの「ドラえもん」みたいな、1面と2面で全く違うゲームになるなら別だけど。
ファミコンの「ドラえもん」みたいな、1面と2面で全く違うゲームになるなら別だけど。
573名前は開発中のものです。
2010/09/23(木) 17:38:03ID:g80tUxgW まずそのswitch文をなんとかしよう。
TitleクラスとMenuクラスとStageクラスを追加するとか。
その上で、StageをPlayerとMapのメディエータとして実装する、というのはどうだ?
TitleクラスとMenuクラスとStageクラスを追加するとか。
その上で、StageをPlayerとMapのメディエータとして実装する、というのはどうだ?
574名前は開発中のものです。
2010/12/04(土) 11:15:23ID:bbisnDl0575名前は開発中のものです。
2010/12/04(土) 14:39:29ID:t6Qi73J8576名前は開発中のものです。
2011/02/02(水) 03:54:28ID:uhRk4Rqb 保守
577名前は開発中のものです。
2011/05/20(金) 08:10:28.28ID:PnmAmJ/W 良スレ保守
578名前は開発中のものです。
2011/08/02(火) 05:21:50.11ID:jrRNxlOf Android開発でのパフォーマンスTips
http://labs.techfirm.co.jp/android/cho/1283
http://labs.techfirm.co.jp/android/cho/1293
オブジェクト生成は避ける
インターフェースは使わない
スタティックメソッドを使う
クラス内部でgetter/setterは使わない
foreachループは気をつける
携帯端末だとオブジェクト指向をある程度捨ててパフォーマンスを稼ぐって形が
求められるみたい
こういう環境のゲームは、どういうデータ構造・クラス設計を採用すべきかってのも
気になるな
http://labs.techfirm.co.jp/android/cho/1283
http://labs.techfirm.co.jp/android/cho/1293
オブジェクト生成は避ける
インターフェースは使わない
スタティックメソッドを使う
クラス内部でgetter/setterは使わない
foreachループは気をつける
携帯端末だとオブジェクト指向をある程度捨ててパフォーマンスを稼ぐって形が
求められるみたい
こういう環境のゲームは、どういうデータ構造・クラス設計を採用すべきかってのも
気になるな
579名前は開発中のものです。
2011/08/02(火) 12:43:43.47ID:w6MyIbcF iアプリを思い出すなーw
580名前は開発中のものです。
2011/08/04(木) 13:31:14.84ID:OiYK4POH PS時代のゲーム開発みたいだなw
あの制限ばかりの時代を経験した世代の方が
開発に向いていたりしてw
あの制限ばかりの時代を経験した世代の方が
開発に向いていたりしてw
581名前は開発中のものです。
2011/08/09(火) 01:57:38.36ID:/4Pi5/Qb 処理能力を操作に割かせるためにメモリに読めるだけ読むのかな
582名前は開発中のものです。
2011/08/09(火) 20:19:58.06ID:9GJ5MiVh それやりすぎるとアプリの切り替えをすることが多いスマフォじゃ
面倒が起きやすいんじゃないか
面倒が起きやすいんじゃないか
583名前は開発中のものです。
2011/08/15(月) 07:32:13.82ID:zPArLam8584名前は開発中のものです。
2011/08/21(日) 15:33:02.73ID:IUtyM1fd こないだ色々探したんだけど、糞アフィブログのリンク記事しか見つからなかった
キャッシュとかも見たんだけどさ
キャッシュとかも見たんだけどさ
585名前は開発中のものです。
2011/09/04(日) 02:30:22.85ID:novGGJeq586名前は開発中のものです。
2011/12/29(木) 00:00:54.00ID:hHcZWWbE よさげなスレなのに、あまり話が盛り上がってないな・・・
RPGのクラス設計で、「CharacterがItem(複数)を持っている」
状態を表したい時、
昔の自分は、
class Character {
List<Item> inventory;
}
って書いていたけど、最近の自分は、
class Inventory {
static List<Item> itemList;//全キャラクター分のアイテムを格納
Character character;
public int Count { get { itemListを数えて返す } }
public Item this[int no] { get { itemListのno番目を返す } }
}
class Character {
Inventory inventory;
}
って書くようになった。
どっちの書き方が多数派なのだろう?
RPGのクラス設計で、「CharacterがItem(複数)を持っている」
状態を表したい時、
昔の自分は、
class Character {
List<Item> inventory;
}
って書いていたけど、最近の自分は、
class Inventory {
static List<Item> itemList;//全キャラクター分のアイテムを格納
Character character;
public int Count { get { itemListを数えて返す } }
public Item this[int no] { get { itemListのno番目を返す } }
}
class Character {
Inventory inventory;
}
って書くようになった。
どっちの書き方が多数派なのだろう?
587名前は開発中のものです。
2011/12/29(木) 00:30:31.32ID:8pF0f6jp そこまでいったら、Interface抽出までやるかなー。
588名前は開発中のものです。
2011/12/29(木) 11:43:29.12ID:hHcZWWbE インタフェース抽出・・・
こんな感じ?
interface IGameData<T> {
int Count { get; }
T this[int no] { get; }
void Add(T arg);
void Remove(T arg);
}
(ジェネリックの書き方は適当ですw)
class Inventory : IGameData<Item> {
static List<Item> itemList;//全キャラクター分のアイテムを格納
Character character;
public int Count { get { itemListを数えて返す } }
(ry)
}
こんな感じ?
interface IGameData<T> {
int Count { get; }
T this[int no] { get; }
void Add(T arg);
void Remove(T arg);
}
(ジェネリックの書き方は適当ですw)
class Inventory : IGameData<Item> {
static List<Item> itemList;//全キャラクター分のアイテムを格納
Character character;
public int Count { get { itemListを数えて返す } }
(ry)
}
589名前は開発中のものです。
2011/12/29(木) 15:58:30.64ID:8pF0f6jp たぶんそんな感じー
590名前は開発中のものです。
2012/01/09(月) 19:11:25.37ID:7/HYejXG591名前は開発中のものです。
2012/01/10(火) 01:04:51.32ID:Lc/KjEb7 プログラム自体全くの素人なんで
取り敢えず3D空間上に地面を作ってその上をキャラクタが歩き回れるプログラムを作ったんだけど
地面を生成する際に必ず必要になる地面の各頂点の座標だけで1面につきfloat1つ分で4byte取られるんだよね
そこでふと思ったんだけど
エルダースクロール2ってどうやってそこらへんの情報を扱ってるんだろ
あのゲームのマップの大きさを計算してみたら一辺317Kmもあるみたい
1面を5m四方として扱ってもマップ全体を表すのに16078240000byteも必要
エントロピー圧縮しても1/15位が限界だと思うから約1GB
本当はこれらにさらに木や草の位置、地面のテクスチャの種類なんかが必要なんだよね
それなのにtes2のデータサイズを見ると160MBしかない
何かマップ設計自体が特殊なんだろうか
取り敢えず3D空間上に地面を作ってその上をキャラクタが歩き回れるプログラムを作ったんだけど
地面を生成する際に必ず必要になる地面の各頂点の座標だけで1面につきfloat1つ分で4byte取られるんだよね
そこでふと思ったんだけど
エルダースクロール2ってどうやってそこらへんの情報を扱ってるんだろ
あのゲームのマップの大きさを計算してみたら一辺317Kmもあるみたい
1面を5m四方として扱ってもマップ全体を表すのに16078240000byteも必要
エントロピー圧縮しても1/15位が限界だと思うから約1GB
本当はこれらにさらに木や草の位置、地面のテクスチャの種類なんかが必要なんだよね
それなのにtes2のデータサイズを見ると160MBしかない
何かマップ設計自体が特殊なんだろうか
592名前は開発中のものです。
2012/01/10(火) 01:20:07.70ID:rFVH40vL 常にそのデータをメモリ上に保持しておかなければいかんわけじゃないだろ……
100km先のデータなんて近づいてきたら読めばいいじゃない
100km先のデータなんて近づいてきたら読めばいいじゃない
593名前は開発中のものです。
2012/01/10(火) 02:51:27.11ID:tQJO4ffg floatじゃなくてhalf floatなのかもしれん。これだけで半分になる。
あとは、エントロピー符号化の前に、
曲面補完とか使って圧縮かけてるのかもしれない。
ビットマップで曲線を保持すると解像度分のデータが必要だが、
ベジェ曲線なんかで表せば、上手くいけばハンドル数個分で済む。
FUELなんかはたぶんこういう方法使ってて、川が途中で途切れてたりするところが目立つのはそのためだと思う。
全部俺の勝手な予想だが、いろいろ工夫はしてると思うよ。
あとは、エントロピー符号化の前に、
曲面補完とか使って圧縮かけてるのかもしれない。
ビットマップで曲線を保持すると解像度分のデータが必要だが、
ベジェ曲線なんかで表せば、上手くいけばハンドル数個分で済む。
FUELなんかはたぶんこういう方法使ってて、川が途中で途切れてたりするところが目立つのはそのためだと思う。
全部俺の勝手な予想だが、いろいろ工夫はしてると思うよ。
594名前は開発中のものです。
2012/01/10(火) 20:26:05.97ID:Wi6HPUjx >>590
ん、ごめん。判りにくいな〜と思いつつ手抜きしてしまった。
こんな感じのコーディングを想定していました。
class Inventory : IGameData<Item> {
static List<Item> itemList;
//クラスメンバ
Character character;
//プロパティ
public int Count { get {
int num = 0;
for(int i = 0; i < itemList.Count; i++) num += (itemList[i].Character == this.character)? 1 : 0;
return num;
} }
public Item this[int no] { get {
for(int i = 0; i < itemList.Count; i++) if (itemList[i].Character == this.character) if (--no < 0) return itemList[i];
throw new Exception();//noがオーバーしてたら例外(とかreturn null;とか)
} }
}
class Item { public Character Character; }
class Character { Inventory inventory = new Inventory(this); }
結局、呼び出す側からの見た目は、
class Inventory : List<Item> { }
class Character { Inventory inventory = new Inventory(); }
とあまり変わらないんだけどね・・・
ん、ごめん。判りにくいな〜と思いつつ手抜きしてしまった。
こんな感じのコーディングを想定していました。
class Inventory : IGameData<Item> {
static List<Item> itemList;
//クラスメンバ
Character character;
//プロパティ
public int Count { get {
int num = 0;
for(int i = 0; i < itemList.Count; i++) num += (itemList[i].Character == this.character)? 1 : 0;
return num;
} }
public Item this[int no] { get {
for(int i = 0; i < itemList.Count; i++) if (itemList[i].Character == this.character) if (--no < 0) return itemList[i];
throw new Exception();//noがオーバーしてたら例外(とかreturn null;とか)
} }
}
class Item { public Character Character; }
class Character { Inventory inventory = new Inventory(this); }
結局、呼び出す側からの見た目は、
class Inventory : List<Item> { }
class Character { Inventory inventory = new Inventory(); }
とあまり変わらないんだけどね・・・
595名前は開発中のものです。
2012/01/10(火) 22:24:32.24ID:Lc/KjEb7596名前は開発中のものです。
2012/01/10(火) 23:12:32.40ID:Wi6HPUjx597名前は開発中のものです。
2012/01/10(火) 23:17:34.89ID:Wi6HPUjx 言葉足らずすぎる気がしたので補足w
広い領域を、例えば5キロ平方に区切って、
隣の領域と連続性を保つため外周だけはデータを保持。
その内側の凹凸は動的生成、って意味です。
広い領域を、例えば5キロ平方に区切って、
隣の領域と連続性を保つため外周だけはデータを保持。
その内側の凹凸は動的生成、って意味です。
598名前は開発中のものです。
2012/01/11(水) 01:47:31.95ID:dDo0BLDQ >>596
それ単独では制御が難しいかも。町を作りたいのに平らな地形が得られない、とか。
平らな地形の部分だけ追加データで入れるとかするのかな。
>>595
線→面への拡張は、概念はそんなにフクザツじゃない。
補間方法はベジェじゃなくてもスプラインでもいいけど、単純にXY両方でデータの無いところを補間するだけだと思う。
ただ当然実行時計算量とデータサイズのトレードオフはある。
TES2は分からんけど、TES4と同系統のエンジンのFO3なんかみると、
たまにそういう曲面のエッジが誤差か調整不足かで浮いてるところがマップのところどころにあった気がする。
これは曲面補間かどうかは分からないけども。
SourceEngineなんかも似たような技術が実装されてるし、けっこう昔からある技術なのかな?
Game Programming Gemsとか探したら取り上げられてるかもね。
それ単独では制御が難しいかも。町を作りたいのに平らな地形が得られない、とか。
平らな地形の部分だけ追加データで入れるとかするのかな。
>>595
線→面への拡張は、概念はそんなにフクザツじゃない。
補間方法はベジェじゃなくてもスプラインでもいいけど、単純にXY両方でデータの無いところを補間するだけだと思う。
ただ当然実行時計算量とデータサイズのトレードオフはある。
TES2は分からんけど、TES4と同系統のエンジンのFO3なんかみると、
たまにそういう曲面のエッジが誤差か調整不足かで浮いてるところがマップのところどころにあった気がする。
これは曲面補間かどうかは分からないけども。
SourceEngineなんかも似たような技術が実装されてるし、けっこう昔からある技術なのかな?
Game Programming Gemsとか探したら取り上げられてるかもね。
599名前は開発中のものです。
2012/01/13(金) 08:38:17.24ID:q77afuhx >>598
なるほど、ってことは、
街の地面:整地されてるから、メッシュを大きく平らに
平原とか砂漠とか:メッシュを大きく取って、細かい部分は補間なり動的生成なり
山岳みないな凹凸がある地形:メッシュを細かく
って感じに・・・
(と言っておいてなんですが、メッシュの大きさを変えるのは、プログラムが汚くなりそうw)
なるほど、ってことは、
街の地面:整地されてるから、メッシュを大きく平らに
平原とか砂漠とか:メッシュを大きく取って、細かい部分は補間なり動的生成なり
山岳みないな凹凸がある地形:メッシュを細かく
って感じに・・・
(と言っておいてなんですが、メッシュの大きさを変えるのは、プログラムが汚くなりそうw)
600名前は開発中のものです。
2012/01/13(金) 23:38:29.70ID:sS8+h2Ga >>599
偏った例で恐縮だけど、SourceEngineのディスプレースメントサーフェイスは
分割数は2,4,8とか2の倍数固定でそれほど柔軟ではないし、穴あけれないとか制約はある。
だからその辺はレベルデザイナーのほうで調節する感じ。
ただしスムージングはかけれるから、たぶん補間はしてる。
たぶんゲームエンジンはどれも似たような仕組みは実装してると思うよ。
ディスプレースメントなら頂点4つ(△ポリゴン2つ)+差分テクスチャマップをシェーダーにぶち込んで高速処理、とか
そんなんだと思う。
あくまで予想だけど!
偏った例で恐縮だけど、SourceEngineのディスプレースメントサーフェイスは
分割数は2,4,8とか2の倍数固定でそれほど柔軟ではないし、穴あけれないとか制約はある。
だからその辺はレベルデザイナーのほうで調節する感じ。
ただしスムージングはかけれるから、たぶん補間はしてる。
たぶんゲームエンジンはどれも似たような仕組みは実装してると思うよ。
ディスプレースメントなら頂点4つ(△ポリゴン2つ)+差分テクスチャマップをシェーダーにぶち込んで高速処理、とか
そんなんだと思う。
あくまで予想だけど!
601名前は開発中のものです。
2012/06/10(日) 17:27:25.03ID:m7xNzVPO 特定の条件がなんなのか不明だけど、eventListenerとかgetInputとかで良いんじゃないの
設計としてはおかしくはない
設計としてはおかしくはない
602名前は開発中のものです。
2012/06/10(日) 17:28:33.69ID:m7xNzVPO 誤爆失礼
603名前は開発中のものです。
2012/10/13(土) 15:00:59.36ID:PbMUmxTV 保守
604名前は開発中のものです。
2014/08/05(火) 01:15:42.94ID:6YHbcuwm タイル形式の箱庭データ配置ってどう思う?
メモリーが少なかった頃の遺物?
高速化のために未だに使う事ってある?
メモリーが少なかった頃の遺物?
高速化のために未だに使う事ってある?
605名前は開発中のものです。
2014/08/05(火) 12:28:28.50ID:mp7VEmF3 良くも悪くもゲームが記号的になるね
606名前は開発中のものです。
2014/08/18(月) 17:56:46.58ID:/xfKqDtl Androidでゲームを作ってるんですが、クライアント・サーバー型のゲームのデータを
データベースで管理しようとすると武器の名前とかいらないと思って、端折りまくってたら
武器のIDだけのテーブルになってしまいました。(パラメータはクライアントで持ってます)
ここまでくるとテーブルとして参照するだけcpuの無駄だと思い、
テーブルを消していくと他のテーブルと全く関わり合いのないテーブルが出てきます。
(例えば武器を売った時にいくらお金が手に入るか?とか)
そうすると何か自分の考えてる構造に不安を覚えるのですが、これは正しいのでしょうか?
「データベースの外とリレーション貼ってる」って考えれば自分を納得させられるような気もしないんですが・・
データベースで管理しようとすると武器の名前とかいらないと思って、端折りまくってたら
武器のIDだけのテーブルになってしまいました。(パラメータはクライアントで持ってます)
ここまでくるとテーブルとして参照するだけcpuの無駄だと思い、
テーブルを消していくと他のテーブルと全く関わり合いのないテーブルが出てきます。
(例えば武器を売った時にいくらお金が手に入るか?とか)
そうすると何か自分の考えてる構造に不安を覚えるのですが、これは正しいのでしょうか?
「データベースの外とリレーション貼ってる」って考えれば自分を納得させられるような気もしないんですが・・
607名前は開発中のものです。
2014/08/18(月) 18:09:33.31ID:/xfKqDtl 砂漠とか海の3D空間で遠景を表現するのってどうすればいいですか?
地平線とスカイドーム(スカイボックス?)の切れ目が不自然になって、
ちょっとでもカメラのY座標を高くすると地面の切れ目もはっきり目立ちます。
fogは遠くのオブジェクトも見たいのであまりしたくありません。
http://livedoor.blogimg.jp/terashima999/imgs/1/3/1321e840.jpg
http://yoda.dip.jp/Diary/200707/20070711_AC6_1.jpg
↑こういうの
地平線とスカイドーム(スカイボックス?)の切れ目が不自然になって、
ちょっとでもカメラのY座標を高くすると地面の切れ目もはっきり目立ちます。
fogは遠くのオブジェクトも見たいのであまりしたくありません。
http://livedoor.blogimg.jp/terashima999/imgs/1/3/1321e840.jpg
http://yoda.dip.jp/Diary/200707/20070711_AC6_1.jpg
↑こういうの
608名前は開発中のものです。
2014/08/23(土) 15:13:29.78ID:yctiE/PZ >>607
LOD(level of detail)を使って遠くまで描画すればいいと思う。
ちょっと古い記事だけど下記のサイトが参考になるんじゃね?
3Dゲームファンのための「ワンダと巨像」グラフィックス講座
http://game.watch.impress.co.jp/docs/20051207/3dwa.htm
の「■地形のLODシステムと読み込み」の項目
LOD(level of detail)を使って遠くまで描画すればいいと思う。
ちょっと古い記事だけど下記のサイトが参考になるんじゃね?
3Dゲームファンのための「ワンダと巨像」グラフィックス講座
http://game.watch.impress.co.jp/docs/20051207/3dwa.htm
の「■地形のLODシステムと読み込み」の項目
609名前は開発中のものです。
2014/08/23(土) 18:35:40.53ID:w69tOcJ6 なるべく地平線や水平線の近くまで描画したいんでしょ?
自分の場合は
/ ̄ ̄ ̄\
/: :\
/: .: a .: .:\
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑↑
b c
a:視点の位置
b:フォグの開始
c:フォグの終了
空は角錐台状につくってaのxy座標に追従
bを遠くにとれば遠くまで描画できるし、
空の天辺がフォグで霞むこともなくなる。
自分の場合は
/ ̄ ̄ ̄\
/: :\
/: .: a .: .:\
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑↑
b c
a:視点の位置
b:フォグの開始
c:フォグの終了
空は角錐台状につくってaのxy座標に追従
bを遠くにとれば遠くまで描画できるし、
空の天辺がフォグで霞むこともなくなる。
610名前は開発中のものです。
2014/08/24(日) 14:20:41.69ID:AJZlAWRG >>609
視点のY座標が高くなると、地平線と空の間に描画されない部分が出てきてしまいます・・
視点のY座標が高くなると、地平線と空の間に描画されない部分が出てきてしまいます・・
611名前は開発中のものです。
2014/08/25(月) 00:41:57.10ID:2KTfo870 あぁXZ座標か。兎に角視点の高度はに角錐台は影響されない方向で。
612名前は開発中のものです。
2014/08/26(火) 13:52:23.48ID:qHUiU/pW いや、角錐台は影響されないんですけど、
aが立ってる地面とかは高度上げれば上げるほど離れていくわけじゃないですか
そうすると地面のポリゴンと角錐台がどんどん離れていって
地面のポリゴンの終端があらわになってしまいます。
街を探検するようなゲームなら全く問題ないんですが
海とか航空機とかで「地平線を表現したい」となった時にfogにも頼れず(霞ませたいわけじゃない)どうしたものかと・・・
LODで全力で軽量化しつつ、XZ座標1000000,1000000とかすごい桁のパラメータで遠くに設置してもいいんですが、
カメラのトリム距離もネックになってて、それだけの距離を1.0~0.0に収めると浮動小数点型の誤差?なのか、
遠景のZバッファによる描画が不自然になります
近景用と遠景用で2回判定してもいいんですが(通常ポリゴンとLODポリゴンで分けられたら一石二鳥かも)
なんだか王道から離れていってるようで、他の人がどう対処してるのかなと
aが立ってる地面とかは高度上げれば上げるほど離れていくわけじゃないですか
そうすると地面のポリゴンと角錐台がどんどん離れていって
地面のポリゴンの終端があらわになってしまいます。
街を探検するようなゲームなら全く問題ないんですが
海とか航空機とかで「地平線を表現したい」となった時にfogにも頼れず(霞ませたいわけじゃない)どうしたものかと・・・
LODで全力で軽量化しつつ、XZ座標1000000,1000000とかすごい桁のパラメータで遠くに設置してもいいんですが、
カメラのトリム距離もネックになってて、それだけの距離を1.0~0.0に収めると浮動小数点型の誤差?なのか、
遠景のZバッファによる描画が不自然になります
近景用と遠景用で2回判定してもいいんですが(通常ポリゴンとLODポリゴンで分けられたら一石二鳥かも)
なんだか王道から離れていってるようで、他の人がどう対処してるのかなと
613名前は開発中のものです。
2014/08/26(火) 21:43:36.70ID:HN5WQ9H7 / ̄ ̄ ̄\
/: a :\
/: .: .: .:\
 ̄ ̄ ̄ ̄ ̄←地面が小さいの?
地面をフォグの終了まで描画すればいいと思うけど…
/: a :\
/: .: .: .:\
 ̄ ̄ ̄ ̄ ̄←地面が小さいの?
地面をフォグの終了まで描画すればいいと思うけど…
614名前は開発中のものです。
2014/08/27(水) 17:08:35.72ID:r0T91QdR ぢめんをちきゅうみたいにまるくするのはどう?
615名前は開発中のものです。
2014/08/28(木) 17:39:54.03ID:bFGeiPpW616名前は開発中のものです。
2014/08/28(木) 21:14:49.09ID:m/S7fPOm 上のは船上だから視点は高くても数十m。水平線は結構近いと思うよ。
下のは数kmとかじゃないかな。建物を縮小というか単純に距離が離れてると思うけど…
それでもフォグを使って描画範囲を制限して、描画対象を削減してる。
下のは数kmとかじゃないかな。建物を縮小というか単純に距離が離れてると思うけど…
それでもフォグを使って描画範囲を制限して、描画対象を削減してる。
617名前は開発中のものです。
2014/08/29(金) 17:47:40.60ID:PQKddMMr >>616
今実際に水平線を描画してみたんですが、遠くの船が空中に浮いてるように見えます
海面の描画外で船を描画するとスカイドームの背景が船底より下に描画されます
海面にかけるフォグ色とスカイドームに貼り付けるテクスチャの水平部分に
同じ色を使っていい感じにごまかせないか試してみたんですが、
海面の上から船底が描画されるのでやっぱり違和感があります
今実際に水平線を描画してみたんですが、遠くの船が空中に浮いてるように見えます
海面の描画外で船を描画するとスカイドームの背景が船底より下に描画されます
海面にかけるフォグ色とスカイドームに貼り付けるテクスチャの水平部分に
同じ色を使っていい感じにごまかせないか試してみたんですが、
海面の上から船底が描画されるのでやっぱり違和感があります
618名前は開発中のものです。
2014/08/29(金) 22:39:55.32ID:Me2CR80H 船を描画するときフォグは無効にしてるの?
船全体がフォグの終了の向こうに出るまでは、フォグを有効にして船を描画。
向こうに出たら描画そのものをスキップしないとダメだと思うよ。
船全体がフォグの終了の向こうに出るまでは、フォグを有効にして船を描画。
向こうに出たら描画そのものをスキップしないとダメだと思うよ。
619名前は開発中のものです。
2014/08/30(土) 08:34:58.97ID:RhmAUk4c >>617
船のモデル側に海面ポリゴン(船底を隠す分だけ)をくっつけとけば、いいんじゃね?
船のモデル側に海面ポリゴン(船底を隠す分だけ)をくっつけとけば、いいんじゃね?
620名前は開発中のものです。
2014/08/30(土) 11:22:17.06ID:5AIFhixX621名前は開発中のものです。
2014/09/01(月) 07:02:26.23ID:raj97bmv 状況が良くわからないけど、こういうこと?
_目____空
__視視__空
____視視空
______海視
______海_視視
______海___視視_________浮船
海海海海海海海海海海海海海海海海海海海海海海海海ー水平な水平線
______________視視
________________視視
__________________\
___________________見た目の水平線
_目____空
__視視__空
____視視空
______海視
______海_視視
______海___視視_________浮船
海海海海海海海海海海海海海海海海海海海海海海海海ー水平な水平線
______________視視
________________視視
__________________\
___________________見た目の水平線
622名前は開発中のものです。
2014/09/01(月) 07:04:40.93ID:raj97bmv ちょっと修正
_目____空
__視視__空
____視視空
______海視
______海_視視
______海___視視_________浮船
海海海海海海海外外外外外視視外外外外外外外外外外外ー水平な水平線
______________視視
________________視視
__________________\
___________________見た目の水平線
_目____空
__視視__空
____視視空
______海視
______海_視視
______海___視視_________浮船
海海海海海海海外外外外外視視外外外外外外外外外外外ー水平な水平線
______________視視
________________視視
__________________\
___________________見た目の水平線
623名前は開発中のものです。
2014/09/06(土) 11:55:58.35ID:khJXlvEe624名前は開発中のものです。
2014/09/20(土) 12:54:30.99ID:aka1I6g9625名前は開発中のものです。
2015/03/16(月) 18:52:45.04ID:ELGRcANR すごい大雑把な質問なんだけど
ゲーム設計において外部ライブラリの扱いってどうやるの?
ひとつだけならそれに従えばいいかもだけど複数になるとどうしても設計が汚くなってしまう
ゲーム設計において外部ライブラリの扱いってどうやるの?
ひとつだけならそれに従えばいいかもだけど複数になるとどうしても設計が汚くなってしまう
626名前は開発中のものです。
2015/12/19(土) 14:31:11.96ID:uNL25Qjh プログラマはMacを使ってるってマジ?
http://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
http://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
627名前は開発中のものです。
2017/12/31(日) 20:22:02.22ID:/rN76OKL 簡単にお金が稼げる方法興味ある人だけ見てください。
グーグル検索⇒『来島のモノノリウエ』
A8RNONREKQ
グーグル検索⇒『来島のモノノリウエ』
A8RNONREKQ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★2 [ニョキニョキ★]
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に [ぐれ★]
- 米中電話会談、トランプ氏は「米国側は中国にとっての台湾問題の重要性を理解する」 [1ゲットロボ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- 【音楽】「なんでこんなバカが国のトップなの?」 若者に人気のバンド「GEZAN」のマヒトゥ・ザ・ピーポーが高市総理に苦言 [シャチ★]
- 【国際】トランプ氏、来年4月に中国を訪問する招待を受け入れる 習氏も国賓で訪米へ 電話会談 [ぐれ★]
- 【画像】なんか模型屋さんにいかにもお前らが好んでそうなアキバ系のアニメ?のキャラいたけどこれなに?
- VIPでアズールレーン
- 【高市悲報】来年、習近平主席がアメリカに「国賓」として訪米。どうするんだよ高市・・・アメリカも敵に回すのか? [483862913]
- フィフィ「外国人だろうが日本人だろうが反日は要らんのよ、この国に…自分にとって住みやすい国に行け。」 [856698234]
- 【悲報】有名配信者さん、公式大会で小学生の前で奇行して炎上して逆ギレwwwwwwwwwwwwwwwwww [856698234]
- 猟友会ハンター「警察や自衛隊の力を借りてのクマ駆除は大歓迎。肉の加工など 駆除の後についてもしっかりと話を進めてほしい」 [932029429]
