OpenGL(三) RGBA颜色设置
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。
像素点附加颜色信息之后,就必须为每一个像素点额外分配一个内存空间保存该点的颜色信息,对于RGBA颜色模式,保存的数据直接代表了颜色,对于颜色索引模式,保存的是该颜色在颜色索引表中的位置,通过查颜色索引表对应到相应的颜色上。
颜色索引模式的优点是占用空间小,运行速度快,缺点是显示效果稍差,随着硬件的提速升级,RGBA颜色模式成为主流。
RGBA颜色模式
RGBA模式中,RGBA分别表示红绿蓝三色的分量,A(Alpha)表示颜色的透明度,通过设置RGB不同的比例,可以获得任意的颜色。
OpenGL中颜色的设置可以通过函数glColor4f设置。glColor4f的传入参数是Glfolat类型的浮点型,可以精确到小数点后若干位,但是实际的显示效果由硬件决定。
相关代码:
void myDisplay(void)
{
//使用RGBA颜色模式设置背景色为红色的矩形框
glClear(GL_COLOR_BUFFER_BIT);
glColor4f(1,0,0,1);
glRectf(-0.8,-0.8,0.5,0.5);
glFinish();
}
效果:
A(Alpha)通道是图像的不透明度参数。如果一个像素的alpha通道数值为0,那它就是完全透明的(也就是看不见的),而数值为1则意味着一个完全不透明的像素(传统的数字图像)。在0-1之间的值 则使得像素可以透过背景显示出来,就像透过玻璃(半透明性)看背景一样。
设置透明效果需要先用glEnable(GL BLEND)打开混合色功能,glDisable(GL DEPTH TEST)关闭深度测试功能,才能实现透明色。
相关代码:
void myDisplay(void)
{
//使用RGBA颜色模式设置背景色为红色的矩形框
glClear(GL_COLOR_BUFFER_BIT);
//设置alpha通道透明度
glEnable(GL_BLEND); //开启混合模式
glDisable(GL_DEPTH_TEST); //关闭深度测试
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(0,1,0,1);
glRectf(-0.5,-0.5,0.8,0.8);
glFinish();
}
Alpah为1时效果,完全不透明: Alpha为0.5时效果,半透明:
设置清除屏幕所用的颜色
在作图之前一般使用glClear(GL COLOR BUFFER BIT)把屏幕上已经绘制的图形清理掉,相当于用一个黑板檫把所有窗口上的图形擦除掉,只剩下黑板的默认颜色——黑色。
这个黑板的颜色也可以指定的,可以理解为用一个指定的颜色去清除掉窗口上已有图形颜色,在RGB模式下使用glClearColor函数即可。
相关代码:
void myDisplay(void)
{
//设置清除屏幕所用的颜色
glClearColor(0.5,0.8,0.3,0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
效果:
设置着色模型
OpenGL允许为同一个多边形的不同顶点设置不同的颜色。默认情况下,程序会根据两个顶点之间的颜色的差距,在两个顶点之间的点上均匀分布颜色,显示出来的效果就是从一个颜色到另外一个颜色渐变。
显示效果:
可以使用函数glShadeMode 关闭这种渐变的效果,这时候相信顶点之间的距离是跟其中某一个顶点的颜色一样的,但是具体跟哪一保持一致要看具体实现,是不确定的,OpenGL 建议尽量在一个多边形中使用同一种颜色。
相关代码:
void myDisplay(void)
{
//设置着色模型
glClear(GL_COLOR_BUFFER_BIT);
int i;
float Pi=3.1415926f;
// glShadeModel(GL_FLAT); //取消颜色的渐变,改为单一颜色
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 1.0f, 1.0f); //设置第一个点的颜色
glVertex2f(0.0f, 0.0f);
for(i=0; i<=8; ++i)
{
glColor3f(i&0x04, i&0x02, i&0x01); //设置各个顶点的颜色
glVertex2f(cos(i*Pi/4), sin(i*Pi/4)); //8个顶点平均分布在一个圆上
}
glEnd();
glFlush();
}
效果:
完整代码:
#include <glut.h>
#include <iostream>
using namespace std;
void myDisplay(void)
{
//使用RGBA颜色模式设置背景色为红色的矩形框
glClear(GL_COLOR_BUFFER_BIT);
glColor4f(1,0,0,1);
glRectf(-0.8,-0.8,0.5,0.5);
glFinish();
//设置alpha通道透明度
glEnable(GL_BLEND); //开启混合模式
glDisable(GL_DEPTH_TEST); //关闭深度测试
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glColor4f(0,1,0,1);
glRectf(-0.5,-0.5,0.8,0.8);
glFinish();
//设置清除屏幕所用的颜色
/*glClearColor(0.5,0.8,0.3,0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();*/
//设置着色模型
int i;
float Pi=3.1415926f;
//glShadeModel(GL_FLAT); //取消颜色的渐变,改为单一颜色
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 1.0f, 1.0f); //设置第一个点的颜色
glVertex2f(0.0f, 0.0f);
for(i=0; i<=8; ++i)
{
glColor3f(i&0x04, i&0x02, i&0x01); //设置各个顶点的颜色
glVertex2f(cos(i*Pi/4), sin(i*Pi/4)); //8个顶点平均分布在一个圆上
}
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(400, 400);
glutCreateWindow("OpenGL");
glutDisplayFunc(&myDisplay); //回调函数
glutMainLoop(); //持续显示,当窗口改变会重新绘制图形
return 0;
}
OpenGL(三) RGBA颜色设置的更多相关文章
- OpenGL图元的颜色属性
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 1. RGBA颜色RGBA模式中,每一个像素会保存以下数据:R值(红色分量).G值(绿色分量).B值(蓝色分量)和A值(alpha分 ...
- IE8下兼容rgba颜色的半透明背景
在工作中做一个图片半透明遮罩时发现在IE8下不兼容 一查再知道IE8不支持rgba颜色,再搜搜兼容性方法,没想到这么快就解决了. 先说说rgba的含义: r代表red,g代表green,b代表blue ...
- css单位分析、颜色设置与调色板
CSS单位分析 px:单位代表像素,1px代表一个像素点. %:设置子元素为父容器的占比. em:代表该元素中一个字体所占字符,常用在文字首行缩进.其具有继承性. rem:始终代表html中的字符所在 ...
- RGBA颜色与兼容性的半透明背景色
所谓RGBA颜色,顾名思意就是R+G+B+A的颜色,再具体点就是RED+GREEN+BLUE+ALPHA的颜色,小写一下就是red+green+blue+alpha的颜色,翻译一下就是红+绿+蓝+Al ...
- OpenGL光照和颜色
OpenGL光照和颜色 转自:http://www.cnblogs.com/kekec/archive/2011/08/16/2140789.html OpenGL场景中模型颜色的产生,大致为如下的流 ...
- Win7下如何设置护眼的电脑豆沙绿界面?保护眼睛的颜色设置教程
关爱心灵的窗户——眼睛! 随着科技发展,使用电脑的人越来越多,由于使用电脑时间过长,我们的眼睛也越发容易疲劳,干燥.如何才能使电脑对人眼的伤害减小到最 小. 小编建议大家可以把窗口背景色设置成护眼色. ...
- iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...
- scale相关设置—颜色设置
颜色设置,在R的可视化中,应该算是相对比较重要的一项内容,如何把握颜色,很大程度上影响图形的展现效果. 在ggplot的scale设置中,颜色相关的函数较多: scale_fill/colour_hu ...
- 27.给input边框和背景颜色设置全透明
给input边框和背景颜色设置全透明,但是里面的字不会消失 1.让背景颜色变透明(二选一) background-color:rgba(0,0,0,0); background:rgba(0,0,0, ...
随机推荐
- 关于DMA
用串口在dma中发东西的时候,,, 要判断DMA里是不是由东西,是不是在占用 当多个外设再用DMA的时候,,,要查看DMA有没有占用 一包数没发完,不要再传另一包
- 问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。
http://zhidao.baidu.com/link?url=BKp05mfOdKbEBh21svQelpVhYjzDkIpYUZay8_3ZLSndTQn5kK0eTwQG8jBvYnwh8US ...
- Gora官方范例 分类: C_OHTERS 2015-01-29 16:14 632人阅读 评论(0) 收藏
参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...
- CTR深度学习
深度学习在 CTR 中应用 一. Wide&&Deep 模型 首先给出Wide && Deep [1] 网络结构: 本质上是线性模型(左边部分, Wide model) ...
- “locktype”enum type 类型重定义问题的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用ado来连接数据库,结果出现这样一些编译错误: 1>f:\c++pro\iocptser\debug\msa ...
- notepad++ 正则替换
比如原来的代码是 {$id['nihao']}{$id['lal']}{pigcms:$id.leere} 查找目标写 \{\$id\['(\w+)'\]\} 替换为写 \{pigcms:\$id\. ...
- 《iOS Human Interface Guidelines》——Edit Menu
编辑菜单 用户能够显示一个编辑菜单来在文本视图.网页视图和图像视图运行诸如剪切.粘贴和选择的操作. 你能够调整一些菜单的行为来在你的app中给用户给多的内容控制.比方你能够: 指定哪一个标准菜单命令对 ...
- ### Hibernate中的事务与并发 ###
**事务相关的概念** 1. 什么是事务 * 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败. * 转账的例子:冠希给美美转钱,扣钱,加钱.两个操作组成了一个事情! ...
- PHP的SPL标准库里面的堆(SplHeap)怎么使用
PHP的SPL标准库里面的堆(SplHeap)怎么使用 一.总结 1.因为SplHeap是抽象类,所以要先继承,实现里面的抽象方法compare后,才能new对象使用. 二.PHP的SPL标准库里面的 ...
- 关于ulimit -a中需要修改的两个值
以root用户运行 ulimit -a 命令,其中有两个参数分别为: open files和max user processes 修改方法: vi /etc/security/limits.co ...