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

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

3
キャバリア斜め投影で閉所恐怖症の雰囲気を伝える
SNES時代のロールプレイングゲームに適した方法でシーンをグラフィカルに表現するための最良の方法を見つけるには、協力的な知識が必要です。私は、「キャバリア斜め」投影と呼ばれる情報でゲームを表現することを選択しました。これは、EarthBoundなどのタイトルで使用されるのと同じ種類の視点です 。正面から。何よりも理由として、これはRPGメーカーのタイトルの300%で採用されている「トップダウン」ビューを避けるためです。私は「私も」プレーヤーのようになりたくありません。 シナリオ タイトルでは、プレイヤーキャラクターのリターンパスがブロックされています。進行への唯一のパスは、一連の非常にタイトな洞窟を通るものです。地域の閉所恐怖症は 非常に重要です。なぜなら、それはプレーヤーが受けるサスペンスの主な原因の1つだからです。 問題 上に示した投影に行き止まりと非常にタイトな穴がある閉所恐怖症の分岐洞窟を表示する単一の方法を考えることはできません。いくつかの作品アラウンド私は移動するには、またはサイドオンのようなビューに非常に困難になります投影(いずれかの一人称ビューに、変更の周りを公転することと考えることができますがありますディグダグ以上に意図され、x軸ではなくy軸を横切る分岐パスを表示します)-ただし、これを行うと、プレイヤーにとって不快なように見えるリスクがあり、何よりも没入を目指しています。 GDさん、お願いします。お気に入りのレトロゲームのシナリオを考えてみてください。プレーヤーにどのように表示されましたか?成功した実行のために私が得ることができる参照は非常に高く評価されます。
22 rpg  projection 

3
正投影と遠近法以外の3D投影法はありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 質問はほとんどタイトルにあります。OpenGLなどの3Dシステムで使用できる、正投影法と遠近法以外の注目すべき3D投影法はありますか? 特に、ゲームデザインで特定の用途があるものはありますか?

5
Vectorクラスに 'w'コンポーネントが必要ですか?
3D空間の回転、移動などを処理するマトリックスコードを書いていると仮定します。 ここで、変換コンポーネントを収めるために、変換行列は4x4である必要があります。 ただし、実際にベクターにコンポーネントを保存する必要はありwませんか? パースペクティブ除算の場合でもw、ベクトルの外側で単純に計算して保存し、メソッドから戻る前にパースペクティブ除算することができます。 例えば: // post multiply vec2=matrix*vector Vector operator*( const Matrix & a, const Vector& v ) { Vector r ; // do matrix mult r.x = a._11*v.x + a._12*v.y ... real w = a._41*v.x + a._42*v.y ... // perspective divide r /= w ; return r ; …

1
これはどのような予測ですか?
誰かがこの投影法が何と呼ばれるか教えてもらえますか? それはまるでオブジェクトを真上から見ているように見え、それからそれを均等に塗って残します。1つの次元のみが真のスケールであるように見え、他の2つの次元は歪んでいます。 このスタイルを使用する多くのゲームを見つけることはできませんが、Ultimaシリーズのいくつかは、少なくとも何か似ているように見えました。
16 projection 

1
Kinectの3Dポイントを使用したキーストーン補正
XNAでは、床に投影される単純な長方形を表示しています。プロジェクタは任意の位置に配置できます。明らかに、投影された長方形は、プロジェクターの位置と角度に応じて歪みます。Kinectは床をスキャンして、四隅を探します。ここでの私の目標は、元の長方形を変形して、長方形を基本的にプリワープすることで投影が歪まないようにすることです。 私の最初のアプローチは、すべてを2Dで行うことでした。まずwarpPerspective()、スキャンしたポイントから内部の四角形のポイントへの透視変換(OpenCVを使用)を計算し、四角形に逆を適用します。これは機能しているように見えましたが、GPUでレンダリングできないため遅すぎました。 2番目のアプローチは、XNAのレンダリング機能を使用するために3Dですべてを行うことでした。最初に、プレーンを表示し、Kinectでコーナーをスキャンして、受信した3Dポイントを元のプレーンにマッピングします。理論的には、2Dアプローチで行ったように、透視変換の逆を平面に適用できます。ただし、XNAはビューと投影行列で機能するwarpPerspective()ため、次のような関数を呼び出して目的の結果を取得することはできません。カメラのビューと投影マトリックスの新しいパラメーターを計算する必要があります。 質問:これらのパラメーターを計算し、2つのマトリックス(ビューとプロジェクション)に分割することは可能ですか?そうでない場合、私が使用できる別のアプローチはありますか?
15 xna  2d  3d  projection  kinect 

