glutPassiveMotionFunc и glutWarpMousePointer

Чтобы установить переменную среды в Windows, я предлагаю вам использовать команду PowerShell для ее достижения. В PowerShell вы можете просто сделать это следующим образом:

$env:ACCESS_KEY=$(az keyvault secret show -n terraform-backend-key --vault-name myKeyVault --query value -o tsv)

Кроме того, в вашей команде CLI вы не можете показать секрет напрямую, он выводит весь секрет, а не только ключ доступа, как вы хотите. Смотрите разницу между двумя командами.

enter image description here

8
задан Steven Canfield 8 April 2009 в 02:05
поделиться

5 ответов

Спасибо, aib за советы. Вы заставили меня посмотреть на разборку glutWarpPointer, и стало очевидно, что происходит. Вызов glutWarpPointer CGPostMouseEvent, который приводит к куче бессмысленных событий (и нет никакого способа пропустить их, поскольку вы получаете события мыши только один раз за кадр, новые «реальные» события будут запаздывать). Решение, которое я нашел, состоит в том, чтобы деформироваться, только когда указатель находится на краю экрана (в конце концов, цель - притворяться, будто точка никогда не достигнет края экрана). В любом случае, вот код.

int lastX = 150;
int lastY = 150;
void passivemotion( int x, int y ) {    
    int deltaX = x - lastX;
    int deltaY = y - lastY;

    lastX = x;
    lastY = y;

    if( deltaX == 0 && deltaY == 0 ) return;

    int windowX     = glutGet( GLUT_WINDOW_X );
    int windowY     = glutGet( GLUT_WINDOW_Y );
    int screenWidth     = glutGet( GLUT_SCREEN_WIDTH );
    int screenHeight    = glutGet( GLUT_SCREEN_HEIGHT );

    int screenLeft = -windowX;
    int screenTop = -windowY;
    int screenRight = screenWidth - windowX;
    int screenBottom = screenHeight - windowY;

    if( x <= screenLeft+10 || (y) <= screenTop+10 || x >= screenRight-10 || y >= screenBottom - 10) {
        lastX = 150;
        lastY = 150;
        glutWarpPointer( lastX, lastY );
        //  If on Mac OS X, the following will also work (and CGwarpMouseCursorPosition seems faster than glutWarpPointer).
        //  CGPoint centerPos = CGPointMake( windowX + lastX, windowY + lastY );
        //  CGWarpMouseCursorPosition( centerPos );
        // Have to re-hide if the user touched any UI element with the invisible pointer, like the Dock.
        //  CGDisplayHideCursor(kCGDirectMainDisplay);
    }

    curX += deltaX;
    curY -= deltaY;
}
6
ответ дан 5 December 2019 в 15:26
поделиться

Я не имею слишком большого опыта с избытком, сохраняю для примеров красной книги, но действительно ли это - вяленое мясо из-за того, что Вы тянете для курсора, или как часто Вы тянете его? Если Вы просто тянете точку, где курсор, как предполагается, использует вызовы OpenGL, это все еще судорожно? Ваш код времени мог быть проблемой?

Какой код Вы называете для обновления указателя каждая галочка? Я предполагаю, что это не код, перечисленный, поскольку Вы вычислили бы центральную точку каждый раз, вместо на изменить размер событии.

Мои извинения за то, что вслепую ответили здесь (т.е. с ограниченным опытом избытка).

0
ответ дан 5 December 2019 в 15:26
поделиться

Вы насчитываете перемещение мыши по нескольким кадрам? Я не могу найти свой код для моего предыдущего проекта, потому что я работаю. Но я думаю, что насчитал движения мыши по нескольким кадрам, прежде чем я сделал это, перемещение было очень судорожным.

0
ответ дан 5 December 2019 в 15:26
поделиться

Я предполагаю здесь, но я подозреваю, что движение является вяленым мясом, потому что курсор оттянут в функции ничьей Вашего приложения (дисплей ()), а не обработал ОС.

Нормальный указатель мыши обрабатывается на уровне драйвера XORing изображение курсора с содержанием кадрового буфера - таким образом быстрая молния, и обрабатывается с очень высоким приоритетом ОС в процедуре обработки прерывания (для поддержания иллюзии скорости отклика).

При рисовании его сами Вы подвергаетесь обычному механизму планирования своей ОС и проходите ясного постоянного клиента и перерисовываете целое окно rigamarole. В этом случае это быстро, но не с такой скоростью, как мы привыкли к с указателем мыши из-за вышеупомянутого.

Короче говоря, я не уверен, что Вы будете когда-либо заставлять это быть с такой скоростью, как Вы ожидаете, что это будет (особенно как Ваша функция дисплея, и логика приложения становится более сложной).

Удачи!

0
ответ дан 5 December 2019 в 15:26
поделиться

Может быть, потому что вы меняете буферы в окне с двойной буферизацией?

Ваш пример не ' не работает в моей системе Win32, если я не добавлю GLUT_DOUBLE в glutInitDisplayMode ().

Редактировать:

Вы правы. Вызов glutWarpPointer () из функции движения, похоже, вызывает цикл в моей системе [win32]. Таймер даже не может выстрелить, если я не нажму кнопку или еще что-нибудь. Держу пари, что очередь сообщений наводнена событиями движения.

Вызов display () прямо из функции движения, похоже, тоже не работает - на этот раз не удается зарегистрировать любое движение.

Единственный способ заставить ваш пример работать - это изменить пассивный обратный вызов движения на активный обратный вызов движения и вызвать display () непосредственно из этой функции. Я знаю, что это далеко от того, что вы изначально намеревались, но, по крайней мере, я получил плавное движение таким образом.

Вы пытались использовать glutIdleFunc () для запуска обновлений дисплея для вас? Это может все еще не работать с затопленной очередью сообщений, но это может стоить попробовать. Вы также можете изучить захват мыши с помощью вызова API вместо того, чтобы вручную перемещать курсор к центру окна при каждом движении.

Вы пытались использовать glutIdleFunc () для запуска обновлений дисплея? Это может все еще не работать с затопленной очередью сообщений, но это может стоить попробовать. Вы также можете изучить захват мыши с помощью вызова API вместо того, чтобы вручную перемещать курсор к центру окна при каждом движении.

Вы пытались использовать glutIdleFunc () для запуска обновлений дисплея? Это может все еще не работать с затопленной очередью сообщений, но это может стоить попробовать. Вы также можете изучить захват мыши с помощью вызова API вместо того, чтобы вручную перемещать курсор к центру окна при каждом движении.

0
ответ дан 5 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: