PMG
https://forum.pmg.org.ru/

Урок NeHe на тему плоскости
https://forum.pmg.org.ru/viewtopic.php?f=4&t=9508
Страница 1 из 1

Автор:  kurlyak [ 30 июл 2020 21:04 ]
Заголовок сообщения:  Урок NeHe на тему плоскости

Изучал урок NeHe Урок X2. Отсечение по пирамиде видимости в OpenGL
http://pmg.org.ru/nehe/nehex2.htm

Решил проверить суждения. Что бы по- проще, не писать структуры использовал DX- но расчеты software- то есть DX ничего не рассчитывает и свойства DX API на расчеты не влияют по идее (то есть там левосторонняя система координат а там правосторонняя, расположение элементов в матрицах разное тп.).

Значит код ниже. Есть плоскость p- нормаль по оси X и расстояние до плоскости 20- по оси X как ясно. Есть точка v с координатами по оси X равно 25. По идее очевидно- расстояние от точки v до плоскости p будет 5 единиц и точка спереди плоскости. Если я использую формулу из урока- расстояние от точки до плоскости- расстояние считает 45- что не верно очевидно. Так как точка перед плоскостью, и расстояние 5 единиц по оси X. Перед плоскостью на 5 единиц, потому что точка по X имеет 25 а расстояние от плоскости до начала координат 20 тоже по X. Расчет показывает не 5 единиц точка перед плоскостью (что очевидно) а 45 единиц. Вот формула из урока:

Код:
int main (void)
{

   D3DXPLANE p = D3DXPLANE(1.0, 0.0, 0.0, 20.0);
   D3DXVECTOR3 v = D3DXVECTOR3(25.0 , 0.0, 0.0);

   float distance = p.a * v.x + p.b * v.y + p.c * v.z + p.d;

   return 0;
}


Теперь я в коде меняю в формуле не (плюс) +p.d а делаю -p.d (минус). То есть когда я ставлю минус- тогда считает расстояние от точки до плоскости верно 5 единиц. Код ниже. Если делаю как в уроке плюс- расстояние 45 единиц считает- что по логике не верно.

Код:
int main (void)
{

   D3DXPLANE p = D3DXPLANE(1.0, 0.0, 0.0, 20.0);
   D3DXVECTOR3 v = D3DXVECTOR3(25.0 , 0.0, 0.0);

   float distance = p.a * v.x + p.b * v.y + p.c * v.z - p.d;

   return 0;
}


Я ставлю breakpoint на return 0; и отладчик показывает правильное значение distance 5 единиц, извините для простоты примера не сделал вывод на экран printf().

То есть почему так? Надо плюс или минус? Например я сделал на базе этого урока код на OpenGL- использовал в вычислениях плюс- как в уроке, работает правильно и выводит картинку- я менял на минус- не выводит картинку. Но мой пример выше в этой теме- показывает что надо не плюс а минус- по логике. То есть где правда? Почему я ставлю минус- и расчет только тогда верный в моем случае выше 5 единиц. Но работающий пример на базе урока использует плюс- и тоже работает правильно, выводит картинку. Давайте разберемся.

Автор:  MagicWolf [ 13 авг 2020 12:57 ]
Заголовок сообщения:  Re: Урок NeHe на тему плоскости

Скорее всего проблема в левосторонней системе координат. Но по идее определение правильное:
Плоскость определяется четырьмя числами: A,B,C и D, где {A,B,C} – вектор нормали к этой плоскости, а D – расстояние до начала координат.
Если надо ставить минус перед D, то значит D обратное.

Автор:  MagicWolf [ 13 авг 2020 13:55 ]
Заголовок сообщения:  Re: Урок NeHe на тему плоскости

Может посчитать p и v в правосторонней?

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/