2014 dxdy logo

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

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




 
 Модель кубика.
Сообщение19.12.2011, 17:05 
Идея очень простая. Реализовать программу, рисующую кубик, который можно вращать. При решении столкнулся с проблемой перспективы.
Текущая реализация :

Есть множество точек соответствующих вершинам кубика. Их соответственно 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 
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.

 
 
 
 Re: Модель кубика.
Сообщение20.12.2011, 08:35 
Circiter в сообщении #517537 писал(а):
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.


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

 
 
 
 Re: Модель кубика.
Сообщение20.12.2011, 08:57 
Не лучше ли будет использовать здесь центральную проекцию?
Проекция (геометрия)

 
 
 
 Re: Модель кубика.
Сообщение20.12.2011, 16:16 
Притом центральное проецирование можно устроить тоже умножением на специальную матрицу. После этого, если проецируете на одну из трёх координатных плоскостей, легко взять две ненулевые координаты — и на экран!

 
 
 
 Re: Модель кубика.
Сообщение20.12.2011, 17:59 
2arseniiv
Цитата:
Притом центральное проецирование можно устроить тоже умножением на специальную матрицу

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

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

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


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

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 14:54 
Аватара пользователя
DziedMaroz в сообщении #517548 писал(а):
Circiter в сообщении #517537 писал(а):
Для начала, непонятно, как связаны диметрическая проекция и перспектива. Имхо, никак.


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

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

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 15:40 
Аватара пользователя
Я не специалист в графике, но вроде бы в графических пакетах типа OpenGL или DirectX есть встроенные средства для работы с перспективой. Хотя быть может интересно самому сначала помучаться, не открывая учебники.

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 16:09 
Ринат в сообщении #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 
DziedMaroz в сообщении #518063 писал(а):
Ну если бегло глянуть, то это, скорее всего, плохо работает если есть отрицательные координаты.
Неужели?

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 17:55 
Аватара пользователя
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 
А, ну да. :oops:

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 21:31 
Аватара пользователя
Pavia в сообщении #518116 писал(а):
Работает, но не очень подставьте z=0.

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

 
 
 
 Re: Модель кубика.
Сообщение21.12.2011, 22:34 
Аватара пользователя
Ринат в сообщении #518217 писал(а):
Pavia в сообщении #518116 писал(а):
Работает, но не очень подставьте z=0.

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

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

 
 
 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group