1

コンピュータ グラフィックス コースの最終プロジェクトに取り組んでいます。それはすべて 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);

半透明のオブジェクトで明るく白いスペキュラ ハイライトを取得する方法を提案できる人はいますか?

4

0 に答える 0