
В оптомеханической мыши используется диск с отверстиями и пара светодиод-фотодиод для определения перемещения мыши (рис. 4.2).

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

При этом липни одного направления имеют один цвет (обычно синий), а линии другого направления другой (обычно черный). Когда мышь перемещают по подложке, свет, излучаемый двумя светодиодами заданных цветов, отражается от соответствующих линий и попадает в фотодиоды, передавая тем самым информацию о перемещении мыши (рис. 4.3).
Для достижения некоторой унификации каждая мышь поставляется обычно вместе со своим драйвером - специальной программой, понимающей данный конкретный тип мыши и предоставляющей некоторый (почти универсальный) интерфейс прикладным программам. При этом вся работа с мышью происходит через драйвер, который отслеживает перемещения мыши, нажатие и отпускание кнопок мыши и обеспечивает работу с курсором мыши - специальным маркером на экране (обычно в виде стрелки), дублирующим все передвижения мыши и дающим возможность пользователю указывать мышью на те или иные объекты на экране.
Работа с мышью реализуется через механизм прерываний. Прикладная программа осуществляет прерывание 33h, передавая в регистрах необходимые параметры, и в регистрах же получает значения, возвращенные драйвером мыши.
Приводим набор функций для работы с мышью в соответствии -со стандартом фирмы Microsoft (ниже приведены используемые файлы Mouse.h и Mouse.срр).
(2) // File Mouse.h
#ifndef __MOUSE_ #define __MOUSE__
#include "point.h"
#include Teeth"
// mouse event flags
#define MOUSE_MOVE_MASK 0x01
#define MOUSE_LBUTTON_PRESS 0x02
#define MOUSE_LBUTTON_RELEASE 0x04
#define MOUSE_RBUTTON_PRESS 0x08
#define MOUSE_RBUTTON_RELEASE 0x10
#define MOUSE_MBUTTON_PRESS 0x20
#define MOUSE Jv1BUTTON__RELEASE 0x40
#define MOUSE_ALL_EVENTS 0x7F