我正在使用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。要检查按钮是否与鼠标点击相交,我将通过以下方式传递ints:
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);