Текущее время: Сб 25 янв 2025 20:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 567 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 19  След.
Автор Сообщение
 Сообщение Пт 13 янв 2012 15:05
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Народ, помогите.
Как повернуть вектор с помощью матрицы я нашёл, а как обратно повернуть матрицу с помощью вектора, никак не могу найти. Всё что я находил в инете, мне не понятно.

Матрица 3x3.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пт 13 янв 2012 15:25
Профиль  
Техногенный
Сообщения: 8299
Зарегистрирован: Пт 29 дек 2006 17:31
Компоненты матрицы преобразуются при поворотах так же, как произведение компонент векторов:
A(i,j)'=B(i)'*C(j)',
Где B(i)'=sum(M(i,k)*B(k)), k=1..3, где M(i,k) - матрица соответствующего поворота. Вид матрицы M можно нагуглить или посмотреть на википедии.
Или я чего-то не так понял?

_________________
thrusting squares through circles


 Сообщение Пт 13 янв 2012 15:32
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Frozen_Light писал(а):
Или я чего-то не так понял?
Ты не понял что я не понимаю эти формулы!
Думаешь я не заходил на Википедию, которая находилась по первой ссылке в поисковике ?

Но я вроде сам понял.

Вектор это же тоже матрица, надо просто поменять местами вектор и матрицу.
Не V*M а M*V.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пт 13 янв 2012 22:35
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Т.е. вопрос решён? Пхи - я ж говорил, что этот форум волшебний - выпостил вопрос - и он сам собой решился вскоре!
Приятно, что работа у smt005 не притихает. Маны тебе! :supercool:

Добавлено спустя 5 часов 12 минут 37 секунд:

Кстати, я тут наковырял из одной игры кучу шикарных текстур ландшафта (травка, песочек, галька, камни, скалы, грязюка и пр.) размерами ажно до 512х512. Правда, без бампа. Пиши, если нужны.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пт 13 янв 2012 23:24
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Текстуры ландшафта нужны, показывай какие они.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пт 13 янв 2012 23:29
Профиль  
Скриптизёр
Сообщения: 10646
Откуда: Мариуполь
Зарегистрирован: Пт 13 апр 2007 17:15
Мне тоже!
Если можешь, сюда выкладывай, а не по ЛС (если ты об этом).


 Сообщение Сб 14 янв 2012 0:29
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
Шаман писал(а):
Параллакса не надо.

А почему не надо? Вроде, ресурсы жрет примерно так же, как и бамп, а смотрится в разы лучше. Вообще, не понятно, почему параллакс до сих пор не стал таким же стандартом, как бамп, хотя еще в первом феаре был и круто там смотрелся.

Добавлено спустя 10 минут 48 секунд:

Цитата:
Вектор это же тоже матрица, надо просто поменять местами вектор и матрицу.
Не V*M а M*V.


Транспонировать вектор еще надо и все, тогда умножится.

Добавлено спустя 6 минут 25 секунд:

Хотя, вообще-то, насколько я помню из линала, каноническиое линейное преобразование векторов с помощью матриц(причем матрицы и их правила умножения выступают как не абстрактная реализация линейного оператора) выполняется вторым способом: М*v = v1. Причем матрица квадратная, а вектор - представляет собой вектор-столбец. Если матрица не квадратная, то получится отображение в другое линейное пространство, а не в то же, а если вектор-строка, то нельзя выполнить умножение.


 Сообщение Сб 14 янв 2012 0:33
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Ничё не понял.
Можно повернуть матрицу в нужное направление (вектора) так же как повернуть вектор с помощью матрицы ?

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Сб 14 янв 2012 0:44
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
А матрица разве задает направление? Она, насколько я знаю, преобразование задает, без вектора она ниче не значит.

Добавлено спустя 4 минуты 54 секунды:

Или ты просто хочешь столбцы или строки матрицы использовать как векторы?


 Сообщение Сб 14 янв 2012 1:19
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Если матрица
1 0 0
0 1 0
0 0 1
То направление модели будет направлена вдоль оси Y.

Если вектор {0, 1, 0}, умножить на эту матрицу, направление вектора не изменится.
Если умножить на "повёрнутую матрицу", вектор будет повёрнут.

Эта матрица описывает ориентацию модели в графике.

Мне надо сделать обратное.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Сб 14 янв 2012 2:10
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
Тебе матрицу по вектору надо построить, что ли?


 Сообщение Сб 14 янв 2012 2:30
