Как построить матрицу трансформации из видового куба

roleks
Дата: 06.12.2017 17:42:10
Есть куб, с координатами -1 -1 -1 ..... 1 1 1
С его границы идет вектор в точку 0 0 0
Как имея эти данные построить матрицу трансформации.
Прикрепляю изображения для наглядности
kealon(Ruslan)
Дата: 06.12.2017 19:23:52
roleks,
у вас как-то не очень с вопросами

>>С его границы идет вектор в точку 0 0 0
и что? что за вектор? с какой границы?
>>Как имея эти данные построить матрицу трансформации.
самый главный вопрос: куда матрица должна трансформировать?


http://compgraph.tpu.ru/3d.htm
потом смотрим произведение матриц
roleks
Дата: 06.12.2017 22:40:47
kealon(Ruslan)
roleks,
у вас как-то не очень с вопросами

>>С его границы идет вектор в точку 0 0 0
и что? что за вектор? с какой границы?
>>Как имея эти данные построить матрицу трансформации.
самый главный вопрос: куда матрица должна трансформировать?


http://compgraph.tpu.ru/3d.htm
потом смотрим произведение матриц



Почитайте что такое видовой куб, раз не знаете
roleks
Дата: 06.12.2017 22:43:13
kealon(Ruslan),

Скорее всего проблема не в вопросах, а в ответах
kealon(Ruslan)
Дата: 07.12.2017 00:01:22
roleks,

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

но вот как нарисовать эту фиговинку большинство понимает, а что вы хотите - непонятно
Изопропил
Дата: 07.12.2017 01:05:28
kealon(Ruslan)
тут программисты ходют, и я думаю не многие из них поклонники автокада

а в OpenGL/Direct3D никакого видового куба нет
exp98
Дата: 07.12.2017 10:25:36
Дык наверняка подразумеваются к.-нить проективные координаты, а "точка зрения" = тому самому вектору с "поверхности". Типа задайте его сами в общем виде, а мне дайте результат. Ни тебе самостоятельных попыток, ни уточняющих вопросов. Напоминает сериал о цилиндре.
kealon(Ruslan)
Дата: 07.12.2017 11:19:20
exp98,

ну давай потелепатим, возьмём изометрическую проекцию:

  • координаты наблюдателя (xn,yn,zn), сместим к ним координаты
    Shift(-xn,-yn,-zn) * (x,y,n)

  • азимут просмотра - a [0, 2Пи)
    RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

  • отклонение от вертикали - fi [-Пи/2, Пи/2]

    RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

  • накинем матрицу масштаба с коэффициентом - S
    Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

    итоговая матрица выходит:
    Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn)
  • roleks
    Дата: 07.12.2017 14:38:27
    kealon(Ruslan)
    exp98,

    ну давай потелепатим, возьмём изометрическую проекцию:

  • координаты наблюдателя (xn,yn,zn), сместим к ним координаты
    Shift(-xn,-yn,-zn) * (x,y,n)

  • азимут просмотра - a [0, 2Пи)
    RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

  • отклонение от вертикали - fi [-Пи/2, Пи/2]

    RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

  • накинем матрицу масштаба с коэффициентом - S
    Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)

    итоговая матрица выходит:
    Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn)


  • Все верно, к этому я сам дошел. Проблема в том как узнать fi и а
    exp98
    Дата: 07.12.2017 15:42:16
    "Так бы сразу и сказал"(с)

    вектор (координаты) наблюдателя (xn-0, yn-0, zn-0) = b
    азимут просмотра - a [0, 2Пи)
    отклонение от вертикали - fi [-Пи/2, Пи/2]

    ^ - угол между векторами
    Pr( b, XY ) - проекция b на плоскость XY, т.е zn :=0

    Cos fi= Cos( b^OZ) = скалярное пр-ние
    Cos( a) = Cos( OX ^ Pr( b, XY )) = скалярное пр-ние