最近私はいくつかのOpenGLプログラミングを行っており、変換、回転、スケーリングなどの基本的なマトリックス変換を行います。私は回転をするときにいくつかの問題に遭遇する。ここに私の質問です。OpenGL定回転角度
ここでは、変数rotationDegreeと変数rotationStepSizeを使用して回転を制御しています。回転フラグが
//inside paintGL function
if(rotationFlag is on)
rotationDegree += rotationStepSize
if(rotationDegree > 360.0f)
rotationDegree -= 360.0f
上にあるとき、私はrotationStepSizeは非常に小さくなるように定義しているのでここでは、回転が非常に遅いから始まり、奇妙なことだが、その後の時間として、それはより速く、より速くなる増加!
私は、この現象のために2つの説明を思い付く:
- 360Fは、GLMの学位パラメータの値の範囲ではありません::プログラムはpaintGLがペイントさせる、遅いスタートする
- を回転させますスクリーンを少なくする。その後、プログラムが安定する(または他のパラメータが変更されていない)とき、mainLoopEventはより速くより速く実行され、paintGLがより多く描画されます。
誰もこの問題を解決する方法を知っていますか?私はグッと(GL_TIME_ELAPSED)を使用してgoogled、しかし、私のマシン上で、この関数は "glutget:不足しているENUMハンドル"、私のglutファイルが完全ではないことを示して、私は推測する?
誰もが列挙型の問題を解決する方法を知っていますか、または一定の速度で回転するオブジェクトを持つシーンを作成するためにこれを回避する方法はありますか?
ありがとうございます!
ちょうど賭けていますが、 'glLoadIdentity'または任意の他のマトリックスリセットメソッドを使用しますか?そうでない場合は、すでに回転している行列を回転させています。これは、ステップの増分がスピードであることを意味します。 – Spektre
申し訳ありませんが質問の詳細ではっきりしていませんでした。私はプログラム可能なパイプラインを実現する新しいOpenGLを使用しています。オブジェクトを原点に戻すたびに、rotationDegreeで指定された度合いで回転し、オブジェクトを元の位置に戻します。これらはすべて1つの行列の中に入れられ、次にこのmodelToWorld行列を頂点シェーダに渡します。 –
ポイントは、各フレームの前に行列がユニット(または定義された初期状態)であるかどうかをチェックします。 – Spektre