0

我正在使用 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 指的是按钮上的文本的渲染,它是一个单独的对象。每个按钮都有 sx、sy、sxmax 和 sy max 用于屏幕 x,y 最大屏幕 x,y。要检查按钮是否与鼠标单击相交,我正在传递返回的整数:

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);
4

0 回答 0