何らかの変換後にオブジェクトの新しい座標を知るにはどうすればよいですか?
元 :
a,x,y,z any float numbers
glTranslatef( x, y,z ) ;
glRotate( a,0.0f, 1.0f, 0.0f ) ;
sketchSomething() ;
この変換後のオブジェクトの座標を知りたいです。
OpenGL はオブジェクトを「考え」ません。オブジェクトを描画すると、OpenGL はジオメトリの各プリミティブ (点、線、三角形) を単独で処理し、描画してから忘れます。変換は、画面上のどこに表示されるかに影響を与えるだけです。
しかしもちろん、ジオメトリが何らかのモデル空間でオブジェクトを形成し、それがワールド空間、目の空間、クリップ空間、最後に NDC 空間に変換されると仮定できます。
あなたの質問に関して: glTranslate、glRotate、およびその他の関数はオブジェクトを操作しません。それらは、現在アクティブなスタックの上の行列に変換行列のインプレース乗算を適用します。以前に無数の変換が適用された可能性があります。したがって、できることは、OpenGL から現在の行列を取得し、自分で変換を行うことです。これにより、変換された空間のオブジェクト ジオメトリが得られます。もちろん、オブジェクトの中心位置を生成する中心位置ベクトルを乗算することもできます。
また、扱いが面倒な OpenGL の行列ルーチンに頼る代わりに、専用の行列数学ライブラリ (GLM、Eigen、linmath.h) を利用し、それを使用してすべての変換行列演算を行うことを強くお勧めします。glLoadMatrixまたはglUniformMatrixを使用して、準備された行列を OpenGL にロードします。
それはあなたが探している座標に依存します。
2D画面座標が必要な場合は、gluProject()を使用して現在の行列を単一の点に適用できます。
現在のモデルビューマトリックスをポイントに適用するだけの場合は、そのマトリックスを読み戻して自分で変換を適用する方がよいでしょう。
ワールド空間内でのオブジェクトの原点の位置が必要な場合は、マトリックスの平行移動部分を読み取るだけで、実際には完全な変換を実行する必要がないことに注意してください。