Профиль  
Скриптизёр
Сообщения: 10646
Откуда: Мариуполь
Зарегистрирован: Пт 13 апр 2007 17:15
smt005 писал(а):
Можно повернуть матрицу в нужное направление (вектора) так же как повернуть вектор с помощью матрицы ?
Ну, да, твоя матрица A (как линейный оператор) - это 3 вектора, скажем, в столбик. И у тебя есть матрица преобразования B. Каждая из 9 ячеек матрицы A<sup>T</sup> * B - скалярное произведение, т.е. вектор-строка произведения - это тот же вектор из А, но в новом базисе. Матрица поворота, если ничего не путаю, вот такая:
Код:
cos(a)cos(b) sin(-a)cos(b) 0
sin(a)cos(b) cos(a)cos(b) 0
0 0 sin(b)
a - угол поворота базиса по часовой стрелке в плоскости, b - угол с вертикалью.
Так вот преобразование матрицы сводится к преобразованию векторов. Вроде.
Только потом транспонировать не забудь, у нас вектора слева множатся!!

Или чо ты ваще хочешь? :shock:

Добавлено спустя 2 минуты 17 секунд:

Razum писал(а):
Тебе матрицу по вектору надо построить, что ли?
Это же фигня!!!


 Сообщение Сб 14 янв 2012 9:20
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
Если умножить на "повёрнутую матрицу", вектор будет повёрнут.

Эта матрица описывает ориентацию модели в графике.

Мне надо сделать обратное.
Если у тебя есть матрица поворота (3х3), с помощью которой ты хочешь повернуть вектор (xyz), то матрица ставится слева и умножается на вектор, записанный столбиком, справа. "Строка на столбец" - это правило я ещё со скамейки помню. :smile: Получается новый вектор (трансформированный). Если же у тебя есть УЖЕ трансформированный вектор, и ты хочешь сделать обратную операцию - узнать координаты вектора до трансформации, то нужно сначала посчитать обратную матрицу, а затем умножить трансформированный вектор на неё (точно так же, как было написано выше). Как считать обратную матрицу я уже не помню. Но в нете есть дофига примеров и даже готовые функции наколупать можно.
Вот статья из документации ОпенГЛя, где показано, как вектор и матрица перемножаются:
http://www.opengl.org/sdk/docs/man/xhtm ... Matrix.xml

А вот и текстурки (все битмапы):
Трава, 23 файла, 6.13 Мб
Камень/скалы, 40 файлов, 9.19 Мб
Земля (грязь, галька, песок), 22 файла, 4.85 Мб
Лава, 5 файлов, 668 Кб

Учтите, нагло спёр из случайно оказавшейся на моём компе цацки "Dark Age of Camelot - Shrouded Isles" - т.е. копирайт и всё такое... :nipri4em:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Сб 14 янв 2012 11:56
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Треугольник это модель, её ориентация в пространстве описывается матрицей.
В левой картинке направление вектора и ориентация модели (заданная матрицей) совпадают.

На второй картинке то же самое, только вектор направлен в другую сторону.

Изображение

Мне надо управлять матрицей (ориентации модели) с помощью вектора.

Добавлено спустя 6 минут 58 секунд:

Шаман писал(а):
т.е. копирайт и всё такое...

Я использую софт который в сумме наверно стоит пол миллиона, если не больше, продавать свою игру я не собираюсь, поэтому мне пофиГГГ!

Добавлено спустя 2 минуты 13 секунд:

Спасибо за текстурки, посмотрю что с ними можно будет сделать, похоже Al-Horesmi забил на локации, буду сам их делать.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Сб 14 янв 2012 13:27
Профиль  
Гость
Сообщения: 2
Зарегистрирован: Сб 14 янв 2012 13:21
Привет форумчанам. Очень заинтересовал проект. Первый же момент для smt005: "ориентация в пространстве описывается матрицей" тут что-то тёмное. Моделька в пространстве задана двумя векторами, не? Положение (x0, y0, z0) и нормаль (x1, y1, z1). Причём матрица?


 Сообщение Сб 14 янв 2012 13:51
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Возьми книжку по OpenGL (трёхмерная графика) или DirectX, и поймёшь при чём тут матрица.

Добавлено спустя 2 минуты 22 секунды:

А в книге "Супер книга OpenGL" вообще описано всё просто.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Сб 14 янв 2012 14:15
Профиль  
Гость
Сообщения: 2
Зарегистрирован: Сб 14 янв 2012 13:21
Матрицу можно использовать для преобразования вектора (тот-же поворот). Ты говорил про задание ориентации... может быть я не так тебя понял.

Качаю суперкнигу :smile:


 Сообщение Сб 14 янв 2012 14:35
Профиль  
Скриптизёр
Сообщения: 10646
Откуда: Мариуполь
Зарегистрирован: Пт 13 апр 2007 17:15
2 smt005
Ёлки-палки, а крен ты как задавать собираешься? Или ты на него забил тут?

Добавлено спустя 4 минуты 46 секунд:

Понимаешь, один вектор не задает ориентацию модели, поэтому нужна матрица! Нарисуй хотя бы еще один.


 Сообщение Сб 14 янв 2012 14:48