3
2D空間ゲームでの等尺性グラフィックスの偽造
最初に、描画の問題が何であるかを正確に知っており、それを解決する方法についてさまざまなアイデアを持っています。等尺性の「錯視」が維持されるように、どのフレームを描画するかを調整する方法を見つけ出します。 私は宇宙で行われる2D鳥瞰図ゲームを書いています。Up is Northの世界でアイソメグラフィックを使用しようとしています。従来のアイソメゲームのようなゲーム世界の回転はありません(ゲームは空間で行われ、地形はありません)。ここでは例のスプライトは、私が使用しようとしていますされていますhttp://cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64.pngそれは別名(35度の視野角と自身の垂直軸を中心に回転だ64回、 iso)。画像が生成されたため、これを変更できます。 わかりやすくするために、北(上)が0度、東(右)が90度になるように指示しました。 私の問題は、使用する3Dプレーンの違いが原因で、スプライトが常に、ゲームが考えるところに直面しているように見えないことです。用語を正しく使用しているかどうかはわかりませんが、私の宇宙船は1つの平面上で回転しており、ビュー平面は物がそれ自身の平面上で回転することを期待しています。問題の描写は次のとおりです。 http://cell.stat-life.com/images/stories/AsteroidOutpost/ProjectionIssue.png 左側にはサイドビューがあり、右側にはトップダウンビューがあります。上部には、世界の宇宙船/スプライトシートビューがあります。一番下には、画面に描画されたときのスプライトの外観があります。 右上には、宇宙船がどのように回転したかを簡略化したバージョンがあります(各フレーム間が均等に分離されています)。右下には、特定の角度が画面に描かれたときにスプライトが向いているように見える角度です。問題は約45度で最も顕著です。これは、船が向いているはずの方向に向けられた「スクリーンプレーン」ラインでオーバーレイされた画像です。http : //cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64RedLine.png赤い線は常に船とまったく同じ方向に向ける必要がありますが、ご覧のとおり、投影の問題が問題を引き起こしています。この問題を十分に説明していることを願っています。 編集: 赤い線はスクリーン平面上で回転しますが、宇宙船は「船平面」上で回転します。したがって、船の角度と描かれたときのスクリーン角度の大きな違いがあります。 編集を終了 この船が一方向に外れたターゲットにレーザービームを発射しているとき、それがまっすぐ前方に発射されるべきであるとき、それはかなり奇妙に見えます。 だから...私が思いついた解決策は次のとおりです: 等角図を偽造するのをやめる、大きくなる、または家に帰る。すでに私の世界を回転させます。(PS:これで問題が解決しますよね?) スプライトシートを(なんとかして)変更して、モデルが表示される「スクリーンアングル」を表すフレームを作成します。したがって、45度の画像を要求すると、実際には画面上で45度の方向を向いているように見えます。 スプライトレンダリングシステムを変更して、スプライトシートとは異なるフレームを(なんとかして)取得します。「通常の」フレームを取得すると面白いように見えることを知っています。そのため、45度のフレームを取得する代わりに... 33度のフレーム(推測のみ)を取得して、ユーザーに正しく見えるようにします。 3Dを使用するだけです!とても簡単です 1つ:どのソリューションをお勧めしますか?私はそれが間違っていることを知っているにもかかわらず、2に傾いています。私はスプライト生成ツールに完全にアクセスできることを忘れないでください。方法3は2番目の選択肢です。どちらの方法でも、目的の結果を得るには、角度に数学を適用するだけです。ところで、私はそこに#4を冗談として追加しました。3Dに移行したくありません。 2つの場合:方法2または3を使用して、入力または出力角度を調整するにはどうすればよいですか?3Dプロジェクション、3Dマトリックス(2Dマトリックスは言うまでもありません)、および他の数学を使用して望みの結果を得るには、それほど得意ではありません。 ここで大声で考えてみましょう:船が見たい方向に向いている単位ベクトルを(スクリーンプレーンで)取得し、それを船のプレーンに投影し、その投影されたラインと飛行機の角度北は、表示したい船のグラフィックの角度が必要です。正しい?(#3の解決策?)男...私はそれを解決できません。 編集: 私は問題を静的な画像で視覚化するのが難しいことを知っているので、Sprite Library Visual Testerをコンパイルして問題を表示しました:http : //cell.stat-life.com/downloads/SpriteLibVisualTest.zip XNA 4.0が必要ですこのアプリケーションは単純にスプライトを回転させ、その中心点から船が向いているとゲームが考える角度で外側に線を引きます。 9月8日編集 「大声で考える」パラグラフの続き:プロジェクションを使用する代わりに(ハードに見えるため)北向きの単位ベクトル(0x、1y、0z)を取り、マトリックスを使用して角度に回転できると考えていますスプライトは実際に向いているので、X軸を中心に「ビューイングプレーン」から「スプライトプレーン」まで外側に回転させてから、...平らにしますか?XおよびYのみを使用して(Zを無視して)ベクトルを(本質的に投影して)表示面に戻します。次に、その新しい平坦化されたベクトルを使用して、その角度を決定し、それを使用して...何かをすることができました。後でもっと考えます。 9月8日編集(2) 私はいくつかの成功を収めて上から私のアイデアをフォローしようとしました!だから...赤い線を宇宙船からまっすぐに出ているように見せるために(テスト目的のみ)、私は次のことをしました: Vector3 vect = new Vector3(0, 1, 0); vect = Vector3.Transform(vect, Matrix.CreateRotationZ(rotation)); vect …

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

