タグ付けされた質問 「coordinates」

ゲーム空間におけるエンティティの位置の数値表現。位置をマッピングするためのさまざまな方法に対応するために、座標系には複数の形式があります。


4
2Dスクリーン座標とデカルト座標の違いに対処する方法
ほとんどの2D画面/ビットマップ座標系には、下向きの正のY軸があります(原点は左上隅にあります)。 これは、正のY軸を上に向けて(原点を中心に)ほとんどの人が幾何学的に考える方法とは逆です。 ほとんどのゲームは、2つの異なる2D座標系をどのように管理しますか?座標には主に2つのタイプ(画面とデカルト)がありますが、スプライト空間、ワールド空間、ビュー空間、画面空間など、さまざまな座標空間があります。 バックグラウンド: 私はもともと、ゲーム内の世界座標を2Dスクリーン座標規則に一致させました。これにより、グラフィックス描画ルーチンを使用することは非常に自然になりましたが、atan2()などの三角関数を使用すると微妙な問題が発生しました。atan2()が正のy軸が上を向いていると想定するため、atan2()2Dスクリーン座標の供給結果は非常に紛らわしいです。 そこで、世界座標を古典的なデカルト座標系(画面の左下に原点がある)に変更しました。atan2()を使用した推論ははるかに簡単ですが、現在では他の種類の推論を行うことが難しくなっています。 ここで画面をクリックすると、その下にあるスプライトは何ですか? そのスプライトはどこでクリックしましたか? スプライトが間違った位置に描画された場合、間違って計算されたものは何ですか?画面座標または世界座標? 画面からデカルト座標への変換では、両方の(x、y)値のオプションの変換を使用して、y値を-1でスケーリングするだけです。ゲームデザインのベストプラクティスにもっと興味があります。 ほとんどのゲームは、単に画面座標の規則に固執し、atan2()のようなものがどのように機能するかについての考え方を変えますか? 座標系の変換はいつ/どのように行われますか?(マトリックス、OOP抽象化などを使用) スプライトの位置は、スプライトの中心または角の1つとして保存されていますか?「間違った」方向に進むスプライトの高さ/幅は、描画するときによくある問題のようです。 私の質問は主に2Dゲームに関するものですが、OpenGLはY軸が上を向く座標系を使用しているようです。OpenGLは、最終的にこれらの3D座標を2Dスクリーン座標系に投影する必要があります。おそらくいくつかのガイダンスはOpenGLの方法で見つけることができます...
23 2d  screen  coordinates 

3
ベクターの何が違うのか、複雑なのか、役に立つのか?
これが本当の質問と見なされない場合はご容赦ください。しかし、それは私が本当に混乱しているものです。 他のゲーム開発者がベクターの使用が非常に有用であるという話を絶えず聞いていますが、ベクターの数学に誰もがどのように脅かされているのか、ベクターは気が遠くなるように思えます。私はそれらについて学ぶことを一度もしなかった。 だから、ついにウィキペディアでベクターを見て、驚いた。私が何らかの形で誤解しない限り、ベクトル(簡単にするために、2Dであると言います)は、xとy座標です。 誤解している場合は、修正してください。 だからここに私の質問があります:それは2(または3)次元座標の表現がベクトルであることを意味しないのですか?その場合、ベクトルと座標は同じものです。また、座標を使用せずにゲームを作成することはほとんど不可能です。したがって、ベクターは、ゲームプログラミングをある程度行った人にとって、混乱したり、新しいものになるのでしょうか。 これは、いくつかの説明を使用できるものです。どんな助けも大歓迎です。


1
グリッド上の正投影単位の変換の不一致(たとえば、64ピクセルが正しく変換されない)
グリッド上での単位変換に関する小さな問題についての洞察を探しています。 更新および解決済み 私は自分の問題を解決しました。詳細は以下をご覧ください。投稿のこの部分のすべてが正しいことが判明しました。どちらかといえば、次の人のためのミニチュアチュートリアル/例/ヘルプとして機能することができます。 セットアップ FBO、VAO、VBO 512x448ウィンドウ 64x64グリッド gl_Position = projection * world * position; projection定義されるortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);この教科書正射影関数です。 world (0、0)の固定カメラ位置によって定義されます position スプライトの位置によって定義されます。 問題 以下のスクリーンショット(1:1スケーリング)では、グリッド間隔は64x64であり、ユニットを(64、64)で描画していますが、ユニットは約10pxを間違った位置に描画します。ピクセルサイズのゆがみを防ぐために均一なウィンドウディメンションを試しましたが、1対1ピクセルから世界単位への投影を行う際に、適切な方法で少し迷っています。とにかく、ここに問題を支援するためのいくつかの簡単な画像があります。 私は、エンジンが64xオフセットであると信じているスプライトの束をスーパーインポーズすることにしました。 これがふさわしくないように思えたとき、私はあちこちに行き、1ユニットのベースケースをしました。予想通りに並んでいたようです。黄色は、動きの1pxの違いを示しています。 私が欲しいもの 理想的には、64ユニットが任意の方向に移動すると、以下が出力されます(重ね合わせたユニット)。 頂点 頂点シェーダーに入る頂点が正しいように見えます。たとえば、最初の画像を参照すると、データはVBOで次のようになります。 x y x y ---------------------------- tl | 0.0 24.0 64.0 24.0 bl | 0.0 0.0 -> 64.0 0.0 tr | …

5
グローバル座標空間からローカル空間に変換するにはどうすればよいですか?
という名前のエンティティが与えられた場合、EntityAローカル座標空間を定義します。ここで、の位置EntityAは原点、その見出しベクトルはX軸、見出しベクトルの法線はY軸です。 グローバル座標が与えられている場合、EntityAのローカル空間で別のエンティティの位置を見つけるにはどうすればよいですか? 例:EntityAのグローバルポジションは(50,50)であり、それEntityBは(80,90)です。では、のローカル空間EntityBでEntityAの位置は何ですか? 編集:数学で簡単に行ってください。

4
時差等角図:画面上の点の地図座標を計算します
これについてはすでに多くのリソースがあることはわかっていますが、自分の座標系に一致するリソースが見つからないため、これらのソリューションを自分のニーズに合わせるのに非常に苦労しています。私が学んだことは、これを行う最良の方法は変換行列を使用することです。それを実装することは問題ありませんが、座標空間をどのように変換する必要があるのか​​わかりません。 これが私の座標系を示す画像です: 画面上の点をこの座標系に変換するにはどうすればよいですか?


2
Half-Life 2 BSPライトマップ
私は大学のプロジェクトのBSPビューアを書いています。これまでのところ、メインジオメトリが適切に読み込まれ、PVSが機能しています。 現在、ライトマップを適用しようとしていますが、ライトマップのテクスチャ座標を適切に計算できないようです。 ここによると:http : //developer.valvesoftware.com/wiki/The_Source_Engine_BSP_File_Format struct texinfo_t { float textureVecs[2][4]; // [s/t][xyz offset] float lightmapVecs[2][4]; // [s/t][xyz offset] - length is in units of texels/area int flags; // miptex flags overrides int texdata; // Pointer to texture name, size, etc. } フロートの最初の配列は、本質的に、ワールドジオメトリにレンダリングされたときにテクスチャがどのように方向付けられ、スケーリングされるかを表す2つのベクトルです。2つのベクトルsとtは、テクスチャピクセル座標空間での左から右および下から上方向のワールドへのマッピングです。各ベクトルには、x、y、およびzコンポーネントと、ワールドに対するその方向のテクスチャの「シフト」であるオフセットが含まれます。ベクトルの長さは、各方向のテクスチャのスケーリングを表します。 テクスチャピクセル(またはテクセル)の2D座標(u、v)は、次のようにして、面上の点の世界座標(x、y、z)にマップされます。 u = tv0,0 * x + tv0,1 …

4
2つの異なる2D座標系間で変換するにはどうすればよいですか?
画像に座標を描画できるように、ある座標系から別の座標系に座標を変換しようとしています。 基本的に、宛先座標系は次のとおりです。 X range: 0 to 1066 Y range: 0 to 1600 (私が1066 x 1600のサイズで描いているちょうど標準的な画像) 画像上に描画しようとしている位置は実際には同じサイズですが、座標系が異なります。すべての座標のスパンは1066x1600です。 しかし、座標の例は次のようになります。 (111.33f, 1408.41f) (-212.87f, 1225.16f) この座標系の範囲は次のとおりです。 X range: -533.333 to 533.333 Y range: 533.333 to 2133.333 これは非常に単純な数学だと思いますが、何らかの理由で理解できません。 提供された座標を最初の座標系に変換するにはどうすればよいですか?
10 2d  coordinates 

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

3
レイトレーシングにおけるBRDFおよび球座標
標準のフォン/ブリンフォン照明モデルを使用するレイトレーサーを開発しました。物理ベースのレンダリングをサポートするように変更しているので、さまざまなBRDFモデルを実装しています。現在、私はOren-NayarとTorrance-Sparrowモデルに集中しています。これらはそれぞれ、入射wiおよび出射wo光の方向を表すために使用される球面座標に基づいています。 私の質問は次のとおりです。wiとwoをデカルト座標から球座標に変換する正しい方法はどれですか。 私はここで報告された標準の公式を適用していますhttps://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversions 私のベクトルが原点の尾にないので、私が正しいことをしているのかわかりませんデカルト座標系ですが、光線とオブジェクトの交点を中心とします。 ここに私の現在の実装を見つけることができます: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp 誰かがwiとwoのベクトルをデカルト座標から球座標に変換する正しい方法の説明を手伝ってくれる? 更新 ここにコードの関連部分をコピーします。 球面座標計算 float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float phi = atan2f(z, x); return (phi < 0.f) ? phi + 2.f * M_PI : phi; } オーレンナヤル OrenNayar::OrenNayar(Spectrum<constant::spectrumSamples> reflectanceSpectrum, float …

2
World Bounds-(0、Size)または(-HalfSize、HalfSize)?
オブジェクトを移動、描画、衝突させるゲームスペースを作成するときは、(0,0)ポイントまたは(0,0,0)ポイントをスペースの真ん中に置いて、ワールドの境界は(-halfSize、halfSize)ですか、それともスペースの端にある方が良いので、境界は(0、サイズ)ですか? それぞれの長所と短所は何ですか?それぞれにどのような問題がありますか?それとも本当に重要ではないのですか? 細かいことのようですが、見落としている可能性のある大きな問題があるかどうかを確認したいと思いました。

3
2Dアイソメトリック:スクリーンからタイルへの座標
等角投影の2Dゲームを作成していますが、カーソルがどのタイル上にあるかを正確に把握するのが困難です。これが描画です: ここで、xsとysは画面座標(ピクセル)、xtとytはタイル座標、WとHはタイルの幅と高さ(ピクセル単位)です。座標の表記は(y、x)ですが、混乱する可能性があります。 これまでに私が理解できた最高のものはこれです: int xtemp = xs / (W / 2); int ytemp = ys / (H / 2); int xt = (xs - ys) / 2; int yt = ytemp + xt; これはほぼ正しいように見えますが、非常に不正確な結果を与えており、特定のタイルを選択するのが難しくなっています。または、クリックしようとしているタイルの隣のタイルを選択する場合もあります。理由はわかりません。この背後にある論理を理解してくれる人がいれば助かります。 ありがとう!

3
2点間の線上の点を取得する
私はJavaScriptで単純な宇宙ゲームを作成していますが、今はベクトルに関して壁にぶつかっています。 ゲームビューは、2Dグリッドでトップダウンです。ユーザーがグリッドをクリックすると、宇宙船がその場所に飛びます。 したがって、2つのポイントセットがある場合: { x : 100.2, y : 100.6 }; // the ship { x : 20.5, y : 55.95 }; // the clicked coordinates ゲームループが1秒あたり60回の反復でティックし、望ましい船の速度が1ティックあたり0.05ポイント(1秒あたり3ポイント)である場合、ゲームループの各ティックごとに船の新しい座標セットを計算するにはどうすればよいですか? ps慣性や船に影響を与える複数のベクトルを考慮したくないので、船は何をしている(つまり、一方向に飛んでいる)のを止めて、クリックした座標に静的な速度で移動したいだけです。

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