Интеграция OpenGL
Возможно ли скрестить OpenGL и MFC, чтобы вместо отдельного окна выводить графику в клиентскую часть окна MFC-шного приложения?
Можно ли получить описатель окна, создаваемого OpenGL Utility Toolkit (glutCreateWindow("Text"); )?
Возможно ли скрестить OpenGL и MFC, чтобы вместо отдельного окна выводить графику в клиентскую часть окна MFC-шного приложения?
Можно ли получить описатель окна, создаваемого OpenGL Utility Toolkit (glutCreateWindow("Text"); )?
Можно, причем есть несколько вариантов:
1. Установить область вывода функцией glViewport()
2. Создать на форме нечто типа TPanel (я к сожалению не знаком с MFC), короче что-нибудь имеющее дескриптор окна, и настроить вывод OpenGL на этот дескриптор.
Лучше, на мой взгляд, второй вариант.
1. Установить область вывода функцией glViewport()
2. Создать на форме нечто типа TPanel (я к сожалению не знаком с MFC), короче что-нибудь имеющее дескриптор окна, и настроить вывод OpenGL на этот дескриптор.
Лучше, на мой взгляд, второй вариант.
В файле gl.h функция glViewport (GLint x, GLint y, GLsizei width, GLsizei height); вот такая. И ни слова про окно. По-моему, она нужна для выбора отображаемой области, но окно уже должно быть выбрано.
Я попробовал такую вещь:
HWND hWnd=FindWindow(NULL,"fghfhghhhfghfg");
ну вроде того
Хендл, вроде, получается, при отправке WM_QUIT окно благополучно закрывается. Но ничего более сделать не вышло. Хотел, в общем-то, контролов положить на это окно.
Все Ваши беды из-за того, что вы пользуетесь glut-функцией. Стандартный метод инициализации OpenGL позволяет выбрать на какой Handle выводить картинку. К сожалению нет книги подсмотреть как это все надо сделать.
Начал гуглить и нашел вот что: MFС и OpenGL
Начал гуглить и нашел вот что: MFС и OpenGL
Дело в том, что GLUT весьма удобная библиотека в ней много функций, которые заменяют предыдущие. Поэтому для работы с OpenGL без GLUT придется многое учить. А у меня как раз есть книжка Френсиса Хилла "OpenGL Программирование компьютерной графики", которая полностью построена на использовании GLUT. Но раз другого выбора нет, придется копать недра Интернета. Спасибо за ссылку!
Сделал, как написано в firststeps (см. ссылку выше), все отлично работает, OpenGL рисует в диалоговом окне. Положил кнопку сверху, оную сильно начало плющить по всем сторонам. Однако, весело:)
Ну это нормально. Для OpenGL окна "не такие" создаются. Необычные. И для контролов как бы не предназначены..
Поэтому я и предлагаю сделать обычную форму с контролами, а там где надо выводить картинку - разместить контрол с хендлом и выводить на него.
У меня так вывод происходит на TPanel - работает как часы.
У меня так вывод происходит на TPanel - работает как часы.
Где в VS искать TPanel я не знаю, но можно попробовать CStstic, он вроде как тоже окно или изгадить любой другой контрол. Но. честно говоря, мигающая кнопка меня тоже вполне устраивает:) Тем более, что в примере из firststeps.ru как раз и говорится про обычную форму, только нужно обновлять контролы на ней после каждого кадра.
Оная как была кнопкою,так ею и осталась.Может,у автора какое-то отличие от других систем?Лично у меня всё нормально
Оная как была кнопкою,так ею и осталась.Может,у автора какое-то отличие от других систем?Лично у меня всё нормально
Вероятно, днло в том, что я пишу и тестирую на довольно медленной машине, на более современном железе подобных вещей не замечается.
1500 GHz, 224/64 MB
А на кого еще грешить, когда на одной машине кнопка дергается, а на другой нет? Приложение одно и тоже.
P.S. Само собой, на супернавороченной железке за 2-3 куска зелени любая куйня дергаться не будет (что, вообщем, спорно).
У вас неправильная настройка графического устройства для такого сценария использования: переключение контекста между OpenGL (RC) и GDI (hDC) для отрисовки кнопки приводит к нехилой задержке. Если использовать программную реализацию OpenGL, то мерцания можно избежать. Но конечно, еще есть зависимости от ОС и видеокарты.
З.Ы. Да с этой задачей у меня еще 550МГц селерон с 2МБ видяхой на ура справлялся. Нда, народ совсем железо ни во что не ставит...
З.Ы. Да с этой задачей у меня еще 550МГц селерон с 2МБ видяхой на ура справлялся. Нда, народ совсем железо ни во что не ставит...
Да я тоже думаю, что ежели все это правильно организовать, то все должно работать правильно и красиво. Всомнить даже приставочку SEGA, в которой 7MHz и 512 вроде бы КБ видеопамяти. Так и она картинки нехило рисовала. Дело только в том, что правильно органзовать я не умею и к тому же стоит ли столько мучиться за зачет по физике?-)
Ну, многие вещи и в Excel можно при правильном подходе решить.
Моя девушка в Excel вращающийся земной шар с континентами как-то сделала.
Моя девушка в Excel вращающийся земной шар с континентами как-то сделала.
Респект девушке!:)
Не, я просто не знаю, че оно так, вот и думаю всякое.
Я действительно начал думать, что сделал это, потому что обнаружил, что сделал таймер, обновляющий картинку и все прочее, с частотой 1000Hz. :)