半透明对象的镜面高光 - OpenGL

时间:2013-11-22 18:21:20

标签: opengl translucency specular

我正在为我的计算机图形学课程开展最后的项目。这一切都在OpenGL中完成。我的项目是在水下创建气泡模拟。这不应该是现实的,但是,我已经完成了项目提案的所有要求,所以我希望做一些更高级的工作。

现在,我的泡泡不太现实。它们是半透明的,每个周围都有半透明的白色圆圈。使用GL_LIGHT_MODEL_TWO_SIDE,glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)和GL_POLYGON_SMOOTH计算照明。这给了一个明显的泡沫外观。

我无法得到的一件事是镜面高光!它们在那里,但它们是半透明的白色,而不是在光泽表面上的真实镜面高光不透明的白色。

如果我将我的alpha设置为全1,那么就会有漂亮的白色镜面高光,但是我的对象不再是半透明的。

我玩过GL_SHININESS,但收效甚微。

这是我的照明和材料代码:

glEnable(GL_LINE_SMOOTH);
glEnable (GL_POLYGON_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glShadeModel(GL_SMOOTH);

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);

GLfloat mat_ambient[] = { 0.1, 0.1, 0.1, 0.15 };
GLfloat mat_diffuse[] = { 0.5, 0.95, 0.8, 0.2 };
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_emission[] = { 0.0, 0.0, 0.0, 0.3 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
glMateriali(GL_FRONT_AND_BACK,  GL_SHININESS, 32);
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, mat_emission);

有人能建议一种在半透明物体上获得明亮的白色镜面高光的方法吗?

0 个答案:

没有答案