повороты в простанстве

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

Модератор: Mikle

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

повороты в простанстве

Сообщение Sirik » 15.02.2006 (Ср) 15:44

подскажите формулы поворотов отностельно осей (x,y,z)

зы. желательно через матрицы

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 15.02.2006 (Ср) 18:53

Sirik
Разновидностей поворотов много - мир, камера, объект и т.д. Какой именно?
Тут все:
View->Object Browser->DxVBLibA->D3DXMATH_MATRIX
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 16.02.2006 (Чт) 9:02

ситуация такова:
есть точка с координатами (x,y,z) на неё смотрит камера под такими углами (alfa, beta, gama).
как показать эту камеру (точнее сказать углы, под которыми она смотрит) в проекции OXY ?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 16.02.2006 (Чт) 12:10

вопрос приобрёл немного другой аспект, вобщем что сейчас нужно:
перевести начало координат в данную точку и принять новые начальные координаты (90,180,0) как нулевые (незнаю или правильно выразился).
как дополнение первый вопрос еще актуальный

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 16.02.2006 (Чт) 20:34

Sirik
1.Углы для камеры в ортогоналке? Ты не ошибся?

2. Я понял так, что ты хочешь преобразовать Word (мир). При этом придется учитывать смещения (+90 и +180) для каждого объекта в сцене. Для рендера одной модели это неактуально, но в принципе потребует дополнительных затрат (перемножения матриц). Проще переместить сам объект или камеру в нужное место.

Dim CameraX As Single, CameraY As Single, CameraZ As Single
Dim VertLookDegree As Integer ' угол взгляда по вертикали (град)
Dim HorLookDegree As Integer ' по горизонтали (град)
Dim DirectionLook As D3DVECTOR
Dim CameraMatrix As D3DMATRIX

' перемещение камеры
Private Sub MoveCamera()
' вычислить 3D вектор взгляда (коэффициенты экспериментально, углы в градусах!)
' Sinus и Cosin – аналоги ф-й Sin, Cos
DirectionLook.X = CameraX + Sinus(HorLookDegree) * 100
If VertLookDegree <= 179 Then
DirectionLook.Y = CameraY + Cosin(VertLookDegree) * 300
Else
DirectionLook.Y = CameraY - Cosin(VertLookDegree) * 300
End If
DirectionLook.z = CameraZ + Cosin(HorLookDegree) * 100
' вычислить новую матрицу для камеры
D3DXMatrixLookAtLH CameraMatrix, vec3(CameraX, CameraY, CameraZ), _
DirectionLook, vec3(0, 1, 0)
' трансформировать ViewPort
D3DDevice.SetTransform D3DTS_VIEW, CameraMatrix
End Sub

Public Function vec3(X As Single, Y As Single, z As Single) As D3DVECTOR
vec3.X = X
vec3.Y = Y
vec3.z = z
End Function

3. D3DMATRIX после преобразования содержит все, что тебе нужно:
m41,m42,m43 – расположение точки по x,y,z
m11,m22,m33, - скалинг sx, sy, sz
какие элементы отвечают за углы проверь сам, я просто не помню, примени ф-и
D3DXMatrixIsIdentity а затем
D3DXMatrixRotationX, D3DXMatrixRotationY, D3DXMatrixRotationZ , посмотри на итоговую матрицу и сравни с исходной.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 17.02.2006 (Пт) 9:08

сам виноват, с самого начала не объяснил суть: мне надо это всё рученьками прописовать, а не с помощью Dx

так что... может формулами поможешь...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 17.02.2006 (Пт) 16:04

что никто помощь не может?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 17.02.2006 (Пт) 17:00

Нужно DirectXSDK. дать Help?
Там есть повороты матриц!
#define ROFL 0xDDDD

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 17.02.2006 (Пт) 19:54

Sirik писал(а):сам виноват, с самого начала не объяснил суть: мне надо это всё рученьками прописовать, а не с помощью Dx

так что... может формулами поможешь...

Sirik
Не в обиде. Где-то с десятку назад была у меня книга, и конспект по ней делал, надо поискать.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 18.02.2006 (Сб) 9:20

в общим что-бы стало понятнее что по чём:

в общем есть промышленный робот (с 3 системой координат). мне интересна система BASE: какждая точка задаёться вот такими координатами: x,y,z,A,O,T; где A,O,T - углы наклона к данной точке.
всё бы хорошо, но есть но: начальное положение робота вот такое (x,y,z,0,0,0), моё новоё (начальное, от которго надо пласать) x,y,z,180,90,0

и мне надо нарисовать какое будет положение робота к некоторой точке относительно новоого начала координат.

зы. если что не понятно, то прилагаю рисунок.
а вот углы наклона для данных 3 точек (RX,RY,RZ - это смещения углов):
O : 90
A : 180
T : 0
RX : 0
RY : -15
RZ : 0

O : 90
A : 180
T : 0
RX : 0
RY : -15
RZ : 0

O : 90
A : 180
T : 0
RX : 0
RY : 0
RZ : 0
У вас нет доступа для просмотра вложений в этом сообщении.

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

Сообщение Mikle » 19.02.2006 (Вс) 10:55

Sirik
Вычитаешь из вектора точки вектор камеры, получаешь вектор напрвления V. Выделяешь из него 2D вектор V2, состоящий из компонент X и Y вектора V, нормализуешь V2, получаем:
V2.X - это Sin угла поворота вокруг оси Z
V2.Y - это Cos угла поворота вокруг оси Z
Зная Sin и Cos, получаешь Tan, через Atn получаешь угол, но Atn - функция неоднозначная и в некоторых точках неопределена. Придется делать перебор:
Select Case CosA
Case Is > 0: A = Atn(TanA)
Case Is < 0: A = Pi - Atn(TanA)
Case 0: If SinA>0 Then A = Pi / 2 Else A = -Pi / 2
End Select
Это примерно, зависит от системы координат, могут поменяться знаки "+" и "-".
Так же можно получить углы поворота вокруг осей X и Y.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2006 (Вс) 13:28

я плохо понимаю в пространственной геометрии, поэтому хотелось немного теории + кода


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

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

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

    TopList