OPENGL混合
关于混合问题的困惑解答:
glBlendFunc(GL_SRC_ALPHA,GL_ONE),是用于设置混合因子.
第一个参数是源的因子,第二个参数是目标的因子.
GL_SRC_ALPHA,表示alpha混合因子为源的alpha分量.
GL_ONE,表示使用的alpha分量为1;
目标是指已经绘制上去的, 源是指将要绘制的.
glColor4f(1,1,1,0.5); // functions set the current color
(1)无光源:则glColor4f()的alpha有效,
目标为BLUE(0,0,1), 源为RED(1,0,0);使用上面公式,则:
Color =RED*0.5 + BLUE*1;
可参看:
http://blog.csdn.net/tmljs1988/article/details/6445100
关于旋转再平移再逆旋转:
比如:
glRotatef(45,1.0f,0.0f,0.0f);
glTranslatef(0,0,1);
A(rota * trans *obj 先平移后旋转) DX : obj * trans * rota;
glRotatef(45,1.0f,0.0f,0.0f);
glRotatef(45,1.0f,0.0f,0.0f);
glTranslatef(0,0,1);
glRotatef(-45,1.0f,0.0f,0.0f);
生成的物体会显示在屏幕中心下方. 物体并没有倾斜.生成的效果使我困惑了,我用DX的时候一直认为,物体正对着屏幕,旋转后平移逆旋转,物体仍然是倾斜的.
怎么也想不通为什么仍是正面?
在写多边形物体运动, 大量运用了这个技巧:平移 旋转 逆平移. 那么可以理解为改变的是物体旋转点的位置. 精确使用能模仿人肩和手臂的效果,
旋转 平移 逆旋转
j即使在y和z轴上有平移,物体也不会倾斜.只能接受事实了, 物体确实会被抵消掉倾斜, 需要纠正脑海中的观念了.
但这如何精确控制物体显示的位置呢?
glPushMatrix();glRotatef(45,1.0f,0.0f,0.0f);glTranslatef(0,0,1);glRotatef(-45,1.0f,0.0f,0.0f);glBegin(GL_QUADS);glColor4f(1,0,0, 0.5);glTexCoord2f(0,1); glVertex3f(-1,1,0);glTexCoord2f(1,1); glVertex3f(1,1,0);glTexCoord2f(1,0); glVertex3f(1,-1,0);glTexCoord2f(0,0); glVertex3f(-1,-1,0);glEnd();glPopMatrix();







浙公网安备 33010602011771号