2016-06-03 21 views
0

Может кто-то, пожалуйста, направьте меня на ссылку, где я смогу затем решить такой вопрос, поскольку это вопрос экзамена, который я хотел бы попробовать сначала, прежде чем просить о решении.Плоская система координат затенения

Рассмотрим треугольную грань трех вершин A (0,2, -1), B (1,0,1) и начала координат O и нормальными векторами в вершинах являются nA = (0,1, 0), nB = (1,0,0) и nO = (0,0,1), соответственно. Падающий свет белый и направленный в направлении L = (1,2,2), а интенсивность равна 1, интенсивность фонового окружающего света равна 0,1, а коэффициенты диффузного отражения (красный, зеленый, синий) являются (0.6,0.7,0.8). Нет необходимости в зеркальном свете .

a) Найдите значения интенсивности (красного, зеленого, синего) на лице, используя плоское затенение в центре лица.

Благодаря

+1

Найти интерполированную нормальный в центре, вычислить Ламберт (косинус) для диффузного цвета, добавьте эмбиент, чтобы получить результат. – BeyelerStudios

+0

Не могли бы вы предоставить мне ссылку на то, как я пойдет об этом – user6227505

+0

@ user6227505 не запрашивать ссылку (за пределами ресурсов сайта запрос отключен здесь) Вы заявили, что это экзамен, и вы не хотите решения, а вместо этого учебник о том, как подойти к этому ... это вполне нормально для такой простой задачи, которая может вписываться в один ответ. Вы должны удалить/переформулировать запрос ссылки, чтобы предотвратить закрытие голосов ... – Spektre

ответ

1

BeyelerStudios комментарий говорит все, что вам нужно знать. Но я чувствую, что ты полный новичок в этой области, так вот еще информация:

  1. определения

    Позволяет иметь треугольник лица определяется его 3 вершин (v0,v1,v2) и нормалей (n0,n1,n2). Пусть источник света направлен с помощью светового вектора light. Свет имеет внешние и направленные части с (r,g,b) цвета: col_dir=(1.0,1.0,1.0) и col_amb=(0.1,0.1,0.1). Отражающая способность поверхности составляет col_face=(0.6,0.7,0.8). Вы хотите получить цвет пикселя для центральной точки треугольника.

  2. вычислить normal в точке интереса

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

    triangle face

    Но в вашем случае точка является центром так нормаль только в среднем 3 нормалей:

    n=(n0+n1+n2)/3.0 
    

    Если я правильно помню, в случае произвольной точки заданной в барицентрических координатах (u,v,w=1-u-v) это будет выглядеть так:

    n=u*n0 + v*n1 + w*n2 
    
  3. вычислить cos(angle) между normal и light вектор

    Это легкий продукт использование точек для этого (в то время как оба вектора единицы в размере ... нормированный):

    cos(angle) = (n.x*light.x)+(n.y*light.y)+(n.z*light.z) 
    

    Если векторы не нормализованы вам нужно разделите результат на их размер.

    cos(angle) = ((n.x*light.x)+(n.y*light.y)+(n.z*light.z))/(|n|*|light|) 
    
  4. рассчитывают цвет

    Это также легко:

    color = col_face * (col_dir*cos(ang) + col_amb) 
    

    Не забудьте обработать отрицательный cos(ang). Поведение зависит от вашей реализации. иногда используется max(0.0,cos(ang)) прочее |cos(ang)|.

[Примечания]

Если вас интересуют, как рендеринг двигателей обрабатывать интерполяции см

+0

На самом деле, механизмы рендеринга _real_ - те, которые используют аппаратное обеспечение - фактически используют барицентрические координаты для интерполяции. – Quinchilion

+1

@Quinchilion Я так не думаю, потому что каждая реализация растеризатора низкого уровня, которую я видел на протяжении многих лет, использует интерполяцию окружности 2 буфера (разделение осей). Барицентрическая система координат ограничивает растеризаторы примитивами треугольника и добавляет накладные расходы. Но если вы знаете о какой-либо реальной реализации HW, использующей ее, я хотел бы узнать об этом ... – Spektre

+0

Я говорю о графических процессорах здесь. Причины этого объясняются [здесь] (https://fgiesen.wordpress.com/2011/07/06/a-trip-through-the-graphics-pipeline-2011-part-6/) лучше, чем я когда-либо мог , – Quinchilion