![]() |
Показать все 7 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Вопросы по 3D математике (https://hlfx.ru/forum/showthread.php?threadid=2741)
Вопросы по 3D математике
В общем засел за написание полностью софтверного движка на (J2ME). Сделал отрисовку полигона с заданным цветом, также бэкграунд цветом и картинкой. Но столкнулся с такой трудностью - вращение полигона вокруг произвольной оси работает очень очень криво. Вот формула(вращение по оси Y):
code:
double x = (double)vec.x+(double)(v.x-vec.x)*cos[r]-(double)(v.z-vec.z)*sin[r]; double z = (double)vec.z+(double)(v.x-vec.x)*sin[r]+(double)(v.z-vec.z)*cos[r];
__________________
-Brain is dead-
Попробуй без таблиц синусов и косинусов, а вычислять их напрямую.
Попробуй реализовать через умножение на матрицу.
Попробуй вращать по формуле Родригеса.
И вообще, неплохо бы записать видео или хотя бы нарисовать, а то я не могу представить себе, что именно у тебя там едет и в какую сторону.
__________________
XaeroX благодарствую за ответ. Погуглил по поводу твоих соображений, нашел ошибку в своей формуле Насчет матриц честно говорю - я их делал, но большого толку от них не увидел. Может я неправильно их делал? В моем варианте, матрица - это 2д массив double Matrix[2][2]. Чтобы умножить точку или вектор на матрицу, получается:
code:
newx = vec.x + (v.x-vec.x) * Matrix[0][0] + (v.z-vec.z) * Matrix[0][1]; newz = vec.z + (v.x - vec.x) * Matrix[1][0] + (v.z-vec.z) * Matrix[1][1];
__________________
-Brain is dead-
KiQ
Так ты 3д-матрицу используй. В гугле есть такие матрицы для поворотов вокруг всех осей, а последовательным умножением можно делать поворот вокруг нескольких осей сразу.
__________________
Одно могу сказать точно - реализовать без матриц поворот по всем осям одновременно - крайне нетривиальная задача.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну, есть еще кватернионы
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 02:00. | Показать все 7 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024