[GEiv]第一章:静态绘制(三) 转置、尺度变换与混合通道
2014-09-15 14:19
330 查看
静态绘制(三)
转置、尺度变换与混合通道
这篇文章主要介绍图元旋转、尺度与混合通道变换。
Angle使用角度制、Theta使用弧度制。
例子:
结果:
同样,使用getAngle、getTheta可以获得角度变换量,它们包含有图元索引重载。
例子:
你也可以使用setAllAlph将整个图元的通道系数改为指定值。
例子:
这里是图形学中的概念而非引擎或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,此时,颜色为覆盖色反色,他可以实现类似底片的效果。
例子:上例稍加改动;
结果:
与黄色重叠的部分变为了黄色的反色。
setInverseColor只是将混合模式设置成了GL.GL_ONE_MINUS_DST_COLOR,GL.GL_ZERO;
你也可用通过:
setCustomMixMode(arg0,arg1)来设置自定义混合模式,并通过clearCustomMixModel()方法清除掉自定义混色模式。
转置、尺度变换与混合通道
这篇文章主要介绍图元旋转、尺度与混合通道变换。
[转置变换]
图元的转置变换极其简单,使用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()方法清除掉自定义混色模式。
[总结]
本节介绍了旋转、尺度变换、混合通道的设置、获取方法。我们能绘制的图形趋向于多样化了。相关文章推荐
- [Geiv]第一章:静态绘制(二) 图元的位置变换
- [GEiv]第一章:静态绘制(一) 图元与基本图形
- paper 125:NSCT——Nonsubsampled contourlet 变换程序(尺度不变性问题研究)
- OpenGL学习笔记2:绘制和混合
- 尺度不变特征变换匹配算法详解
- SIFT(尺度不变特征变换匹配)算法详解
- 【转】由滤波器系数绘制尺度函数和小波函数图像的Matlab程序
- OpenCV 分离颜色通道与多通道图像混合
- SIFT(scale invariant feature transform): 尺度不变特征变换
- Lowe的SIFT(尺度不变特征变换)程序使用详细说明
- QtCharts第一章:绘制曲线
- OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道
- 尺度不变特征变换匹配算法详解
- 【CS】尺度不变特征变换匹配算法SIFT(2)
- SIFT(尺度不变特征变换)
- SIFI尺度不变特征变换算法
- 图像通道分离和混合
- 特征提取之SIFT(尺度不变性特征变换)
- 关于多通道图像分离与混合的一个实例
- Echarts绘制折线图柱状图混合图表练习