私はGLFWを使用しています。ウィンドウのサイズを変更すると、マウスの位置が次のように返されます。
int x,y;
glfwGetMousePos(&x,&y);
画面に描かれたオブジェクトと相関しないようにします。サイズ変更関数として使用しているものは次のとおりです。
void GLFWResizefunc(int width, int height){
glViewport(0, 0, width, height);
}
ボタンでこの問題に最初に気付き、クリックしてもボタンがアクティブにならなくなりました。
さらに情報が必要な場合は、お気軽にお問い合わせください。何が必要かわかりませんでした。
derhass の質問に対する回答:
ボタンの場合、次のように表示しています。
void Button::render() {
glEnable (GL_TEXTURE_2D);
if(!clicked){
glBindTexture (GL_TEXTURE_2D, *tex);
}
else{
glBindTexture(GL_TEXTURE_2D,*pressed);
}
glBegin (GL_QUADS);
glTexCoord2f (0.0, 0.0);
glVertex2f (getsx(), getsy());
glTexCoord2f (1.0, 0.0);
glVertex2f (getSxmax(), getsy());
glTexCoord2f (1.0, 1.0);
glVertex2f (getSxmax(), getSymax());
glTexCoord2f (0.0, 1.0);
glVertex2f (getsx(), getSymax());
glEnd();
glDisable (GL_TEXTURE_2D);
t.render();
}
t.render は、別のオブジェクトであるボタン上のテキストのレンダリングを指します。各ボタンには、画面 x、y 最大画面 x、y の sx、sy、sxmax、および sy max があります。ボタンがマウス クリックと交差するかどうかを確認するには、返された int を渡します。
int x,y;
glfwGetMousePos(&x,&y);
次の関数に:
bool ScreenObject::intersects (float x, float y) {
std::cout<<"X: "<<x<<"Y: "<<y<<" BX: "<<getsx()<<"BY: "<<getsy()<<std::endl;
if (x > getsx() && x < getSxmax() ) {
if (y > getsy() && y < getSymax() )
return true;
}
return false;
}
true を返す場合、オブジェクト (この場合はボタン) と交差します。
私は以下を使用しています:
glFrustum (.5, -.5, -.5 * aspect_ratio, .5 * aspect_ratio, 1, 50);
glMatrixMode (GL_MODELVIEW);