![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
art88 |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Здача:
Изобразить расположенный на поверхности гладкий красный шар(освещённый). ------------------------------------------------- Проблема: Думаю, что большую часть этой задачи я решил(см. Globe.pas). Осталось правильно раскрасить шар. Вот формула яркоти поверхности I= kр Iр + kн Iнcos(a) kр - коэффициент отражения рассеянного света (kд<1); kн - коэффициент отражения направленного света; Iр - интенсивность рассеянного света; Iн - интенсивность падающего света; а - угол между направлением света и нормалью к поверхности. I у меня считается, вопрос только в том, как задать оттенки красного. Пробовал в цикле менять угол от 0 до пи, считать I и делать SetRGBPalette(j, $FF*I, 00, 00), но кроме красного откуда-то берутся и другие цвета. Помогите пожалуйста! (Для тех, у кого не читаются комментарии globe.doc) Прикрепленные файлы ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Посмотрел я твою программу...
![]() Цитата(art88 @ 18.02.2006 14:54) I у меня считается, вопрос только в том, как задать оттенки красного. ![]() Цитата(art88 @ 18.02.2006 14:54) I= kр Iр + kн Iнcos(a) Это же уравнение Фонга, правда? Но, извини меня, оно "немного" по другому выглядит:kр - коэффициент отражения рассеянного света (kд<1); kн - коэффициент отражения направленного света; Iр - интенсивность рассеянного света; Iн - интенсивность падающего света; а - угол между направлением света и нормалью к поверхности. Цитата ambient = Ka, diffuse = Kd * cos(N, L), specular = Ks * pow(cos(R, V), Ns), intensity = ambient + amp * (diffuse + specular). где Ka - коэффициент фоновой интенсивности (характеристика окружающей среды) Kd - коэффициент рассеяния (характеристика поверхности) Ks - коэффициент отражения (характеристика поверхности) Ns - коэффициент вида отражения (характеристика поверхности) amp - "мощность" источника света P - рассматриваемая точка N - нормаль к поверхности изображаемого объекта в точке P L - вектор, проведенный из точки P в источника света (луч света) V - вектор, проведенный из точки P в "точку зрения" камеры R - отраженный луч света (отражение L относительно N) ambient - "фоновая" освещенность diffuse - "рассеянная" освещенность specular - "отраженная" освещенность intensity - освещенность (суммарная) cos(A,B) - косинус угла между векторами A и B Чувствуешь разницу? Ты считал вот так: I:= Round(k1 + k2*Cosinus(p1));, где и k1, и k2 заданы константами, а нужно - по вышеприведенной формуле, чтобы все изменялось динамично... |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 10:38 |