From 942e0d65f3c58137112c86afe825a4b53751ac98 Mon Sep 17 00:00:00 2001 From: Pascal Schedel Date: Tue, 2 Jul 2019 06:31:34 +0200 Subject: [PATCH] 190702 c1 --- .../Preview/ModelPreview.vb | 115 ++++++++++++------ .../Rendering/Renderer.vb | 5 +- 2 files changed, 80 insertions(+), 40 deletions(-) diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.vb b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.vb index 85b4b8b..2990e15 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.vb +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Preview/ModelPreview.vb @@ -6,6 +6,9 @@ Imports OpenTK Imports OpenTK.Graphics.OpenGL Imports Pilz.S3DFileParser Imports Point = System.Drawing.Point +Imports KeyboardState = OpenTK.Input.KeyboardState +Imports Keyboard = OpenTK.Input.Keyboard +Imports Key = OpenTK.Input.Key Namespace PreviewN @@ -20,7 +23,7 @@ Namespace PreviewN Private camMtx As Matrix4 = Matrix4.Identity Private savedCamPos As New Vector3 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 ReadOnly myModels As New Dictionary(Of Object3D, Renderer) @@ -29,11 +32,11 @@ Namespace PreviewN Public Property Scaling As Single = 500.0F Public Property ClearColor As Color = Color.CornflowerBlue - Public ReadOnly Property PressedKeys As IReadOnlyList(Of Keys) - Get - Return myPressedKeys - End Get - End Property + 'Public ReadOnly Property PressedKeys As IReadOnlyList(Of Keys) + ' Get + ' Return myPressedKeys + ' End Get + 'End Property Public ReadOnly Property Camera As Camera Get @@ -55,13 +58,17 @@ Namespace PreviewN Private ReadOnly Property IsStrgPressed As Boolean 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 Property Private ReadOnly Property IsShiftPressed As Boolean 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 Property @@ -286,44 +293,74 @@ UVs:{0}{0}{5}", End If End Sub - Public Sub HandlesOnKeyDown(sender As Object, e As KeyEventArgs) Handles glControl1.KeyDown - If Not myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Add(e.KeyCode) - End Sub + 'Public Sub HandlesOnKeyDown(sender As Object, e As KeyEventArgs) Handles glControl1.KeyDown + ' If Not myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Add(e.KeyCode) + 'End Sub - Public Sub HandlesOnKeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp - If myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Remove(e.KeyCode) - End Sub + 'Public Sub HandlesOnKeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp + ' If myPressedKeys.Contains(e.KeyCode) Then myPressedKeys.Remove(e.KeyCode) + 'End Sub Public Sub MoveCameraViaWASDQE() Dim moveSpeed As Integer = Convert.ToInt32(Math.Round((If(IsShiftPressed, 60, 30)) * (MyCamera.CamSpeedMultiplier), 0)) Dim allowCamMove As Boolean = Not (IsMouseDown AndAlso IsShiftPressed) - For Each k As Keys In myPressedKeys - If allowCamMove Then - Select Case k - Case Keys.W - 'camera.Move(moveSpeed, moveSpeed, camMtx) - MyCamera.UpdateCameraMatrixWithScrollWheel(moveSpeed, camMtx) - savedCamPos = MyCamera.Position - Case Keys.S - 'camera.Move(-moveSpeed, -moveSpeed, camMtx) - MyCamera.UpdateCameraMatrixWithScrollWheel(-moveSpeed, camMtx) - savedCamPos = MyCamera.Position - Case Keys.A - 'camera.Move(-moveSpeed, 0, camMtx) - MyCamera.UpdateCameraOffsetDirectly(-moveSpeed, 0, camMtx) - Case Keys.D - 'camera.Move(moveSpeed, 0, camMtx) - MyCamera.UpdateCameraOffsetDirectly(moveSpeed, 0, camMtx) - Case Keys.E - 'camera.Move(0, -moveSpeed, camMtx) - MyCamera.UpdateCameraOffsetDirectly(0, -moveSpeed, camMtx) - Case Keys.Q - 'camera.Move(0, moveSpeed, camMtx) - MyCamera.UpdateCameraOffsetDirectly(0, moveSpeed, camMtx) - End Select + 'For Each k As Keys In myPressedKeys + ' If allowCamMove Then + ' Select Case k + ' Case Keys.W + ' 'camera.Move(moveSpeed, moveSpeed, camMtx) + ' MyCamera.UpdateCameraMatrixWithScrollWheel(moveSpeed, camMtx) + ' savedCamPos = MyCamera.Position + ' Case Keys.S + ' 'camera.Move(-moveSpeed, -moveSpeed, camMtx) + ' MyCamera.UpdateCameraMatrixWithScrollWheel(-moveSpeed, camMtx) + ' savedCamPos = MyCamera.Position + ' Case Keys.A + ' 'camera.Move(-moveSpeed, 0, camMtx) + ' MyCamera.UpdateCameraOffsetDirectly(-moveSpeed, 0, camMtx) + ' Case Keys.D + ' 'camera.Move(moveSpeed, 0, camMtx) + ' MyCamera.UpdateCameraOffsetDirectly(moveSpeed, 0, camMtx) + ' Case Keys.E + ' 'camera.Move(0, -moveSpeed, camMtx) + ' MyCamera.UpdateCameraOffsetDirectly(0, -moveSpeed, camMtx) + ' Case Keys.Q + ' 'camera.Move(0, moveSpeed, camMtx) + ' MyCamera.UpdateCameraOffsetDirectly(0, moveSpeed, camMtx) + ' 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 - 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 Private Sub Camera_NeedSelectedObject(e As Camera.NeedSelectedObjectEventArgs) Handles MyCamera.NeedSelectedObject diff --git a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.vb b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.vb index 86eb404..64ccb41 100644 --- a/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.vb +++ b/Pilz.Drawing.Drawing3D.OpenGLRenderer/Rendering/Renderer.vb @@ -155,7 +155,7 @@ Namespace RenderingN indices.Add(curvi) 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)) Else verts.Add(New Vector3(0, 0, 0)) @@ -260,9 +260,11 @@ Namespace RenderingN Public Sub DrawModel(mode As RenderMode) DrawModel(mode, Vector3.Zero, Quaternion.Identity, New Vector3(ModelScaling, ModelScaling, ModelScaling)) End Sub + Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion) DrawModel(mode, pos, rot, New Vector3(ModelScaling, ModelScaling, ModelScaling)) End Sub + Public Sub DrawModel(mode As RenderMode, pos As Vector3, rot As Quaternion, scale As Vector3) If mode = RenderMode.None Then Return If Not _HasRendered Then Return @@ -277,6 +279,7 @@ Namespace RenderingN GL.EnableClientState(ArrayCap.TextureCoordArray) For Each mesh As Mesh In obj3d.Meshes + If VertexColorBuffers.ContainsKey(mesh) Then GL.EnableClientState(ArrayCap.ColorArray) ElseIf NormalBuffers.ContainsKey(mesh) Then