opengl中的透明度(使用FLTK)

opengl中的透明度(使用FLTK),opengl,transparency,fltk,Opengl,Transparency,Fltk,在FLTK的opengl实现中,我正在FLU Gl窗口中绘制一些3D结构。这些图像被绘制和旋转,因此代码看起来像 glTranslatef(-xshift,-yshift,-zshift); glRotatef(ang1,ang2,ang3); glTranslatef(xshift,yshift,zshift); glColor4f((120.0/256.0),(120.0/256.0),(120.0/256.0),0.2); for (int side=0;side<num_sides

在FLTK的opengl实现中,我正在FLU Gl窗口中绘制一些3D结构。这些图像被绘制和旋转,因此代码看起来像

glTranslatef(-xshift,-yshift,-zshift);
glRotatef(ang1,ang2,ang3);
glTranslatef(xshift,yshift,zshift);
glColor4f((120.0/256.0),(120.0/256.0),(120.0/256.0),0.2);
for (int side=0;side<num_sides;side++){
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable( GL_BLEND );
    glBegin(GL_TRIANGLES);


    //draw shape

    glEnd();
    glDisable(GL_BLEND);
}
glTranslatef(-xshift,-yshift,-zshift);
glRotatef(ang1,ang2,ang3);
glTranslatef(xshift、yshift、zshift);
glColor4f((120.0/256.0),(120.0/256.0),(120.0/256.0),0.2);

对于(int side=0;side三角形的顺序很重要。要获得所需的透明度效果,您需要从后到前顺序渲染三角形,因为硬件混合通过读取深度缓冲区中片段的颜色并将其与当前着色的片段混合来工作。这就是为什么您会得到不同的结果当你旋转立方体时,因为你没有改变立方体中三角形的顺序。你可能还想研究与顺序无关的透明技术


根据每帧有多少个三角形进行排序可能会非常昂贵。一种近似技术是沿x、y和z轴对三角形进行预排序,然后选择与查看方向最匹配的排序顺序。这只在一定程度上起作用。一种流行的与顺序无关的透明类型y技术是深度剥离。下面是一个教程,其中包含一些实现该技术的代码:。您可能还想阅读原始文章以更好地理解该技术:。

谢谢,这很有意义。听起来还需要付出更多的努力,不仅仅是因为我现在必须掌握z轴的旋转,或者更确切地说,“新”轴是z轴曾经所在的位置……那么在发送之前,我可能会根据这个新的“轴”对我所有的多边形边进行排序。这是否有太密集的危险?/做这件事有什么明显的技巧吗?有没有关于这些顺序无关技术的入门介绍的好链接?我已经更新了我的答案,包括一些与命令无关的透明性的链接。谢谢,现在有了这个想法。我会仔细考虑一下我的需求会决定我做什么,但是我一定会考虑深度剥离的事情。