Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нормали

1.8K
13 июля 2005 года
GLAGOLA
80 / / 06.11.2004
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)
391
14 июля 2005 года
Archie
562 / / 03.02.2005
Цитата:
Originally posted by GLAGOLA
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)



Пусть есть три точки: A, B, C, что задают плоскость.
Строишь два вектора: X= AB, Y= AC.
Вектор нормали: N= [X x Y] (Векторное произведение). Запишешь [Y x X] - тоже будет нормаль, только в другую сторону.
Ну и нормировочка: N= N/|N|

458
15 июля 2005 года
DarkAngel
27 / / 20.01.2000
Цитата:
Originally posted by GLAGOLA
Ребята помогите напишите мне четкое уравнение нормали к плосоксти(если имеется 3 точки в 3D простарстве) и желательно расписать подробно (для каждой координаты)



Код:
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;


mPoints - массив из 3-ех точек
mNormal - вектор нормали

И еще одно: это будет нормаль для плоскости (для трех точек треугольника). Фигура из таких треугольников получится угловатая. А вот если надо ее сглаживать... Там тот еще геморой. Там надо для каждой точки рассчитываать среднюю нормаль по всем треугольникам, которые она образует. (во как загнул) Короче, что-то типа кода на С++ и C# есть. Надо - пиши на [email]fromForums@mail.ru[/email]
9.5K
06 августа 2005 года
LaStRicK
39 / / 05.08.2005
Цитата:
Originally posted by DarkAngel
Код:
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;


mPoints - массив из 3-ех точек
mNormal - вектор нормали

И еще одно: это будет нормаль для плоскости (для трех точек треугольника). Фигура из таких треугольников получится угловатая. А вот если надо ее сглаживать... Там тот еще геморой. Там надо для каждой точки рассчитываать среднюю нормаль по всем треугольникам, которые она образует. (во как загнул) Короче, что-то типа кода на С++ и C# есть. Надо - пиши на [email]fromForums@mail.ru[/email]



А зачем нужны-то ети нормали????;)

1.8K
06 августа 2005 года
GLAGOLA
80 / / 06.11.2004
Прочитай про свет в Direct3D и все поймешь
247
06 августа 2005 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by GLAGOLA
Прочитай про свет в Direct3D и все поймешь


Во-первых, для отсечения нелицевых граней, во-вторых - для изображения освещенности.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог