190811 c1

This commit is contained in:
2019-08-11 18:38:56 +02:00
parent 2f09834fa0
commit 5a59b69c61
2 changed files with 80 additions and 40 deletions

View File

@@ -6,6 +6,9 @@ Imports OpenTK
Imports OpenTK.Graphics.OpenGL Imports OpenTK.Graphics.OpenGL
Imports Pilz.S3DFileParser Imports Pilz.S3DFileParser
Imports Point = System.Drawing.Point Imports Point = System.Drawing.Point
Imports KeyboardState = OpenTK.Input.KeyboardState
Imports Keyboard = OpenTK.Input.Keyboard
Imports Key = OpenTK.Input.Key
Namespace PreviewN Namespace PreviewN
@@ -20,7 +23,7 @@ Namespace PreviewN
Private camMtx As Matrix4 = Matrix4.Identity Private camMtx As Matrix4 = Matrix4.Identity
Private savedCamPos As New Vector3 Private savedCamPos As New Vector3
Private _isMouseDown As Boolean = False Private _isMouseDown As Boolean = False
Private myPressedKeys As New List(Of Keys) 'Private myPressedKeys As New List(Of Keys)
Private isDeactivated As Boolean = False Private isDeactivated As Boolean = False
Private ReadOnly myModels As New Dictionary(Of Object3D, Renderer) Private ReadOnly myModels As New Dictionary(Of Object3D, Renderer)
@@ -29,11 +32,11 @@ Namespace PreviewN
Public Property Scaling As Single = 500.0F Public Property Scaling As Single = 500.0F
Public Property ClearColor As Color = Color.CornflowerBlue Public Property ClearColor As Color = Color.CornflowerBlue
Public ReadOnly Property PressedKeys As IReadOnlyList(Of Keys) 'Public ReadOnly Property PressedKeys As IReadOnlyList(Of Keys)
Get ' Get
Return myPressedKeys ' Return myPressedKeys
End Get ' End Get
End Property 'End Property
Public ReadOnly Property Camera As Camera Public ReadOnly Property Camera As Camera
Get Get
@@ -55,13 +58,17 @@ Namespace PreviewN
Private ReadOnly Property IsStrgPressed As Boolean Private ReadOnly Property IsStrgPressed As Boolean
Get Get
Return myPressedKeys.Contains(Keys.ControlKey) 'Return myPressedKeys.Contains(Keys.ControlKey)
Dim state As KeyboardState = Keyboard.GetState()
Return state(Key.ControlLeft) OrElse state(Key.ControlRight)
End Get End Get
End Property End Property
Private ReadOnly Property IsShiftPressed As Boolean Private ReadOnly Property IsShiftPressed As Boolean
Get Get
Return myPressedKeys.Contains(Keys.ShiftKey) 'Return myPressedKeys.Contains(Keys.ShiftKey)
Dim state As KeyboardState = Keyboard.GetState()
Return state(Key.ShiftLeft) OrElse state(Key.ShiftRight)
End Get End Get
End Property End Property
@@ -286,44 +293,74 @@ UVs:{0}{0}{5}",
End If End If
End Sub End Sub
Public Sub HandlesOnKeyDown(sender As Object, e As KeyEventArgs) Handles glControl1.KeyDown 'Public Sub HandlesOnKeyDown(sender As Object, e As KeyEventArgs) Handles glControl1.KeyDown
If Not myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Add(e.KeyCode) ' If Not myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Add(e.KeyCode)
End Sub 'End Sub
Public Sub HandlesOnKeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp 'Public Sub HandlesOnKeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
If myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Remove(e.KeyCode) ' If myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Remove(e.KeyCode)
End Sub 'End Sub
Public Sub MoveCameraViaWASDQE() Public Sub MoveCameraViaWASDQE()
Dim moveSpeed As Integer = Convert.ToInt32(Math.Round((If(IsShiftPressed, 60, 30)) * (MyCamera.CamSpeedMultiplier), 0)) Dim moveSpeed As Integer = Convert.ToInt32(Math.Round((If(IsShiftPressed, 60, 30)) * (MyCamera.CamSpeedMultiplier), 0))
Dim allowCamMove As Boolean = Not (IsMouseDown AndAlso IsShiftPressed) Dim allowCamMove As Boolean = Not (IsMouseDown AndAlso IsShiftPressed)
For Each k As Keys In myPressedKeys 'For Each k As Keys In myPressedKeys
If allowCamMove Then ' If allowCamMove Then
Select Case k ' Select Case k
Case Keys.W ' Case Keys.W
'camera.Move(moveSpeed, moveSpeed, camMtx) ' 'camera.Move(moveSpeed, moveSpeed, camMtx)
MyCamera.UpdateCameraMatrixWithScrollWheel(moveSpeed, camMtx) ' MyCamera.UpdateCameraMatrixWithScrollWheel(moveSpeed, camMtx)
savedCamPos = MyCamera.Position ' savedCamPos = MyCamera.Position
Case Keys.S ' Case Keys.S
'camera.Move(-moveSpeed, -moveSpeed, camMtx) ' 'camera.Move(-moveSpeed, -moveSpeed, camMtx)
MyCamera.UpdateCameraMatrixWithScrollWheel(-moveSpeed, camMtx) ' MyCamera.UpdateCameraMatrixWithScrollWheel(-moveSpeed, camMtx)
savedCamPos = MyCamera.Position ' savedCamPos = MyCamera.Position
Case Keys.A ' Case Keys.A
'camera.Move(-moveSpeed, 0, camMtx) ' 'camera.Move(-moveSpeed, 0, camMtx)
MyCamera.UpdateCameraOffsetDirectly(-moveSpeed, 0, camMtx) ' MyCamera.UpdateCameraOffsetDirectly(-moveSpeed, 0, camMtx)
Case Keys.D ' Case Keys.D
'camera.Move(moveSpeed, 0, camMtx) ' 'camera.Move(moveSpeed, 0, camMtx)
MyCamera.UpdateCameraOffsetDirectly(moveSpeed, 0, camMtx) ' MyCamera.UpdateCameraOffsetDirectly(moveSpeed, 0, camMtx)
Case Keys.E ' Case Keys.E
'camera.Move(0, -moveSpeed, camMtx) ' 'camera.Move(0, -moveSpeed, camMtx)
MyCamera.UpdateCameraOffsetDirectly(0, -moveSpeed, camMtx) ' MyCamera.UpdateCameraOffsetDirectly(0, -moveSpeed, camMtx)
Case Keys.Q ' Case Keys.Q
'camera.Move(0, moveSpeed, camMtx) ' 'camera.Move(0, moveSpeed, camMtx)
MyCamera.UpdateCameraOffsetDirectly(0, moveSpeed, camMtx) ' MyCamera.UpdateCameraOffsetDirectly(0, moveSpeed, camMtx)
End Select ' End Select
' End If
'Next
If allowCamMove Then
Dim state As KeyboardState = Keyboard.GetState
If state(Key.W) Then
'camera.Move(moveSpeed, moveSpeed, camMtx)
MyCamera.UpdateCameraMatrixWithScrollWheel(moveSpeed, camMtx)
savedCamPos = MyCamera.Position
End If End If
Next If state(Key.S) Then
'camera.Move(-moveSpeed, -moveSpeed, camMtx)
MyCamera.UpdateCameraMatrixWithScrollWheel(-moveSpeed, camMtx)
savedCamPos = MyCamera.Position
End If
If state(Key.A) Then
'camera.Move(-moveSpeed, 0, camMtx)
MyCamera.UpdateCameraOffsetDirectly(-moveSpeed, 0, camMtx)
End If
If state(Key.D) Then
'camera.Move(moveSpeed, 0, camMtx)
MyCamera.UpdateCameraOffsetDirectly(moveSpeed, 0, camMtx)
End If
If state(Key.E) Then
'camera.Move(0, -moveSpeed, camMtx)
MyCamera.UpdateCameraOffsetDirectly(0, -moveSpeed, camMtx)
End If
If state(Key.Q) Then
'camera.Move(0, moveSpeed, camMtx)
MyCamera.UpdateCameraOffsetDirectly(0, moveSpeed, camMtx)
End If
End If
End Sub End Sub
Private Sub Camera_NeedSelectedObject(e As Camera.NeedSelectedObjectEventArgs) Handles MyCamera.NeedSelectedObject Private Sub Camera_NeedSelectedObject(e As Camera.NeedSelectedObjectEventArgs) Handles MyCamera.NeedSelectedObject

