Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нормали + Группы сглаживания, OpenGL, 3ds 
:(
    Опции темы
SkIv1989
Дата 1.1.2010, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Всем привет, делаю тут курсовую, сделал машинку в максе, сделал экспорт в 3ds, когда загружаю в OpenGL, то получается не совсем то что нужно (см. аттач). Как видно там не сглаженная поверхность все кубиками, я так понимаю это из-за того, что мои нормали считаются для всех вершин, а нужно еще как-то учитывать группы сглаживания информация о которых хранится в чанке 4150, не подскажете как посчитать нормали с учетом этих групп?


Присоединённый файл ( Кол-во скачиваний: 62 )
Присоединённый файл  1.jpg 94,16 Kb
PM MAIL   Вверх
Alexeis
Дата 1.1.2010, 18:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Похоже на то что нормали совсем неправильно считаются.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SkIv1989
Дата 2.1.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



сделал экспорт в *.obj (там информация о нормалях хранится) результат чуток получше, но всеравно все квадратиками:

Присоединённый файл ( Кол-во скачиваний: 50 )
Присоединённый файл  2.jpg 85,56 Kb
PM MAIL   Вверх
Rickert
Дата 2.1.2010, 18:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Неверные значения нормалей. Напишите код, который их будет выводить, чтобы оценить ошибку.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
SkIv1989
Дата 2.1.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



вот, нарисовал нормали:

Присоединённый файл ( Кол-во скачиваний: 56 )
Присоединённый файл  3.jpg 234,57 Kb
PM MAIL   Вверх
Rickert
Дата 3.1.2010, 07:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Как мы можем оценить: нормали просчитаны верно. А значит ошибка в том, что изначально была одна нормаль для одной вершины, а теперь у вас вершин больше, а нормали новым вершинам не назначены. Как это может быть? Представим два треугольника, имеющие две общие вершины.
Всего получается 4 точки, если работать через индексы. А теперь разобьем эти треугольники на два независимых: получится что у нас уже не 4 вершины, а 6: и нормали теперь нужны для 6, а не 4. Т.е. те что были + 2 те что стали принадлежать каждому треугольнику в отдельности. Они конечно будут одинаковыми, но скорее всего ваша ошибка  в том что вы их просто не назначили.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
SkIv1989
Дата 3.1.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



ура, спасибо Rickert, теперь осталось разобраться с группами сглаживания, буду благодарен если кто-нибудь подкинет информацию как с ними работать:

Присоединённый файл ( Кол-во скачиваний: 66 )
Присоединённый файл  4.jpg 78,31 Kb
PM MAIL   Вверх
shuttle
Дата 12.1.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Может там просто нормали в противоположную сторону смотрели
--------------------
PM MAIL   Вверх
gorby
Дата 30.1.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.3.2008
Где: Киев

Репутация: нет
Всего: нет



Представьте себе куб.
В виде меша он будет иметь 6 граней. Каждая грань представлена 2-мя треугольниками.
Так вот сглаживать нужно только те треугольники, что принадлежат одной грани. Они и будут в одной группе сглаживания.
PM MAIL WWW Skype   Вверх
Rickert
Дата 30.1.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Я никогда не слышал про группы сглаживания. Про просто сглаживание нормалей - это дело известное. Мы берём значение нормали вершины и делим на количество треугольников, которым она принадлежит.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Shtorm
Дата 19.10.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.2.2009
Где: Таганрог

Репутация: нет
Всего: 1



Было б хорошо если примерчик свой выложил, я бы хоть понял как сглаживание победить, а то сколько не читаю, наверное всё между строк. Так же читаю из 3ds файла данные, знаю как отрисовывать, посчитать нормали тоже могу и всё бы хорошо, но как сглаживание то сделать, а то у меня всё как-то не выходит. Нормали стандартно вычисляю по масиву Vertex. Картинка в атаче.


Присоединённый файл ( Кол-во скачиваний: 37 )
Присоединённый файл  _______.JPG 11,00 Kb
PM MAIL ICQ   Вверх
Merlin_ua
Дата 14.11.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 22.11.2006

Репутация: нет
Всего: нет



SkIv1989
А можно поподробней как ты нормали рассчитывал? Я как-то в свое время искал подходящий алгоритм для расчета нормалей (кстати, использовал тоже импорт в 3ds), ничего подходящего не нашол. Все трвердят, что  нормали нужно экспортить.

Shtorm
Может поможет. Насколько я разобрался в том, как происходит экспорт в 3ds, у меня сложилось следующее впечатление: нормали вершин принадлежащих ребру грани где используется сглаживание усредняются. Там где сглаживание не используется - нормали перпендикулярны фейсам. Если вершина принадлежит разным фейсам, и нужна нормаль для каждого фейса - такая вершина дублируеся. Поэтому нужно прогонять все вершины и проверять с помощью индексов скольким фейсам принадлежит вершина. Если вершина принадлежит только одному фейсу - нормаль будет перпендикулярна фейсу. Если вершина принадлежит нескольким фейсам - расчитывается усредненная нормаль.
PM MAIL   Вверх
Shtorm
Дата 15.11.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.2.2009
Где: Таганрог

Репутация: нет
Всего: 1



Я подумаю над тем что ты предложил. Может чего придумаю. Вообще нормали в формат *.ASE экспортятся, при экспорте галочку только ставить надо. Но 3ds меньше на много весит, чем ASE? скорее всего связано с тем, что экспорт происходит как есть всего, ну кроме конечно текстур, для текстур портится путь к ней. Посмотри может что накопаешь полезного, ASE это обычный текстовый файл.
Посмотреть хотелось бы на код, кто как отрисовывает с использованием групп сглаживания при использование 3ds файла.... Ну или реализованый примерчик, что тут разгребали, хорошая помощь бы была тем кто только начинает заниматься подобными вещами, что б лишних тем не генерили.
PM MAIL ICQ   Вверх
BlackCrow
Дата 24.1.2011, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Merlin_ua дак а чего там считать берешь вершину, берешь попарно ребра и считаешь векторное произведение, помоему так. Потом все нормали которые принадлежат одной вершине "усредняешь" как писал выше Rekert
Rikert, группы сглаживания это такая штука, которая используется для создания ребер, т.е. есть у тебя шар и надо тебе что бы на экваторе было ребро, назначаешь двум полушариям различные группы сглаживания и тогда для каждой точки на экваторе будет по две нормали, вроде так. 

Это сообщение отредактировал(а) BlackCrow - 24.1.2011, 18:18
PM MAIL   Вверх
Merlin_ua
Дата 26.2.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 22.11.2006

Репутация: нет
Всего: нет



Цитата

BlackCrow


Оно то так, но мне интересна сама реализация. И во еще: нужно еще учитывать и группы сглаживания. Может возникнуть такая ситуация: два ребра на двух разных фейсах имеют разные вершины но с одинаковыми координатами. Группа сглаживания у ребер она!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.