[GEiv]第一章:靜態繪製(三) 轉置、尺度變換與混合通道

靜態繪製(三) 

轉置、尺度變換與混合通道

        這篇文章主要介紹圖元旋轉、尺度與混合通道變換。

[轉置變換]

        圖元的轉置變換極其簡單,使用setAngle(float angle);或setTheta(float theta)即可設置角度變換。該變換滿足的是左手定則,以Y軸負向爲0點,進行順時針角度設置。

        Angle使用角度制、Theta使用弧度制。

例子:

UESI UES = new R();
Obj rect =UES.creatObj(UESI.BGIndex);
rect.addGLRect("FFFFFF",0,0,300f,300f);
rect.setPosition(CANExPos.POS_CENTER);
rect.setAngle(45);//等同於rect.setTheta((float)Math.PI/4);
rect.show();

結果:

        

        同樣,使用getAngle、getTheta可以獲得角度變換量,它們包含有圖元索引重載。

[尺度變換]

        使用setWidth、setHeight可以進行尺度變換,get同上,包含有圖元索引重載。

例子:

UESI UES = new R();
Obj rect =UES.creatObj(UESI.BGIndex);
rect.addGLRect("FFFFFF",0,0,300f,300f);
rect.setWidth(500);
rect.setHeight(500);
rect.show();
rect.setPosition(CANExPos.POS_CENTER);
rect.setAngle(45);

        

[通道變換]

        使用setAlph(float alpha);進行alph通道變換,alph爲0到1的浮點數,越界時會自動截取。您暫時可以簡單地將alph理解爲透明度。其get方法同上,具備圖元索引重載。

你也可以使用setAllAlph將整個圖元的通道係數改爲指定值。

例子:

UESI UES = new R();
Obj rect =UES.creatObj(UESI.BGIndex);
 
rect.addGLRect("FFFF00",0,0,300f,300f);
rect.setGLFill(true);
rect.setPosition(CANExPos.POS_CENTER);           
rect.setAngle(45);
rect.show();
 
Obj rect2 =UES.creatObj(UESI.UIIndex);
rect2.addGLRect("00FF00",0,0,300f,300f);
rect2.setGLFill(true);
rect2.setAlph(0.5f);//這裏是綠色矩形,其“透明度”爲0.5f,也就是“半”透明
rect2.setPosition(CANExPos.POS_CENTER);
rect2.show();

        

[混合模式]

-關於alph的進階理解:

        這裏是圖形學中的概念而非引擎或OPENGL中的知識。這裏筆者只能進行粗陋的講解,具體內容可以搜索“混合模式”。

        混合模式,通俗的講就是兩個顏色混合時得出結果顏色的算法。

        這個算法的參數包括:兩種顏色值、混合因子

        其中,混合因子就是alph。

OPENGL常用的混合算法介紹:

        1.     GL.GL_SRC_ALPHA,GL.GL_ONE_MINUS_SRC_ALPHA:源色乘以alph係數,覆蓋色乘1-原色的alph,之後加和得到目的色。也是這個引擎中除去渲染層(XR)採用的默認混色模式,它看起來就像是透明的效果。

        2.     GL.GL_SRC_ALPHA, GL.GL_ONE:原色乘以alph,加上覆蓋色得到目標色,覆蓋層越多越接近1,因此,渲染層默認混色模式採用此種方式,在模擬火焰、光效、爆炸等特效時尤爲有效。

        3.     GL.GL_ONE_MINUS_DST_COLOR,GL.GL_ZERO:原色使用覆蓋色的補色,覆蓋色爲0,此時,顏色爲覆蓋色反色,他可以實現類似底片的效果。

例子:上例稍加改動;

UESI UES = new R();
Obj rect = UES.creatObj(UESI.BGIndex);

rect.addGLRect("FFFF00",0,0,300f,300f);
rect.setGLFill(true);
rect.setPosition(CANExPos.POS_CENTER);		
rect.setAngle(45);
rect.show();
		
Obj rect2 = UES.creatObj(UESI.UIIndex);
rect2.addGLRect("FFFFFF",0,0,300f,300f);//將顏色改成了白色
rect2.setGLFill(true);
rect2.setInverseColor(true);//注意這裏!
rect2.setPosition(CANExPos.POS_CENTER);
rect2.show();


 

結果:

        

        與黃色重疊的部分變爲了黃色的反色。

        setInverseColor只是將混合模式設置成了GL.GL_ONE_MINUS_DST_COLOR,GL.GL_ZERO;

你也可用通過:

        setCustomMixMode(arg0,arg1)來設置自定義混合模式,並通過clearCustomMixModel()方法清除掉自定義混色模式。

[總結]

        本節介紹了旋轉、尺度變換、混合通道的設置、獲取方法。我們能繪製的圖形趨向於多樣化了。

發佈了42 篇原創文章 · 獲贊 50 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章