Как мне указать прямоугольники в 3D-сцене? - PullRequest
0 голосов
/ 09 февраля 2011

При рендеринге трехмерных прямоугольников (то есть прямоугольников в трехмерном пространстве), конечно, они указываются в виде списка вершин для двух треугольников.Однако это представление содержит много посторонней информации, которая становится утомительной для многократного кодирования.Я хотел бы создать объект «Прямоугольник», который позволит мне указать его текстуру, размер, положение и ориентацию в пространстве и экспортировать список вершин (и индексов), но я не уверен, что это лучший способсделай это.Должен ли я указать положение нижнего левого угла (до поворота) или центра прямоугольника?Как указать ориентацию как вектор, содержащий углы поворота?Это настолько простое и стандартное требование, что я уверен, что люди думали об этом раньше, но я не могу найти ничего на этом сайте или в другом месте по этому вопросу.Я планирую часто использовать эти объекты, поэтому моей главной целью (помимо производительности) является простота использования, а не какое-либо отношение к внутреннему представлению.Мне было бы несложно просто написать первое, о чем я могу подумать, но я не хочу ничего упустить и сделать это излишне сложным.

Итак, как я должен представлять объект Rectangle?Мнения приветствуются, но источники были бы особенно полезны.

Редактировать: если это поможет, я думаю, что я бы в первую очередь использовал прямоугольники на гранях кубов, хотя не обязательно как целые лица этих кубиков.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Вероятно, было бы проще всего сохранить однородную матрицу, которая преобразует стандартный, выровненный по оси квадрат в нужное место, вместе с отдельной матрицей, определяющей способ наложения текстуры на нее.В матрице местоположения вы можете хранить матрицу 4x3, которая не влияет на w -координату.Это только немного избыточно: он использует 12 значений, где для общего прямоугольника нужно 8, но, с другой стороны, будет гораздо проще преобразовать его обратно в форму, пригодную для рендеринга.

В качестве альтернативы вы можетесохранить местоположение точки (ребро или центр в зависимости от того, что наиболее удобно) и два вектора направления, описывающих направление и длину каждого ребра;Вы полагаетесь на свой генератор прямоугольников, чтобы убедиться, что векторы ребер ортогональны.Это примет 9 значений, что почти лучшее, что вы можете сделать.

Для отображения текстуры вы можете сохранить матрицу 3x2, которая определяет аффинное отображение координат (u, v), в координаты, определяемые каккрая прямоугольника.Вы можете выбрать отображение на основе нуля (0,1) x (0,1) или симметричное (-1,1) x (-1,1) в зависимости от того, что удобно для вашего приложения.В любом случае для этого потребуется 6 значений.

1 голос
/ 09 февраля 2011

Поскольку прямоугольник - это просто ограниченная плоскость, как насчет сохранения его как продолжения этого: точки и вектора нормали (определяющих центр - или, возможно, один из углов - и ориентацию);но добавить еще два компонента для границ ширины и высоты?

0 голосов
/ 09 февраля 2011

Я думаю, что это действительно зависит от того, как вы собираетесь использовать прямоугольник.

Например: если у вас много прямоугольников, лучше всего сохранить три точки одного из двух треугольников, потому что вынужно только вычислить еще одну точку.

Если вы обычно центрируете свои прямоугольники на чем-то, центральная точка, ширина, высота и углы поворота могут быть более подходящими.

Я бы сказал: начните сто, что кажется вам естественным.Убедитесь, что ваш класс способен выполнять все необходимые вычисления и скрывать их за средствами доступа.Иметь хороший набор тестов для этого.

Таким образом, вы можете изменить реализацию в любое время.Или вы можете даже иметь разные реализации прямоугольника для разных нужд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...