Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
半透明对象的镜面反射高光-OpenGL_Opengl_Translucency_Specular - Fatal编程技术网

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

半透明对象的镜面反射高光-OpenGL,opengl,translucency,specular,Opengl,Translucency,Specular,我正在为我的计算机图形学课程做最后一个项目。这一切都是在OpenGL中完成的。我的项目是模拟水下的气泡。这是不应该是现实的,但是,我已经做了我的项目提案的所有要求,所以我期待做一些更先进的东西 现在,我的泡沫并不现实。它们是半透明的,每个周围都有一个半透明的白色圆圈。使用GL_LIGHT_MODEL_TWO_SIDE、glBlendFunc(GL_SRC_ALPHA、GL_ONE_减去SRC_ALPHA)和GL_POLYGON_SMOOTH计算照明。这给了一个明显的泡沫外观 有一件事,我不能得到

我正在为我的计算机图形学课程做最后一个项目。这一切都是在OpenGL中完成的。我的项目是模拟水下的气泡。这是不应该是现实的,但是,我已经做了我的项目提案的所有要求,所以我期待做一些更先进的东西

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

有一件事,我不能得到,是镜面高光!它们确实存在,但它们是半透明的白色,而不是闪亮表面上真实镜面反射高光的不透明白色

如果我将alpha设置为all 1,则会有漂亮的白色镜面反射高光,但我的对象不再是半透明的

我一直在玩GL_shiness,几乎没有成功

以下是我的照明和材料代码:

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);

有人能提出一种在半透明对象上获得明亮、白色镜面反射高光的方法吗?

一个您想要的和您得到的快照可能会帮助我们回答您的问题。您可能需要编写自己的lightning shader。有许多着色器模拟“标准”OpenGL行为,您可以稍微调整它,使受镜面反射影响的颜色变得更加不透明。fragColor=镜面反射*光镜面反射;fragColor.a=长度(fragColor.rgb);诸如此类