我正在使用 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);