ПрограммированиеФорумГрафика

При вращении фигуру плющит

#0
21:34, 20 июля 2009

Пользуюсь стандартной формулой для вращения вокруг оси:

  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 получается что его плющит:

  conus plushit | При вращении фигуру плющит

  Получается вроде, точки поворачиваются с разной скоростью и из-за этого фигуру плющит.

  И хдэ же я туплю? :(

#1
21:44, 20 июля 2009

матрицы использовать не пробовал?

#2
21:44, 20 июля 2009

тут где-то я выкидывал кусок кода к камере там вращение вокруг точки было псмотри, бляго я тут редкий гость

#3
21:49, 20 июля 2009

а как ты крутишь по этим формулам вдоль оси Y? :)

#4
21:59, 20 июля 2009

Матрицы не юзал, пока так пытаюсь понять :")
Заинтриговал данный факт :)

Ну, не суть важно по какой оси кручу, получаеться ФАК всё равно :(

#5
22:02, 20 июля 2009

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;

#6
22:47, 20 июля 2009

PilgrimGS
Я вот не пойму зачем так сложно? Я так понимаю ты каждую вершину вращаешь.
Надо просто передать матрицу трансформации графическому АПИ на котором ты рисуешь.

#7
0:03, 21 июля 2009

PilgrimGS
> Заинтриговал данный факт :)
ггг ))) забавно ))) а у тебя софтварный рендер чтоли, своими руками без чтения книжек и изучения вопроса? вроде в любом туторе для начинающих говорится про матрицы....

#8
5:58, 21 июля 2009
// 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);
#9
14:28, 21 июля 2009

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

#10
15:40, 21 июля 2009

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

#11
23:27, 21 июля 2009

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

ПрограммированиеФорумГрафика

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