IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Закраска по методу Гуро и Фонга
18192123
сообщение 16.04.2007 21:41
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Мне нужно изобразить тетраэдр , выполнить закраску Фонга относительно выбранного источника света, разработать процедуру управления скоростью вращения тела с одинаковыми ускорениями по осям и обеспечения перехода на низкозатратную процедуру Гуро и далее на закраску с использованием таблиц освещенности при увеличении угловых скоростей вращения.

Вот... Не знаю даже, с чего начать... Теорию по методам закраски изучила.... но с таким никогда не сталкивалась, поэтому с реализацией большие проблемы....

вот на что думаю опираться:
1. Получить нормаль грани: выбрать два вектора, лежащие в этой грани и найти их векторное произведение, нормировать этот вектор.
2. Записать найденные нормали граней в массив (normg[i]). Чтобы определить нормаль каждой вершины, определяем из таблицы граней для каждой вершины, какие грани в ней сходятся, и для этих найденных граней их нормали суммируем, а сумму нор-мируем (массив normv[i]).
3. Алгоритм Гуро. После того, как нормали вершин найдены, вы-числяем согласно модели освещения освещенность каждой вершины и записываем освещенности в массив освещенностей. Этот массив будет использоваться в процедуре рисования грани.
Алгоритм Фонга. Координаты найденных нормалей вершин пе-реводятся в сферические координаты, так что нормали представле-ны двумя числами типа byte. Нормали в таком виде будут использо-ваны процедурой рисования грани.
4. Реализовать процедуру рисования грани, для чего необходимо провести интерполяцию для определения освещенности (в ме-тоде Гуро) и нормали (в методе Фонга) для каждой точки гра-ни.
Закраску граней можно произвести путем заполнения внутренней области этой грани отрезками прямых, параллельных оси OX. Для этого найдем вершины грани с наименьшей и наибольшей координатой Y.
В качестве начальной возьмем вершину с наименьшей координатой Y. Разобьем условно множество ребер, составляющих грань, на две группы – левую и правую. Будем по очереди брать одно ребро из левой и одно из правой части, т.е. всегда работать с парой ребер. Выбор ребер может производиться следующим образом: сначала берем в качестве левого ребра ребро, начинающееся в начальной вершине и заканчиваю-щееся в следующей по порядку при обходе влево. Это ребро (l0,lk). Аналогично, в качестве первого правого ребра – ребро (r0,rk). Теперь в цикле будем строить прямые, параллельные оси X, начиная с прямой Y = Ymin, каждый раз увеличивая ординату. Для каждой этой прямой бу-дем находить точки пересечения с нашей парой боковых ребер. Если одно из боковых ребер не имеет точки пересечения с этой прямой, то его отбрасываем и берем следующее из его группы (левой или правой).
Если точки пересечения найдены, то найдем, какая часть левого и правого ребра пройдена, это значение запишется соответственно в пе-ременные tl и tr. Значение переменных tl и tr используется на первом шаге билинейной интерполяции в методе Гуро для нахождения осве-щенности в точках пересечения прямой, параллельной оси Х, и ребер, а в методе Фонга для определения нормалей тела в этих точках. Второй шаг интерполяции ведется аналогично, только вдоль отрезка, заключен-ного между парой ребер. Таким образом, вычисляется необходимая ин-формация для каждой точки грани.

но как всё это реализовать - не знаю! С чего начинать! Может быть кто-нибудь может привести реализацию методов закраски?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
18192123
сообщение 19.04.2007 21:49
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


и что значит "нормировать" вектор? ( как это производится?)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.04.2007 8:18
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(18192123 @ 19.04.2007 22:49) *

и что значит "нормировать" вектор? ( как это производится?)

Я думаю, нормировать - это значит сделать так, чтобы его длина была равна 1, сохранив направление прежним.


Добавлено через 2 мин.
Цитата(18192123 @ 19.04.2007 19:19) *

задаётся таким образом (см. код),

Мне непонятен способ задания тетраедра. Это вершины? или что?
Поясни, пожалуйста.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 20.04.2007 8:21
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(Lapp @ 20.04.2007 9:18) *

Я думаю, нормировать - это значит сделать так, чтобы его длина была равна 1, сохранив направление прежним.

blink.gif никогда о таком не слышала...а можно показать на примере, как это сделать?

Добавлено через 7 мин.
Цитата(Lapp @ 20.04.2007 9:18) *


Мне непонятен способ задания тетраедра. Это вершины? или что?
Поясни, пожалуйста.

х, у, z - это вершины
g:array[1..n,1..4] - линии

но мне кажется ,что лучше задавать эти величины так ,как я пыталась выше (не совсем удачно..)

const tetr: array[0..11] of real =
(-1,-1,-1,-1,-1,1,-1,1,-1,
-1,1,1);
line_: array[0..11] of integer = (0,1,0,4,0,2,1,3,1,5,2,3);



у меня тут линий не хватает вроде...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 20.04.2007 8:37
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(18192123 @ 20.04.2007 9:21) *

blink.gif никогда о таком не слышала...а можно показать на примере, как это сделать?

Ai'=Ai/|A|

Остальное позже. Машина в ремонте, автобус уходит.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 20.04.2007 8:48
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(Lapp @ 20.04.2007 9:37) *

Ai'=Ai/|A|

Остальное позже. Машина в ремонте, автобус уходит.. smile.gif


|A| - поясни пожалуйста, это модуль чего? (без i)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Закраска по методу Гуро и Фонга   16.04.2007 21:41
18192123   получилось нарисовать фигуру и вращать её, вот тол...   17.04.2007 20:52
18192123   а как выбрать источник света и как с ним работать?   17.04.2007 22:53
volvo   Марина, загляни вот сюда: Dasaev Demo Guide v1.1 ...   17.04.2007 23:07
18192123   Марина, загляни вот сюда: Dasaev Demo Guide v1.1 ...   18.04.2007 14:18
18192123   а может есть ещё что-то такое?   18.04.2007 19:55
18192123   Нашла вот такую программу для закраски тетраэдра: ...   19.04.2007 12:10
Malice   мне здесь не понятно назначение функции minz пои...   20.04.2007 15:49
18192123   Если тетраэдр с его вершинами и сторонами задаётся...   19.04.2007 18:19
18192123   и что значит "нормировать" вектор? ( как...   19.04.2007 21:49
Malice   Вот еще с далеких фидошных времен откопался пример...   19.04.2007 21:55
18192123   Вот еще с далеких фидошных времен откопался приме...   19.04.2007 23:26
18192123   Спасибо! Но лучше уж я с чистого листа начну....   20.04.2007 8:11
Сергей   Почему никто не хочет мне этого объяснить на моём...   25.04.2007 12:13
Lapp   и что значит "нормировать" вектор? ( ка...   20.04.2007 8:18
18192123   Я думаю, нормировать - это значит сделать так, чт...   20.04.2007 8:21
Lapp   :blink: никогда о таком не слышала...а можно пока...   20.04.2007 8:37
18192123   Ai'=Ai/|A| Остальное позже. Машина в ремонт...   20.04.2007 8:48
Lapp   |A| - поясни пожалуйста, это модуль чего? (без i)...   20.04.2007 10:53
18192123   procedure draw(color:byte); begin for p:=0 to 5 ...   23.04.2007 21:32
Malice   а именно, не пойму, для чего *2, *3, прибавляем ...   23.04.2007 22:34
18192123   Что ж тут не понятного ? Массив Line_ заполнен та...   23.04.2007 22:56
Malice   спасибо за объяснение! а для чего умножение н...   24.04.2007 0:12


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"