Полосы прокрутки. MFC OpenGL
Сразу еще один момент: какие будут мысли преобразования координат? В OpenGL координата 0,0 находится в центре окна программы и изменяется от -1 до 1 как по вертикали так и по горизонтали и не зависит от размера окна. Координаты курсора окна отсчитываются от верхнего левого угла окна... вот... Подскажите плз... Исходник прикрепил. Посмотрите если не затруднит. Заранее благодарен.
не совсем правильно врубился что тебе надо.
Если я правильно понял, то тебе надо
сделать что-то вроде скролинга.
Ну я для этих целей вырезку использую (SCISSOR).
Как саму прокрутку организовать зависит что тебе
надо сделать, универсальный способ я виде у
NeHe, но нефига не врубился как он пашет,
поэтому когда надо стало делать прокрутку я
для себя свой способ придумал, вот:
(я выложу всю свою функцию DrawGLScene, а то что
нужно прокоментирую)
int BaveGUI:: DrawGLScene(GLvoid)
{
unsigned short dy = 0; //смещение для прокрутки
unsigned short num; //число строк.
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -6.0f);
glBindTexture(GL_TEXTURE_2D, TEX_ID(1));
glCallList(MODEL_ID(0));
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glColor3f(0.7f, 1.0f, 0.2f);
glPrint(40, 570, 0,"GUI Tools. v.0.10.0.1");
glPrint(40, 546, 0,"(C) 2005 Bave.");
num = gui_tools.GetNumExWin();
/*Не учитывается desktop поэтому num - 1, а loop + 1;*///
glPrint(30, 480, 0,
"Num of executing obj's = %d", num - 1);
gui_tools.GetExWinName();
//Дальше задаётся область вырезки.
glScissor(30, int(0.230416f*gdi_args.sheight), gdi_args.swidth - 450,
int(0.8897916f*gdi_args.sheight));
glEnable(GL_SCISSOR_TEST);//Разрешить вырезку.
for(int loop = gdi_args.scroll;loop < num;loop++)
{
if (strlen(gui_tools.ExWndList[loop].str) > 0)
{
glPrint(32, (460 - dy), 1, "%d %s", (loop +1), gui_tools.ExWndList[loop].str);
dy+=20;
}
else
{
glPrint(32, (460 - dy), 1,
"%d NoNamed Executing Object", (loop + 1));
dy+=20;
}
}
glDisable(GL_SCISSOR_TEST);//отключить вырезку
delete [] gui_tools.ExWndList;
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
glColor3f(1.0f, 1.0f, 1.0f);
glBindTexture(GL_TEXTURE_2D, TEX_ID(2));
glCallList(MODEL_ID(1));
return TRUE;
}
Короче, весь смысл в том, что когда вырезка
включена, все что бы ты ты ни делал в
функции DrawGLScene, будет
проявлять себя только в пределах ограниченных
вырезкой.