![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
evilguard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Запутался немного. Делаю небольшую программку по 3д-моделированию(узкоспециализированную). Она у меня строит 3х-мерную поверхность(по сути ландшафт), либо сама генерирует ее либо загружает из файла. Строит она ее с помощью GL_QUAD_STRIP. Есть также примитивный обзор. Вначале я 1 раз ее строю с помощью glVertex, а затем в функции OnDraw (использую MFC) только устанавливаю положение камеры, которое может изменяться при помощи мыши. OnDraw, как я понимаю то же самое что и IdleFunc? Но я еще видел реализации, где туда же засовывают не только функции для работы с камерой, но и заново строят поверхность. Как правильно?
|
|||
|
||||
Arks |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Прога рисует правильно? Ресурсов жрёт мало? Тогда забей
![]() Серьёзно теперь: OnDraw и OnIdle разные вещи. OnDraw - событие, вызываемое, когда надо отрисовать форму: например, при изменении размеров или перекрытии части её другим окном. OnIdle - вызывается, когда обработаны все события и в очереди сообщений, таковых больше нет - т.е. во время простоя программы. Строить заново пов-сть или нет - что ты имеешь ввиду? Вывоз функций - glVertex? Если так, то да. Их надо вызывать каждый кадр, чтобы что-то нарисовать. Хочешь экономить на этом, то используй дисплейные списки glDisplaList или VBO (Vertex Buffer Object - статический, GL_STATIC_DRAW). |
|||
|
||||
evilguard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Arks
вот именно, что я 1 раз рисую какую-то поверхность(glVertex), а потом только изменяю положение камеры с glLookAt(), которую вызываю как раз в OnDraw. Все работает, просто не уверен в правильности подхода. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 2 Всего: 43 |
перерисвоывать нужно только когда действительно нужно перерисовать
![]() Согласись, что onIdle -это не тот случай. |
|||
|
||||
evilguard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
DENNN
Дело в том, что я брал из книжки заготовку приложения под MDI. Там нету onIdle. Есть OnDraw. Вот листинг ее:
Мой код - связанный с положением камеры, остальное взял из заготовки. Рисую я только 1 раз, когда загружаю данные из файла. Это сообщение отредактировал(а) evilguard - 7.12.2006, 22:18 |
|||
|
||||
Arks |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
to DENN:
OnIdle - когда требуется частая прорисовка, с хорошим фпс. А то анимация тормозить будет. Если же её нет, то и вправду можно забить. to evilguard: Ну так у тебя сцена перерисовывается с помощью glCallList. Так что всё нормально. Т.к., как я пониаю, сцена статичная. |
|||
|
||||
evilguard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 19.11.2006 Репутация: нет Всего: нет |
Arks
Да, сцена статическая. А функцию glCallList() я и не учел (я взял готовый исходник, разобрался только как рисовать). Значит буду копать по функциям опенГЛ. Спасибо! |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |