OpenGL: моргает при перерисовке
Заранее спасибо!
Заранее спасибо!
А ты случайно не на ассемблере в своей операционке пишешь ?))))
А откуда ты вызываешь ф-ю вывода на экран ? И нет ли чегото в WM_PAINT ? Тоесть мне кажется что что-то дергает окно где ты рисуешь.
Блин, делаю на форме в обработчике OnPaint! Исправил, спасибо!
1) Как сделать чтоб не тормозило? Я щас использую форму развёрнутую на весь экран с параметром BorderStyle=bsNone; Может можно как то более напрямую на экран выводить? говорят ещё OpenGL по умолчанию не пользуется аппаратным ускорением, как его включить и сипользовать?
2) Мне надо чтоб на некоторых объектах выводились текстуры, а на нектороых они не нужны, а у меня проблема с тем что все следующие плоскости выводяться одним цветом.
Вот вырезка из кода:
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;
1) Как сделать чтоб не тормозило? Я щас использую форму развёрнутую на весь экран с параметром BorderStyle=bsNone; Может можно как то более напрямую на экран выводить? говорят ещё OpenGL по умолчанию не пользуется аппаратным ускорением, как его включить и сипользовать?
Быстрее, чем сделано, сделать невозможно. Так в форме всегда и рисуется. А про аппаратное ничего не слышал. Посмотри тут:
gamedev.ru
Может чего найдёшь.
По поводу кода:
1) скорее всего где-то лбо с загрузкой, либо с текстурными координатами напутал.
2) Надо отучаться ставить glBegin/glEnd. Это плохая привычка.
Нет. Это направление нормали. Типа, координаты конца, если начало: (0,0,0).
Если обрабатывать сообщение WM_PAINT как
то в конце этой обработки нужно добавлять функцию:
ValidateRect(...), для того чтобы сделать область прорисовки действительной - в этом случае не будет срабатывать бесконечный цикл прорисовки...
Если в виндах, достаточно посмотреть версию и вендора драйверов: если Microsoft и версия 1.1, то аппаратного ускорения нет, во всех остальных случаях - есть.
Все последующее выводится тем режимом, который был установлен, вплоть до его явной отмены. Так и должно быть.Если хочешь изменить цвет или текстуру, это надо сделать явно.
Если в виндах, достаточно посмотреть версию и вендора драйверов: если Microsoft и версия 1.1, то аппаратного ускорения нет, во всех остальных случаях - есть.
Все последующее выводится тем режимом, который был установлен, вплоть до его явной отмены. Так и должно быть.Если хочешь изменить цвет или текстуру, это надо сделать явно.
А я почему-то всегда думал, что аппаратное ускорение зависит от аппарата - то-есть видеокарты. Под OpenGL любую фичу видяхи можна было использовать хоть под 1.0 хоть под 2.0 стандартом, хоть под любым другим. Стандарты просто упрощают их использование. Короче, всем срочно читать про cg, arb, nv.
Вопрос к топиккастеру - а ты двойную буферизацию использовать пробовал?