nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
подскажите, как в numpy повернуть все вершины модели вокруг своей или другой оси. как повернуть одну вершину я знаю, но проблема в том что перебором на питоне на десятках-сотнях тысяч вершин это работает чрезвычайно медленно. ((( или есть какой другой способ? некоторые могут сказать что модель можно позиционировать с помощью ОpenGL, да это очень быстро получается, но как мне узнать текущие координаты вершин 3D модели в мире используя ОpenGL? используются pyglet, numpy и их возможности.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
Еще из курса векторного анализа помню, что поворот фигуры в евклидовом пространстве можно проделать умножением на матрицу поворота. Ну а для перемножения матриц есть функция numpy.dot, которая вовсе не требует "перебора" |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
делаю приблизительно так получаю ощибку
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
вот так работает, но это перебор....
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
У вас проблема с пониманием операций над матрицами. При умножении матриц число столбцов левой матрица должно быть равно числу строк правой. У вас левая 6х3, правая - 4х1. Такие матрицы невозможно перемножать по определению. К сожалению, по использованию библиотек ничего не подскажу. Читайте доки. |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
kurychтак это и понятно... но как это сделать правильно, вот в чем вопрос... как я умею это работает медленно (((
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
блин, в ОpenGL это делается элементарно. правда после этого вершины модели не меняются (((
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
Мне сдаётся, в данном случае еще присоединяется проблема непонимания семантики Кватерниона. Я тоже не эксперт в 3D моделировании, но кватернион - не матрица преобразований. Если посмотреть документацию даже по диагонали, то кватернион преобразуется к матричному виду функцией Matrix33. Если попробовать добавить from pyrr import Matrix33 то points = points.dot(Matrix33(matrix)) уже выглядит более исполнимо. Но я далеко не уверен, что это даст верный результат. Потому что кватернионы, если я правильно понимаю, придуманы как раз для того, чтобы избежать матричных преобразований. А мы в этом случае наоборот от него вернулись к матрице. ИМХО, нужно до просветления почитать теорию применения кватернионов в 3Д графике вообще и в данной библиотеке в частности, если есть желание это применять. PS: прошу прощения, но далее углубляться в теорию компьютерного 3D не имею возможности. Умываю руки и желаю удачи в решении задачки. |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
kurychесть желание хоть что то применить, что бы быстро работало ))) как видно с перемещением и масштабом я разобрался, а вот с поворотом проблемка...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
kurych, благодарю за наводку. да, оказалось все просто, нужно вершины dot-ить на Matrix33.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |