![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 08.10.2009
Сообщений: 112
|
![]()
О, великие мозги форумчанинов! Помогите начинающему опенджиэлцу, но не новичку в делфи. Проблема вот в чём: захотел я научиться строить и двигать объекты в OpenGL. Построил я два куба путём два раза по шесть glbegin(GL_QUAD). Да вот только когда кубы друг друга перекрывают (не пересекают), начинается мерцание на них. Бегают полоски. Я сделал обычный дельфинский таймер на 41 мсек, по которому вызываю onpaint. Doublebuffered вообще оставляет любоваться только на чёрный фон. Код нужен? Или так подскажете? Что делать то...
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 52
|
![]()
SwapBuffers(dc) в конце функции отрисовки вызываешь ?
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 08.10.2009
Сообщений: 112
|
![]()
Вот весь код обработки onpaint:
Код:
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]() |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 52
|
![]() Код:
она как раз вызывает запуск OnPaint. и это Код:
Перед тем как извлекать что-то из стека матриц (glPopMatrix), нужно сначала туда что-то положить (glPushMatrix). |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 08.10.2009
Сообщений: 112
|
![]()
ну я функции opengl почти не знаю, я ток первый день учу его
InvalidateRect(Handle, nil, False); и glPopMatrix; убрал. мерцание на перекрытиях исчезло. зы: Somebody, это не Z-fighting, который появляется на пересечении объектов в одной плоскости. я же говорил, кубы не пересекаются. но остались где то в секунду интервалом проблёскивающиеся горизонтальные полосы на всей области прорисовки. ну оч хотелось бы узнать как от них избавиться. скорее всего что то не дописал. заскринить полосы не могу, слишком уж редко появляются. теперь код таков: Код:
Код:
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
можете показать как инициировали GL может там что?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 52
|
![]()
сделай так
Код:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); после glViewport(0, 0, ClientWidth, ClientHeight); Последний раз редактировалось Develop; 29.06.2010 в 23:49. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 08.10.2009
Сообщений: 112
|
![]()
Develop, скорее всего в это и дело. Проверю позже, пока 3d не очень требуется. Убрав refresh из таймера и используя 2d никакого мерцания не возникает. Спасибо. Теперь новая проблема
![]() эээ...ошибся...возникает. Develop, сделал всё как ты сказал. мерцание на прямоугольнике. теперь только реже. вот вам то, чем я оперирую. зы: это изменённый исходник от учебника.
procedure life; for years := 1 to 11 do gotoschool(normal); woman := TMan.add; childrens.add(TMans); problems.add(fuck); woman.destroy; END.
Последний раз редактировалось saggy; 30.06.2010 в 14:17. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 52
|
![]()
Код не смотрел, но там может быть другая проблема.
У тебя картинка перерисовывается каждые 41 мсек, это 24,4 кадра в сек. Может не совпадать с частотой обновления экрана. Включи вертикальную синхронизацию или поменяй интервал на таймере. Последний раз редактировалось mihali4; 19.11.2010 в 19:52. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Мерцание Image | Жека-старший | Компоненты Delphi | 4 | 23.05.2010 19:36 |
Мерцание | vladi | Microsoft Office Excel | 0 | 03.06.2009 17:42 |
Мерцание на Канве | SERG1980 | Мультимедиа в Delphi | 3 | 30.04.2008 08:14 |
мерцание | shad0w | Общие вопросы C/C++ | 3 | 11.12.2007 12:31 |