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

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 

1
画面外のオブジェクトを指す画面の端に矢印を描画するにはどうすればよいですか?
このトピックで説明されていることを実行したいと考えています。 http://www.allegro.cc/forums/print-thread/283220 ここで述べたさまざまな方法を試しました。 まず、Carrus85で説明されている方法を使用しようとしました。 2つの三角形の斜辺の比を取るだけです(もう一方の三角形を使用しても構いません。計算する距離としてポイント1とポイント2をお勧めします)。これにより、大きな三角形からコーナーの三角形のアスペクト比のパーセンテージが得られます。次に、deltaxにその値を掛けてx座標のオフセットを取得し、deltayにその値を掛けてy座標のオフセットを取得します。 しかし、オブジェクトが画面の端からどれだけ離れているかを計算する方法を見つけることができませんでした。 次に、23yrold3yroldによって提案されたレイキャスティング(これまで行ったことのない)を使用してみました。 画面の中心からオフスクリーンオブジェクトに光線を発射します。光線が長方形のどこで交差するかを計算します。あなたの座標があります。 最初に、2つのポイントのx位置とy位置の差によって形成される三角形の斜辺を計算しました。これを使用して、その線に沿って単位ベクトルを作成しました。x座標またはy座標のいずれかが画面外になるまで、そのベクトルをループしました。2つの現在のxとyの値は、矢印のxとyを形成します。 これが私のレイキャスティングメソッドのコードです(C ++およびAllegro 5で記述されています) void renderArrows(Object* i) { float x1 = i->getX() + (i->getWidth() / 2); float y1 = i->getY() + (i->getHeight() / 2); float x2 = screenCentreX; float y2 = ScreenCentreY; float dx = x2 - x1; float dy = y2 …

3
Androidゲームをさまざまな画面サイズに合わせる
私は縦向きの画面向きのAndroidゲームを作っています。スマートフォンで実行するとうまくいきますが、タブレットで実行すると、画面サイズが大きくても、ビットマップはすべて同じサイズです。異なるサイズの画面でもビットマップを同じ比率に保つ方法はありますか?
11 java  android  screen 

1
スクリーンスペースからワールドスペース
私のゲームの世界では、x軸が左から右、y軸が上から下、z軸が画面の外に出ている2Dゲームを作成しています。 私のゲームの世界はトップダウンですが、ゲームは少し傾いてレンダリングされます。 私は、ワールドスペースからスクリーンスペースへ、またはその逆への投影に取り組んでいます。前者は次のように動作しています: var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight); var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix); NegateY()XNAのため、拡張メソッドは、それがのように聞こえるまさに行い、Y軸は、トップの代わりに、上から下へ下へと走ります。上のスクリーンショットは、これがすべて機能していることを示しています。基本的に、私は3D空間に多数のポイントを持ち、それを画面空間にレンダリングします。カメラのプロパティをリアルタイムで変更して、新しい位置にアニメーション表示することができます。明らかに、私の実際のゲームはポイントではなくスプライトを使用し、カメラの位置は固定されますが、それに到達する前に、すべての計算を適切に実行しようとしています。 今、私は逆に変換しようとしています。つまり、上の画面空間のxとyの点を指定して、ワールド空間の対応する点を決定します。たとえば、緑色の台形の左下にカーソルを合わせると、ワールドスペースの読み取り値は(0、480)になります。Z座標は無関係です。または、むしろ、ワールド空間にマッピングし直すとき、z座標は常にゼロになります。基本的に、私はこのメソッドシグネチャを実装したいと思います。 public Vector2 ScreenPointToWorld(Vector2 point) 私はこれを機能させるためにいくつかのことを試みましたが、運が悪いだけです。私の最新の考えでは、Viewport.Unproject異なるz値とfar z値を使用して2回呼び出し、結果を計算Rayし、それを正規化してから、基本的に私の世界の地上レベルを表すRayとの交差を計算する必要がありPlaneます。しかし、私は最後のステップで立ち往生し、私が物事を過度に複雑にしているのかどうか確信が持てませんでした。 これを達成する方法について誰かが正しい方向に私を向けることができますか?
10 xna  c#  matrix  projection  screen 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.