3

ウィンドウでopenGLを使用して絵を描きました。ウィンドウ上でマウス ボタンを押したまま移動すると、画像が常に歪んでしまいます。ウィンドウの移動中に画像を再描画するのに役立つopenGLの機能がわかりません。誰でも助けることができますか?

私はこれを試しましたが、うまくいかないようです:

void myDisplay()
{
   .....
}

void reshape(int x, int y)
{
   glutPostRedisplay();
}

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutReshapeFunc(reshape);
}
4

3 に答える 3

3

最初の (そして通常は唯一の) 必要なステップは、glut の使用をやめることです。glut は主に静的な表示を生成することを目的としているため、変更を蓄積し、ウィンドウのサイズ変更が完了したときなど、状態が再び「安定」したときにのみ再描画を試みます。それはかつては理にかなっていましたが、ほとんどの場合、もはや意味がありません。

glut が最後に更新されてから約 10 年が経過していることを考えると、時代遅れの設計目標はほとんど驚くべきことではありません。それは、あなたが望むことが起こらないように注意深く書かれているという事実を変えません. 必要に応じて、期待に合うように書き直すこともできますが、必要なことを行うように設計された別のもの (または少なくとも必要なものに近いもの) を使用する方がほぼ確実です。

于 2010-03-21T13:56:28.683 に答える
2

glutIdleFunc 関数を追加

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutIdleFunc(myDisplay);
   glutReshapeFunc(reshape);
}
于 2010-11-03T16:58:29.467 に答える
0

私にとってうまくいった解決策は、WM_MOUSEMOVE で MoveWindow を呼び出した後に InvalidateRect/RedrawWindow 関数の実行をスキップすることでした (私は glut を使用していません)。通常、すべてのマウス/キーボード イベントの後に InvalidateRect(wnd,0,0) を実行するのは理にかなっていますが、MoveWindow の後にそれを呼び出すと、ウィンドウの内容が「遅れて」ドラッグされます。

于 2011-03-24T04:30:36.313 に答える