из-за изменения glOrtho мой обратный вызов мыши не работает.Зачем? - PullRequest
0 голосов
/ 15 сентября 2018

если glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0), значит мой код работает.Но если я перехожу на glOrtho(0.0, 800.0, 0.0, 600.0, -1.0, 1.0), тогда мой код не работает.Возможно, обратный вызов мыши не работает.Изменение glOrtho является попыткой обратного вызова мыши?Я не знаю, в чем проблема.

Вот мой код:

GLfloat myVertices[10][2];          
GLfloat Width = 800.0;      
GLfloat Height = 600.0;
GLint count = 0;

void Mouse(int button, int state, GLint x, GLint y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        myVertices[count][0] = x / Width;
        myVertices[count][1] = (Height - y) / Height;
        count++;         

        drawScene();      
    }
}

GLvoid drawScene()                                  
{
    GLint index;

    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1, 0, 0); 
    glPointSize(3.0f); 
    glEnableClientState(GL_VERTEX_ARRAY);     
    if (count > 0)
    {
        for (index = 0; index < count; index++)
        {
            glRectf(myVertices[index][0], myVertices[index][1], myVertices[index][0] + 0.01, myVertices[index][1] + 0.05);
            //glRectf(myVertices[index][0], myVertices[index][1], myVertices[index][0]+50, myVertices[index][1]+50);
        }
    }

    glFlush();                              
}

1 Ответ

0 голосов
/ 15 сентября 2018

Ваш обратный вызов мыши работает как прежде.Ваши координаты просто не имеют особого смысла:

    myVertices[count][0] = x / Width;
    myVertices[count][1] = (Height - y) / Height;

Это приведет к значениям в [0,1], что означает, что все они будут лежать в нижнем левом пикселе экрана, когда вы применяете идеальный пиксельортопроекция, когда вы ее настраиваете.

...