タグ付けされた質問 「world-design」

3
手続き的に生成された地形における降雨+河川作成のアルゴリズム
私は最近、手続き的な地形でできることに魅了され、世界の構築を少し実験し始めました。さまざまなマップをメッシュ化することで作成されたバイオームを使用して、ドワーフ要塞のような世界を作りたいと思います。 最初のステップが完了しました。ダイアモンドスクエアアルゴリズムを使用して、素敵なhieghtmapを作成しました。次のステップでは、いくつかの水の機能を追加し、それらを雨によって多少現実的に生成します。マップの高いポイントから開始し、最下の隣接ポイントまで「ステップダウン」し、海面まで下がるにつれてプール/侵食するなど、いくつかの異なるアプローチについて読みました。 これに関する文書化されたアルゴリズムはありますか? どんなアドバイス/考えも好きです。

9
ゲームプレイ機能に特化した手続き型の世界世代
大規模な手続き型のランドスケープゲームでは、土地は鈍いように見えますが、それはおそらく、現実の世界がほとんど鈍く、風景が劇的または戦術的な場所に限られているためです。 この観点から世界の世代を見ると、ゲームのランドスケープジェネレーター(つまり、風景のためではなく、ゲームプレイのため)は、造園のルールに従う必要はありませんが、代わりに、ゲーマーの期待。たとえば、山や降雨パターンによって生成されるリソースまたは条件に基づいて都市に自然に散在するのではなく、都市間に丘、渓谷、川、山を作成するチョークポイント/ルートジェネレーターがあります。 このように行われている既存の作業はありますか?都市または人口の中心から始めて、その後地形を追加しますか? 私が求めている理由は、ファンタジーフィクション(自分と他の人)から既存のマップを取得し、情報をベースポイントとしてシステムに入力し、そこからプレイするための良い世界を生成することを以前考えていたからです。これは既存の技術、つまり都市の人口、資源、バイオーム、道路網、河川などの必要な情報をすべて入力し、PCGがギャップを埋めることができるようになっているようです。 しかし、今では、コンテンツジェネレーターで全体的なデザインも生成できるかどうか疑問に思っています。自然に見える商業の必要性があるように都市と人口センターを生成し、バランスを取り、位置と接続性を生成し、都市のタイプから近くにある必要があるリソースのリストを生成します。信じられないほど興味深い都市間の旅を作るためのいくつかのルールは、道路、チョークポイント、橋とトンネル、フェリー、必要なバイオームと海岸線を含む地形を含む最終コンテンツを生成します。 これが以前に行われたことがあれば、私は知りたい、そして何がうまくいかなかったかを知りたいです。

4
再起動しないテストワールドを実装する方法
次のことを行う方法についてのアイデアを探しています。Javaで単純な「世界」を書きたいです。既存のオブジェクト間のさまざまな動作をシミュレート/観察するために、後から新しいオブジェクトを開始してから追加できるもの。その後、古いオブジェクトをしばらく見てから新しいオブジェクトをコーディングし、それらを既存の世界にロード/ドロップします。問題は、一度世界を開始または停止して再起動したくない、数週間実行したいが、オブジェクトをドロップして、やり直し/書き換え/削除/作成/変更する機能が必要なことです再起動を必要とせずに時間をかけて。世界は、世界を視覚的に表すタイルマップGUIを使用して、X / Yロケーションの100 x 100配列のようにシンプルにすることができます。オブジェクトを監視し、それぞれに「行動するチャンス」を与えるために、何らかの種類のティックタイマープロセスが必要であることを知っています 例:月曜日にWorld.javaをコーディングし、実行したままにします。それから火曜日に、Rock.javaと呼ばれる新しいクラスを作成します(動かない)。次に、既に実行中のワールドにロード/ドロップします(ワールドアレイ内のランダムな場所にドロップし、移動することはありません)。それから水曜日にCat.javaという新しいクラスを作成し、再びランダムに配置して世界にドロップしますが、この新しいオブジェクトは(時間単位で)世界中を移動でき、木曜日にDogというクラスを作成します。また、移動しますが、隣の場所にある場合は別のオブジェクトに「作用」することができ、逆もまた同様です。 ここにあります。将来の(および現在存在しない)オブジェクトを検出/ロード/追跡する方法を知るために、実際のワールドクラスをコーディングするのにどのような構造/設計が必要かはわかりません。 Javaを使用してこのようなことをどのように行うかについてのアイデアはありますか?

