タグ付けされた質問 「3d」

3Dは、座標がX、Y、Zの値で表される3次元空間を指します。

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); …

3
OpenGL Fast-Object Instancing Error
オブジェクトのセットをループしてそれらのオブジェクトのインスタンスをレンダリングするコードがいくつかあります。レンダリングする必要があるオブジェクトのリストはstd :: map>として保存されます。MeshResourceクラスのオブジェクトには実際のデータを含む頂点とインデックスが含まれ、classMeshRendererのオブジェクトはメッシュが配置される空間内のポイントを定義しますでレンダリングされます。 私のレンダリングコードは次のとおりです。 glDisable(GL_BLEND); glEnable(GL_CULL_FACE); glDepthMask(GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); for (std::map<MeshResource*, std::vector<MeshRenderer*> >::iterator it = renderables.begin(); it != renderables.end(); it++) { it->first->setupBeforeRendering(); cout << "<"; for (unsigned long i =0; i < it->second.size(); i++) { //Pass in an identity matrix to the vertex shader- used here only for …

3
シェーダーは正確には何に使用できますか?
私は実際には3Dの人間ではありません。Three.jsの例ではシェーダーを少ししか使用していませんが、これまでのところ、方程式のグラフィカルな部分にのみ使用されているようです。 ただし、(かなり不可解な)Wikipediaの記事やその他の情報源から、これらは単なるグラフィック効果以外にも使用できる、つまりGPUのプログラミング(Wikipedia)に使用できると私は信じています。 つまり、GPUはまだプロセッサですよね?より大きく、より高速なベクトル操作のためのより大きく異なる命令セットを備えていますが、それでもプロセッサです。シェーダーを使用して通常のプログラムを作成できますか(ビデオメモリにアクセスできる場合)。 編集:通常のプログラム== "アプリケーション"、つまり、ウィンドウ/コンソールプログラムを作成するか、少なくとも画面に何かを描画する方法を持っています。
8 3d  shaders 

3
高さマップと3Dモデルメッシュ
私は現在3D PCゲーム(C ++およびDirectX 9.0で作成)に取り組んでおり、レベルデータをメモリに格納するための最良の方法を見つけようとしています。 ゲームのアクションは地面の下で行われるため、常にプレーヤーの上に天井があります。地面はかなりでこぼこで、石筍のようなものが常に存在しています。レベルは小さめで、ほとんどが廊下のように見えます。これまでに見つけたオプションは次のとおりです。 ハードドライブにビットマップまたはバイナリ/テキストファイルとして保存されている2つの高さマップ。天井(上部)と地面の高さマップ。 または いくつかの3Dモデル形式(たとえば、.fbx、.x、.objなど)の単一の3Dメッシュ。 レベルのデータストレージにどのようにアプローチすればよいですか?パフォーマンスに関して言えば、私の最善の選択肢は何でしょうか?高さマップを介してロードされたレベルのテクスチャリングに関しても問題があります。3Dモデルを使用すると、テクスチャリングが簡単になります。 ありがとう!

3
3D空間で衝突検出を実行するにはどうすればよいですか?
要約すると、今学期の最初から完全な3Dゲームを書く必要があります。今までのところ、私は自分の暇な時間に2Dゲームだけをプログラミングしていました。移行は難しくなく、ゲームはシンプルです。私の唯一の問題は、衝突検出です。私が見つけることができた唯一のものは、AABB、境界球、またはさまざまな物理エンジンの推奨事項でした。洞窟システム内を自由に移動する潜水艦をプログラムする必要があります。物理ライブラリを使用できないので、上記のいずれも私の問題を解決しません。 これまでは、衝突検出にSATを使用していました。同様の優れたアルゴリズムはありますが、3D衝突用に作られていますか?私は八分木や他の最適化について話しているのではなく、3Dポリゴンの1つのセットと別の3Dポリゴンのセットの直接衝突検出について話している。SATを2回使用して、メッシュを上と横から投影することを考えましたが、3D空間を凸形状に分割するのも難しいようです。また、それはoctreesを使ったとしても、あまりにも多くの計算のように思えます。 専門家はそれをどのように行うのですか?誰かがいくつかの光を当てることができますか?

3
AAAグラフィカルワークフローはどのように見えますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 だからこれは私がそれを理解する方法です: アーティストは、ZbrushまたはMudboxでモデルを作成します。現在、1,000万以上のポリゴンがあります。彼はそれを法線マップ+低ポリゴンモデルとしてZbrushにエクスポートします。(これは機能しますか?)モデルに2万〜3万のポリゴンがありますか? これで、アーティストは低ポリゴンモデルを3dsmaxまたはMayaにインポートし、法線マップも何らかの形で適用するので、ゲーム内と同じようにモデリングプログラムで表示されます。次に、ボーンの追加を開始し、モデルのスキンを作成します。次にアニメーション、次にエクスポートします。私が理解しているように、どういうわけか、モデルのすべてのテクスチャは、エンジンが理解する単一のテクスチャに「ベイク」されますか? 人々はまだPhotoshopでテクスチャを作成し、UVでモデルを手動でアンラップしてから、テクスチャを適用しますか?誰かがPho​​toshopでレイアウトされた顔のテクスチャを作成する方法を理解できなかったのですが、どういうわけか彼はモデルで見栄えがすることを知っています。Zbrushでテクスチャをペイントしますか?ただし、Zbrushにすべてのフォトショップツールがあるわけではありません。 地形や屋内レベルを作成したい場合はどうなりますか?3dsmaxで全体をモデリングするだけですか?テクスチャが3dsmaxでのようにエンジンに表示されない場合はどうなりますか?
8 3d  3d-meshes 

2
プレーヤーが作成した構造が3Dブロックベースのゲームのテンプレートと一致するかどうかを判断する
免責事項:これは恐ろしいMinecraftスタイルの質問の1つですが、データ構造とアルゴリズムの質問のほうが多いと思います 私は3Dデータ構造に本当に慣れていないので、3Dブロック構造を保存および照合するための最良の方法を考えています。 現在、プレイヤーは任意のスペースにブロックを配置でき、これらのブロックが事前定義された構造と一致すると、イベントが発生します。私が現在行っている方法は、プレーヤーがブロックを配置するときに、ゲームが再帰的に各隣接ブロックをチェックして、x、y、z座標が最も低いブロックを見つけ、そのブロックをルートブロックにします。次に、ルートブロックに基づいて残りのブロックをチェックし、特定のテンプレートと一致することを確認します。問題は、テンプレートが複雑になるにつれて、私のコード(非常に非効率的)も複雑になることです。 これを行う最善の方法は、構造を定義するあるタイプのマトリックスを保存し、プレーヤーがブロックを配置するたびにマトリックスと照合することです。このタイプの問題に一致するデータ構造/アルゴリズムはすでにありますか?

2
高速な距離ベースのエンティティ検索のためのデータ構造(またはアルゴリズム)
たとえば、ゲームには100人の敵(さまざまなチーム)が走り回っていて、AIは近くのエンティティを調べて攻撃対象を確認したいと考えています。それらのエンティティを整理して、各敵がそれ自体と他のすべてのエンティティとの間の距離を計算する必要がないようにするための迅速な方法は何ですか? 手短に言えば、AIエンティティが「近くにいるのは誰ですか?」という質問にすばやく答える方法は何ですか。

2
3Dモデルの一部を何かに向けて動的にアニメーション化する方法
私はこの種のアニメーションが通常どのようにコード的に行われるのか知りたいです。 いくつかの例: アップ文字ピック何か-手だけがターゲットに向けてアニメーション化されて http://www.youtube.com/watch?v=rW-7uatehx4 4:50から見たときに武器アッププレーヤーのピック。 キャラクターが棚からぶら下がっている-手が特定の場所(棚)に設定されている http://www.youtube.com/watch?v=SOiwArn4Bmw右手。 キャラクターが何かを見る-頭がターゲットに向けられている(npcがpcを見る)


4
3Dシェーディング/ライティングのサポートが必要
3Dゲームでシェーディングをどのように処理しますか?私は立方体で作られた木の片側を遮光する指向性光源を持っています。残りの3辺はすべてアンビエントシェーディングのみを取得します。したがって、アンビエントシェーディングされた2つの側面を見ると、3D効果は失われます。何か不足していますか?光源から最も遠い側をさらに暗くする必要がありますか?私はフォールアウト3を見てみましたが、これは彼らが何をしているように見えますが、Minecraftは2つの反対側のライトと残りの2つの反対側のダークでグラスマウンドをシェーディングし、2つのライトに2つの指向性ライトがあるという効果を与えます。シェーディングされたサイドと暗いシェーディングされたサイドのアンビエントライト。

5
非常に大きなゆっくり回転する惑星を描く
ゆっくりと回転する惑星の非常に大きな(500ピクセル以下)グラフィックを描画したいと思います。これらのグラフィックは印象的なものです。これを行う最良の方法は何ですか?私は特定の3Dエンジンの経験がなく、このゲームがどのプラットフォームで動作するかさえわかりません。 各フレームを事前にレンダリングすることもできましたが、500pxで10秒の回転周期で、これは惑星ごとに途方もない量のデータです。 3Dエンジンを使用して、惑星のテクスチャを球に近づくメッシュにマッピングすることができますが、500pxでは、見栄えをよくするためにポリゴン数が膨大になる必要があるのではないかと心配しています。 各ビューピクセルのx / y座標を球のテクスチャの座標空間に変換することで、テクスチャ球を効率的にレンダリングするだけの一種のカスタム3Dエンジンを書くことができますが、これは複雑であり、メリットを得ることができませんでしたグラフィックアクセラレーション。 私が考えていない他の何か? ここに私が何を意味するかのアニメーションGIFの例があります。(100x100 pxと60フレームで、それはすでにかなり巨大です、申し訳ありません。)これだけ、非常に大きく、非常にゆっくり回転し、よりスムーズにアニメートされることを想像してください。 ただし、これが500x500ピクセルで10 x 25 = 250フレームの場合、数百MBのデータについて話しているため、この単純なアプローチは機能しません。

3
ポリゴンを順番に並べ替えます-機能しませんか?
私は3Dの世界でプログラミングをするのはかなり新しいです。 すべてのオブジェクトが最も遠いものから最も近いものへ、下から上へと描画されるキャンバスを作成しようとしています。そのため、オブジェクトは互いに重なりませんが、問題があります。 ご覧のとおり、一部のオブジェクトは互いに重なり合っています。画面内のどのオブジェクトも移動しないので、疑問に思っていました。オブジェクトを正しい順序でソートするために使用できるアルゴリズムはありますか?現時点では、Z軸で昇順に並べ替え、次にXで降順、Yで降順に並べ替えています。
7 c#  3d  isometric 

2
変換行列を指定して新しい頂点の位置を計算しますか?
4x4変換行列または単純に9つの浮動小数点(positionX、positionY、positionZ、rotationH、rotationP、rotationR、scaleX、scaleY、scaleZ)を指定して、頂点の新しい位置を取得するにはどうすればよいですか?通常、最終的なメッシュ(または「ノード」、「オブジェクト」、または「ジオメトリ」)にマトリックスを割り当てることができますが、今は手動で行う必要があります。
7 3d  matrix  vertex 

1
シャドウマップの粒度
すべてのライトに同じシャドウマップを再利用できると思いました。しかし、ライト間のシャドウマップを再利用することはできず、個別のサーフェスを使用する必要があることを示唆する業界の記事を見てきました。 ライトごとに1つのシャドウマップが必要ですか?または、プロセス全体の1つですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.