View File

@@ -155,7 +155,7 @@ Namespace RenderingN
indices.Add(curvi) indices.Add(curvi)
curvi += 1 curvi += 1
If verts IsNot Nothing Then If p.Vertex IsNot Nothing Then
verts.Add(New Vector3(p.Vertex.X, p.Vertex.Y, p.Vertex.Z)) verts.Add(New Vector3(p.Vertex.X, p.Vertex.Y, p.Vertex.Z))
Else Else
verts.Add(New Vector3(0, 0, 0)) verts.Add(New Vector3(0, 0, 0))
@@ -260,9 +260,11 @@ Namespace RenderingN
Public Sub DrawModel(mode As RenderMode) Public Sub DrawModel(mode As RenderMode)
DrawModel(mode, Vector3.Zero, Quaternion.Identity, New Vector3(ModelScaling, ModelScaling, ModelScaling)) DrawModel(mode, Vector3.Zero, Quaternion.Identity, New Vector3(ModelScaling, ModelScaling, ModelScaling))
End Sub End Sub
Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion) Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion)
DrawModel(mode, pos, rot, New Vector3(ModelScaling, ModelScaling, ModelScaling)) DrawModel(mode, pos, rot, New Vector3(ModelScaling, ModelScaling, ModelScaling))
End Sub End Sub
Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion, scale As Vector3) Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion, scale As Vector3)
If mode = RenderMode.None Then Return If mode = RenderMode.None Then Return
If Not _HasRendered Then Return If Not _HasRendered Then Return
@@ -277,6 +279,7 @@ Namespace RenderingN
GL.EnableClientState(ArrayCap.TextureCoordArray) GL.EnableClientState(ArrayCap.TextureCoordArray)
For Each mesh As Mesh In obj3d.Meshes For Each mesh As Mesh In obj3d.Meshes
If VertexColorBuffers.ContainsKey(mesh) Then If VertexColorBuffers.ContainsKey(mesh) Then
GL.EnableClientState(ArrayCap.ColorArray) GL.EnableClientState(ArrayCap.ColorArray)
ElseIf NormalBuffers.ContainsKey(mesh) Then ElseIf NormalBuffers.ContainsKey(mesh) Then