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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
AXS
Сообщения: 3
Зарегистрирован: 13 янв 2008, 15:18
Контактная информация:

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

Очень большая просьба помочь, а то не могу я работать пока есть эти линии... :(
Вложения
MyDemoOpenGL.zip
(34.6 КБ) 31 скачивание
mdoscrn.JPG
mdoscrn.JPG (41.07 КБ) 142 просмотра
AXS
Сообщения: 3
Зарегистрирован: 13 янв 2008, 15:18
Контактная информация:

Ну так что? Ни у кого нет мыслей по поводу этого мегабага? :confused:
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

в качестве бреда: может драйвера? может видеокарты?
Изображение
AXS
Сообщения: 3
Зарегистрирован: 13 янв 2008, 15:18
Контактная информация:

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

Человек решивший эту проблему навсегда станет для меня героем... :)
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

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

ЗЫ. GL вижу впервые, так что не глумицца :)
Изображение
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Вообще вариантов может быть несколько, как в зависимости от железа так и от ПО. На своей машине встроенный адаптер 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 только для примитивов.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

в частности:
[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]

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