float[] a = { mPoints[0].X, mPoints[0].Y, mPoints[0].Z };
float[] b = { mPoints[1].X, mPoints[1].Y, mPoints[1].Z };
float[] c = { mPoints[2].X, mPoints[2].Y, mPoints[2].Z };
mNormal.X = (b[1] - a[1]) * (c[2] - a[2]) - (b[2] - a[2]) * (c[1] - a[1]);
mNormal.Y = (c[0] - a[0]) * (b[2] - a[2]) - (b[0] - a[0]) * (c[2] - a[2]);
mNormal.Z = (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
float f = (float)Math.Sqrt((float)mNormal.X * mNormal.X + mNormal.Y * mNormal.Y + mNormal.Z * mNormal.Z);
mNormal.X /= f;
mNormal.Y /= f;
mNormal.Z /= f;
Нормали
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
Цитата:
Originally posted by GLAGOLA
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
Пусть есть три точки: A, B, C, что задают плоскость.
Строишь два вектора: X= AB, Y= AC.
Вектор нормали: N= [X x Y] (Векторное произведение). Запишешь [Y x X] - тоже будет нормаль, только в другую сторону.
Ну и нормировочка: N= N/|N|
Цитата:
Originally posted by GLAGOLA
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
Код:
mPoints - массив из 3-ех точек
mNormal - вектор нормали
И еще одно: это будет нормаль для плоскости (для трех точек треугольника). Фигура из таких треугольников получится угловатая. А вот если надо ее сглаживать... Там тот еще геморой. Там надо для каждой точки рассчитываать среднюю нормаль по всем треугольникам, которые она образует. (во как загнул) Короче, что-то типа кода на С++ и C# есть. Надо - пиши на [email]fromForums@mail.ru[/email]
Цитата:
Originally posted by DarkAngel
mPoints - массив из 3-ех точек
mNormal - вектор нормали
И еще одно: это будет нормаль для плоскости (для трех точек треугольника). Фигура из таких треугольников получится угловатая. А вот если надо ее сглаживать... Там тот еще геморой. Там надо для каждой точки рассчитываать среднюю нормаль по всем треугольникам, которые она образует. (во как загнул) Короче, что-то типа кода на С++ и C# есть. Надо - пиши на [email]fromForums@mail.ru[/email]
Код:
float[] a = { mPoints[0].X, mPoints[0].Y, mPoints[0].Z };
float[] b = { mPoints[1].X, mPoints[1].Y, mPoints[1].Z };
float[] c = { mPoints[2].X, mPoints[2].Y, mPoints[2].Z };
mNormal.X = (b[1] - a[1]) * (c[2] - a[2]) - (b[2] - a[2]) * (c[1] - a[1]);
mNormal.Y = (c[0] - a[0]) * (b[2] - a[2]) - (b[0] - a[0]) * (c[2] - a[2]);
mNormal.Z = (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
float f = (float)Math.Sqrt((float)mNormal.X * mNormal.X + mNormal.Y * mNormal.Y + mNormal.Z * mNormal.Z);
mNormal.X /= f;
mNormal.Y /= f;
mNormal.Z /= f;
float[] b = { mPoints[1].X, mPoints[1].Y, mPoints[1].Z };
float[] c = { mPoints[2].X, mPoints[2].Y, mPoints[2].Z };
mNormal.X = (b[1] - a[1]) * (c[2] - a[2]) - (b[2] - a[2]) * (c[1] - a[1]);
mNormal.Y = (c[0] - a[0]) * (b[2] - a[2]) - (b[0] - a[0]) * (c[2] - a[2]);
mNormal.Z = (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
float f = (float)Math.Sqrt((float)mNormal.X * mNormal.X + mNormal.Y * mNormal.Y + mNormal.Z * mNormal.Z);
mNormal.X /= f;
mNormal.Y /= f;
mNormal.Z /= f;
mPoints - массив из 3-ех точек
mNormal - вектор нормали
И еще одно: это будет нормаль для плоскости (для трех точек треугольника). Фигура из таких треугольников получится угловатая. А вот если надо ее сглаживать... Там тот еще геморой. Там надо для каждой точки рассчитываать среднюю нормаль по всем треугольникам, которые она образует. (во как загнул) Короче, что-то типа кода на С++ и C# есть. Надо - пиши на [email]fromForums@mail.ru[/email]
А зачем нужны-то ети нормали????;)
Прочитай про свет в Direct3D и все поймешь
Цитата:
Originally posted by GLAGOLA
Прочитай про свет в Direct3D и все поймешь
Прочитай про свет в Direct3D и все поймешь
Во-первых, для отсечения нелицевых граней, во-вторых - для изображения освещенности.