ヘア パーティクル システムを使用して Blender 2.66 でヘアスタイルを作成しました。これは次のようになります。
ご覧のとおり、明度は線の断片に適用されています。変換後、ヘアスタイル メッシュを OBJ ファイル形式にエクスポートしました。私は自分のプログラムでそれを解析し、レンダリングは次のようになります:
パーティクルは GL_LINES として描画されています (私の OBJ ファイルでは、面ごとに 2 つの頂点があります)。
別のテスト プログラムでは、単純な線の断片で光度をテストしたいと考えていました。ここに私の頂点バッファがあります:
static GLfloat vertices[6] =
{
0.000000f, 0.000000f, -2.000000f,
0.000000f, 0.000000f, 2.000000f
};
static GLfloat normals[6] =
{
0.000000f, 1.000000f, 0.000000f,
0.000000f, 1.000000f, 0.000000f
};
static GLfloat colors[6] =
{
0.000000f, 0.000000f, 1.000000f,
0.000000f, 0.000000f, 1.000000f
};
そして結果(線はX軸に直交する原点で回転しています->より良い結果を得るためにglLineWidth(5.0f)を呼び出しました):
リアルタイム アニメーションで、光度は正しいが、線の特定の「側」にあることがわかりました。線分には無限の法線があると想定されており、法線は 2 つ (頂点ごとに 1 つ) しかないため、これは正常です。これらの 2 つの法線が方程式 Y = 0 -> n(0.0, 1.0, 0.0) の平面の法線であることを正確に示したいと思います。では、頂点ごとに複数の法線を追加することは可能でしょうか? OpengL ではそれができないと思います。しかし、おそらく別の方法が可能です。これは、線分の各部分で正しい光度を計算するために何をしたいのかを説明する図です。
上記の最初の写真でわかるように、Blender は線分でリアルタイムに光度を計算できます。さらに、この画像にあるのは OpenGL レンダーです。だから、それができると確信しています。同じ線分の座標を 2 回繰り返してみましたが、2 行目では反対の法線 n2(0.0, -1.0, 0.0) を適用しましたが、うまくいきません。「向こう側」は「暗い」です。2 つのポリゴンの場合も同じです。現在、GLSL シェーダーを使用しています。ジオメトリ シェーダーやテッセレーション シェーダーなどの特殊なシェーダーを使用することで可能だと思います。たぶんCUDA言語が必要です。確信はないけど。
誰でも私を助けることができますか?