sinawear

导航

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);

5OBUKMR94_POJU@]]EJK2UTA(rota * trans *obj 先平移后旋转) DX :  obj * trans * rota;

glTranslatef(0,0,1);
glRotatef(45,1.0f,0.0f,0.0f);

 

ZS3`%YL){G9QO%4JW601URVB(trans * rota * ojb 先旋转后平移)

 

glRotatef(45,1.0f,0.0f,0.0f);
glTranslatef(0,0,1);
glRotatef(-45,1.0f,0.0f,0.0f);

S`MO{EOJ)B}EH[F$)9DG_)4C

 

生成的物体会显示在屏幕中心下方. 物体并没有倾斜.生成的效果使我困惑了,我用DX的时候一直认为,物体正对着屏幕,旋转后平移逆旋转,物体仍然是倾斜的.

怎么也想不通为什么仍是正面?

在写多边形物体运动, 大量运用了这个技巧:平移 旋转 逆平移. 那么可以理解为改变的是物体旋转点的位置. 精确使用能模仿人肩和手臂的效果,

 

 

旋转 平移 逆旋转

image(物体初始化)

 

image(盒子绕中点绕X轴旋转30度)

image(沿z轴平移一段距离)

 

image(盒子绕中点绕X轴旋转-30度)

j即使在y和z轴上有平移,物体也不会倾斜.只能接受事实了, 物体确实会被抵消掉倾斜, 需要纠正脑海中的观念了.

但这如何精确控制物体显示的位置呢?

 

无标题。gif

 

      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();

posted on 2012-10-29 22:45  sinawear  阅读(713)  评论(0)    收藏  举报