Пользуюсь стандартной формулой для вращения вокруг оси:
x:=Hand.Data.MeshVertices.x;
y:=Hand.Data.MeshVertices.y;
Hand.Data.MeshVertices.x:=(x)*cos(a)-(y)*sin(a);
Hand.Data.MeshVertices.y:=(x)*sin(a)+(y)*cos(a);
Когда кручу конус по этой формуле вокруг Z оси, то всё ОК, а когда вокруг оси Y получается что его плющит:

Получается вроде, точки поворачиваются с разной скоростью и из-за этого фигуру плющит.
И хдэ же я туплю? :(
матрицы использовать не пробовал?
тут где-то я выкидывал кусок кода к камере там вращение вокруг точки было псмотри, бляго я тут редкий гость
а как ты крутишь по этим формулам вдоль оси Y? :)
Матрицы не юзал, пока так пытаюсь понять :")
Заинтриговал данный факт :)
Ну, не суть важно по какой оси кручу, получаеться ФАК всё равно :(
PlatinumKiller
Можешь по-короче объяснить данную запись:
AVector.x = (CosA + (1 - CosA) * x * x)* vVector.x;
AVector.x += ((1 - CosA) * x * y - z * SinA)* vVector.y;
AVector.x += ((1 - CosA) * x * z + y * SinA)* vVector.z;
PilgrimGS
Я вот не пойму зачем так сложно? Я так понимаю ты каждую вершину вращаешь.
Надо просто передать матрицу трансформации графическому АПИ на котором ты рисуешь.
PilgrimGS
> Заинтриговал данный факт :)
ггг ))) забавно ))) а у тебя софтварный рендер чтоли, своими руками без чтения книжек и изучения вопроса? вроде в любом туторе для начинающих говорится про матрицы....
// z axis rot new_x = (x * cos) - (y * sin); new_y = (x * sin) + (y * cos); // y axis rot new_x = (x * cos) + (z * sin); new_z = (x * -sin) + (z * cos); // x axis rot new_y = (y * cos) - (z * sin); new_z = (y * sin) + (z * cos);
Кроме вращения есть ещё много интересных преобразований.
Лучше всё-таки найти приличную библиотеку для матриц (свою сделать - это как упражнения для внеклассной работы) разобраться как с ней пользоваться и умножать каждую вершину фигуры перед рисованием на совместную матрицу преобразований (всё вместе - перенос, масштаб, поворот).
имхо, лучше понять как все это дело работает, и только после этого искать библиотеку для матриц, разве что только чтобы не терять время. а еще лучше написать свою, чтобы получить опыт.
кстати, для вращения матрицы имо не очень хороши
лучше разберись с кватернионами - а то обязательно нарвешься на ошибки с плавающей точкой,
если будешь многократно комбинировать вращения.
с кватернионами избавления от ошибок легче делается, т.к. оно сводится к нормализации кватернионов.
хотя, конечно, матрицы проще
Тема в архиве.