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

конверт (2 стр)

Страницы: 1 2
#15
6:41, 23 фев. 2018

> но: как выглядит матрица модели
Когда моделлер создаёт 3D-модель, она каким-то образом располагается относительно начала координат в 3D-редакторе (эту систему координат еще зовут локальной).
Так вот, если модель расположена в точности так, как её оставил художник, то её матрица модели будет единичной.

  model = 
  (
    1.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 1.0f
  );
Если исходная модель немного сдвинута в направлении какого-либо вектора {x,y,z} относительно локальной системы координат, то в матрице модели появится соответствующий столбец
  model =
  (
    1.0f, 0.0f, 0.0f,    x,
    0.0f, 1.0f, 0.0f,    y,
    0.0f, 0.0f, 1.0f,    z,
    0.0f, 0.0f, 0.0f, 1.0f
  );
Если исходную модель изменить по масштабу (растянуть либо сжать по какой-либо из осей локальной системы координат в соответствии с коэффициентами {m,n,l}), то вместо единичной матрицы получим
  model = 
  (
       m, 0.0f, 0.0f, 0.0f,
    0.0f,    n, 0.0f, 0.0f,
    0.0f, 0.0f,    l, 0.0f,
    0.0f, 0.0f, 0.0f, 1.0f
  );
Ну и самое сложное для восприятия - если модель повернуть на какой-то угол вокруг осей локальной системы координат, то для осей по-отдельности запишем
  // вращение на угол α вокруг оси Ox
  model = 
  (
    1.0f,   0.0f,    0.0f, 0.0f,
    0.0f, cos(α), -sin(α), 0.0f,
    0.0f, sin(α),  cos(α), 0.0f,
    0.0f,   0.0f,    0.0f, 1.0f
  );
  // вращение на угол β вокруг оси Oy
  model = 
  (
     cos(β), 0.0f, sin(β), 0.0f,
     0.0f,   1.0f,   0.0f, 0.0f,
    -sin(β), 0.0f, cos(α), 0.0f,
     0.0f,   0.0f,   0.0f, 1.0f
  );
  // вращение на угол γ вокруг оси Oz
  model = 
  (
    cos(γ), -sin(γ), 0.0f, 0.0f,
    sin(γ),  cos(γ), 0.0f, 0.0f,
    0.0f,      0.0f, 1.0f, 0.0f,
    0.0f,      0.0f, 0.0f, 1.0f
  );
Ну, и понятное дело, если одновременно участвует несколько преобразований, то соответствующие матрицы необходимо перемножить.
Вот так и строится матрица модели.


#16
12:07, 23 фев. 2018

Скажем так, наш объект - это модель персонажа, и персонаж стоит ровно (не покручен никак в локальной системе координат)).. смеюсь предположить, что как нарисовали модель - так она и была перенесена в мировое пространство. Пусть будет что точка (0,0,0) - находится в центре объекта в локальной системе координат, и именно эту точку нам надо найти на экране. Как тогда будет выглядеть моя окончательная матрица модели? И какой порядок умножения матриц? матрицу модели множим на матрицу вида, потом результат множим на матрицу проекции, потом результат на матрицу перспективы? В каком месте я должен пихнуть мировые координаты объекта? И как правильно получить матрицу вида?

#17
20:29, 23 фев. 2018

rottor
Матрица вида в этом случае единичная. Матрица перспективы это частный случай матрицы проекции

#18
21:48, 23 фев. 2018

PA3UJIb
А про зеракальное  отражение забыл!?

#19
23:04, 24 фев. 2018

rottor
Скажи что ты именно пытаешся сделать, может это можно сделать более просто !?
P.S: писал мат-библиотеку и впесал в матрицы всё что только можно
https://github.com/werasaimon/CMath/blob/master/src/maths/rpMatrix4x4.h
Там есть CameraProjection CameraLookAt CameraViewport .и.т.д!

#20
9:43, 14 мар. 2018

Ну вы и наркоманы.

static final function GetAxes (Rotator CamRot, out Vector Dir, out Vector Right, out Vector Up)
Determines the axis unit vectors of a coordinate system that is created by rotating the world coordinate system as specified by the rotator value.

А дальше, как уже сказали - находишь тангенсы углов через скалярные произведения, делишь на тангенс fov/2, центрируешь, умножаешь на разрешение экрана, коэффициенты по дороге типа двоек и половин находим методом тыка.
werasaimon
> почему у UE2 такой страный скриптовый язык ?
А что в нём такого странного?
#21
22:18, 17 мар. 2018

Delfigamer
> А что в нём такого странного?
Он не похож на c++ , а должен быть похож , потому что он написан на с++ !

rottor берешь функцию которую тебе показал Delfigamer и делаешь как написано в посте #4
Ну и методом тыка подгоняешь под свои нужды!

#22
17:17, 18 мар. 2018

werasaimon
> Он не похож на c++ , а должен быть похож , потому что он написан на с++ !
Какая-то странная аргументация. По такой логике какой-нибудь Пайтон должен быть утёкшей из Базы 51 инопланетной технологией, а связка HTML5 - вообще порождение астрала, вынесенное на свет отрядом горилл под капельницами с ЛСД. Спецификация пишется на печатных машинках, сканируется, проходит OCR, а затем нейросетка исправляет ошибки.

Так-то в #5 у него уже почти всё решено, только три векторы он получает как-то по-китайски, вот я и дал ему специальную функцию для получения трёх векторов, и даже аргументы обозвал его переменными.

#23
22:36, 20 мар. 2018

Delfigamer
> какой-нибудь Пайтон должен быть утёкшей из Базы 51 инопланетной технологией, а
> связка HTML5 - вообще порождение астрала, вынесенное на свет отрядом горилл под
> капельницами с ЛСД. Спецификация пишется на печатных машинках, сканируется,
> проходит OCR, а затем нейросетка исправляет ошибки.
ЧтоООООО , чегОООО, wt.. ? )))

Страницы: 1 2
ПрограммированиеФорумФизика

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

Тема закрыта.