OpenGL alpha混合在透明对象内

时间:2012-01-04 17:16:17

标签: opengl alphablending alpha-transparency

我在OpenGL中模拟透明度时遇到了问题。 这是场景:

我有一个由球体代表的船。 现在我想在船上添加一个盾牌。我也选择了一个球体,但半径更大并设置了α因子0.5(不透明度)。但是,屏蔽不会出现,颜色不会混合(好像它不在那里)。

相机位于第一个球体的中心。我认为问题在于我在球体内部,所以opengl会忽略它(而不是绘制它)。

代码如下所示:

//ship colors setup with alpha 1.0f
glutSolidSphere(1, 100, 100); original sphere ( ship )
//shield colors setup with alpha 0.5f
glutSolidSphere(3, 100, 100); //the shield whose colors should blend with the rest of  the scene

我已经在船前模拟了一个平行六面体的盾牌。 然而,这不是我想要的......

编辑:我发现了错误。我也设置了gluPerspective()的附近参数 高,所以即使我正确设置了alpha值,相机也始终在物体前面,所以没有办法看到它。

1 个答案:

答案 0 :(得分:0)

似乎在这里工作:

#include <GL/glut.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0, 0, -5);

    glDisable(GL_BLEND); 
    glColor4ub(255,0,0,255);
    glutSolidCube(1.0);

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glColor4ub(0,255,0,64);
    glutSolidSphere(1.5, 100, 100);

    glFlush();
    glutSwapBuffers();
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective( 60, (double)w / (double)h, 0.01, 100 );
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);

    glutInitWindowSize(800,600);
    glutCreateWindow("Blending");

    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return EXIT_SUCCESS;
}