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

Ваш аккаунт

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

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

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

OpenGL: моргает при перерисовке

1.2K
05 апреля 2008 года
piroman17
175 / / 20.07.2006
Как избавиться от моргания при перерисовке?
Заранее спасибо!
9.3K
05 апреля 2008 года
iridum
175 / / 26.08.2007
Цитата: piroman17
Как избавиться от моргания при перерисовке?
Заранее спасибо!



А ты случайно не на ассемблере в своей операционке пишешь ?))))

А откуда ты вызываешь ф-ю вывода на экран ? И нет ли чегото в WM_PAINT ? Тоесть мне кажется что что-то дергает окно где ты рисуешь.

34K
06 апреля 2008 года
Carbon
17 / / 21.03.2008
С WM_PAINT моргать не будет, если туда всякой дряни не понапихать. А вот если делать с VCL на форме с обработчиком OnPaint, то моргать будет точно.
1.2K
06 апреля 2008 года
piroman17
175 / / 20.07.2006
Цитата: Carbon
С WM_PAINT моргать не будет, если туда всякой дряни не понапихать. А вот если делать с VCL на форме с обработчиком OnPaint, то моргать будет точно.



Блин, делаю на форме в обработчике OnPaint! Исправил, спасибо!

1.2K
06 апреля 2008 года
piroman17
175 / / 20.07.2006
Вот ещё вопросы появились:
1) Как сделать чтоб не тормозило? Я щас использую форму развёрнутую на весь экран с параметром BorderStyle=bsNone; Может можно как то более напрямую на экран выводить? говорят ещё OpenGL по умолчанию не пользуется аппаратным ускорением, как его включить и сипользовать?
2) Мне надо чтоб на некоторых объектах выводились текстуры, а на нектороых они не нужны, а у меня проблема с тем что все следующие плоскости выводяться одним цветом.

Вот вырезка из кода:

Код:
if obj.useText then
begin
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, @Obj.TexBits);
glEnable (GL_TEXTURE_2D) ;
end;
glBegin (GL_QUADS);
if obj.useText then
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glColor4f (obj.R, obj.G, obj.B, obj.Alpha);
for j:=1 to 4 do
begin
if obj.useText then
case j of
 1 : glTexCoord2f(0.0, 0.0);
 2 : glTexCoord2f(0.0, 1.0);
 3 : glTexCoord2f(1.0, 1.0);
 4 : glTexCoord2f(1.0, 0.0);
end;
glVertex3f (obj.PaintPoints[j].x+obj.objposX+hkoor[obj.Thkoor].x, obj.PaintPoints[j].y+obj.objposY+hkoor[obj.Thkoor].y, obj.PaintPoints[j].Z+obj.objposZ+hkoor[obj.Thkoor].z);
end;
glNormal3f(obj.Normal.x,obj.Normal.y,obj.Normal.z);
if obj.useText then
 glDisable(GL_TEXTURE_2D);
glEnd;
34K
06 апреля 2008 года
Carbon
17 / / 21.03.2008
Цитата: piroman17
Вот ещё вопросы появились:
1) Как сделать чтоб не тормозило? Я щас использую форму развёрнутую на весь экран с параметром BorderStyle=bsNone; Может можно как то более напрямую на экран выводить? говорят ещё OpenGL по умолчанию не пользуется аппаратным ускорением, как его включить и сипользовать?



Быстрее, чем сделано, сделать невозможно. Так в форме всегда и рисуется. А про аппаратное ничего не слышал. Посмотри тут:
gamedev.ru
Может чего найдёшь.

По поводу кода:
1) скорее всего где-то лбо с загрузкой, либо с текстурными координатами напутал.
2) Надо отучаться ставить glBegin/glEnd. Это плохая привычка.

1.2K
06 апреля 2008 года
piroman17
175 / / 20.07.2006
Вот тут ещё вопрос: для нормальной работы света нужно задавать нормали, координаты нормали x,y,z это координаты её конца, а начало лежит на плоскости?
34K
07 апреля 2008 года
Carbon
17 / / 21.03.2008
Цитата: piroman17
Вот тут ещё вопрос: для нормальной работы света нужно задавать нормали, координаты нормали x,y,z это координаты её конца, а начало лежит на плоскости?



Нет. Это направление нормали. Типа, координаты конца, если начало: (0,0,0).

397
07 апреля 2008 года
SergPas
527 / / 03.02.2007
Цитата:
С WM_PAINT моргать не будет, если туда всякой дряни не понапихать. А вот если делать с VCL на форме с обработчиком OnPaint, то моргать будет точно.


Если обрабатывать сообщение WM_PAINT как
 
Код:
procedure Paint(var msg: TMessage); message WM_PAINT;

то в конце этой обработки нужно добавлять функцию:
ValidateRect(...), для того чтобы сделать область прорисовки действительной - в этом случае не будет срабатывать бесконечный цикл прорисовки...
1.9K
07 апреля 2008 года
andriano
474 / / 10.01.2008
Есть аппаратное ускорение или нет, определяется драйверами.
Если в виндах, достаточно посмотреть версию и вендора драйверов: если Microsoft и версия 1.1, то аппаратного ускорения нет, во всех остальных случаях - есть.
Все последующее выводится тем режимом, который был установлен, вплоть до его явной отмены. Так и должно быть.Если хочешь изменить цвет или текстуру, это надо сделать явно.
255
08 апреля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: andriano
Есть аппаратное ускорение или нет, определяется драйверами.
Если в виндах, достаточно посмотреть версию и вендора драйверов: если Microsoft и версия 1.1, то аппаратного ускорения нет, во всех остальных случаях - есть.
Все последующее выводится тем режимом, который был установлен, вплоть до его явной отмены. Так и должно быть.Если хочешь изменить цвет или текстуру, это надо сделать явно.



А я почему-то всегда думал, что аппаратное ускорение зависит от аппарата - то-есть видеокарты. Под OpenGL любую фичу видяхи можна было использовать хоть под 1.0 хоть под 2.0 стандартом, хоть под любым другим. Стандарты просто упрощают их использование. Короче, всем срочно читать про cg, arb, nv.

Вопрос к топиккастеру - а ты двойную буферизацию использовать пробовал?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог