![]() |
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
|
Гость ![]() |
Пробовал в цикле менять угол от 0 до пи, считать I и делать SetRGBPalette(j, $FF*I, 00, 00), но кроме красного откуда-то берутся и другие цвета. Из TP Хелпа по процедуре SetRgbPalette: Цитата(TP Help) Restrictions: У тебя IBM8514?SetRGBPalette can be used only with the IBM 8514 driver and the VGA. Насколько я вижу, у тебя вообще 16-цветный режим устанавливается... Как же ты хочешь в нем получить НЕСКОЛЬКО оттенков красного? Попробуй использовать 256-цветный (например, SVGA.BGI) |
art88 |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Ну, хорошо, подключил я SVGA.bgi(Globe2.pas).
А как же мне всё таки быть с раскраской шара? Указанным мною выше способом не получается! Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Посмотрел я твою программу...
![]() Цитата(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 заданы константами, а нужно - по вышеприведенной формуле, чтобы все изменялось динамично... |
art88 |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Хорошо, тогда у меня ещё вопрос, где можно найти все требующиеся коэффициенты, и как в итоге получить требуемую раскраску шара.
|
art88 |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 40 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Я тут уже почти доделал программу, она изображает матовый , освещённый шарик и тень.(см sphere.pas)
------------- Осталось только добавить блик: раскраска расчитывается по формуле Ламберта (при cos_alfa>0) и к полученному значению Интенсивности добвляется зеркальное отражние(In*km*cos_beta). beta- угол между направлением отражённого света и направлением в глаз.(см. sp,jpg) ------------- Помогите доделать последнюю задачу(спасибо Volvo за пирамиду). cos_beta не правильно считается(см.globe.pas). Эскизы прикрепленных изображений ![]() Прикрепленные файлы ![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 3:58 |