私は、ユーザーがクリックして左(強度を下げる)または右(強度を上げる)にドラッグすることで、単純なウィンドウの背景色を調整できる単純なOpenGLアプリケーションに取り組んでいます。たとえば、右にドラッグすると、次のようになります。
intensity += 0.0001*x; //where x is the current mouse location
...そして左側、反対の方法:
intensity -= 0.0001*x;
intensity
glClearColor
は、複数回呼び出されるdisplay関数で渡されるグローバル静的GLfloatです。この戦略は、ユーザーが右にドラッグしているときに色を濃くするとうまく機能しますが、左にドラッグすると特定のポイントの後で混乱します。ドラッグすると色が弱くなり、本来のように黒に戻りますが、その後濃くなります。元の色。
問題は、ドラッグしすぎると強度(0から1の間)が負になりglClearColor
、符号を正(?)に戻すだけで問題が解決することだと思います。その場合、渡された値がglClearColor
適切な範囲内にとどまるように強制するにはどうすればよいですか?現在の強度が負にならないようにすることで問題を解決しようとしました/それがすでに低すぎる場合は調整が行われませんが、うまくいかなかったようです:
if(x <= xPrev && intensity >= (.0001*x)) //moving left to de-intensify color
intensity -= 0.0001*x;
...これを間違って行っているのでしょうか、それともglClearColor
負の値を予想とは異なる方法で処理しているのでしょうか。
浮かび上がったもう1つの興味深い問題は、私の「強度」調整がr、g、および/またはb値でのみ機能するように見えることです(つまり、「強度」をの値の1つとして渡しglClearColor
ます。値の使用は機能しませんでした...しかし、それは色の強度を変えることになっていないのですか?