Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Интеграция OpenGL

311
02 марта 2009 года
plastictown
309 / / 08.01.2006
Привет всем!
Возможно ли скрестить OpenGL и MFC, чтобы вместо отдельного окна выводить графику в клиентскую часть окна MFC-шного приложения?
Можно ли получить описатель окна, создаваемого OpenGL Utility Toolkit (glutCreateWindow("Text"); )?
1.9K
03 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: plastictown
Привет всем!
Возможно ли скрестить OpenGL и MFC, чтобы вместо отдельного окна выводить графику в клиентскую часть окна MFC-шного приложения?
Можно ли получить описатель окна, создаваемого OpenGL Utility Toolkit (glutCreateWindow("Text"); )?



Можно, причем есть несколько вариантов:
1. Установить область вывода функцией glViewport()
2. Создать на форме нечто типа TPanel (я к сожалению не знаком с MFC), короче что-нибудь имеющее дескриптор окна, и настроить вывод OpenGL на этот дескриптор.
Лучше, на мой взгляд, второй вариант.

1.9K
04 марта 2009 года
andriano
474 / / 10.01.2008
Проблема одна: для OpenGL наиболее естественным режимом является двойная буферизация, а WinGUI этот режим не поддерживает. Следовательно, весьма вероятны всяческие артефакты типа мерцания изображения в тех местах, где перекрываются фрагменты OpenGL и WinGUI.
311
04 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: GreenRiver
Можно, причем есть несколько вариантов:
1. Установить область вывода функцией glViewport()
2. Создать на форме нечто типа TPanel (я к сожалению не знаком с MFC), короче что-нибудь имеющее дескриптор окна, и настроить вывод OpenGL на этот дескриптор.
Лучше, на мой взгляд, второй вариант.



В файле gl.h функция glViewport (GLint x, GLint y, GLsizei width, GLsizei height); вот такая. И ни слова про окно. По-моему, она нужна для выбора отображаемой области, но окно уже должно быть выбрано.

Я попробовал такую вещь:

 
Код:
glutCreateWindow("fghfhghhhfghfg");
HWND hWnd=FindWindow(NULL,"fghfhghhhfghfg");
ну вроде того


Хендл, вроде, получается, при отправке WM_QUIT окно благополучно закрывается. Но ничего более сделать не вышло. Хотел, в общем-то, контролов положить на это окно.
1.9K
04 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: plastictown
В файле gl.h функция glViewport (GLint x, GLint y, GLsizei width, GLsizei height); вот такая. И ни слова про окно. По-моему, она нужна для выбора отображаемой области, но окно уже должно быть выбрано.


Все Ваши беды из-за того, что вы пользуетесь glut-функцией. Стандартный метод инициализации OpenGL позволяет выбрать на какой Handle выводить картинку. К сожалению нет книги подсмотреть как это все надо сделать.

Начал гуглить и нашел вот что: MFС и OpenGL

311
04 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: GreenRiver
Все Ваши беды из-за того, что вы пользуетесь glut-функцией. Стандартный метод инициализации OpenGL позволяет выбрать на какой Handle выводить картинку. К сожалению нет книги подсмотреть как это все надо сделать.

Начал гуглить и нашел вот что: MFС и OpenGL



Дело в том, что GLUT весьма удобная библиотека в ней много функций, которые заменяют предыдущие. Поэтому для работы с OpenGL без GLUT придется многое учить. А у меня как раз есть книжка Френсиса Хилла "OpenGL Программирование компьютерной графики", которая полностью построена на использовании GLUT. Но раз другого выбора нет, придется копать недра Интернета. Спасибо за ссылку!

311
04 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: andriano
Проблема одна: для OpenGL наиболее естественным режимом является двойная буферизация, а WinGUI этот режим не поддерживает. Следовательно, весьма вероятны всяческие артефакты типа мерцания изображения в тех местах, где перекрываются фрагменты OpenGL и WinGUI.



Сделал, как написано в firststeps (см. ссылку выше), все отлично работает, OpenGL рисует в диалоговом окне. Положил кнопку сверху, оную сильно начало плющить по всем сторонам. Однако, весело:)

14
05 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: plastictown
Положил кнопку сверху, оную сильно начало плющить по всем сторонам. Однако, весело:)


Ну это нормально. Для OpenGL окна "не такие" создаются. Необычные. И для контролов как бы не предназначены..

1.9K
05 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: Phodopus
Ну это нормально. Для OpenGL окна "не такие" создаются. Необычные. И для контролов как бы не предназначены..


Поэтому я и предлагаю сделать обычную форму с контролами, а там где надо выводить картинку - разместить контрол с хендлом и выводить на него.
У меня так вывод происходит на TPanel - работает как часы.

311
05 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: GreenRiver
Поэтому я и предлагаю сделать обычную форму с контролами, а там где надо выводить картинку - разместить контрол с хендлом и выводить на него.
У меня так вывод происходит на TPanel - работает как часы.



