1

我正在为我的计算机图形学课程做最后的项目。这一切都在 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);

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

4

0 回答 0