2
Time.deltaTimeを使用しているにもかかわらず、動きはフレームレートに依存しているように見える
Unityでゲームオブジェクトを移動するために必要な変換を計算する次のコードがありますLateUpdate。これはで呼び出されます。私が理解していることから、私の使用はTime.deltaTime最終的な翻訳フレームレートを独立させるべきCollisionDetection.Move()です(ただレイキャストを実行することに注意してください)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

3
2.5Dゲーム用カメラ
私は5歳のように誰かにこれを説明できることを望んでいます。何時間もこれに苦労してきたし、私が間違っていることを理解できないからです。 Camera2.5Dゲームのクラスを作成しました。意図は、次のようなワールドおよびスクリーンスペースをサポートすることです。 カメラは右側の黒いものです。その画像では、+ Z軸は上向きで、-Zは下向きです。ご覧のとおり、ワールド空間と画面空間の両方の左上に(0、0)があります。 カメラが期待どおりに動作していることを証明するために、いくつかの単体テストを書き始めました。私のテストでは、ワールド、ビュー、およびスクリーンスペースで座標をプロットします。最終的には、イメージ比較を使用してそれらが正しいことを断言しますが、今のところ、テストでは結果を表示するだけです。 レンダリングロジックはCamera.ViewMatrix、ワールド空間を表示空間Camera.WorldPointToScreenに変換し、ワールド空間を画面空間に変換するために使用します。 テストの例を次に示します。 [Fact] public void foo() { var camera = new Camera(new Viewport(0, 0, 250, 100)); DrawingVisual worldRender; DrawingVisual viewRender; DrawingVisual screenRender; this.Render(camera, out worldRender, out viewRender, out screenRender, new Vector3(30, 0, 0), new Vector3(30, 40, 0)); this.ShowRenders(camera, worldRender, viewRender, screenRender); } このテストを実行すると、次のように表示されます。 ワールド空間は問題ないように見えますが、z軸は視聴者に向かうのではなく画面に入ると思われます。 ビュースペースは私を完全に困惑させます。カメラが(0、0)の上に座って、シーンの中心に向かっていることを期待していました。代わりに、z軸は間違った方向にあり、カメラは予想とは反対の角に配置されています! …
12 xna  matrix  projection 

3
Age of Empires IIのパースペクティブの名前は何ですか?
Age of Empires 1の「パースペクティブ」を2Dスプライトゲームとして説明します。 以下は、Age of Empires IIのスクリーンショットです。「見通し」をどのように説明しますか?2Dスプライトゲームですか? 「遠近法」は正しい言葉ではないかもしれません。そうでない場合、何を使用すればよいですか?

1
架空の4Dメッシュを画面にダウンプロジェクションする
精神的な練習として、私は任意の4Dメッシュをスクリーン(2D)に投影することを想像しています。 単一の4D三角形はまだ3つのポイントのみで構成されていると思いますが、これらの3つのポイントはそれぞれ4次元の列によって定義されます。 最初に4D空間を3D空間にマップする投影行列を定義してから、OpenGLにそのデータから2D空間への独自の投影を行わせるほうが理にかなっていますか? または、4から2に直接投影することを計画するのが最善でしょうか? どうもありがとう。

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 

5
カメラの背後にあるポイントを正しく投影するにはどうすればよいですか?
興味のあるポイントの上に感嘆符を付ける3Dゲームを作成しています。 2D画面のどこにマーカーを配置するかを見つけるために、マーカーを配置する3Dポイントを手動で投影しています。 次のようになります。 よさそうだ。マーカーが画面の外側にある場合は、座標をクリップして画面に合わせます。次のようになります。 これまでのところ、アイデアはかなりうまくいっています。ただし、対象のポイントがカメラの背後にある場合、結果のX、Y座標が反転し(正/負など)、次のように画面の反対側の隅にマーカーが表示されます。 (投影されてからクランプされた点がマーカーの先端です。マーカーの回転を気にしないでください) 錐台の後ろの座標がXとYで反転しているので、それは理にかなっています。したがって、私がしていることは、カメラの後ろにある座標を反転することです。しかし、座標を反転する必要があるときの正確な条件はまだわかりません。 これは現在、私の投影コードは次のようになっています(C#でSharpDXを使用)。 public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, PositionY, …

1
車両の予測軌道?
私が開発しているゲームでは、この例では速度Vで北上している車両(1)が目標(2)に到達できるかどうかを計算する必要があります。例は上から問題を描写しています: 実際には2つのシナリオが考えられます。Vが一定である(結果として軌道4、円弧)、または車両に加速/減速する能力がある(軌道3、らせん弧)。 車両が(行き過ぎるのではなく)目標に到達できるかどうかを簡単に確認できる方法があるかどうか知りたい。私が考えることができる唯一のことは、時間の経過に伴う車両の位置を統合することなので、私は特に軌道#3に興味があります。 編集:もちろん、車両には常に操縦する能力がありますが、操縦半径はその速度に応じて変化します(最大横g力と考えてください)。 EDIT2:(実生活のほとんどの車両と同様に)ゲーム内のものにも最小ステアリング半径があることにも注意してください)。

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