![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
ZC1989,
Долго силился вникнуть в код но понятно только в общих чертах, т.к. сам пишу на Delphi (тут не особенно проблем) и OpenGL (а вот директа не совсем ясна). Я так понял ты сначало задаешь все вершины с нормалями в буфер, потом его отрисовываешь. По причине, описанной выше точно сказать не могу почему так, но есть идея одна. Возможно ты к двем треугольникам лежащим в одной плоскости строишь разные нормали. Одну как бы "вверх", другую "вниз". У меня была такая проблема. Все зависит от последовательности вершин, пихаемых в функцию. На всякий случай приведу свой код, который у меня работает верно:
Тут Normal это просто вектор, тоесть посути запись x,y,z:extended... |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
DragonFire, так у меня то же вектор это 3 координты (xyz, ijk... как угодно) просто на именно этой грани такая запарка, но о последовательности я уверен что она зде правильно описана (против часово)... ладно, с другими гранями вроде нормально, возможно просто точку у одного увело вниз... буду искать сам... потом расскажу об успехах
![]() -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
А как в директе источник света задается? Может дело в нем?
|
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
DragonFire, нет, сет не даёт ошибки 100%, это что-то с нормалью или моделью...
но всё равно, вот мой свет
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
DragonFire, извини за флуд! я прав был, это не ошибки расчётов, просто парень рисовавшый объект смустил точки! с нормалями всё О.К. но всёж спасибо!
![]() -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
Ура ура)))
|
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Решил последовать совету и перевёл все точки в один буфер, потом, разобрался с матрицами, теперь могу делать в пяти строчках все, что мне нужно было, оч удобно! На радостях решил загрузить один файлик, там описан «микроб», состоит он из 22000 полигонов, собс-но это где-то 66000 точек.
Перевёл в свой формат, всё пучком, когда загружается сцена, получается такая фишка, что нельзя разом увидеть этот «микроб», его попросту нет на экране, но если повертеть камерой так что в кадре не весь он будет, а половина, то он начинает отрисовываться… от чего такая кривизна, от того что это один объект целиковый или я что-то нафлудил? ЗЫ: грубо говоря «микроб» это сфера с торчащими из неё ножками, оч похожа на мину глубоководную со времён ВМВ. -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Bitter, а мне тут вспомнился такой метод работы с нормалями, когда не к плоскости нормаль одна, в следствии чего все 3 точки плоскости имеют одну и ту же нрмаль, а когда для этих трёх точек нормали разные, что даёт более сглаженные границы соединения швов между траинглами...
это я вот к чему, ты писал что нормали в ASE описанные не верны, но может этот как раз тот случай когда для каждой точки нормали раные? тем более, если не ошибаюсь, ты говорил нормали "испортятся" если сферу повернуть, но, помоему, они и должны будут поменяться! есть в этом бредовом рассуждении хоть капля здравого смысла? ![]() -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
![]() По моему в доке, который я тебе присылал, есть описание подобъекта, так вот там как раз каждая точка имеет свою нормаль. Если надо, выложу код для расчета сглаженных нормалей по заданному углу (например, сглаживать, если угол <50 градусов). Но он на Delphi (хотя можно попробовать в словесной форме написать код). |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Bitter, я мутно представляю как для точек расчитывать, так что буду раб! и в словесной форме, как-то лучше получается, хоть сразу знаю что делать надо...
+ у меня проблемы какие-то при экспорте в ASE, объект получается инвертирован слева-на-право, и поднят на 90 градусов -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
||||
|
||||
Nicholas_S |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 19 |
ZC1989, для справки: когда каждая грань объекта имеет 1 нормаль, обычно происходит плоская закраска (flat); гладкие закраски (гуро, фонга, последний точнее и заметно лучше выглядит) происходят из расчета того, что каждая точка грани имеет свою нормаль.
При модификации объекта (повороте, непропорциональном сжатии/растяжении) массив нормалей должен соответственно быть модифицирован. Можно пересчитывать нормали при трансформации каждый раз. Нахождение нормали к грани можно получить следующим образом:
Получить нормаль к каждой из вершин грани можно, используя нормали к смежным граням, вычисленные по алгоритму, приведенному выше. ![]() -------------------- ...все в мире относительно |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Nicholas_S, впринцыпе оно и есть, я нашёл у себя статью где это опысывалось...
если кому надо то суть такая: надо суммировать нормали всех плоскостей содержащих эту точку, потом нормализовать все вектора и вуаля, список нормалей индивидуальных для кажой точки! а изначально, перед началом суммирования, надо все нормальные вектора прописать нулевыми ![]() -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
Bitter |
|
||||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
ZC1989, именно так! Вот то, что обещал (словесное описание в качестве коментариев):
вообще-то реализация зависит от формы организации данных. В данном случае имеется массив граней, каждый элемент которого хранит три вершины, три нормали и три текстурные координаты.
а если камеру разместить с другой стороны, то получится нормальным. или я может чего-то не понял? |
||||
|
|||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Bitter,
ты не понял... представь, что будет с объектом если все координаты по Х умножить на -1, получится зеркальное отражение Добавлено @ 00:04 там ещё объект поворачивался на 90 градусов по Y оси, но я нашёл простое решение, менять у точек координаты Y и Z, и менять местами 1 и третью вершыны, что, как мне кажется геморойно... -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |