[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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章