Страница 1 из 1

Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 13 янв 2008, 15:45
AXS
Никак не могу разобраться с непонятными диагональными линиями появляющимися при рисовании полигонов (что с GL_QUADS, что с GL_POLYGON). Проверял на разных компах - везде результат один (скриншот и исходник прикреплён)
PS: Кстати на некоторых компах линии не появляются, но тогда не сглаживаются края полигонов при GL_FILL :confused:

Очень большая просьба помочь, а то не могу я работать пока есть эти линии... :(

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 26 авг 2008, 22:04
AXS
Ну так что? Ни у кого нет мыслей по поводу этого мегабага? :confused:

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 27 авг 2008, 10:14
Игорь Акопян
в качестве бреда: может драйвера? может видеокарты?

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 27 авг 2008, 10:23
AXS
Игорь Акопян писал(а):в качестве бреда: может драйвера? может видеокарты?
  1. Было проверено на нескольких машинах.
  2. Проставлял свежие дрова с оф.сайта.
  3. Другие программы на OpenGL работают без этого бага и со старыми дровами.
Я думаю что то в коде - поэтому и выложил исходники.

Человек решивший эту проблему навсегда станет для меня героем... :)

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 01 сен 2008, 12:15
Игорь Акопян
в качестве совета - отключить всё лишнее. Оставить только воспроизводимый кусок.
Навскидку почему-то правая сторона заливающего треугольника не сглаживается (?).
(кстати у меня тормозит аццки, да и перерисовывать всё же надо только панель)

ЗЫ. GL вижу впервые, так что не глумицца :)

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 01 сен 2008, 15:27
somewhere
Вообще вариантов может быть несколько, как в зависимости от железа так и от ПО. На своей машине встроенный адаптер Intel 82865G тест прошел удачно без диагональных линий, однако удалось достичь их появления зарубив ускорение DirectDraw через dxdiag. В последнем случае прорисовка текстур начала выполнятся програмным способом, начались жуткие тормоза и линии появились, т.к. OpenGL и DirectDraw завязаны напрямую. Полностью отключив аппаратное ускорение в "свойствах экрана" колиство линий на плоскость увеличилось до 3 (!), наверняка это связано с багами програмной прорисовки. Наверное в вашем случае прорисовка програмная, диагональная линия есть результат работы алгоритма, в частности разбиение текстуры на два треугольника. Вообще функцию трансформирования текстуры, т.е. ее преобразование в плоский четырехугольник с произвольными вершинами, современные адаптеры поддерживают все на аппаратном уровне так как это основная графическая функция. Совсем другое дело - интерфейс обмена аппаратной части и програмной. В програмной оснастке DirectX есть определенный стандарт и он поменялся начиная с 7-ой версии. Как известно современные видеоадаптеры имеют аппаратную реализацию очень многих функций DX и это тот случай когда железо идет вслед за ПО, что касается OGL - то это уже другая ветка, не очень популярная. Поскольку обмен между аппаратной частью и Direct3D а также OpenGL выполняется через драйвер адаптера и базовые функции DirectDraw, то OpenGL и DirectX после 7 версии могли иметь разные протоколы обмена с адаптером и как результат OGL просто не знает что адаптер может выполнять рендеринг текстуры сам, а вот DirectX знает. Возможно этим и объясняется тормоза и присутствие линий на современных и плавная, правильная работа на старых или встроенных адаптерах. В плане советов, первый
отключить всё лишнее. Оставить только воспроизводимый кусок.
2) Помудрить с опциями, многие нерешаемые проблемы часто решаются банально, что то вроде SetOpenGlideWithDXCompatableMode(1) ;)
3) Постаратся использовать DX по возможности, на данный момент имеет поддержку, сильно дорабатывается, баги всегда фиксятся. OGL только для примитивов.

Re: Баг - диагональные линии (OpenGL + Delphi)

Добавлено: 02 сен 2008, 10:28
Игорь Акопян
в частности:
[syntax='delphi']
glBegin(GL_POLYGON);
// glNormal3f(0,-1,0);
glTexCoord 2d (5.0, 8.0);
glVertex3f(-2000,StrToInt(SEditV.Text)/2*-1,-2000);
glTexCoord2d (5.0, 16.0);
glVertex3f(2000,StrToInt(SEditV.Text)/2*-1,-2000);
glTexCoord2d (10.0, 16.0);
glVertex3f(2000,StrToInt(SEditV.Text)/2*-1,2000);
glTexCoord2d (10.0, 8.0);
glVertex3f(-2000,StrToInt(SEditV.Text)/2*-1,2000);
glEnd;
[/syntax]

ниасилил :) тут, имхо, грабли. Мысль пошла в сторону "полигоны вроде обрамляются сеткой линий, а надо ли? а сглаживаются ли они?"