Хорошо, я уверен, что название озадачивало, но то, что мы пытаемся сделать, на самом деле довольно просто.Чтобы объяснить расчет, рассмотрим цилиндр, нарисованный в трехмерном пространстве, с учетом двух конечных точек его центральной линии и диаметра.Теперь нарисуйте его силуэт против плоскости экрана, но выровняйте концы так, чтобы они были параллельны друг другу и плоскости экрана.Это «внешний вид», который нам нужен.
Теперь мы можем просто сделать именно это ... нарисовать цилиндр с плоским освещением, чтобы получить этот эффект.Однако, поскольку мы фактически не отображаем 3D-шейдинг, вычисление всех треугольников, из которых состоит поверхность цилиндра, было бы полным излишним.
Технически, все, что нам нужно, это один квад, или самое большее, два треугольника.Если концептуальный цилиндр параллелен экрану, то результатом будет просто прямоугольник.Если цилиндр расположен под углом к экрану или от него, то получающийся силуэт представляет собой простую трапецию.Вот пример ...
- A.Параллельно экрану закройте
- B.Параллельно экрану далеко
- C.Угол наклона от экрана, сверху слева (рядом), справа внизу (далеко)
- D.Под углом к экрану, слева внизу (далеко), вверху справа (рядом)
Все, что мы хотели бы сделать, это в основном указать конечные точкиЦентральная линия (красная) в трехмерном пространстве вместе с «шириной» ленты.Но чтобы сделать все это, вам нужно учитывать не только конечные точки в трехмерном пространстве, но и место, где находится камера, чтобы определить, как сделать концы параллельными плоскости просмотра, чтобы не искажать их ширину, и в этой точке, вы также можете просто вернуться к обрезанному силуэту трансформированного цилиндра!
Так может ли кто-нибудь предложить хороший, простой способ сделать это?