PMG http://forum.pmg.org.ru/ |
|
Урок NeHe на тему плоскости http://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/ |