コンピュータ グラフィックス コースの最終プロジェクトに取り組んでいます。それはすべて OpenGL で行われます。私のプロジェクトは、水中の泡のシミュレーションを作成することです。現実的ではないはずですが、プロジェクト提案のすべての要件を満たしているので、さらに高度なことを行う予定です。
現在、私の泡は現実的ではありません。それらは半透明で、それぞれの周りに半透明の白い円があります。照明は、GL_LIGHT_MODEL_TWO_SIDE、glBlendFunc(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)、および GL_POLYGON_SMOOTH を使用して計算されます。これにより、明らかな泡の外観が得られます。
私が得ることができない唯一のものは、スペキュラーハイライトです!それらはそこにありますが、半透明の白であり、光沢のある表面上の実際のスペキュラー ハイライトの不透明な白ではありません。
アルファをすべて 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);
半透明のオブジェクトで明るく白いスペキュラ ハイライトを取得する方法を提案できる人はいますか?