- Код: Выделить всё
D3DXMatrixLookAtLH matView, vec3(x3dx, y3dx, z3dx), vec3(0, 0, 0),vec3(0, vector, 0)
Мой код просчета координат:
- Код: Выделить всё
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then 'Нажали ENTER и вернули все на место
nx = 0
ny = 0
nz = 6
vec = 1
End If
If KeyAscii = 27 Then en = True ' Нажали ESC и вышли
If ny1 = 63 Or ny1 = -63 Then ny1 = 0 ' Если сделали оборот на 360
If nx1 = 63 Or nx1 = -63 Then nx1 = 0 ' то ставим в "0"
If KeyAscii = 119 Then ' Нажали клавишу "w" (вверх)
ny1 = ny1 + 1
ny = Sin(ny1 / 10) * 6 'Вычисляем координаты(6- радиус)
nz = Cos(ny1 / 10) * 6
' В нужный момент меняем вектор верха камеры что-бы изображение не прыгало
If (ny1 > -16 And ny1 < 15) Or (ny1 > 47 And ny1 > -47) Then vec = 1
If (ny1 > 15 And ny1 < 48) Or (ny1 > -48 And ny1 < -15) Then vec = -1
End If
If KeyAscii = 115 Then ' Нажали клавишу "s" (вниз)
ny1 = ny1 - 1
ny = Sin(ny1 / 10) * 6
nz = Cos(ny1 / 10) * 6
' В нужный момент меняем вектор верха камеры что-бы изображение не прыгало
If (ny1 > -47 And ny1 < 16) Or (ny1 > 47 And ny1 > -47) Or (ny1 < -47) Then vec = 1
If (ny1 > 15 And ny1 < 48) Or (ny1 > -48 And ny1 < -15) Then vec = -1
End If
If KeyAscii = 100 Then ' Нажали клавишу "d" (вправо)
nx1 = nx1 + 1
nx = Sin(nx1 / 10) * 6
nz = Cos(nx1 / 10) * 6
End If
If KeyAscii = 97 Then ' Нажали клавишу "a" (влево)
nx1 = nx1 - 1
nx = Sin(nx1 / 10) * 6
nz = Cos(nx1 / 10) * 6
End If
Debug.Print ny1; nx1; vec
End Sub
Public Sub Render()
Dim i As Long
g_D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, &HFF&, 1, 0
' Начало сцены
g_D3DDevice.BeginScene
SetupMatrices nx, ny, nz, vec
' 3d объекты разделенына части (subsets).
' У каждой части свой материал и текстура.
' Рендеринг 3d объекта по частям в цикле:
For i = 0 To g_NumMaterials - 1
g_D3DDevice.SetMaterial g_MeshMaterials(i)
g_D3DDevice.SetTexture 0, g_MeshTextures(i)
g_Mesh.DrawSubset i
Next
' Конец сцены
g_D3DDevice.EndScene
g_D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub
Может кто решал эту задачу, помогите пожалйста.