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