Помощь - Поиск - Пользователи - Календарь
Полная версия: Метод Гуро
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
mihashark
Люди,помогите закрасить пирамиду методом Гуро,а то я чё его не понимаю ни хрена!
mihashark
Вот полная формулировка:закрасит усечённую пирамиду с правильным 6-тиугольником в основании,предусмотреть изменение ориентации пирамиды и двигать источник света!
Я сейчас дошёл до определения нормалей поверхностей!
BlackShadow
Кхе, кхе...
А про етот метод по-подробней можно?
mihashark
Если бы я знал,я бы не спрашивал!короче его суть в том, что надо расчитать интенсивность освещения в вершинах(это я почти сделал),а потом построчно расчитывать интенсивность каждого пикселя!это в принципе я смогу сделать(хотя пока не получилось),там одна математика!но чё делать дальше:вот у меня получилась интенсивность в точке,например, 3,68 и как мне закрасит этот пиксель с такой интенсивностью???
BlackShadow
Установи режим на 24/32 бита, а затем используй что-нибудь типа
Код

Function Color(TvoyIntensivnost,MaxIntencivnost):TColor;
Var
 n:Integer;
Begin
 n:=Round(255*TvoyIntensivnost/MaxIntencivnost);
 Result:=RGB(n,n,n)
End;
mihashark
Как установить 24/32 бита?
и что эта функция мне даст?она же не выводит на экран ничего?
и что такое maxintensivnost?
Объясни поподробней,пожалуйста!очень надо!
BlackShadow
Объясняю.
Есть и под BP такие BGI-драйвера, которые умеют 24/32 бита. А под TMT Pascal, так это вообще родное.
Далее, ты сказал, что сможешь высчитать интенсивность каждого пикселя. Очень хорошо. Есть такое понятие, как градации серого. Для отображения твоей пирамидки тебе, я думаю, этого хватит. А ф-ция, которую я привёл как набросок, вычисляет именно подходящую градацию серого по простой пропорции. А maxintensivnost обозначает максимальную интенсивность, которую может принимать какая-либо точка.
Dark
BlackShadow, А если не серого то тогда как : )
Dark
mihashark, потом большая просьба скинуть программу.
BlackShadow
Dark smile.gif
Можно сделать очень даже симпатично: со временем менять палитру. Т. е., допустим, первые 2 минуты использовать градации красного, затем синего, зелёного, жёлтого, серого... Довольно эффектно смотрится.
mihashark
Т.е. RGB вычисляет яркость цвета,это я понял!а чё потом делать?
Так можно быдет:
[/RGB[n,n,n]
putpixel(x,y)]
и он этот пиксель закрасит с нужной интенсивностью???
mihashark
И вообще чё за RGB?он пишет unknown identifier!!!
BlackShadow
С чего бы это...
Ты, я так понял, под BP пишешь.
RGB там нету. И не интенсивность оно задаёт, а цвет формирует. Любой цвет состоит из трёх базовых: красного ( R ), зелёного ( G ) и синего ( B ). Если всего поровну, то получается, что-то серое, а вот яркость зависит от кол-во того другого и третьего.
Самому написать RGB очень легко:
Код

Function RGB(r,g,b:Byte):LongInt;Assembler;
Asm
 MOV AL,[r]
 MOV AH,[g]
 MOV DL,[b]
 XOR DH,DH
End;

либо

Function RGB(r,g,b:Byte):LonhInt;Assembler;
Asm
 MOV AL,[b]
 MOV AH,[g]
 MOV DL,[r]
 XOR DH,DH
End;

Какой из этих вариантов верен, я что-то никак сообразить не могу. Попробуй вывести пиксель очень красного цвета при помощи первого варианта. Если он будет очень синий, значит правильный второй smile.gif
А вообще PutPixel, если мне память не изменяет, требует 3 параметра: x, y и цвет. Угадай, откуда берётся третий *)
BlackShadow
Прикольно, а я и не знал, что ( R ) без пробелов заменяется на ®
mihashark
Оба варианта при параметрах 100,100,100 выводят красный цвет!
если парамеры одинаковые (5,5,5) и (10,10,10) он должен вывести один и тот же цвет,но с разной интенсивностью?
mihashark
Слушай,BlackShadow,вруби аську так проще будет!
BlackShadow
В теории да. А вот аську врубить не могу по загадочным причинам - она конектиться не хочет. Я ближе к ночи до дому доберусь, тогда можно будет и поговорить... Только я в Invisible всегда, так что пиши не стесняйся - подрублюсь, сразу отвечу.
mihashark
BlackShadow,тот модуль что я скачал с http://pascal.sources.ru/graph/fastvesa.htm,я чето не могу инициализировать графический режим,не подскажешь как это сделать?
BlackShadow
Надо вызвать StVESAMode с параметором
$100 - 640*400
$101 - 640*480
$103 - 800*600
$105 - 1024*768
$107 - 1280*1024
А, если держится VBE 2.0, то и $120 - 1600*1200
Только проверяй, тянется ли этот режим.
Dark
погляди в задачах - вывод pcx, там изложена моя библиотечка...
BlackShadow
Dark, а какой там формат палитры? По байту на R, G и B?
Dark
ага, 768 байт - это 256 цветов (R,G,B )
BlackShadow
-mihashark-, ну что, ещё вопросы есть?
И как там с результатом, написал?
mihashark
да я чё то забил пока,других дел много!наверно в четверг-пятницу буду делать!но там ещё одна хрень в этом fastvesa-там есть процедура SetRGBColor,я её использую,но потом при выводе пикселя там требуеться указать цвет:putpixel(x,y,color),т.е. цвет надо указывать,а я его могу устанавливать только SetRGBColor,а именно задать число цветом не получаеться!посмотри как там это делаеться!я тебе на почту пришлю свою прогу,там ещё проблема в том что я не правильно вывожу пиксели(не туда куда нужно)!
virt
mihashark
а ты на форуме выложи ,прикрепленным файлом.
mihashark
BlackShadow, на чё,посмотрел?я смог залить пирамиду,но только если на неё сначала посмотреть,т.е. если её повернуть немного,то он по другому закрашивает!я скорее всего в delphi перекину,там RGB вроде встроенная есть,и выглядит лучше чем в паскале!
Ну чё поможешь закрасит пирамидку???
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.