PMG

Форумы по созданию игр
Текущее время: 13 сен 2026 18:14

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Выделение с помощью мыши
СообщениеДобавлено: 22 апр 2008 16:50 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Ув. спецы по ОЖЛ. Обращаюсь к вам с таким вопросом:
Вот код из Петзольда для работы с мыщью:
Код:
case WM_LBUTTONDOWN :
               ptBeg.x = ptEnd.x = LOWORD (lParam) ;
               ptBeg.y = ptEnd.y = HIWORD (lParam) ;

               DrawBoxOutline (hwnd, ptBeg, ptEnd) ;

               SetCapture (hwnd) ;
               SetCursor (LoadCursor (NULL, IDC_CROSS)) ;

               fBlocking = TRUE ;
               return 0 ;

          case WM_MOUSEMOVE :
               if (fBlocking)
                    {
                    SetCursor (LoadCursor (NULL, IDC_CROSS)) ;

                    DrawBoxOutline (hwnd, ptBeg, ptEnd) ;

                    ptEnd.x = LOWORD (lParam) ;
                    ptEnd.y = HIWORD (lParam) ;

                    DrawBoxOutline (hwnd, ptBeg, ptEnd) ;
                    }
               return 0 ;

          case WM_LBUTTONUP :
               if (fBlocking)
                    {
                    DrawBoxOutline (hwnd, ptBeg, ptEnd) ;

                    ptBoxBeg   = ptBeg ;
                    ptBoxEnd.x = LOWORD (lParam) ;
                    ptBoxEnd.y = HIWORD (lParam) ;

                    ReleaseCapture () ;
                    SetCursor (LoadCursor (NULL, IDC_ARROW)) ;

                    fBlocking = FALSE ;
                    fValidBox  = TRUE ;

                    InvalidateRect (hwnd, NULL, TRUE) ;
                    }
               return 0 ;

          case WM_CHAR :
               if (fBlocking & wParam == '\x1B')       // i.e., Escape
                    {
                    DrawBoxOutline (hwnd, ptBeg, ptEnd) ;
                    ReleaseCapture () ;
                    SetCursor (LoadCursor (NULL, IDC_ARROW)) ;

                    fBlocking = FALSE ;
                    }
               return 0 ;

          case WM_PAINT :
               hdc = BeginPaint (hwnd, &ps) ;

               if (fValidBox)
                    {
                    SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;
                    Rectangle (hdc, ptBoxBeg.x, ptBoxBeg.y,
                                    ptBoxEnd.x, ptBoxEnd.y) ;
                    }

               if (fBlocking)
                    {
                    SetROP2 (hdc, R2_NOT) ;
                    SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
                    Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;
                    }

               EndPaint (hwnd, &ps) ;
               return 0 ;

Можно ли подобное организовать в ОЖЛ? В частности, вопрос стоит в выделении части картинка с помощью мыши


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 23 апр 2008 08:28 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Можно, конечно, если рисовать в ортогрофоической проекции с помощью прямоугольников.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 23 апр 2008 11:03 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Цитата:
...если рисовать в ортогрофоической проекции с помощью прямоугольников

Ув. MagicWolf подскажите как это сделать как в винде: рисуется только контур прям. области, а затем удаляется и как получить затем значения пикселей под контуром. glRect* рисует закрашенную область...
А при использовании винд-функции Rectangle происходит мерцание прямоугольника - с чем это может быть связано, подскажите?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 24 апр 2008 08:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Увы, не совсем понял тебя. Что сделать в винде? В винде это имеется ввиду WinAPI, т.е. GDI?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 24 апр 2008 11:56 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Да, MagicWolf, реализовать выборку части картинки в окне OGL, как это реализовано в GDI. В примере, приведенном мною, рисуется контур прямоугольника, размеры которого определяются положением мыши при удержании и передвижении ее. Вот я и спрашиваю, есть ли вожможность реализовать это в окне OGL, когда в 2D-окне вывидена картинка с помощью glDrawPixel, и я хочу вырезать часть этой картинки, используя мышу, отмечая необходимый кусок контуром. Вот как это реализовать, подскажите, please.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 25 апр 2008 10:52 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
glReadPixels, по аналогии с glDrawPixels. Конкретного примера увы нет, но можно найти.

Copying from the screen is a slow operation. Using glCopyTexImage() is better than using
glReadPixels()/glTexImage(), and glCopyTexSubImage() is even better, but they still may cause
a performance bottleneck if you’re making heavy use of them for texture generation. There are a
couple of extensions that provide faster alternatives, but they are beyond the scope of this book.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 25 апр 2008 11:58 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Цитата:
Конкретного примера увы нет, но можно найти.

Можете подсказать хоть в каком направлении искать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 25 апр 2008 12:51 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Вот нашел:
glBindTexture(GL_TEXTURE_2D, tex_id);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, x, y, w, h);
//glReadPixels ( x, y, w, h, format, type, pixels );

x,y - положение на экране; w,h - размер

В данном случае копируется с текущего буфера в текстуру.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 25 апр 2008 14:53 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Спасибо большое, MagicWolf!
Т.е glReadPixels ( x, y, w, h, format, type, pixels ); копирует выделеный участок знач. пикселов изображения в массив pixels?
Но мне еще нужна это(блин!) наглядность с мышаком...
Подскажите, где мне можно поискать об этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 28 апр 2008 08:51 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Ipkis писал(а):
Т.е glReadPixels ( x, y, w, h, format, type, pixels ); копирует выделеный участок знач. пикселов изображения в массив pixels?


Ipkis писал(а):
Но мне еще нужна это(блин!) наглядность с мышаком...
Подскажите, где мне можно поискать об этом.


Что значит наглядность? Выделение? Типа рамочка?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 28 апр 2008 13:08 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Я так подумал, мне кажется, что тебе стоит прочитать http://pmg.org.ru/nehe/nehe32.htm - Урок 32. Выбор, альфа смешивание, альфа тест, сортировка. Там как раз про ортографическую проекцию.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 29 апр 2008 12:18 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Спасибо, MagicWolf.
Почитаем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 05 май 2008 18:30 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Да, прикольный урок! Да и все тут уроки класные!
Великое дело сделал,MagicWolf! Уважуха тебе в веках :)

Да мне действительно нужно выделение типа рамочка, по аналогии с GDI... А в 32-м уроке, разве, это описывается?
Там прсто рисует тукстуру, как я понял, в точке, указанной мышаком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 06 май 2008 09:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Мне кажется тебе практически тоже самое и надо. В OGL желательно рисовать текстурами. Вот я подумал, что если нарисовать в текстуре рамочку (с прозрачностью) и ее выводить, то вроде как желаемый эффект будет достигнут. А в 32 уроке как раз что-то подобное.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделение с помощью мыши
СообщениеДобавлено: 06 май 2008 14:33 
Не в сети
Любитель

Зарегистрирован: 22 апр 2008 16:26
Сообщения: 40
Может(скорее) я что-то не понимаю...
В 32-м уроке выводится прицел(или можно прямоугольник) с жосткими, зарание известными размерами и в одной точке, где мышак кликнет. А мне необходимо как делает Paint, когда выделяет часть картинки...

Тут, еще вопросик: мышак правильно ли определяет значения пикселей тоесть GL-окно начинается с правого нижнего угла, а винда с правого верхнего?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB