Кто бы мог подумать, что физика становится настолько интересной, когда находишь ей применение на практике, а не думаешь о ней в скучной теории.
Всё ещё экспериментирую с
ссылка на канал | ссылка на группу
Всё ещё экспериментирую с
QueryPerformanceCounter, разбираюсь с частотой и периодом, думаю, какие единицы измерения выбирать основными и как переводить такты во время и наоборот.ссылка на канал | ссылка на группу
👍1
Вроде, с обёрткой над
Время получаю в наносекундах.
Замерил время, сколько по факту будет работать
Получились очень точные
Жаль, такой способ с
ссылка на канал | ссылка на группу
QueryPerformanceCounter разобрался.Время получаю в наносекундах.
Замерил время, сколько по факту будет работать
Sleep(1500 ms) (разрешение системного таймера увеличено с помощью timeBeginPeriod(1 ms)).Получились очень точные
1500 ms.Жаль, такой способ с
timeBeginPeriod работает по-разному на разных версиях операционной системы windows, особенно на серверной.ссылка на канал | ссылка на группу
Когда программа почему-то начинает вылетать каждый нечётный раз или после добавления всего одной кнопки, где-то есть ошибка или undefined behavior и приходится долго сидеть-искать в отладчике источник проблем.
Где-то вылез за границы массива, где-то увеличил размер динамической памяти вместо (size * sizeof(Block)) на просто (size)...
Количество локальных переменных в окне отладчика просто пугает.
Хорошо, что есть контрольные значения, куда можно добавить только нужные переменные.
ссылка на канал | ссылка на группу
Где-то вылез за границы массива, где-то увеличил размер динамической памяти вместо (size * sizeof(Block)) на просто (size)...
Количество локальных переменных в окне отладчика просто пугает.
Хорошо, что есть контрольные значения, куда можно добавить только нужные переменные.
ссылка на канал | ссылка на группу
А это способ определить, используя события winAPI, какой последовательный COM порт был подключён или отключен.
WM_DEVICECHANGE
DBT_DEVICEARRIVAL
DBT_DEVICEREMOVECOMPLETE
DEV_BROADCAST_PORT_A
ссылка на канал | ссылка на группу
WM_DEVICECHANGE
DBT_DEVICEARRIVAL
DBT_DEVICEREMOVECOMPLETE
DEV_BROADCAST_PORT_A
ссылка на канал | ссылка на группу
Устаревшая реализация (deprecated implementation).
Новая реализация с исправлением ошибок
...
Функция
Например, когда число приходит в диапазоне от -128 до 127 (int8_t) и его нужно преобразовать в диапазон от 0 до 599 (высота окна в пикселях).
Нужно просто написать:
ссылка на канал | ссылка на группу
Новая реализация с исправлением ошибок
...
Функция
intMap нужна, чтобы сдвинуть, сжать или расширить числовой диапазон.Например, когда число приходит в диапазоне от -128 до 127 (int8_t) и его нужно преобразовать в диапазон от 0 до 599 (высота окна в пикселях).
Нужно просто написать:
int64_t value { 0 };
intMap(&value, -128, 127, 0, 599);
ссылка на канал | ссылка на группу
Media is too big
VIEW IN TELEGRAM
Проверка работы моей реализации слайдера.
Можно двигать список как ползунком, так и колёсиком мыши.
В зависимости от количества кнопок в списке меняется размер ползунка.
Если кнопки полностью помещаются в высоту списка, слайдер пропадает.
Панель чёрного цвета это область, где будет рисоваться график.
ссылка на канал | ссылка на группу
Можно двигать список как ползунком, так и колёсиком мыши.
В зависимости от количества кнопок в списке меняется размер ползунка.
Если кнопки полностью помещаются в высоту списка, слайдер пропадает.
Панель чёрного цвета это область, где будет рисоваться график.
ссылка на канал | ссылка на группу
This media is not supported in your browser
VIEW IN TELEGRAM
Не знаю, что там лежит за левой границей массива, но это очень похоже на двоичную арифметику).
ссылка на канал | ссылка на группу
ссылка на канал | ссылка на группу
Этот код составляет строку для отладочного экрана.
Выглядит массивно и страшно).
Будет интересно узнать, сколько времени, тактов процессора или ассемблерных инструкций нужно, чтобы выполнить этот код.
А потом переписать, используя свои строковые функции и замерить снова.
Благодаря проекту, я запросто сделаю динамические строки.
ссылка на канал | ссылка на группу
Выглядит массивно и страшно).
Будет интересно узнать, сколько времени, тактов процессора или ассемблерных инструкций нужно, чтобы выполнить этот код.
А потом переписать, используя свои строковые функции и замерить снова.
Благодаря проекту, я запросто сделаю динамические строки.
ссылка на канал | ссылка на группу
Вчера я решил в программе вместо GetTickCount использовать таймер высокого разрешения, но почему-то всё перестало работать.
В отладчике оказалось, что таймер возвращает текущее время в виде отрицательного количества наносекунд, что не нормально.
Оказалось, всё дело в переполнении.
И я нашёл способ, как решить эту проблему и получить правильное значение.
ссылка на канал | ссылка на группу
В отладчике оказалось, что таймер возвращает текущее время в виде отрицательного количества наносекунд, что не нормально.
Оказалось, всё дело в переполнении.
И я нашёл способ, как решить эту проблему и получить правильное значение.
ссылка на канал | ссылка на группу
Это реализация библиотеки chrono в msvc, а именно
Я недавно сделал обёртку над QPC/QPF и столкнулся с ошибкой переполнения типа
Что я недавно сделал, разработчики microsoft уже давно придумали и реализовали даже с комментариями в коде).
ссылка на канал | ссылка на группу
std::chrono::high_resolution_clock::now().Я недавно сделал обёртку над QPC/QPF и столкнулся с ошибкой переполнения типа
int64_t, спустя вечер реализовал алгоритм, который практически никогда не столкнётся с переполнением.Что я недавно сделал, разработчики microsoft уже давно придумали и реализовали даже с комментариями в коде).
ссылка на канал | ссылка на группу
Если кому-то действительно понадобится моя реализация функции
ссылка на канал | ссылка на группу
timeNow, таймера высокого разрешения (получение времени с точностью до 100 наносекунд), я выложу код на github, а пока и картинки хватит).frequency и tick хотелось бы сделать const, но я не знаю, как инициализировать const переменную non-const значением из функции без лямбды или создания дополнительных функций.ссылка на канал | ссылка на группу
Я сейчас задумываюсь о том, какие улучшения сделать в модуле Input (он хранит и обрабатывает ввод и события с клавиатуры и мыши).
Если вы уже разрабатывали игру или программу или только задумывались об этом, какие бы данные вам могли понадобиться?
Например, чтобы реализовать взаимодействие с графическим пользовательским интерфейсом (GUI), нужно знать координаты курсора (cursorPosition).
Чтобы реализовать перемещение элементов интерфейса курсором, например, виртуальных окошек, нужно знать на сколько пикселей он сдвинулся относительно значения в предыдущем кадре — дельту курсора (cursorMove).
Но для перемещения камеры cursorMove не подойдёт.
Это неточный способ, на него действует акселерация windows, а так же область движения будет ограничена размером экрана или окна.
Для более точного движения камеры без ограничений я использую raw input, это сырые данные без обработки напрямую с мыши, клавиатуры и не только.
Назвал эту переменную mouseMove.
ссылка на канал | ссылка на группу
Если вы уже разрабатывали игру или программу или только задумывались об этом, какие бы данные вам могли понадобиться?
Например, чтобы реализовать взаимодействие с графическим пользовательским интерфейсом (GUI), нужно знать координаты курсора (cursorPosition).
Чтобы реализовать перемещение элементов интерфейса курсором, например, виртуальных окошек, нужно знать на сколько пикселей он сдвинулся относительно значения в предыдущем кадре — дельту курсора (cursorMove).
Но для перемещения камеры cursorMove не подойдёт.
Это неточный способ, на него действует акселерация windows, а так же область движения будет ограничена размером экрана или окна.
Для более точного движения камеры без ограничений я использую raw input, это сырые данные без обработки напрямую с мыши, клавиатуры и не только.
Назвал эту переменную mouseMove.
ссылка на канал | ссылка на группу
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Ударил по столу и появились такие помехи на мониторе.
Прикольный эффект, я бы хотел повторить его, используя openGL.
ссылка на канал | ссылка на группу
Прикольный эффект, я бы хотел повторить его, используя openGL.
ссылка на канал | ссылка на группу
🔥1