Профиль  
Техногенный
Сообщения: 8299
Зарегистрирован: Пт 29 дек 2006 17:31
Короче, надо найти вид тензора инерции в повернутой системе координат? Пусть тогда относительно начального направления мы повернулись в плоскости ХУ на угол ф, а вертикально - на угол T
Это делается так, как я говорил. Просто надо задать единичный вектор направления в сферических координатах, соответствующий конкретному значению угла, на который осуществляется поворот.
n={cos(ф)*sin(T), sin(ф)sin(T), cos(T)}, где a - азимутальный угол, T - вертикальный.
Если вращение происходит в плоскости xy, т.е. T=0, то матрица вращения имеет вид:
Изображение

Или, если так будет понятнее:
A(i,j)'=sum(M(i,l)*M(j,m)*A(l,m)), l=1..3, m=1..3,
где B(p,q) обозначает элемент строки p в столбце q.
A(i,j)' - вид тензора инерции в повернутой системе координат.

Если надо повернуть матрицу в произвольном направлении, то это сделать сразу сложно, как самый очевидный вариант - повернуть в одной плоскости, а потом повернуть в другой.

Добавлено спустя 2 минуты 58 секунд:

Хотя можно матрицей с углами Эйлера сделать, только надо разобраться, что какой угол там означает.

Добавлено спустя 2 минуты 3 секунды:

Krogoth писал(а):
Ёлки-палки, а крен ты как задавать собираешься? Или ты на него забил тут?

Кстати, это возможно только если применять матрицу с углами Эйлера.

_________________
thrusting squares through circles


 Сообщение Сб 14 янв 2012 15:01
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
mutius писал(а):
Матрицу можно использовать для преобразования вектора
А мене надо наоборот.
2 Krogoth крен мне не важен.
2 Frozen_Light ты пишиш то же самое что в куче сайтов.

Времени у меня не было заняться, думал что мне на блюдечке готовую формулу дадут.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Сб 14 янв 2012 15:06
Профиль  
Техногенный
Сообщения: 8299
Зарегистрирован: Пт 29 дек 2006 17:31
smt005 писал(а):
Времени у меня не было заняться, думал что мне на блюдечке готовую формулу дадут.

Да это и есть готовая формула, надо просто брать и перемножать)

_________________
thrusting squares through circles


 Сообщение Сб 14 янв 2012 16:09
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
По-моему, не совсем так. Матрица не задает сама по себе положение, она - всего лишь задает преобразование. Объект, без всяких преобразований, имеет некоторое дефолтное положение и ориентацию. Та матрица, про которую ты говоришь, как я понял, она преобразовывает дефолтное положение в некоторое другое. Если считать, что дефолтное положение объекта всегда есть и неизменно(например, как в модели), то матрица, в этом смысле, задает положение и ориентацию, а по сути - она просто применяется каждый раз к дефолтному.
Ты, как я понял, хочешь следующее - есть вектор, вдоль которого ты хочешь ориентировать объект, тебе нужна матрица, которая это преобразование выполнит. Ее можно получить, скомбинировав(перемножив) матрицы элементарных преобразований - поворота, сдвига, масштабирования. Как построить каждую из этих матриц, легко можно найти в инете. Если тебе нужен только лишь поворот, то нужна матрица поворта, которую привел фрозен. Однако, тот вид, который там представлен, не подойдет для поворота вокруг произвольной оси, сначала надо выполнить преобразование координатной системы, чтобы ось поворота совпала с одной из осей координатной системы, тогда вид матрицы будет простой, вышеуказанный. Итого, первая матрица - матрица преобразования в новую систему, вторая - матрица поворота в каноничном виде, третья - матрица обратного преобразования координатной системы. Перемножим их - получим матрицу поворота для данной координатной системы вокруг заданной оси.

Во, готовая формула есть:
Изображение

Добавлено спустя 2 минуты 55 секунд:

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


 Сообщение Сб 14 янв 2012 20:11
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
А, Разум допёр, и я тоже! +100 Разуму! :teeth:

Щас я ещё подразжевать попробую.
2 smt005: давай обозначим первый вектор направления как v1, а второй - как v2, чтоб не путаццо. А матрицу оринетации изначальную - m1. Значит, задача состоит в том, чтобы посчитать матрицу ориентации, соответствующую новому вектору ориентации v2, так?
Это мы сделаем, повернув матрицу m1 на тот же угол, на который повёрнут v2 относительно v1.
Для того, чтобы повернуть m1, нам нужна матрица поворота (Разум привёл её - я глянул, в доках ОпенГЛя для функции glRotate та же формула). А чтобы её составить, требуется знать вектор, вокруг которого осуществляется поворот (r) и угол поворота (О), либо синус и косинус этого угла.
!!! Вектора r1 и r2 должны быть единичной длины!!!
Найдём косинус угла поворота:
cosO = dot(r1,r2);
Вектор поворота вычислим: для этого векторно умножим r1 и r2:
r = cross(r1, r2);
Учти, что если вектора совпадают по направлению (ориентация не менялась), то получится нулевой вектор (|r|=0) - в таком случае дальше вычислять ничего нельзя.
Синус найти легко - это длина вектора r ( :wink: ):
sinO = |r|;
Под конец не забудь нормализовать вектор поворота:
r = normalize(r);
После этого составляй матрицу поворота по формуле Разума (x,y,z в ней - координаты вектора r).

Когда матрица поворота есть (М), юзай её для поворота матрицы ориентации m1.
Тут я не уверен, какая из матриц слева, какая справа, и нужно ли какую из них транспонировать. :oops: Но если так логически прикинуть, то раз нам нужно повернуть (трансформировать)матрицу m1, то, наверное, она должна быть справа (по аналогии с трансформируемым вектором), а матрица поворота M - слева... :roll: Разум с Фрозеном, лучше знают. :teeth:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пн 16 янв 2012 1:02
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
А проще никак нельзя? :cry:
Например так же как в вектором?

2 Шаман ты делал Солдце, как ты его делал?

Мне надо сделать частицы - текстура наложенная на квадрат который всегда направлен на камеру.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пн 16 янв 2012 1:16
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
Люркай билборды опенГЛа. Я, в свое время, делал частицы для машграфа, но не осилили, пришлось их визуализировать тремя пересекающимимися линиями.


 Сообщение Пн 16 янв 2012 5:47
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
2 Шаман ты делал Солдце, как ты его делал?
Извратно рисовал, забудь.
Но трюком поделюсь: при рисовке неба я временно передвигал наблюдателя в центр сцены (сохраняя ориентацию), запрещал запись в буффер глубины, потом рисовал небо и солнце, а затем возвращал наблюдателя на место, после чего рисовал уже всё остальное. Зырь сюда:

glPushMatrix(); //Сохраняем модельвьювую матрицу;
//Одолжим на секундочку у ОпенГЛя модельвьювую матрицу:
float M[16]={0}; glGetFloatv(GL_MODELVIEW_MATRIX,M);
//Внимание! Фокус - телепортируем наблюдателя в центр сцены:
M[12]=0; M[13]=0; M[14]=0;
glLoadMatrixf(M); //Вернём отшаманенную модельвьювую матрицу на место;
glDepthMask(false); //Защищаем буффер глубины от записи
... //Рисуем небо, звёзды, солнышко, Будду в облаках...
glDepthMask(true); //Разрешаем запись в буффер глубины
glPopMatrix(); //Возвращаем наблюдателя на место;
... //Ну а теперь рисуй свою сцену!

Солнце, небо и облака советую рисовать ящиком, с натянутым на него скайбоксом. Можно просто очистить экран голубым цветом, а солнце нарисовать текстурой на квадрате в положенном месте. Или вообще жёлтый шарик отрисовать. :smile: Поскольку наблюдатель во время этого процесса прицеплен к центру сцены, бери расстояние до солнца в пару раз больше расстояния до ближайшей плоскости срезания пирамиды видимости. Ну, 5.f - 10.f там, я не знаю... :roll:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вт 17 янв 2012 0:14
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Попробую скриптовый движог написать. Благословите меня, братья механоиды! :god:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вт 17 янв 2012 0:22
Профиль  
Механоид 3 поколения
Аватара пользователя
Сообщения: 490
Откуда: Украина,Донецкая об.
Зарегистрирован: Чт 4 авг 2011 15:54
Благословляю :mrgreen:


 Сообщение Вт 17 янв 2012 0:31
Профиль  
Механоид 4 поколения
Аватара пользователя
Сообщения: 682
Откуда: Клин
Зарегистрирован: Пт 10 июл 2009 0:04
Шаман писал(а):
скриптовый движог

Это уже интересно.

_________________
123


 Сообщение Вт 17 янв 2012 0:57
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Шаман писал(а):
Попробую скриптовый движог написать.
Есть колёса, нужны для твоего будущего велосипеда ?

Добавлено спустя 3 минуты 25 секунд:

Я написал свой движок скриптов, правда он оказался тормознутый, но возможно потомучто он был совсем не оптимизирован.

Могу поделиться исходниками, если интересно. И да, там код не законченый, поэтому кривой, но работал довольно стабильно до последнего момента после которого я отказался от скриптов пишушиеся не в С++.

Добавлено спустя 1 минуту 24 секунды:

Лучше бы шейдерами занялся, а то написал ненужный функции шейдеров и забил.

Добавлено спустя 1 минуту 31 секунду:

Т.е. не благославляю!!!! Уха-ха-ха :twisted:

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 567 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 19  След.

Часовой пояс: UTC + 4 часа


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB