Используя OpenGL ES, как я могу нарисовать плоскую ленту (квад) в трехмерном пространстве, концы которой всегда параллельны плоскости просмотра? - PullRequest
2 голосов
/ 15 февраля 2012

Хорошо, я уверен, что название озадачивало, но то, что мы пытаемся сделать, на самом деле довольно просто.Чтобы объяснить расчет, рассмотрим цилиндр, нарисованный в трехмерном пространстве, с учетом двух конечных точек его центральной линии и диаметра.Теперь нарисуйте его силуэт против плоскости экрана, но выровняйте концы так, чтобы они были параллельны друг другу и плоскости экрана.Это «внешний вид», который нам нужен.

Теперь мы можем просто сделать именно это ... нарисовать цилиндр с плоским освещением, чтобы получить этот эффект.Однако, поскольку мы фактически не отображаем 3D-шейдинг, вычисление всех треугольников, из которых состоит поверхность цилиндра, было бы полным излишним.

Технически, все, что нам нужно, это один квад, или самое большее, два треугольника.Если концептуальный цилиндр параллелен экрану, то результатом будет просто прямоугольник.Если цилиндр расположен под углом к ​​экрану или от него, то получающийся силуэт представляет собой простую трапецию.Вот пример ...

  • A.Параллельно экрану закройте
  • B.Параллельно экрану далеко
  • C.Угол наклона от экрана, сверху слева (рядом), справа внизу (далеко)
  • D.Под углом к ​​экрану, слева внизу (далеко), вверху справа (рядом)

enter image description here

Все, что мы хотели бы сделать, это в основном указать конечные точкиЦентральная линия (красная) в трехмерном пространстве вместе с «шириной» ленты.Но чтобы сделать все это, вам нужно учитывать не только конечные точки в трехмерном пространстве, но и место, где находится камера, чтобы определить, как сделать концы параллельными плоскости просмотра, чтобы не искажать их ширину, и в этой точке, вы также можете просто вернуться к обрезанному силуэту трансформированного цилиндра!

Так может ли кто-нибудь предложить хороший, простой способ сделать это?

1 Ответ

0 голосов
/ 18 июня 2013

Я бы начал с прямоугольника с длиной линии и желаемой ширины и выполнил бы ортогональная проекция

но это я.

Или вы можете взять любую линию с вашего самолета (камеры). И твой отрезок. Эти два могут быть использованы для формирования новой плоскости. Затем вычислите нормаль этой новой плоскости. Это будет перпендикулярно вашей линии и плоскости. Я думаю, это то, что вы ищете.

...