1
OpenGLで頂点を描画する最も効率的な方法
私はOpenGL 3Dゲームを書いています。地形や使用中のオブジェクト用の多数の三角形があります。 私はOpenGL公式ガイドから勉強していて、最初に提示された方法は、描画したい各頂点のglVertex後に関数を呼び出すglBeginことです。 ただし、何千もの三角形を描く必要がある場合、この方法はかなり古くて非効率的です。各フレームで変化しない情報をグラフィックカードのメモリに保存する方法があるので、各フレームをレンダリングすると、その情報はすでにそこにあります。より「不安定な」情報については、おそらくフレームごとに新しい頂点データを送信する必要があるため、別の手法の方が効率的かもしれません。 私の質問に来ます:頂点情報をハードウェアに送信し、レンダリングするための指示を与えるために使用される最も近代的で効率的なOpenGL関数と技術の明確な説明をお願いします。 フレーム中にめったに変化しない頂点データをレンダリングするための順序を送信するための最良の方法とOpenGLツールは何ですか(私は地形とオブジェクトについて考えます)、フレーム中に大きく変化する頂点データを送信するための最良の方法は何ですか?

3
サーバーがタイルベースの領域のみをクライアントに送信することは可能ですか?
はじめに、私はネットワーキング(ハードウェア、ルーターなど)については十分な知識を持っていますが、ネットワークプログラミングの基本的な知識はほとんどありません。これは馬鹿げた質問のように思えるかもしれませんが、自分のゲームでのマルチプレイヤーの実装を理解しながら、自分が何に興味を持っているのかを知りたいのです。 シンプルな2D配列によって生成されるタイルベースの世界を作成しています。簡単にするために、World [100] [100]のようなものを考えてみましょう。 現在、renderメソッドは、ウィンドウの解像度と1つのタイル(移動中のスムーズなレンダリング用)に基づいてタイルのみをレンダリングします。世界がどれほど大きい場合でも(10x10、1million x 1million)、レンダリングのパフォーマンスは完璧です。 ゲームプレイでは、現在表示されているもの(画面+1にレンダリングされたもの)と、おそらくプレーヤーの周囲の領域にあるタイルのいくつかの情報を知るだけです。 したがって、サーバーから送信されるものはすべて、完全なタイル情報にはなりません。例 地面、地面のタイプ、木などの上に置かれるアイテムは、プレーヤーの視野の外側の領域では重要ではなく、クライアント/プレーヤーがそれらのタイルについて知っておく必要があることだけです。(例:プレーヤー[キャラクターまたはプレーヤー]がレンダリングビューのタイルを超えていることをプレーヤーが知ることができるUltima Onlineの「着信名」。) 私はネットワーキングについてあまり知らないので、おそらくこれを知って、これが私の質問に答えるかもしれません。しかし、これが実現可能な解決策なのか、あるいはアイデアが単に笑えるものなのか、私は興味があります。 送信される情報は、タイルの約10x15の領域であり、各タイルはタイルの内容に関する情報を保持します。より効率的には、すべてがオブジェクトであり、タイルはタイル上のすべてのオブジェクトを保持します。例 Tile [4] [4]は、Sword#23452、Rock2、Tree5、Player3、Monster4を保持します。 初期化/ロード中にまだロードされていない場合、空のタイルは地形タイプ[草、砂、水]のみを送信します。一部のタイルには、少数のオブジェクトがあります[Tree2、Sword#924、Gold、Corpse、Rock3]。 したがって、クライアントが主にロードする必要のあるテクスチャとそれを画面に配置するために配置する必要があるため、タイルがサーバーからクライアントに送信する情報が非常に多いとは思えません。クライアントにレンダリングするように指示するファイルのリストでは、位置は2つの整数のみであり、テクスチャは1つの整数です。 最悪の場合、サーバーは150個のタイルに少数のオブジェクトOnLOADの情報のみを送信し、それ以降は更新によってタイル(存在する場合)と新しいタイル(プレーヤーが方向に移動するたびに10から15)への変更のみを送信します。 )と画面上のキャラクターの移動方向(クライアントがタイル間のスムーズな移動をシミュレートできるようにするため)。 これはインターネットまたはピア間で送信される信じられないほどの量の情報であると私は思っているので、私は正しいと思います。それとも、ネットワーキングについてあまり知らないので、ようやくマルチプレーヤーネットワーキングに関する本を開くことに取り掛かったとき、私の心は打たれるでしょうか。 クライアント/サーバー間で送信される情報の量が非常に少ない場合、初期化時に全世界を単にロードする方が理にかなっていますか?または、世界が大きすぎる場合は「マップ」。そして、LOADの後、更新されたタイルのみを送信しますか? どうすれば具体的なデータの扱い方を考えているのか。私が参照として使用している本では、オブジェクトを追加および削除するリンクリストが必要なので、すべてがboolです。「キャラクターはいる?木はある?」 オブジェクトを保持するコンテナーや、レンダリングするものをクライアントに伝えるために必要なものだけを送信するサーバーロジックなど、別のアプローチを考えていました。おそらくそれ自体の内部にネットワーク情報を保持するオブジェクトがあり、サーバーから呼び出されたときに送信されます。

