Поворот по Y

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Поворот по Y

Сообщение d3drm » 30.05.2004 (Вс) 9:51

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

Public Sub Vec3RotateY(Vec3Out As D3DVECTOR, Vec3In As D3DVECTOR, Angle As Single)

Dim mx As Single, my As Single
Dim rad As Single
Dim r As Double

mx = Vec3In.X
my = Vec3In.z

rad = GetDist(0, 0, mx, my)

If my >= 0 Then r = Atn(mx / my)
If my < 0 Then r = Atn(mx / my) - Pi

r = r + Angle

Vec3Out.X = Cos(r) * rad
Vec3Out.z = Sin(r) * rad



End Sub

Кто что скажет?
ХЎ

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.05.2004 (Вс) 15:48

If my >= 0 Then r = Atn(mx / my)

А если my=0?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 31.05.2004 (Пн) 0:54

вот оказывается и все...

Public Sub Vec3RotateY2(Vec3Out As D3DVECTOR, Vec3In As D3DVECTOR, Angle As Single)

Dim xx As Single, yy As Single, zz As Single, z1 As Single, x1 As Single, y1 As Single, z As Single

xx = Vec3In.X: yy = Vec3In.Y: z = Vec3In.z
z1 = z * Cos(Angle) - xx * Sin(Angle)
x1 = z * Sin(Angle) + xx * Cos(Angle)
y1 = Vec3In.Y
Vec3Out = Vec3(x1, y1, z1)
End Sub
ХЎ


Вернуться в Мультимедиа

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

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

    TopList