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

Re: Баг - диагональные линии (OpenGL + Delphi)
Добавлено: 26 авг 2008, 22:04
AXS
Ну так что? Ни у кого нет мыслей по поводу этого мегабага?

Re: Баг - диагональные линии (OpenGL + Delphi)
Добавлено: 27 авг 2008, 10:14
Игорь Акопян
в качестве бреда: может драйвера? может видеокарты?
Re: Баг - диагональные линии (OpenGL + Delphi)
Добавлено: 27 авг 2008, 10:23
AXS
Игорь Акопян писал(а):в качестве бреда: может драйвера? может видеокарты?
- Было проверено на нескольких машинах.
- Проставлял свежие дрова с оф.сайта.
- Другие программы на 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]
ниасилил

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