![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Пытаюсь нарисовать окружности через OpenGL. Сейчас код выглядит примерно вот так:
Окружность рисуется, но линии не сглаженные получаются. Хочу добиться отрисовки почти как в Qt (слева): ![]() Как это можно сделать в OpenGL? Если добавляю сразу после glLineWidth(2.0) еще и glEnable(GL_LINE_SMOOTH), то вообще получается фигня: |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
-------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
К сожалению, это ничего не дает. Если только это написать, то как в первом рисунке. Если добавить еще glEnable(GL_LINE_SMOOTH), то как на втором. Это я все на работе запускаю, видео у меня GeForce 2 MX 400. Может быть из-за видеокарты не сглаживает? Дома на ноутбуке, кажется, видео intel G945. Там тоже самое. Может кто-нибудь показать, как это в сглаженном виде выглядит? Еще нашел пример из qtdemo, Sample Buffer, но он не запускается. Пишет, что система не поддерживает sample buffer. Через sample buffer тоже можно сглаживать? Присоединённый файл ( Кол-во скачиваний: 43 )
gl_circle.zip 1,84 Kb |
||||
|
|||||
| Shuravi |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.11.2003 Репутация: нет Всего: нет |
рисуя примитивы, как менять цвет линий, не затрагивая при этом цвет заливки?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
В примере кода используется самописный алгоритм рисования окружности - чтоб получилось сглаживание надо дорабатывать алгоритм и требовать, чтоб это за Вас сделала библиотека просто нереально , потому как библиотека не в курсе, что за алгоритм Вы реализуете Добавлено через 4 минуты и 45 секунд
в опенгл? выбрать цвет, нарисовать заливку фигуры, поменять цвет и нарисовать линии. в Qt (wxWidgets, WinApi и т.д) для рисования заливки используется кисть (..Brush) , а для контура Карандаш (..Pen) Добавлено через 8 минут и 41 секунду попробуй посмотреть тут : http://alglib.sources.ru/graphics/ Это сообщение отредактировал(а) mes - 10.7.2008, 17:37 |
|||
|
||||
| Quartz |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 28.6.2008 Репутация: нет Всего: 4 |
Как-то так должно быть
|
||||||
|
|||||||
| Supersedes |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 29.7.2008 Репутация: нет Всего: нет |
Привет. Все что тебе надо, это включить прозрачность при помощи glEnable( GL_BLEND ); и glBlendFunc(...);
Вот кусок моего кода:
|
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Shuravi, рисовать сначала полигоны одним цветом, потом менять его и рисовать линии.
Supersedes, При чём тут смешивание? Этот эффект называется antialising. А если смотреть стандартные средства и почитать перевод красной книги OpenGL на progz.ru, то найдёте вот это - http://www.progz.ru/articles.php?view=56 - пункт 6.2 И ещё вот это - http://www.progz.ru/articles.php?view=52 - пункт 10.3.1 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Спасибо огромное!! Добавил в инициализацию эти строки, сейчас вот так рисуется: ![]() Буду разбираться, как это оно так работает |
||||
|
|||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Тут скорее "glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );", а не смешивание виновато.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Если убрать вот эти строки:
то получится вот так: ![]() Кстати, а почему при использовании blending на разных компьютерах (видеокартах/платформах) все начинает выглядеть по разному? Дома на ноутбуке (intel 945G) в winXP все линии получились толще, а в линуксе (openSUSE 11.0) все гораздо тоньше? Еще в линуксе размеры сглаженных точек не меняются почему-то... Это такая разная (кривая?) поддержка OpenGL в драйверах или я что-то не так делаю? Если действительно поддержка OpenGL такая разная, то как тогда можно написать приложение, чтобы оно везде одинаково отрисовывало объекты? |
||||
|
|||||
| Supersedes |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 29.7.2008 Репутация: нет Всего: нет |
При том, что Antialiasing линий добивается при помощи прозрачности или как ты говоришь смешивании!
Нет, тут скорее всего виноваты те, кто ничего толком не знает и тем не менее пытается что-то доказать. Например такие как ты. Проверь. Это работает. Факт остается фактом. |
||||
|
|||||
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Понятия прозрачности впринципе не существует в OpenGL. Есть понятие "смешивания". Даже то что ты делаешь glEnable(GL_BLEND) - blend - смешивать. Попробуйзадать макимальную непрозраночсть через тот же glColor4ub - у тебя всё равно объект будет прозрачным. Вообщем-то и какаху можно зашвырнуть, а потом крикнуть: смотри - "оно" умеет летать. Вы сами не понимаете что пишите, а просто тыкаете. Об этом свидетельствует хотя бы одно то, что вот эти строки вы запихали при рендеринге каждого кадра, а не при инициализации:
А теперь, дорогой мой, расскажите мне что значит каждая из этих строк. Понимаешь, иногда делаешь и вроде работает правильно, а потом когда глубже копнёшь - понимаешь, что написанное реализует совсем другую задачу и сходство лишь внешне. Это сообщение отредактировал(а) Rickert - 4.8.2008, 12:07 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| Supersedes |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 29.7.2008 Репутация: нет Всего: нет |
Ээээ... Это вообще к чему?
Я написал так, чтобы легче было понять, а не для того чтобы программа работала быстрее. Вот когда речь пойдет об оптимизации, тогда у тебя будет возможность блестнуть умом.
Можно. И оно действительно будет летать если кидать будет то кто знает, а не догадывается.
Просто, дорогой мой, перед тем как ответить на эту тему а заглянул в API справочник, посмотрел в гугле пару раз что и как, конце концов быстренько написал программу в которой добился того чего хотел. А доказывать я тебе ничего не собираюсь.
Если ты можешь привести код, который будет в данном случае правильней и проще моего, то я действительно буду приятно удивлен твоими познаниями. Я так понял этим ты хотел сказать то, что я написал сам не знаю что??! |
||||||||||
|
|||||||||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Вот вы мне лучше подскажите, почему так по разному отображается все через opengl.
WinXP + Geforce MX400: ![]() WinXP + Intel 945G: ![]() openSUSE 11.0 + Intel 945G: ![]() Хотя код для инициализации один и тот же:
Как при таком различии можно что-то аккуратно отобразить с помощью opengl? Что же я не так делаю все-таки? |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |