2013-09-18 1 views
1

Я читаю Шейдеры для игр Программирование и художники. В главе 13 «« Строительные материалы из царапин »» автор представил некоторые методы визуализации для моделирования сложных материалов, таких как мрамор или дерево, с использованием шума Перлина. Но я озадачен деревянным рендерингом. Для моделирования дерева нам нужна функция, которая дает круговое значение вдоль конкретной плоскости, чтобы мы могли создавать кольца в лесу. Это то, что говорит автор, «взять скалярное произведение двух осей вдоль плоскости, создавая круговую значение на этой плоскости»Использование шума Perlin для визуализации дерева

Circle = dot(noisetxr.xy, noisetxr.xy); 

noisetxr является float3, это координаты текстуры для образца текстуры шума, I не может понять, почему воля скалярного произведения дает круговое значение
Вот полный код (пиксельный шейдер в HLSL):

float persistance; 
float4 wood_color; //a predefined value 
sampler Texture0; // noise texture 
float4 ps_main(float3 txr: TEXCOORD0) : COLOR 
{ 
    // Determine two set of coordinates, one for the noise 
    // and one for the wood rings 
    float3 noisetxr = txr; 
    txr = txr/8; 

    // Combine 3 octaves of noise together. 
    float final_noise = 0; 
    for(int i=0;i<2;i++) 
     final_noise += ((1.0/pow(persistance,i))* 
     ((tex3D(Texture0, txr*pow(2,i))*2)-1)); 

    // The wood is defined by a set of concentric rings in the XY 
    // plane. Those rings are pertubated by the computed noise. 
    final_noise = abs(final_noise); 
    float grain = cos(dot(noisetxr.xy,noisetxr.xy) + final_noise*4);//what is this ?? 
    return wood_color - pow(grain,8)/2; //raising the cosine to higher power 
} 

Я знаю, что повышение функции косинуса к более высокой мощности будет создавать более четкие кольца, но что означает точечный продукт? Почему он может создать значение круга?

ответ

0

dot-произведение вектора с собой просто приводит к квадрату длины вектора. Поэтому для каждой точки xy-плоскости, dot(noisetxr.xy,noisetxr.xy) верните квадрат расстояния от точки до начала координат. Теперь вы применяете косинус-функцию на этом расстоянии, что означает, что для всех точек на плоскости, которые имеют одинаковое расстояние до начала координат, оно создает одинаковое выходное значение => круг равных значений вокруг начала координат.

 Смежные вопросы

  • Нет связанных вопросов^_^