1

ゲームを作るためにC ++でOpenGLを使用しています。そして今、たとえば、3Dモデルの頭の上に2Dヘルスバーを描く、またはそれらの線に沿って何かを描くなど、3D座標を2D位置に変換する方法を考えています。xD

とにかく、SFMLで使用できる場所でこれをどのように設定できるか疑問に思っています。現在、いくつかの情報を調べていますが、方法を完全には理解していません...

基本的に、SFMLを使用して3D opengl座標を画面上の2D座標に変換する方法を尋ねています

また、2D 座標を 3D に変換する方法も知りたいので、それも知っています。

また、いくつかのサンプルコードもいいでしょう。より良い画像が得られるように

読んでくれてありがとう

-モルマ

4

4 に答える 4

2

OpenGL を使用しているgluProjectため、3D から 2D へのマッピングと 2D から 3D へのマッピングをお勧めしgluUnProjectます (非投影に関する @ChrisF のコメントに注意してください)。
私は認めざるを得ませんが、私は OpenGL の実際の経験がありませんでした. :)

于 2011-04-10T19:18:02.163 に答える
2

ヘルス バーなどを描画するための通常のアプローチは、境界ボリューム (境界ボックス、境界球など) またはアンカー ポイントを画面空間に変換することです。OpenGL 変換パイプラインに従うだけなので、これは非常に簡単です。

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y} / 2)

追加情報を提供しないと、2D から 3D への変換はできません。

于 2011-04-10T19:20:42.023 に答える
1

この短いテキストでは、3D 座標の 2D 投影の基本について説明します。2 つの既知の値 (2D 座標) しかなく、3 つの座標を正確に抽出するには不十分であるため、逆の方法は少し難しくなります。あなたが得ることができる最高のものは線です(ビューアーから始まり、画面上のポイントを通り、無限に伸びます.3Dポイントは基本的に画面上のポイントの後ろのどこにでもあります.しかし、何か特別なことを知っていれば、 2D 座標がわかっているカメラまたは物の位置の一部から、3 つの座標を決定できます。

于 2011-04-10T19:19:24.587 に答える
1

openGLが座標に対して行うのと同じ変換を行うだけです。これには通常、次の手順が含まれます。

  1. 平行移動行列 (つまり、カメラ行列) を掛けます。これにより、3D 座標が画面指向の座標系に配置されます

  2. 射影行列を掛けます。これにより、座標が画面に投影されます

それらをopenGLにロードする必要があるため、おそらくこれらのマトリックスを持っていると思いますが、それらを要求することもできます。

于 2011-04-10T19:21:16.587 に答える