![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
sfok3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 14.7.2009 Репутация: нет Всего: нет |
Здравствуйте у меня есть массив с данными типа TCustomVertex
TCustomVertex = packed record x, y, z: Single; nx, ny, nz:single; color: DWORD; end; Создаю буфера вершин по координатам x, y, z Как мне вычислить нормаль (nx, ny, nz) для каждой вершины (x, y, z)? Вычитал только: Нельзя вычислить нормаль для вершины, потому что это всего лишь точка в пространстве. Но как мне тогда решить проблему вот так у меня заполняется массив:
|
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Вот смотри, векторное произведение векторов дает вектор перпендикулярный плоскости образованной 2мя векторами. Чтобы получить 2 вектора нужно как минимум 3 точки в плоскости. Векторное произведение векторов можно вычислить примерно так
Вектор получается вычитанием соответствующих координат 2х точек {(x2-x1), (y2-y1), (z2-z1)} , {(x3-x2), (y3-y2), (z3-z2)}. И еще я думаю понадобиться не просто нормаль, а нормализованная нормаль, т.е. Нормаль длинный в единицу. Это значит что каждую из координат вектора нормали нужно поделить на модуль вектора нормали. Добавлено через 2 минуты и 52 секунды А и еще. При по разному выбирая точки для 2х векторов в грани можно получить 2е нормали, внутреннюю и наружную. Это имеет значение. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
Нормаль - это перпендикуляр к поверхности, необходимый для расчета освещения. У точки может быть абсолютно любая нормаль, она зависит от того, какому треугольнику принадлежит (у совпадающих точек могут быть разные нормали) и конечно же от того, какую поверхность аппроксимирует набор треугольников опирающиеся на твои точки.
Судя по всему, твоя поверхность - карта высот в плоскости ХZ. Самое простое будет задать нормаль (nx = 0, ny = 1, nz = 0). Можно получить результат лучше, если посчитать нормаль исходя из 4 соседних точек карты высот. Если нужно - пиши. ЗЫ: Тут будут нужны некоторые функции векторной геометрии, поэтому, чтобы не заниматься изобретением велосипеда, рекомендую взять файлы VectorTypes.pas и VectorGeometry.pas из исходников GLScene |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |