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 , посмотри на итоговую матрицу и сравни с исходной.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!