![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
В OpenGl в режиме glDisable(GL_CULL_FACE) отображаются вырожденные треугольники в стрипах, подскажите пожайлуста, как можно этого избежать.
Отображение двух сторон примитива необходимо. Добавление второй обратной геометрии не приемлимо. --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
Что такое вырожденные треугольники в стрипах?
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Bitter, Есть 2 метода для уменьшения размеров массива вершин GL_TRIANGLE_STRIP / GL_TRIANGLE_FAN . Фактически в обеих методах первые 2е вершины берутся из предыдущего треугольника. Стрип дает ленту, фан дает звезду. А вырожденные значит 3 точки на одной линии.
Magistrus, вырожденные треугольники как-то неправильно отображаются? Может им просто нужно задать правильные нормали? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
||||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Можно посчитать нормаль как среднее арифметическое 2х нормалей соседних невырожденных треугольников. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
А если вырожденных два или больше подряд?
![]() |
|||
|
||||
Magistrus |
|
||||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
Они отображаются правильно - в виде линии, но хотелось бы чтобы они не отображались вовсе. Добавлено @ 12:14
вырожденные треугольники нужны для соеденения нескольких стрипов в один, когда геометрии нельзя соеденить треугольником. Правильное отображение вырожденного треугольника это линия, соеденяющая стрипы. Это сообщение отредактировал(а) Magistrus - 27.8.2013, 12:16 --------------------
~ вот такая вот загагулина ~ |
||||
|
|||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
Magistrus, а можно скриншот? Интересно как это выглядит
|
|||
|
||||
Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
Magistrus, а можно скриншот? Интересно как это выглядит
glDisable(GL_CULL_FACE) ![]() glEnabel(GL_CULL_FACE) ![]() --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Ну гугл выдает решение с glEnable(GL_PRIMITIVE_RESTART) http://www.opengl.org/wiki/Vertex_Renderin...imitive_Restart
Т.е. не использовать вообще вырожденные треугольники. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
Ну в данном случае похоже что геометрия построена не правильно, даже используя стрип, можно построить этот прямоугольник без таких швов. Ну и в конце концов можно использовать обычный способ отрисовки треугольников, тогда таких косяков не будет.
Еще вариант, не знаю поможет ли, попробовать рисовать переднюю и заднюю часть отдельно с включенным отсечением. То есть сначала рисуем треугольниси CW потом CCW. Ну или наоборот |
|||
|
||||
Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
Геометрия поступает из внешнего источника и я ее отображаю как есть. Т.е. изменять геометрию нельзя. Я упоминал в начале темы, что добаление дополнительной геометрий не возможно, опять же из-за политики отображать все как есть. Добавлено через 6 минут и 33 секунды К сожелению это не поможет, так как вырожденные треугольники есть в исходных данных и удаление их из индексов, приводит к неправильному отображению сцены. --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Magistrus, так не просто удалять, а перезапускать стрип при помощи glEnable(GL_PRIMITIVE_RESTART) . Я сам не пробовал, но в вики пишут, что В OpenGL 3.1 как раз ввели этот механизм для устранения "дегнератов".
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
Не помогает :( ![]() да и мне нужна поддержка OpenGl 2.0 и выше Это сообщение отредактировал(а) Magistrus - 27.8.2013, 17:17 --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
Так это не дополнительная геометрия, она остается той же самой, просто рендер этой геометрии делайте два раза, первый раз с включенным отображением GL_CW, а второй раз с GL_CCW. Если я не ошибаюсь это делает функция glFrontFace Это сообщение отредактировал(а) Bitter - 27.8.2013, 17:47 |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |