3

本当に小さな粒子を扱うとき、照明に問題があります。私は粒子ベースの流体シミュレーションを行っており、現在、流体を非常に小さなポリゴン化された球体としてレンダリングしています (非常に小さいということは、球体の半径が約 0.03 単位であると言っています)。シーンの照明が思いどおりに照明されておらず、正しく表示されません。この画像のパーティクルの柔らかな照明に似たものを探しています... 正しいライティングのパーティクル

しかし、私の粒子はこのように見えます...

私の粒子がどのように見えるか

パーティクルに明るい白いセクションがあるのに対し、緑のパーティクルは柔らかく照らされており、大きな白いホットスポットがないことを確認してください。その理由は、ライトの設定か、単にパーティクルが小さすぎてライトがより大きなスペースを占めるという事実であることはわかっています (それは可能ですか??)。照明の設定は次のとおりです...

GLfloat mat_ambient[] = {0.5, 0.5, 0.5, 1.0};
GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat mat_shininess[] = {10.0};
GLfloat light_position[] = {0.0, 0.1, p_z, 1.0};
GLfloat model_ambient[] = {0.5, 0.5, 0.5, 1.0};

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
4

3 に答える 3

2

すべての提案に感謝しますが、残念ながら何も機能しませんでした。グラフィックスの教授と話し合ったところ、この問題は実際にはパーティクルのサイズと、OpenGL がディレクショナル ライトをどの頂点からも無限に離れているものとして扱うという事実に関連していると判断しました。それを修正する適切な方法は、このように光源の一定の減衰を変更することでした...

glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 10.0);

今、私の粒子はこのように見えます...

ここに画像の説明を入力 これはまさに私が求めていた照明です!

于 2011-04-27T18:38:43.203 に答える
1

粒子のサイズは問題ではありません。色が飽和しすぎています。

RGB コンポーネントごとに、ambient + diffuse + specular <= 1.0

このようなシーンambientでは、拡散反射光は 0.1 程度、拡散反射光は 0.6 程度、残りは鏡面反射光であると予想されます。

于 2011-04-27T11:00:36.487 に答える