Я получил это замечательное изображение ниже со страницы Википедии о додекаэдрах . На нем показан тетроид, медленно вращающийся. Если внимательно присмотреться, то видно, что предполагается наличие источника света где-то за пределами экрана. Если лицо отражает больше света обратно к наблюдателю, оно кажется ярче, а если оно отражает меньше света назад, оно кажется темнее. У меня есть идея, как получить метрику количества света, отражаемого лицом при определенном повороте. Я также могу масштабировать метрику до значения от 0 до 255 (что предполагает большинство цветовых шкал). Однако как мне получить фактические значения rgb, которые выглядят как яркий отражающий синий цвет, когда метрика высокая, и темно-синий, когда метрика низкая?
Хорошо, я обнаружил, что цветовая шкала HSL предназначена именно для этого (где буква «L» означает яркость). Итак, я просто делаю линейную шкалу L с моим углом лица, сохраняя H и S постоянными. Вот код Python для этого преобразования:
def colorFromAngle2(angle):
h = 136
s = 118
l = 96+64*angle/450
r, g, b = colorsys.hls_to_rgb(h/255.0, l/255.0, s/255.0)
r, g, b = [x*255.0 for x in r, g, b]
return (int(r),int(g),int(b))
Это приводит к чему-то вроде этого -
Рафаэль
Рафаэль