OpenGL API

1. glRotatef and glTranslatef

void glTranslatef(GLfloat  x,  GLfloat  y,  GLfloat  z);

void glRotatef(GLfloat  angle,  GLfloat  x,  GLfloat  y,  GLfloat  z); // angle表示旋转的角度(注意单位不是弧度),(x,y,z)表示转轴的方向(从(0,0,0)到(x,y,z))


矩阵的变换是右乘

1> 先旋转再平移

glTranslatef(-0.1*i,0,0)

glRotatef(45,0,1,0)

假设i不断增加,则绘图后的效果是


2> 先平移再旋转

glRotatef(45,0,1,0)

glTranslatef(-5*i,0,0)

假设i不断增加,则绘图后的效果是


2. glBlendFunc

void  glBlendFunc(GLenum sfactor,GLenum dfactor);

sfactor 源混合因子, dfactor 目标混合因子

假设源颜色(r1,g1,b1,a1), 目标颜色(r2,g2,b2,a2), 源因子(x1,y1,z1,w1), 目标颜色(x2,y2,z2,w2)

则混合后颜色为(r1*x1 + r2*x2, g1*y1 + g2*y2, b1*z1 + b2*z2 + a1*w1 + a2*w2), 即各个颜色与因子相乘,然后相同颜色相加。看着网上用Rs,Ds等表示真是头晕常见的选项:

GL_ZERO:      表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
GL_ONE:       表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。
GL_SRC_COLOR:把源颜色的四个分量分别作为因子的四个分量

GL_ONE_MINUS_SRC_COLOR、GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR

前两个在OpenGL旧版本中只能用于设置目标因子,后两个在OpenGL旧版本中只能用于设置源因子。新版本的OpenGL则没有这个限制

glBlendFunc(GL_ONE, GL_ZERO) 

则表示完全使用源颜色,完全不使用目标颜色,因此画面效果和不使用混合的时候一致(当然效率可能会低一点点)。如果没有设置源因子和目标因子,则默认情况就是这样的设置。

glBlendFunc(GL_ZERO, GL_ONE)

则表示完全不使用源颜色,因此无论你想画什么,最后都不会被画上去了,有是有特殊用途


glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

表示源颜色乘以自身的alpha值,目标颜色乘以1.0减去源颜色的alpha值,这样一来,源颜色的alpha值越大,则产生的新颜色中源颜色所占比例就越大,而目标颜色所占比例则减小。这种情况下,我们可以简单的将源颜色的alpha值理解为“不透明度”。这也是混合时最常用的方式。

glBlendFunc(GL_ONE, GL_ONE)

则表示完全使用源颜色和目标颜色,最终的颜色实际上就是两种颜色的简单相加。例如红色(1, 0, 0)和绿色(0, 1, 0)相加得到(1, 1, 0),结果为黄色。


所谓源颜色和目标颜色,是跟绘制的顺序有关的。假如先绘制了一个红色的物体,再在其上绘制绿色的物体。则绿色是源颜色,红色是目标颜色。


3. void glDepthMask(GLboolean  flag)

enable or disable writing into the depth buffer

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); 打开深度缓冲

只要存在深度缓冲区,无论是否启用深度测试,OpenGL在像素被绘制时都会尝试将深度数据写入到缓冲区内,除非调用了glDepthMask(GL_FALSE)来禁止写入。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值