2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Модель кубика.
Сообщение19.12.2011, 17:05 


15/10/10
3
Идея очень простая. Реализовать программу, рисующую кубик, который можно вращать. При решении столкнулся с проблемой перспективы.
Текущая реализация :

Есть множество точек соответствующих вершинам кубика. Их соответственно 8. При этом центр кубика находится в $(0,0,0)$. "Вращаем" кубик с помощью преобразования координат (умножая на соответствующую матрицу). Для отрисовки кубика первоначально брались просто X и Y координаты. При этом кубик выглядел естественно слегка не натурально. Поэтому было решено использовать диметрическую проекцию. Т.е. $X$ и $Y$ координаты искажаются. Формула искажения была выбрана такая :

$X' = X\frac{(d-Z)}{(d+a)}$
где,
d - это некоторая константа, фактически отвечающая за расстояние от объекта то наблюдателя.
a - длинна ребра куба.
В текущей реализации $d = 4a$
Точно такой же коэффициент используется для преобразования $Y$.
При этом некоторые ракурсы все равно проецируются не правильно. Насколько я понимаю это происходит из-за того, что точка схода меняет свое положение при вращении кубика.
Собственно просьба подсказать какое лучше использовать преобразование координат при проецировании. Спасибо.
Два скриншота иллюстрирующих "проваливание" вершины:

Изображение
Изображение

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение20.12.2011, 07:14 
Заслуженный участник


26/07/09
1559
Алматы
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение20.12.2011, 08:35 


15/10/10
3
Circiter в сообщении #517537 писал(а):
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.


Для создания эффекта схода параллельных прямых мы "искажаем" координаты. Суть в том, что два одинаковых по длине отрезка, будут отображены различной длинны (в случае прямой перспективы, тот что ближе к точке наблюдения будет выглядеть длиннее). Для этого мы искажаем координаты по двум осям ($X$ и $Y$).
Возможно я неправильно понял суть диметрической проекции, но смысл вкладывался такой.

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение20.12.2011, 08:57 


14/01/11
3040
Не лучше ли будет использовать здесь центральную проекцию?
Проекция (геометрия)

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение20.12.2011, 16:16 
Заслуженный участник


27/04/09
28128
Притом центральное проецирование можно устроить тоже умножением на специальную матрицу. После этого, если проецируете на одну из трёх координатных плоскостей, легко взять две ненулевые координаты — и на экран!

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение20.12.2011, 17:59 
Заслуженный участник


26/07/09
1559
Алматы
2arseniiv
Цитата:
Притом центральное проецирование можно устроить тоже умножением на специальную матрицу

Любое проецирование можно устроить умножением на специальную матрицу. :) Другое дело, что да, несмотря на широкое применение диметричекой проекции в начертательной геометрии и компьютерной графике, формулы перспективной проекции проще понимаются и выводятся, тупо по определению центральной проекции некоторой точки через пересечение соединяющего её и наблюдателя отрезка с плоскостью экрана.

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 13:12 
Аватара пользователя


14/05/05
224
Баку
А почему бы в качестве формулы искажения не выбрать

$x' = \frac{Nx}{z}, y' = \frac{Ny}{z}$


Попробуйте подобрать наиболее оптимальное N для вашего случая (коэффициент зависимости абстрактного расстояния от плоскости монитора до объекта).

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 14:54 
Аватара пользователя


31/10/08
1244
DziedMaroz в сообщении #517548 писал(а):
Circiter в сообщении #517537 писал(а):
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.


Для создания эффекта схода параллельных прямых мы "искажаем" координаты. Суть в том, что два одинаковых по длине отрезка, будут отображены различной длинны (в случае прямой перспективы, тот что ближе к точке наблюдения будет выглядеть длиннее). Для этого мы искажаем координаты по двум осям ($X$ и $Y$).
Возможно я неправильно понял суть диметрической проекции, но смысл вкладывался такой.

Если верить википедии
http://ru.wikipedia.org/wiki/Диметрическая_проекция
То Диметрическая проекция это разновидность Аксонометрическая
В Аксонометрическая парольные прямые остаются параллельными и сходится не могут.
Для того чтобы сходилось используй перспективную проекцию. А да и велосипед лучше не изобретать берёте стандартное матрично-векторное преобразование. И стандартный способ заполнения матрицы.

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 15:40 
Заслуженный участник
Аватара пользователя


30/01/09
7068
Я не специалист в графике, но вроде бы в графических пакетах типа OpenGL или DirectX есть встроенные средства для работы с перспективой. Хотя быть может интересно самому сначала помучаться, не открывая учебники.

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 16:09 


15/10/10
3
Ринат в сообщении #518014 писал(а):
А почему бы в качестве формулы искажения не выбрать

$x' = \frac{Nx}{z}, y' = \frac{Ny}{z}$


Попробуйте подобрать наиболее оптимальное N для вашего случая (коэффициент зависимости абстрактного расстояния от плоскости монитора до объекта).


Ну если бегло глянуть, то это, скорее всего, плохо работает если есть отрицательные координаты. Собственно поэтому моя формула и имеет такой вид.
$X' = X\frac{(d-Z)}{(d+a)}$
Т.е. мы получаем коэффициент равный единице в плоскости, в которой лежит грань куба изначально(плоскость $((1,1,1),(1,-1,1), (-1,1,1))$ для куба с ребром 2), и сжатие координат при удалении.

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

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 17:28 
Заслуженный участник


27/04/09
28128
DziedMaroz в сообщении #518063 писал(а):
Ну если бегло глянуть, то это, скорее всего, плохо работает если есть отрицательные координаты.
Неужели?

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 17:55 
Аватара пользователя


31/10/08
1244
arseniiv в сообщении #518102 писал(а):
DziedMaroz в сообщении #518063 писал(а):
Ну если бегло глянуть, то это, скорее всего, плохо работает если есть отрицательные координаты.
Неужели?

Работает, но не очень подставьте z=0.
Обычно делят на w'=z+d

Тут можете прочитать мои выкладки про перспективную проекцию. 1 точечную.
http://forum.sources.ru/index.php?showt ... &p=1647678

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 18:05 
Заслуженный участник


27/04/09
28128
А, ну да. :oops:

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 21:31 
Аватара пользователя


14/05/05
224
Баку
Pavia в сообщении #518116 писал(а):
Работает, но не очень подставьте z=0.

Ну можно сделать условие-исключение для z=0. :)

 Профиль  
                  
 
 Re: Модель кубика.
Сообщение21.12.2011, 22:34 
Аватара пользователя


31/10/08
1244
Ринат в сообщении #518217 писал(а):
Pavia в сообщении #518116 писал(а):
Работает, но не очень подставьте z=0.

Ну можно сделать условие-исключение для z=0. :)

Дело не в том, что на 0 делить нельзя. Делить можно. Мы получим плюс или минус бесконечность.
А в том что аппаратуры имеет ряд ограничений для представления и обработки плавающих чисел и целых. Поэтому их стараются привезти к диапазону 0..1.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group