Процедурные текстуры

 

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

 
 

 

 


xt1, y t1 x t2, y t2

 

Рис. 4.1.1

 

       
 
индекс t означает «текстурный»
   
 

 


В ряде случаев могут получаться искажения

 

Рис. 4.1.2

 

Чем больше перспективное искажение, тем больше эти искажающие эффекты.

 

Решается следующая задача: в плоскости изображения имеется некоторый прямоугольник и bmp-картинка, которую нам надо вписать в этот прямоугольник. Эту задачу можно сформулировать иначе: имеется некоторый многоугольник и картинка, ему соответствующая. Многоугольник задан текстурными координатами, по которым из текстурного поля вырезается определённый кусок и наносится на объект.



4.2. Коррекция текстуры

 

P x2 y2 h2 xt2 y t2

i=N-1

X2 Y2 Z2 S2 xt2 yt2

 
 


x1 y1 h1 xt1 yt1 xt(i) yt(i) h

xt yt s

 

i


i=0

X1 Y1 Z1 S1 xt1 yt1

 

Рис. 4.2

 

s-s1

xt = xt1 + ¾¾¾ (x t2 - x t1)

s2-s1

 

s-s1

yt = yt1 + ¾¾¾ (y t2 - y t1)

s2-s1

 

 

Линейная интерполяция:

 
 


A

h = ¾ - B ;

S

 

коэффициент, стоящий в первых двух уравнениях системы в скобках, – это поправочный коэффициент, выполняющий коррекцию текстурных координат
После подстановки всех формул получаем:

 

 
 


ih2 + B

xt(i) = xt1 + ¾¾ (x t2 - x t1) ¾¾¾

N-1 h(i)+ B

 
 


ih2 + B

yt(i) = yt1 + ¾¾ (y t2 - y t1) ¾¾¾

N-1 h(i)+ B