[GEiv]第一章:静态绘制(三) 转置、尺度变换与混合通道

来源:互联网 发布:三家运营商的网络制式 编辑:程序博客网 时间:2024/06/08 11:29

静态绘制(三) 

转置、尺度变换与混合通道

        这篇文章主要介绍图元旋转、尺度与混合通道变换。

[转置变换]

        图元的转置变换极其简单,使用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()方法清除掉自定义混色模式。

[总结]

        本节介绍了旋转、尺度变换、混合通道的设置、获取方法。我们能绘制的图形趋向于多样化了。

0 0