PMG

Форумы по созданию игр
Текущее время: 09 дек 2024 10:01

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Урок NeHe на тему плоскости
СообщениеДобавлено: 30 июл 2020 21:04 
Не в сети
Любитель

Зарегистрирован: 19 сен 2008 14:48
Сообщения: 44
Изучал урок 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 единиц. Но работающий пример на базе урока использует плюс- и тоже работает правильно, выводит картинку. Давайте разберемся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок NeHe на тему плоскости
СообщениеДобавлено: 13 авг 2020 12:57 
Не в сети
Гуру
Аватара пользователя

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

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок NeHe на тему плоскости
СообщениеДобавлено: 13 авг 2020 13:55 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Может посчитать p и v в правосторонней?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB