Войти
ФлеймФорумПрограммирование

Вопрос по перспективной проекции

Страницы: 1 2 314 15 Следующая »
#0
11:37, 23 янв 2018

Всем привет, плоскость на картинке преобразована в перспективной проекции. Мне необходимо реализовать эффект приближения этой плоскости, по началу я подумал что достаточно реализовать масштабирование, но это оказалось неверное решение. Я так понимаю необходимо делать дополнительное преобразование, но так и не нашел/понял как это делается. Подскажите пожалуйста идею.

Вот кусок кода отвечающий за преобразование в перспективную проекцию.

p.theta = 90 * atan(1.0) / 45.0;
p.phi = 180 * atan(1.0) / 45.0;

double st = sin(p.theta), ct = cos(p.theta), sp = sin(p.phi), cp = cos(p.phi),

    v13 = -sp * ct,
    v23 = -sp * -st,
          v33 = -cp;

  double tempsx;


for (int i = 0; i < Point3d.size(); i++)
{
      int x = Point3d[i][0];
      int y = Point3d[i][1];
      int z = Point3d[i][2] ;

      tempsx = (v13 * x + v23 * y + z * v33 + 700);      
        
      Point3d[i][0] = ((800 * x) / tempsx);
      Point3d[i][1] = ((800 * y) / tempsx);
      Point3d[i][2] = (800 * z) / tempsx;

}

Изображение

#1
11:42, 23 янв 2018

очень странное условие задачи, вам надо оперировать понятиями матриц, матрица проекции, матрица мира, так же лучше реализовать полноценную "камеру" на этих матрицах

#2
11:57, 23 янв 2018

все преобразования уже выполнены

Изображение
tempsx = (v13 * x + v23 * y + z * v33 + 700);  - это последняя строчка этой матрицы
#3
13:17, 23 янв 2018

вы не поняли
"кусок кода отвечающий за преобразование в перспективную проекцию"
должен выглядеть так
screenPos = M * pos;
(это, конечно, если вы софтрендер пишите, GPU же сам все это умеет делать, но его надо уметь "готовить")
где M - это произведение матрицы камеры(вида) на матрицу проекции

#4
17:05, 23 янв 2018

Простите, но вам надо или камеру двигать к объекту или объект к камере. Чего тут сложного?
TranslateMatrix - двигаете камеру. Или двигайте сами точки. Но проще камеру.
У меня так:

+ Показать
#5
17:34, 23 янв 2018

подскажите,допустим у меня уже есть массив векторов вершин xyz, на какую матрицу умножать для приближения

#6
18:02, 23 янв 2018

http://www.opengl-tutorial.org/ru/beginners-tutorials/tutorial-3-matrices/

#7
18:03, 23 янв 2018

leonardo98
> "кусок кода отвечающий за преобразование в перспективную проекцию"
> должен выглядеть так
> screenPos = M * pos;
> (это, конечно, если вы софтрендер пишите
> где M - это произведение матрицы камеры(вида) на матрицу проекции

Хз, я вот без матриц софтрендер писал. (Не смог их понять)
А преобразование делается оч просто без них.

x2d=x3d/z3d;
y2d=y3d/z3d;

Соответственно, если мы хотим приблизить объект то уменьшаем координату 'z'.

#8
19:53, 23 янв 2018

122
Ну, я тоже когда-то избегал трудностей, и сам велосипедил без матриц, но сейчас знаю на 100% - всегда выгоднее освоить новое и использовать чужое, чем тратить время на велосипед.

#9
20:21, 23 янв 2018

122
> А преобразование делается оч просто без них.
>
> x2d=x3d/z3d;
> y2d=y3d/z3d;

Перспективное деление к матрицам не относится и никакой матрицей его не сделать.

Во всяких OpenGL/D3D проекционные матрицы через математический хак выбирают на что потом будет делиться, на 1.0 (ортогональная проекция), или на z (перспективная), но сами не делят.

Что за зверь у ТС совершенно непонятно.

#10
20:31, 23 янв 2018

leonardo98
> но сейчас знаю на 100% - всегда выгоднее освоить новое и использовать чужое,
> чем тратить время на велосипед.
Бывает, вероятно это твой путь. Мой опыт ровно обратный: выгоднее делать дольше, труднее и самому. Брав чужое я никогда ничего не доводил до готовности.

CD
> Что за зверь у ТС совершенно непонятно.
На скриншоте перспективная. Та формула что я написал как раз для неё. И сам он спрашивает о перспективной.
ТС вставляет в неё свои 3д вершины и получает на выходе 2д координаты, проще некуда. А приближает - двигая вершины по координате 'z'.

#11
20:46, 23 янв 2018

у меня как раз дилемма,я повернул плоскость,наклонил,а как ее придвинуть не знаю

#12
5:51, 24 янв 2018

adblock
Симпатичный интерфейсик :) сам делал?

#13
9:39, 24 янв 2018

122
> Бывает, вероятно это твой путь...
в чем смысл блуждания по лесу, натыкаясь на ямы и камни, падая и спотыкаясь, если рядом проходит широкая автострада и можно сесть в любой автомобиль и ехать с ветерком?

#14
9:48, 24 янв 2018

leonardo98
> в чем смысл блуждания по лесу, натыкаясь на ямы и камни, падая и спотыкаясь,
> если рядом проходит широкая автострада и можно сесть в любой автомобиль и ехать
> с ветерком?
Я по лесу не особо знаток, но погугли охотников, ориентирование на местности, рыбаков, тур-походы.

Страницы: 1 2 314 15 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.