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 */


⇐ вернуться назад | | далее ⇒