私はopenframeworks(OpenGLを介してレンダリングする)を使用しており、画像を中心から回転させようとしています。
ofRotate()
andを使用する必要があることはわかっofTranslate()
ていますが、自分でそれを理解することはできませんでした。これが私がこれまでに試したことです:
ofPushMatrix();
ofRotate(ofRandom(10),0.0,0.0,1.0);
leafImg.draw(100,100);
ofPopMatrix();
私はopenframeworks(OpenGLを介してレンダリングする)を使用しており、画像を中心から回転させようとしています。
ofRotate()
andを使用する必要があることはわかっofTranslate()
ていますが、自分でそれを理解することはできませんでした。これが私がこれまでに試したことです:
ofPushMatrix();
ofRotate(ofRandom(10),0.0,0.0,1.0);
leafImg.draw(100,100);
ofPopMatrix();
あまり計算しなくても、ネストされた座標系を使用して画像をオフセットし、回転するときに中心から回転させることができます。要するに、これを行うことになります:
コードでは、これは次のようになります。
ofPushMatrix();
ofTranslate(leafImg.width/2, leafImg.height/2, 0);//move pivot to centre
ofRotate(ofGetFrameNum() * .01, 0, 0, 1);//rotate from centre
ofPushMatrix();
leafImg.draw(-leafImg.width/2,-leafImg.height/2);//move back by the centre offset
ofPopMatrix();
ofPopMatrix();
座標系がどのようにネストされているかをより明確にするために、インデントを使用しました。
以下と同じです:
ofPushMatrix();
ofTranslate(leafImg.width/2, leafImg.height/2, 0);//move pivot to centre
ofRotate(ofGetFrameNum() * .01, 0, 0, 1);//rotate from centre
ofPushMatrix();
ofTranslate(-leafImg.width/2,-leafImg.height/2,0);//move back by the centre offset
leafImg.draw(0,0);
ofPopMatrix();
ofPopMatrix();
ご覧のとおり、中心に回転するのはかなり簡単です。暇なときに、任意の点に対して回転する方法を考えてみてください。
舞台裏ではちょっとした線形代数が行われていますが、プッシュ/ポップ行列呼び出しは基本的に要点の行列乗算を処理します。それでも、pushMatrix/popMatrix 呼び出しの操作を理解し、練習する必要があります。これは処理用ですが、原理はまったく同じで、構文も非常に似ているため、次の記事をお勧めします: 2D Transformations