Где в VS искать TPanel я не знаю, но можно попробовать CStstic, он вроде как тоже окно или изгадить любой другой контрол. Но. честно говоря, мигающая кнопка меня тоже вполне устраивает:) Тем более, что в примере из firststeps.ru как раз и говорится про обычную форму, только нужно обновлять контролы на ней после каждого кадра.

7
06 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Протестировал выложенный "по просьбе трудящихся":D пример.У меня кнопку не плющит.Вообще никак
Оная как была кнопкою,так ею и осталась.Может,у автора какое-то отличие от других систем?Лично у меня всё нормально
311
14 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: @pixo $oft
Протестировал выложенный "по просьбе трудящихся":D пример.У меня кнопку не плющит.Вообще никак
Оная как была кнопкою,так ею и осталась.Может,у автора какое-то отличие от других систем?Лично у меня всё нормально



Вероятно, днло в том, что я пишу и тестирую на довольно медленной машине, на более современном железе подобных вещей не замечается.

7
14 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Моё "современное" железо 2005го года покупки: AMD Sempron 3100+(разогнан с 1.8 до чуть больше 2 ГГц),512/256 Мб оперативки/видео.Какое у тебя?
311
14 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: @pixo $oft
Моё "современное" железо 2005го года покупки: AMD Sempron 3100+(разогнан с 1.8 до чуть больше 2 ГГц),512/256 Мб оперативки/видео.Какое у тебя?




1500 GHz, 224/64 MB

9
14 марта 2009 года
Lerkin
3.0K / / 25.03.2003
Да прекращайте вы уже на железо грешить...
311
14 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: Lerkin
Да прекращайте вы уже на железо грешить...



А на кого еще грешить, когда на одной машине кнопка дергается, а на другой нет? Приложение одно и тоже.

9
14 марта 2009 года
Lerkin
3.0K / / 25.03.2003
А грешить ни на кого не надо. Ты что, серьёзно думаешь, что "посадил" полторагигагерцовый камень такой примитивной задачей? На очень схожей конфигурации (не знаю, какая видеоплатка у тебя), задачи решались куда более масштабные.

P.S. Само собой, на супернавороченной железке за 2-3 куска зелени любая куйня дергаться не будет (что, вообщем, спорно).
5
15 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: plastictown
А на кого еще грешить, когда на одной машине кнопка дергается, а на другой нет? Приложение одно и тоже.

У вас неправильная настройка графического устройства для такого сценария использования: переключение контекста между OpenGL (RC) и GDI (hDC) для отрисовки кнопки приводит к нехилой задержке. Если использовать программную реализацию OpenGL, то мерцания можно избежать. Но конечно, еще есть зависимости от ОС и видеокарты.

З.Ы. Да с этой задачей у меня еще 550МГц селерон с 2МБ видяхой на ура справлялся. Нда, народ совсем железо ни во что не ставит...

311
15 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: hardcase
У вас неправильная настройка графического устройства для такого сценария использования: переключение контекста между OpenGL (RC) и GDI (hDC) для отрисовки кнопки приводит к нехилой задержке. Если использовать программную реализацию OpenGL, то мерцания можно избежать. Но конечно, еще есть зависимости от ОС и видеокарты.

З.Ы. Да с этой задачей у меня еще 550МГц селерон с 2МБ видяхой на ура справлялся. Нда, народ совсем железо ни во что не ставит...



Да я тоже думаю, что ежели все это правильно организовать, то все должно работать правильно и красиво. Всомнить даже приставочку SEGA, в которой 7MHz и 512 вроде бы КБ видеопамяти. Так и она картинки нехило рисовала. Дело только в том, что правильно органзовать я не умею и к тому же стоит ли столько мучиться за зачет по физике?-)

5
15 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: plastictown
Дело только в том, что правильно органзовать я не умею и к тому же стоит ли столько мучиться за зачет по физике?-)


Ну, многие вещи и в Excel можно при правильном подходе решить.

Моя девушка в Excel вращающийся земной шар с континентами как-то сделала.

311
15 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: hardcase

Моя девушка в Excel вращающийся земной шар с континентами как-то сделала.



Респект девушке!:)

311
15 марта 2009 года
plastictown
309 / / 08.01.2006
После долгих раздумий о мерцающей кнопке пришла в голову правильная мысль - сделать в новом потоке диалог и все контролы положить на него.:D
311
15 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: Lerkin
Ты что, серьёзно думаешь, что "посадил" полторагигагерцовый камень такой примитивной задачей?



Не, я просто не знаю, че оно так, вот и думаю всякое.

311
23 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: Lerkin
Ты что, серьёзно думаешь, что "посадил" полторагигагерцовый камень такой примитивной задачей?



Я действительно начал думать, что сделал это, потому что обнаружил, что сделал таймер, обновляющий картинку и все прочее, с частотой 1000Hz. :)

311
26 марта 2009 года
plastictown
309 / / 08.01.2006
Положил в Исходники результаты мучений. Называется "Измерение скорости тела методом баллистичечкого маятника".
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог