Камера в Direct3D

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

Модератор: Mikle

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Камера в Direct3D

Сообщение 13GHOST » 04.02.2004 (Ср) 19:55

Скажите пожалуйста как мне нормально настроить вид камеры чтобы она нормально передвигалась(при нажатии клавиш естественно: влево, вправо, вперед, назад) :?: . А то она у меня черт поймет передвигается. Заранее благодарен.

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

Сообщение d3drm » 04.02.2004 (Ср) 20:20

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

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 06.02.2004 (Пт) 19:12

ну например мне надо что бы она следовала за каким-нибудб объектом или... ну знаете как в КВАКЕ:нажимаешь вперед камера тоже вперед едет и т.д. и .т.п. :wink:

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

Сообщение Mikle » 07.02.2004 (Сб) 11:27

нажимаешь вперед камера тоже вперед едет

С помощью D3DXMatrixTranslation меняешь D3DTS_VIEW. То есть ИЗНАЧАЛЬНО задаешь D3DTS_VIEW с помощью D3DXMatrixLookAtLH так, чтобы комера находилась в начале координат и смотрела вперед. Что-то вроде:
D3DXMatrixLookAtLH MatView, vec3(0, 0, 0), vec3(0, 0, 1), vec3(0, 1, 0)

потом для перемещения умножаешь D3DTS_VIEW на D3DXMatrixTranslation. Для поворота на D3DXMatrixRotationY, если поворачивать только вправо-влево без наклонов или D3DXMatrixRotationAxis для поворота вокруг произвольной оси.

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

Сообщение d3drm » 07.02.2004 (Сб) 14:00

А еще лучше учить все на примере. На planet-source-code.com до фига всего по теме.

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 10.02.2004 (Вт) 15:57

Когда я использую D3DXMatrixRotationY то камера вращается вокруг оси OY в точке (0,0,0), а как сделать так чтобы камера вращалась в той точке в которой она находится?

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Текстура

Сообщение 13GHOST » 10.02.2004 (Вт) 16:01

Подскажите как натянуть текстуру на объект, загруженный из .X файла, или на какую-нибудь одну часть объекта :?:

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

Сообщение Mikle » 10.02.2004 (Вт) 16:42

1. На D3DXMatrixRotationY нужно УМНОЖАТЬ.
2. Перед выводом Subset-а просто ставится
Код: Выделить всё
  d3dDevice.SetTexture 0, myTex 

где myTex - загруженная с помощью d3dx.CreateTextureFromFile или d3dx.CreateTextureFromFileEx текстура. Само собой будет работать, если в X-файле прописаны текстурные координаты.

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 10.02.2004 (Вт) 17:54

чё значит УМНОЖАТЬ, можешь пояснить на конкретном примере

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

Сообщение Mikle » 11.02.2004 (Ср) 16:29

Умножение матриц - это не умножение чисел. Тут важен порядок множителей. Вот рабочий проект, движение как в DOOM-е, даже Shift и Alt работают. Этот код вставь в пустую форму:

Код: Выделить всё
Option Explicit
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

Dim dx As New DirectX8
Dim d3d As Direct3D8
Dim d3dx As New D3DX8
Dim d3dDevice As Direct3DDevice8
Dim vBuffer As Direct3DVertexBuffer8
Dim pTexture As Direct3DTexture8
Dim Mtrx As D3DMATRIX
Dim Keyb(255) As Boolean
Dim t1 As Single, t2 As Single
Dim CamPos As D3DVECTOR, Angle As Single, SinA As Single, CosA As Single

Private Type vFormat
  Position As D3DVECTOR
  Color As Long
End Type

Dim v As vFormat, SizeOfVertex As Long

Private Const vFlag = (D3DFVF_XYZ Or D3DFVF_DIFFUSE)
Private Const pi = 3.141592
Private Const NumTri As Long = 100
Private Const SkyColor = &H455070

Private Sub Form_Load()
  Me.Show
  ShowCursor False
  InitD3D
  InitGeometry
  CamPos = vec3(0, 1, 0)
  Angle = 0
  t2 = Timer
  SetCam
  Do Until Keyb(vbKeyEscape)
    DoEvents
    AscKey
    Render
  Loop
  ShowCursor True
  Unload Me
End Sub

Private Sub AscKey()
Dim t As Single
  t1 = Timer
  t = (t1 - t2) * 2
  t2 = t1
  If Keyb(vbKeyShift) Then t = t * 2
  CosA = Cos(Angle)
  SinA = Sin(Angle)

  If Keyb(vbKeyLeft) Then
    If Keyb(vbKeyMenu) Then
      CamPos.x = CamPos.x - CosA * t
      CamPos.z = CamPos.z - SinA * t
      SetCam
    Else
      Angle = Angle + t: SetCam
    End If
  End If

  If Keyb(vbKeyRight) Then
    If Keyb(vbKeyMenu) Then
      CamPos.x = CamPos.x + CosA * t
      CamPos.z = CamPos.z + SinA * t
      SetCam
    Else
      Angle = Angle - t: SetCam
    End If
  End If

  If Keyb(vbKeyUp) Then
    CamPos.x = CamPos.x - SinA * t
    CamPos.z = CamPos.z + CosA * t
    SetCam
  End If

  If Keyb(vbKeyDown) Then
    CamPos.x = CamPos.x + SinA * t
    CamPos.z = CamPos.z - CosA * t
    SetCam
  End If

End Sub

Private Sub SetCam()
  D3DXMatrixRotationY Mtrx, Angle
  d3dDevice.SetTransform D3DTS_VIEW, Mtrx
  D3DXMatrixTranslation Mtrx, -CamPos.x, -CamPos.y, -CamPos.z
  d3dDevice.MultiplyTransform D3DTS_VIEW, Mtrx
End Sub

Private Sub InitD3D()
Dim DispMode As D3DDISPLAYMODE
Dim d3dpp As D3DPRESENT_PARAMETERS

  Set d3d = dx.Direct3DCreate
  d3d.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode
 
  d3dpp.Windowed = False
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
  d3dpp.BackBufferFormat = DispMode.Format
  d3dpp.BackBufferWidth = DispMode.Width
  d3dpp.BackBufferHeight = DispMode.Height
  d3dpp.BackBufferCount = 1
  d3dpp.EnableAutoDepthStencil = True
  d3dpp.AutoDepthStencilFormat = D3DFMT_D16
 
  Set d3dDevice = d3d.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Me.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)
 
  d3dDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
  d3dDevice.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
  d3dDevice.SetRenderState D3DRS_LIGHTING, False
  d3dDevice.SetRenderState D3DRS_FOGCOLOR, SkyColor
  d3dDevice.SetRenderState D3DRS_FOGDENSITY, &H3D800000
  d3dDevice.SetRenderState D3DRS_FOGTABLEMODE, D3DFOG_EXP
  d3dDevice.SetRenderState D3DRS_FOGENABLE, True
 
  SizeOfVertex = Len(v)

  D3DXMatrixPerspectiveFovLH Mtrx, pi / 3, 0.75, 0.1, 100
  d3dDevice.SetTransform D3DTS_PROJECTION, Mtrx

  D3DXMatrixRotationY Mtrx, 0
  d3dDevice.SetTransform D3DTS_WORLD, Mtrx
End Sub

Private Sub InitGeometry()
Dim Vert(NumTri * 3 - 1) As vFormat
Dim n As Long, x As Single, y As Single, z As Single, c As Long

  Set vBuffer = d3dDevice.CreateVertexBuffer((NumTri * 3) * SizeOfVertex, 0, vFlag, D3DPOOL_DEFAULT)

  Vert(0).Position = vec3(-10, 0, -10)
  Vert(0).Color = &H404040
  Vert(1).Position = vec3(-10, 0, 10)
  Vert(1).Color = &H404040
  Vert(2).Position = vec3(10, 0, -10)
  Vert(2).Color = &H404040
  Vert(3).Position = vec3(-10, 0, 10)
  Vert(3).Color = &H404040
  Vert(4).Position = vec3(10, 0, 10)
  Vert(4).Color = &H404040
  Vert(5).Position = vec3(10, 0, -10)
  Vert(5).Color = &H404040

  For n = 2 To NumTri - 1
    x = Rnd * 20 - 10
    y = Rnd * 3
    z = Rnd * 20 - 10
    c = Rnd * &HFFFFFF
    Vert(n * 3 + 0).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 0).Color = c
    Vert(n * 3 + 1).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 1).Color = c
    Vert(n * 3 + 2).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 2).Color = c
  Next n

  D3DVertexBuffer8SetData vBuffer, 0, SizeOfVertex * (NumTri * 3), 0, Vert(0)
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = True
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = False
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Set vBuffer = Nothing
  Set d3dDevice = Nothing
  Set d3dx = Nothing
  Set d3d = Nothing
  Set dx = Nothing
End Sub

Private Function vec3(x As Single, y As Single, z As Single) As D3DVECTOR
  vec3.x = x
  vec3.y = y
  vec3.z = z
End Function

Private Sub Render()
  d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, SkyColor, 1, 0
  d3dDevice.BeginScene

  d3dDevice.SetStreamSource 0, vBuffer, SizeOfVertex
  d3dDevice.SetVertexShader vFlag
  d3dDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, NumTri

  d3dDevice.EndScene
  d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 11.02.2004 (Ср) 18:48

Mikle,
Код: Выделить всё
Me.Width = 8060
Me.Height = 6060
- это дерзко. 13ghost, если ты хорошо попросишь дядю Лёшу, он же d3drm, то он тебе пришлёт один хороший примерчик под названием Xren... :idea: Хотя можно скинуть только класс с камерой, а остальное - секрет... :roll:

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

Сообщение Mikle » 11.02.2004 (Ср) 18:55

Vovik
Если ты не заметил - эти строки я уже удалил. Просто проект переделывался из другого, и я их сразу не заметил.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 11.02.2004 (Ср) 18:58

Mikle писал(а):Vovik
Если ты не заметил - эти строки я уже удалил. Просто проект переделывался из другого, и я их сразу не заметил.
ты извини, если я тебя обидел, но когда я отвечал, они были...так что извиняй, если чё не так... :oops:

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 12.02.2004 (Чт) 19:22

[quote="Mikle"]Умножение матриц - это не умножение чисел. Тут важен порядок множителей. Вот рабочий проект, движение как в DOOM-е, даже Shift и Alt работают.

Спасибо что на правил «на путь истинный» , а как сделать так чтобы камера «врезалась», а не «пробегала мимо», в модель которую я загрузил из .X файла. И как в .X файле прописать текстурные координаты??

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 13.02.2004 (Пт) 15:34

А вот еще одна проблема: хочу сделать чтобы камера вращаласть однавременно вокруг оси Y и X ставлю:
D3DXMatrixRotationY matWorld, Angle
g_D3DDevice.SetTransform D3DTS_VIEW, matWorld

D3DXMatrixRotationX matWorld, Angle1
g_D3DDevice.SetTransform D3DTS_VIEW, matWorld

D3DXMatrixTranslation matWorld, -CamPos.X, -CamPos.Y, -CamPos.z
g_D3DDevice.MultiplyTransform D3DTS_VIEW, matWorld
но не фига не выходит, почему?

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

Сообщение Mikle » 13.02.2004 (Пт) 17:26

После второго MatrixRotation должно быть Multiply, а не SetTransform. Или вместо двух MatrixRotation применяй один MatrixRotationAxis, но придется рассчитывать ось.

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 13.02.2004 (Пт) 20:24

Mikle писал(а):После второго MatrixRotation должно быть Multiply, а не SetTransform. Или вместо двух MatrixRotation применяй один MatrixRotationAxis, но придется рассчитывать ось.


Все равно как-то получается не то что я хочу. А я хочу сделать чтобы камера повторяла курсор мыши (ну как в кваке например) случайно не знаешь как это делается :?: , я, например, пытаюсь сделать это с помощью DirectInput, но чё-то не очень получается, камера дергается как-то резко очень, иногда даже «едет» не туда кода надо.

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

Сообщение Mikle » 16.02.2004 (Пн) 16:12

DirectInput - это только способ ОПРОСА клавиатуры или мыши. А у тебя, видимо, что-то не то в самой программе. Вот рабочий проект с управлением "как в Quake":
Код: Выделить всё
Option Explicit

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Type vFormat
  Position As D3DVECTOR
  Color As Long
End Type

Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Dim dx As New DirectX8
Dim d3d As Direct3D8
Dim d3dx As New D3DX8
Dim d3dDevice As Direct3DDevice8
Dim vBuffer As Direct3DVertexBuffer8
Dim pTexture As Direct3DTexture8
Dim Mtrx As D3DMATRIX
Dim Keyb(255) As Boolean
Dim t1 As Single, t2 As Single
Dim CamPos As D3DVECTOR, Angle As Single, Diff As Single, SinA As Single, CosA As Single
Dim MousePos As POINTAPI, CenterX As Long, CenterY As Long
Dim MouseSpeedX As Single, MouseSpeedY As Single
Dim v As vFormat, SizeOfVertex As Long

Private Const vFlag = (D3DFVF_XYZ Or D3DFVF_DIFFUSE)
Private Const pi = 3.141592
Private Const NumTri As Long = 100
Private Const SkyColor = &H252550

Private Sub Form_Load()
  Me.Show
  InitD3D
  ShowCursor False
  SetCursorPos CenterX, CenterY
  InitGeometry
  CamPos = vec3(0, 1, 0)
  Angle = 0
  Diff = 0
  MouseSpeedX = -0.005      'Чувствительность мыши
  MouseSpeedY = 0.005       'Чтобы убрать инверсию - ставь отрицательное число
  t2 = Timer
  SetCam
  Do Until Keyb(vbKeyEscape)
    DoEvents
    AscKey
    Render
  Loop
  ShowCursor True
  Unload Me
End Sub

Private Sub AscKey()
Dim t As Single
  t1 = Timer
  t = (t1 - t2) * 4
  t2 = t1
  CosA = Cos(Angle)
  SinA = Sin(Angle)
  GetCursorPos MousePos

  If Keyb(vbKeyLeft) Then
    CamPos.x = CamPos.x - CosA * t
    CamPos.z = CamPos.z - SinA * t
    SetCam
  End If

  If Keyb(vbKeyRight) Then
    CamPos.x = CamPos.x + CosA * t
    CamPos.z = CamPos.z + SinA * t
    SetCam
  End If

  If Keyb(vbKeyUp) Then
    CamPos.x = CamPos.x - SinA * t
    CamPos.z = CamPos.z + CosA * t
    SetCam
  End If

  If Keyb(vbKeyDown) Then
    CamPos.x = CamPos.x + SinA * t
    CamPos.z = CamPos.z - CosA * t
    SetCam
  End If

  If (MousePos.x <> CenterX) Or (MousePos.y <> CenterY) Then
    Angle = Angle + (MousePos.x - CenterX) * MouseSpeedX
    Diff = Diff + (MousePos.y - CenterY) * MouseSpeedY
    If Diff > 1.3 Then Diff = 1.3       'Предел
    If Diff < -1.3 Then Diff = -1.3     'наклона
    SetCursorPos CenterX, CenterY
    SetCam
  End If
End Sub

Private Sub SetCam()
  D3DXMatrixRotationX Mtrx, Diff
  d3dDevice.SetTransform D3DTS_VIEW, Mtrx
  D3DXMatrixRotationY Mtrx, Angle
  d3dDevice.MultiplyTransform D3DTS_VIEW, Mtrx
  D3DXMatrixTranslation Mtrx, -CamPos.x, -CamPos.y, -CamPos.z
  d3dDevice.MultiplyTransform D3DTS_VIEW, Mtrx
End Sub

Private Sub InitD3D()
Dim DispMode As D3DDISPLAYMODE
Dim d3dpp As D3DPRESENT_PARAMETERS

  Set d3d = dx.Direct3DCreate
  d3d.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode
  CenterX = DispMode.Width \ 2
  CenterY = DispMode.Height \ 2

  d3dpp.Windowed = False
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
  d3dpp.BackBufferFormat = DispMode.Format
  d3dpp.BackBufferWidth = DispMode.Width
  d3dpp.BackBufferHeight = DispMode.Height
  d3dpp.BackBufferCount = 1
  d3dpp.EnableAutoDepthStencil = True
  d3dpp.AutoDepthStencilFormat = D3DFMT_D16
 
  Set d3dDevice = d3d.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Me.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)
 
  d3dDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
  d3dDevice.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
  d3dDevice.SetRenderState D3DRS_LIGHTING, False
  d3dDevice.SetRenderState D3DRS_FOGCOLOR, SkyColor
  d3dDevice.SetRenderState D3DRS_FOGDENSITY, &H3D800000
  d3dDevice.SetRenderState D3DRS_FOGTABLEMODE, D3DFOG_EXP
  d3dDevice.SetRenderState D3DRS_FOGENABLE, True
 
  SizeOfVertex = Len(v)

  D3DXMatrixPerspectiveFovLH Mtrx, pi / 3, 0.75, 0.1, 100
  d3dDevice.SetTransform D3DTS_PROJECTION, Mtrx

  D3DXMatrixRotationY Mtrx, 0
  d3dDevice.SetTransform D3DTS_WORLD, Mtrx
End Sub

Private Sub InitGeometry()
Dim Vert(NumTri * 3 - 1) As vFormat
Dim n As Long, x As Single, y As Single, z As Single, c As Long

  Set vBuffer = d3dDevice.CreateVertexBuffer((NumTri * 3) * SizeOfVertex, 0, vFlag, D3DPOOL_DEFAULT)

  Vert(0).Position = vec3(-10, 0, -10)
  Vert(0).Color = &H404040
  Vert(1).Position = vec3(-10, 0, 10)
  Vert(1).Color = &H404040
  Vert(2).Position = vec3(10, 0, -10)
  Vert(2).Color = &H404040
  Vert(3).Position = vec3(-10, 0, 10)
  Vert(3).Color = &H404040
  Vert(4).Position = vec3(10, 0, 10)
  Vert(4).Color = &H404040
  Vert(5).Position = vec3(10, 0, -10)
  Vert(5).Color = &H404040

  For n = 2 To NumTri - 1
    x = Rnd * 20 - 10
    y = Rnd * 3
    z = Rnd * 20 - 10
    c = Rnd * &HFFFFFF
    Vert(n * 3 + 0).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 0).Color = c
    Vert(n * 3 + 1).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 1).Color = c
    Vert(n * 3 + 2).Position = vec3(x + Rnd, y + Rnd, z + Rnd)
    Vert(n * 3 + 2).Color = c
  Next n

  D3DVertexBuffer8SetData vBuffer, 0, SizeOfVertex * (NumTri * 3), 0, Vert(0)
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = True
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = False
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Set vBuffer = Nothing
  Set d3dDevice = Nothing
  Set d3dx = Nothing
  Set d3d = Nothing
  Set dx = Nothing
End Sub

Private Function vec3(x As Single, y As Single, z As Single) As D3DVECTOR
  vec3.x = x
  vec3.y = y
  vec3.z = z
End Function

Private Sub Render()
  d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, SkyColor, 1, 0
  d3dDevice.BeginScene

  d3dDevice.SetStreamSource 0, vBuffer, SizeOfVertex
  d3dDevice.SetVertexShader vFlag
  d3dDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, NumTri

  d3dDevice.EndScene
  d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 19.02.2004 (Чт) 19:36

А как повысить дальность прорисовки, а то я камеру отодвигаю и у меня модель не прорисовывается?

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

Сообщение Mikle » 19.02.2004 (Чт) 19:55

D3DXMatrixPerspectiveFovLH Mtrx, pi / 3, 0.75, 0.1, 100
в этой строке 0.1 - минимальная дальность, 100 - максимальная.

С движением камеры разобрался ?

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 20.02.2004 (Пт) 15:42

Да все понял. спасибо


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

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

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

    TopList