1
私は単純なOpenGLアプリケーションを用意しています。私はx1, y1, x2
とy2
をグローバル変数に格納します。2DでのOpenGLの回転
回転機能ではfeedback
の機能を使用します(hereおよび翻訳開始方法、hereを参照)。それは、その周りの線を回転させることを意図しています。ここで
コードです:
void rotate(float theta)
{
GLfloat* buff = new GLfloat[5];
glFeedbackBuffer(5, GL_2D, buff);
glRenderMode(GL_FEEDBACK);
int center_x = x1 + (x2 - x1)/2;
int center_y = y1 + (y2 - y1)/2;
glPushMatrix();
glTranslatef(-center_x, -center_y, 0);
glRotatef(theta, 0, 0, 1);
glTranslatef(center_x, center_y, 0);
line();
glPopMatrix();
x1 = (int)buff[1];
y1 = (int)buff[2];
x2 = (int)buff[3];
y2 = (int)buff[4];
delete[] buff;
glutPostRedisplay();
}
しかし、2本の翻訳はほとんど影響を及ぼさないように見える - ラインはまだウィンドウの左下隅の周りを回転します。さらに、線が目に見える面に収まらない場合、線が切り取られます(これは翻訳がコメントアウトされた場合に発生しません。線が目に見える面の外に出た場合、単に移動を拒否します)。
なぜこのコードは機能しませんか?どのように2Dの中心(または任意の点)の周りの線を回転させるのですか?
確かに、今、それは動作します、ありがとう!ただし、回転すると、線はウィンドウの左下隅に向かってゆっくりと移動します。これは避けることができますか? –
対処する2つの異なる中心があります:ビューポートの中心と線の中間点です。ビューポートの中央に線の中間点を配置したいとします。したがって、実際にしたいことは、ビューポートの中心に移動し、回転させて、変換された原点(つまり、中心点が0,0の線)を基準にして線を描画します。 –
okですが、新しい座標(平行移動+回転の結果)が可視領域外になると問題が発生します。この場合、フィードバックバッファには可視点のみが含まれます。私が戻ってくると、そのラインは切り取られます。私はラインを元に戻したいのです。 –