case 3: // перспективная проекция glFrustum(l,r,b,t,n, f); break;
//. . .
default: // перспективная проекция GetClientRect(hwnd, Srect) ; gluPerspective(45.Of, rect.right/
((!rect.bottom)?1:rect.bottom) , 1, 500.0) ;
}
// выбор стека выдовых матриц glMatrixMode(GL_MODELVIEW); glLoadldentity();
// инициализация буфера выбора select_size=100 ; select=new uint[select_size]; glSelectBuffer(select_size,select);
// инициализация буфера обратной связи feedback_size=200; feedback=new float[feedback_size]; glFeedbackBuffer(feedback_size,GL_3D,feedback);
void GLmain::resize()
{
// получение размеров клиентской области окна RECT rect;
GetClientRect(hwnd,&rect);
// установка области вывода в окно glViewport(0,0,rect.right,rect.bottom);
}
#endif
Файл winput.h
Содержит класс для обработки ввода с клавиатуры и мыши в среде Windows.
#ifndef _BASE_input_
#define _BASE_input_
// класс, сохраняющий ввод виртуальных клавиш struct BASE_input {
int vkeys[256]; // массив состояний клавиш int mousepos[2]; // текущие координаты мыши int mkeys[3]; // состояние клавиш мыши int mkey; // код последней нажатой клавиши мыши // код последней нажатой виртуальной клавиши int vkey;
int ascii; // ascii код последней нажатой клавиши void (*user_input)(WPARAM,LPARAM,UINT);
// сохранить состояние клавиш
void save_keystate(WPARAM,LPARAM,UINT);
virtual void keyinput(WPARAM,LPARAM,UINT);
BASE_input()
{user_input=0; ascii=-l; vkey=-l; mkey=-l;}
} ;
void BASE_input::save_keystate(WPARAM wp,
LPARAM lp,UINT state)
{
switch (state)// сохраняем состояние клавиш {
case WM_KEYDOWN: vkey=wp; vkeys[wp]=1; break;
case WM_KEYUP: vkeys[wp]=0; break; case WM_CHAR: ascii=wp; break;
case WM_LBUTTONDOWN: mkeys[0]=l; mkey=0; break; case WM_LBUTTONUP: mkeys[0]=0; break; case WM_MBUTTONDOWN: mkeys[l]=l; mkey=l; break; case WM_MBUTTONUP: mkeys[l]=0; break; case WM_RBUTTONDOWN: mkeys[2]=l; mkey=2; break; case WM_RBUTTONUP: mkeys[2]=0; break; case WM_MOUSEMOVE: mousepos[0]=LOWORD(lp) ;
mousepos[1]=HIWORD(1p); break;
}
}
void BASE_input: :keyinput(WPARAM wp,LPARAM lp,
UINT state)
(
save_keystate(wp,lp, state) ;
if(user_input)user_input(wp, lp, state) ;
}
#endif
/* коды некоторых виртуальных клавиш
Символьные клавиши 0x30 - 0x39 клавиши 0-9 0x41 - 0x5а клавиши А - Z можно использовать как if(in.vkey=='A')
Клавиши на числовой клавиатуре (numeric keypad) VK_NUMPAD0 - VK_NUMPAD9 0x60 - 0x69 цифры на 0 - 9 VK_MULTIPLY знак умножения VK_ADD знак сложения VK_SUBTRACT знак вычитания VK_DIVIDE знак деления Мышь
VK_LBUTTON 01 левая клавиша мыши VK_RBUTTON 02 правая клавиша мыши VK_MBUTTON 04 средняя клавиша VK_XBUTT0N1 05 XI клавиша мыши VK_XBUTTON2 Об Х2 клавиша мыши Разное
VK_F1 - VK_F24 0x70 - 0x87 клавиши FI - F24
VK_ESCAPE Oxlb клавиша ESC
VK_END 0x23 клавиша END
VK_HOME 0x24 клавиша HOME
VK_LEFT 0x25 клавиша стрелка влево
VK_UP 0x2 6 клавиша стрелка вверх
VK_RIGHT 0x27 клавиша стрелка вправо
VK_DOWN 0x28 клавиша стрелка вниз
VK SELECT 0x29 SELECT key
VK_SPACE пробел VK_LSHIFT OxaO левый шифт VK_RSHIFT Oxal правый шифт VK_LCONTROL 0xa2 левая клавиша Ctrl VK_RCONTROL ОхаЗ правая клавиша Ctrl VK_RETURN OxOD клавиша ENTER VK_SHIFT 0x10 клавиша SHIFT VK_CONTROL 0x11 клавиша Ctrl VK_MENU 0x12 клавиша Alt */