Direct3DRM - 移動
ここに載せてあるソースコードは、参考のために載せてあります
サンプルコードは、一番下にLZHとしてあります
Option Explicit Private Sub Form_Load() Dim frame As Direct3DRMFrame3 Dim mesh As Direct3DRMMeshBuilder3 With RMCanvas1 'フォームを小窓で使用することを宣言する .StartWindowed 'フレームを生成をします Set frame = .D3DRM.CreateFrame(.SceneFrame) 'ひらぺったい立方体を生成します '(CreateBoxMeshメソッドは、 'フレームを原点としてメッシュが作成されます) Set mesh = .CreateBoxMesh(10, 0.1, 10) 'メッシュに画像を貼り付けます mesh.SetTexture .CreateUpdateableTexture(128, 128, App.Path & "\image2.bmp") 'メッシュを元のサイズの3倍にします mesh.ScaleMesh 3, 3, 3 'フレームにメッシュを貼り付けます frame.AddVisual mesh 'カメラの位置と姿勢を設定します .CameraFrame.SetPosition .SceneFrame, 0, 1, 0 .CameraFrame.SetOrientation .SceneFrame, 0, 0, 1, 0, 1, 0 '環境光を最大にします .AmbientLight.SetColorRGB 1, 1, 1 End With 'フォームを強制的に表示して 'メインループに入ります Show MainLoop End Sub Sub MainLoop() Do DoEvents '画面に表示します RMCanvas1.Update Loop End Sub Private Sub Form_Resize() 'フォームのサイズとRMCのサイズを同じにします RMCanvas1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight End Sub Private Sub Form_Unload(Cancel As Integer) '強制的に終了します End End Sub Private Sub RMCanvas1_KeyDown(keyCode As Integer, Shift As Integer) Static r As Integer Dim n3 As D3DVECTOR Dim n4 As D3DVECTOR '現在のカメラの位置を取得します RMCanvas1.CameraFrame.GetPosition RMCanvas1.SceneFrame, n3 'キーの入力に応じてカメラを移動させます If keyCode = vbKeyRight Then 'カメラを右に向けます r = r - 6 If r < 0 Then r = r + 360 End If ElseIf keyCode = vbKeyLeft Then 'カメラを左に向けます r = r + 6 If r >= 360 Then r = r - 360 End If ElseIf keyCode = vbKeyUp Then 'カメラをカメラの向いている方向に移動させます(前進) n3.x = n3.x + Cos(r * 3.14 / 180) n3.z = n3.z + Sin(r * 3.14 / 180) ElseIf keyCode = vbKeyDown Then '(後進) n3.x = n3.x - Cos(r * 3.14 / 180) n3.z = n3.z - Sin(r * 3.14 / 180) ElseIf keyCode = vbKeyNumpad1 Then '垂直に上へ移動します n3.y = n3.y + 1 ElseIf keyCode = vbKeyNumpad0 Then '垂直に下へ移動します n3.y = n3.y - 1 End If Debug.Print "位置=(" & Int(n3.x) & "," & Int(n3.y) & "," & Int(n3.z) & ")" & " 方向=" & Int(r) '移動または向きを反映させます n4.x = Cos(r * 3.14 / 180) n4.z = Sin(r * 3.14 / 180) RMCanvas1.CameraFrame.SetOrientation RMCanvas1.SceneFrame, n4.x, 0, n4.z, 0, 1, 0 RMCanvas1.CameraFrame.SetPosition RMCanvas1.SceneFrame, n3.x, n3.y, n3.z End Sub |