OpenGL найти расстояние до точки - PullRequest
0 голосов
/ 11 мая 2011

У меня есть виртуальный пейзаж с возможностью ходить от первого лица. Я хочу иметь возможность идти по любому склону, если он составляет 45 градусов или меньше. Насколько я знаю, это включает в себя перевод вашей текущей позиции из x единиц, а затем определение расстояния между переведенной точкой и землей. Если это расстояние составляет х единиц или более, пользователь может пройти там. Если нет, пользователь не может. Я понятия не имею, как найти расстояние между одной точкой и ближайшей точкой в ​​отрицательном направлении y. Я запрограммировал это в Java3D, но я не знаю, как запрограммировать это в OpenGL.

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Лай эту проблему в OpenGL лает неправильное дерево: единственная цель OpenGL - рисовать красивые картинки на экране. Это не математическая библиотека!

В зависимости от ваших требований существует несколько решений. Вот как я бы решил эту проблему: нормали, которые вы вычисляете для правильного затенения, дают наклон каждой точки. Скажем, ваша карта высот (= ландшафт) находится в плоскости XY, а ваш гравитационный вектор g = -Z, тогда нормальная сила равна terrain_normal(x,y) · g. Нормальная сила - это то, что «толкает» ваши ноги о землю. Без достаточной нормальной силы недостаточно трения, чтобы передать силу мышц в движение, перпендикулярное земле. Если вы посмотрите на формулу нормальной силы, то увидите, что чем больше угол между g и terrain_normal(x,y) отклоняется, тем меньше нормальная сила.

Таким образом, в вашей программе вы можете просто проверить, превышает ли нормальная сила какой-либо порог; правильно вы проецируете приведенную силу трения на местность и используете ее в качестве вектора ускорения.

0 голосов
/ 11 мая 2011

Если у вас есть обычная треугольная карта высот, вы можете использовать барицентрические координаты для интерполяции значений Z из заданной (X, Y) позиции.

...