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




<戻る

SampleDX02.lzh


http://hp.vector.co.jp/authors/VA015521/