3
球面上のルート-測地線を見つけますか?
私は、2Dマップ上を移動できるブラウザベースのゲームで友人と作業しています。ほぼ7年になりますが、まだこのゲームをプレイしているので、何か新しいものを提供する方法を考えています。それ以来、ゲームマップは制限された平面であり、人々は(0、0)から(MAX_X、MAX_Y)に量子化されたXとYの増分で移動できます(大きなチェス盤と想像してください)。 私たちはそれを別の次元にする時が来たと信じているので、ほんの数週間前に、ゲームが他のマッピングでどのように見えるか疑問に思い始めました: 継続的な動きのある無制限の飛行機:これは一歩前進かもしれませんが、それでも私には確信がありません。 トロイダルワールド(継続的または量子化された動き):以前はトーラスを使用して作業してきましたが、今回はもっと何かを求めています... 連続的な動きのある球形の世界:これは素晴らしいことです! 我々が望むものを ユーザーのブラウザは球面マップ上の各オブジェクトの(緯度、経度)のような座標のリストを与えられています。ブラウザは、これをユーザーの画面に表示して、Web要素内にレンダリングする必要があります(キャンバスでしょうか?これは問題ではありません)。人々が飛行機をクリックすると、(mouseX、mouseY)を(lat、lng)に変換し、現在のユーザーの位置からクリックされたポイントまでのルートを計算する必要があるサーバーに送信します。 私たちは 、回転行列、四元数、オイラー角、平行移動などを操作するための多くの有用な数学を備えたJavaライブラリの作成を開始しました。それらをすべてまとめて、球点を生成し、それらをレンダリングしてユーザーに表示するプログラムを作成しましたJPanel内。クリックをキャッチして球面座標に変換し、ビューの回転、スケール、変換などの他の便利な機能を提供することができました。現在、クライアントとサーバーの相互作用をシミュレートする小さな(非常に小さな)エンジンのようになっています。クライアント側は画面上のポイントを表示し、他の相互作用をキャッチし、サーバー側はビューをレンダリングし、現在の位置とクリックされたポイントの間のルートを補間するような他の計算を行います。 問題はどこだ? 明らかに、2つのルートポイント間を補間する最短パスが必要です。クォータニオンを使用して、球の表面上の2点間を補間します。これは、球の表面上で最短経路が得られないことに気付くまで、問題なく機能するように見えました。 問題は、ルートがX軸とY軸を中心とした2つの回転の合計として計算されることでした。そこで、目的地のクォータニオンの計算方法を変更しました。方向と呼ばれる3番目の角度(1番目は緯度、2番目は経度、3番目は現在の位置を指すベクトルを中心とした回転)を取得します。これで「向き」の角度ができたので、Z軸を回転し、結果のベクトルを宛先クォータニオンの回転軸として使用します(回転軸は灰色で表示されます)。 取得したのは正しいルートです(大きな円上にあることがわかります)。ただし、これはルートの始点が緯度、経度(0、0)にある場合にのみ取得されます。つまり、開始ベクトルは(sphereRadius、0)です。 、0)。以前のバージョン(画像1)では、開始点が0、0であっても良い結果が得られないため、解決策に向かっていると思いますが、このルートを取得するために実行する手順は少し「奇妙です」 " 多分? 次の画像では、開始点が(0、0)ではない場合に発生する問題のビューが表示されます。これは、開始点が(sphereRadius、0、0)のベクトルではなく、目的点を確認できるためです。 (正しく描かれています!)はルート上にありません。 マゼンタポイント(ルート上にあるもの)は、(-startLatitude、0、-startLongitude)の球の中心を中心に回転したルートの終点です。つまり、回転行列を計算してルート上のすべてのポイントに適用すると、実際のルートが得られる可能性がありますが、これを行うにはもっと良い方法があると思い始めます。 たぶん私は球の中心とルートポイントを通る平面を取得し、それを球と交差させて測地線を取得しようとする必要がありますか?しかし、どうやって? あまりにも冗長で、多分間違った英語で申し訳ありませんが、これは私の心を吹き飛ばしています! 編集: 以下のコードは問題なく動作します!みんなに感謝: public void setRouteStart(double srcLat, double srcLng, double destLat, destLng) { //all angles are in radians u = Choords.sphericalToNormalized3D(srcLat, srcLng); v = Choords.sphericalToNormalized3D(destLat, destLng); double cos = u.dotProduct(v); …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.