私は OpenGL でジオメトリを扱っており、現在は照明を扱っています。ジオメトリを変換すると、法線が追従せず、役に立たないことに気付きました。
どのように変換マトリックスをジオメトリに適用し、法線を維持しますか?
現在、次のコードを使用しています。
GL.PushMatrix();
if (Offset != null)
{
GL.Translate(Offset.X, Offset.Y, Offset.Z);
}
GL.Begin(BeginMode.Triangles);
foreach (var face in Faces)
{
foreach (var i in face)
{
var point = Points[i - 1];
GL.Normal3(point);
GL.Vertex3(point);
}
}
GL.End();
GL.PopMatrix();
ジオメトリにオフセットを与えると、適切にレンダリングされません (たとえば、法線が正しくマップされません。
どんな助けでも素晴らしいでしょう。
ps、私は OpenTK ラッパーを使用していますが、通常の OpenGL は直接変換されます。
編集:
上記のコードを次のように変更すると、わかりました。
GL.PushMatrix();
//if (Offset != null)
//{
// GL.Translate(Offset.X, Offset.Y, Offset.Z);
//}
GL.Begin(BeginMode.Triangles);
foreach (var face in Faces)
{
foreach (var i in face)
{
var point = Points[i - 1];
if (Offset == null)
{
GL.Normal3(point);
GL.Vertex3(point);
}
else
{
var pt = new Vector3d(Offset.X + point.X, Offset.Y + point.Y, Offset.Z + point.Z);
GL.Normal3(pt);
GL.Vertex3(pt);
}
}
}
GL.End();
GL.PopMatrix();
すべてが正常にレンダリングされます。
ここにいくつかのスクリーンショットがあります(コードに応じて)