固定功能OpenGL的半透明度?

时间:2017-06-01 21:26:29

标签: c++ opengl

我试图渲染一个水族馆,为此我需要一个半透明的长方体。我做错了什么?

glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_FRONT); 
glEnableClientState(GL_COLOR_ARRAY);
glDepthMask(GL_FALSE);  
glVertexPointer(3,GL_FLOAT,0,myCubeVertices); //the cuboid model is under myCube
glColorPointer(3,GL_FLOAT,0,myCubeColors); //just blue

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);   
glDrawArrays(GL_QUADS,0,myCubeVertexCount);
glDepthMask(GL_TRUE);
glDisableClientState(GL_COLOR_ARRAY);
glDisable(GL_CULL_FACE);
glDisable(GL_BLEND);

这就是现在的样子: aquarium

1 个答案:

答案 0 :(得分:0)

glColorPointer(3,GL_FLOAT,0,myCubeColors); //just blue

这是你出错的地方。 myCubeColors需要是RGBA格式,A表示alpha或transparancy,0.0表示完全透明。

所以它看起来像:

glColorPointer(4,GL_FLOAT,0,myCubeColors); //just blue

如果您希望使用RGB格式(也就是vec3而不是vec4),您还需要对正在使用的任何着色器进行适当的更改。

希望有所帮助。