顏色間的簡易插值
emilmatthew(
前言:
在繪製山體圖形的時候,渲染階段需要對山體進行著色,通過在關鍵節點著色,其餘結點與關鍵節點間進行線性插值的方法,可以使得著色渲染達到比較良好的視覺效果。同樣的思路還可以用在漸變色的製作上。 2
顏色間插值的實現思路
:
假設需要在p1和
p2兩個結點間進行顏色插值,設:
p1座標
(x1,y1),
其rgb
值(r1,g1,b1) p2
座標(x2,y2).
其rgb
值(r2,g2,b2)
則可計算出關於每個最小繪製步長中
r,g,b
各畫素的改變值,
如stepr=(r2-r1)/|p2p1|
在著色的主過程中,則只要根據當前的畫素值,渲染相應的點、線、面即可,下一步迭代中,則各畫素值依次增加相應的增量值即可,直至迭代結束。
3as2
實現的**
:
_root.createemptymovieclip("gbrush",_root.getnexthighestdepth());
_root.gbrush.linestyle(1,0x000000,100);
var rgbnum1:number=0;
var rgbnum2:number=0;
p1x=50;p1y=50;
p2x=300;p2y=50;
bandheight=30;
var steppixel:number=3;
pn_x=0;pn_y=0;
pn_r=0;pn_g=0;pn_b=0;
//get rgb
rgbnum1=0xffcc00;
rgbnum2=0x009900;
stepr=0;
r2=0;r1=0;
stepg=0;
g1=0;g2=0;
stepb=0;
b1=0;b2=0;
len_p2p1=math.sqrt((p2x-p1x)*(p2x-p1x)+(p2y-p1y)*(p2y-p1y));
//parse the rgb num.
r1=(rgbnum1>>16)&0xff;
g1=(rgbnum1>>8)&0xff;
b1=(rgbnum1>>0)&0xff;
r2=(rgbnum2>>16)&0xff;
g2=(rgbnum2>>8)&0xff;
b2=(rgbnum2>>0)&0xff;
//cal step val.
var stepr:number=(r2-r1)/len_p2p1;
var stepg:number=(g2-g1)/len_p2p1;
var stepb:number=(b2-b1)/len_p2p1;
pn_x=p1x;
pn_y=p1y;
var pn_r:number=r1;
var pn_g:number=g1;
var pn_b:number=b1;
//trace(pn_r+" "+pn_g+" "+pn_b);
while(pn_x
//move pixel
if(pn_x
if(pn_y
} 4
效果展示圖1
(紅色à藍)
圖2
(土黃à
草地綠)
完成日
:
06/05/13
C 中一個關於不同窗體間的顏色引數的傳遞
1目標是 在彈出選單中選擇顏色,在主選單中對控制元件進行操作 彈出選單選擇的顏色就是主選單控制元件的顏色 2顏色屬性需要來回轉換 也許不用轉換,暫時還不會,有會的提醒下,tks 3用到一個顏色控制元件 colordialog 否則的 太冗繁,在彈出選單中作為選擇顏色和顏色屬性之間傳遞的橋樑 4彈出窗...