Вращающаяся часть изображения в трехмерном пространстве - PullRequest
2 голосов
/ 14 декабря 2010

Вот настройка: это для художественного сайта электронной коммерции, где некоторые картины являются переносами холста. Картина оборачивается вокруг сторон и сверху и снизу холста. У нас есть изображения всей картины в высоком разрешении, но мы хотим отобразить квази-3D представление изображения, на котором вы можете видеть, как стороны картины обвивают холст. Вот примерный набросок того, о чем я говорю:

alt text

Мой вопрос: как я могу повернуть изображение в трехмерном пространстве? Подход, который, я думаю, я бы хотел использовать, состоит в том, чтобы отрезать часть верхней и боковой сторон изображения, а затем повернуть его в 3D, а затем снова прикрепить его к верхней и боковой части, чтобы придать ему трехмерный вид. Как мне это сделать? Это можно сделать с помощью любой технологии .Net (GDI +, WPF и т. Д.).

Ответы [ 4 ]

3 голосов
/ 14 декабря 2010

В WPF, используя класс ViewPort3D, вы можете создать кубоид размером 8x5x1. Создайте изображение как текстуру, а затем примените текстуру к передней грани (8x5) и боковым граням (5x1), а также к верхней и нижней граням (8x1), используя координаты текстуры. Координаты передней грани должны быть: (1/9, 1/6), (8/9, 1/6), (1/9, 5/6) и (8/9, 5/6) для передней грани и от ближайшего ребра до этих координат для сторон, например для левой стороны: (0, 1/6), (1/9, 1/6), (0, 5/6) и (1/9, 5/6) для левой стороны.

Edit: Если вы хотите выполнять ротацию 3D-модели холста, вы можете следовать советам здесь: Как я могу сделать 3D-преобразование в WPF?

2 голосов
/ 17 декабря 2010

Похоже, вам не нужно делать настоящее 3D, а нужно только подделывать его.

Отрежьте четыре полосы вдоль верхней, нижней, левой и правой частей изображения. Подбрасывайте снизу и справа (по вашему эскизу в вопросе). Масштабировать и сдвигать полосы (я не достаточно опытен в .net / wpf, чтобы знать, как, но он может это сделать). Верх будет масштабирован по вертикали в 0,5 раза (предположение - выберете, чтобы соответствовать желаемому конечному 3D-изображению) и сдвинется по горизонтали. Результат накладывается на выходное изображение как верхняя сторона холста. Левая полоса будет масштабироваться горизонтально и сдвигаться вертикально.

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

Эта страница может быть образовательной: http://www.idomaths.com/linear_transformation.php
и это может быть полезно: http://en.csharp -online.net / GDIplus_Graphics_Transformation% E2% 80% 94Image_Transformation

0 голосов
/ 14 декабря 2010

Метод грубой силы (который может быть самым простым) состоит в том, чтобы отобразить координаты текстуры u, v для каждой из трех граней на три рекламных щита, представляющих три стороны холста (рекламный щит - это всего два треугольника,Прямоугольник).Затем поверните весь холст (все три рекламных щита), используя матричные преобразования.Тада!

В качестве альтернативы, вы можете перемещать 3-х позиционное положение камеры с помощью трансформации, а не холста.Шесть из одного, половина другого - как говорится.

0 голосов
/ 14 декабря 2010

У меня нет опыта в подобных вещах.Но когда я увидел этот вопрос, первое, что пришло мне в голову, - это смешная Unicornify для SO.

В этом создании статьи от balpha он объяснил, как вращается 2-я сфера единорога в трехмерном пространстве.код написан на python.Если вам интересно, вы можете взглянуть на это.Но я не совсем уверен, что это поможет вам.

...