comparison tests/test_mesh.nim @ 245:a19c9d089f25

add: correct camera calculations
author Sam <sam@basx.dev>
date Mon, 22 May 2023 19:21:05 +0700
parents f52fccedf5ab
children dcbd9f256f6a
comparison
equal deleted inserted replaced
244:f52fccedf5ab 245:a19c9d089f25
16 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), 16 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead),
17 attr[uint8]("material", memoryPerformanceHint=PreferFastRead), 17 attr[uint8]("material", memoryPerformanceHint=PreferFastRead),
18 ] 18 ]
19 vertexOutput = @[attr[Vec4f]("vertexColor")] 19 vertexOutput = @[attr[Vec4f]("vertexColor")]
20 fragOutput = @[attr[Vec4f]("color")] 20 fragOutput = @[attr[Vec4f]("color")]
21 uniforms = @[attr[Mat4]("transform"), attr[Vec4f]("material_color", arrayCount=16), ] 21 uniforms = @[
22 attr[Mat4]("projection"),
23 attr[Mat4]("view"),
24 attr[Mat4]("model"),
25 attr[Vec4f]("material_color", arrayCount=16),
26 ]
22 vertexCode = compileGlslShader( 27 vertexCode = compileGlslShader(
23 stage=VK_SHADER_STAGE_VERTEX_BIT, 28 stage=VK_SHADER_STAGE_VERTEX_BIT,
24 inputs=vertexInput, 29 inputs=vertexInput,
25 outputs=vertexOutput, 30 outputs=vertexOutput,
26 uniforms=uniforms, 31 uniforms=uniforms,
27 main="""gl_Position = vec4(position, 1.0) * Uniforms.transform; vertexColor = Uniforms.material_color[material];""" 32 main="""gl_Position = Uniforms.projection * Uniforms.view * Uniforms.model * vec4(position, 1.0); vertexColor = Uniforms.material_color[material];"""
28 ) 33 )
29 fragmentCode = compileGlslShader( 34 fragmentCode = compileGlslShader(
30 stage=VK_SHADER_STAGE_FRAGMENT_BIT, 35 stage=VK_SHADER_STAGE_FRAGMENT_BIT,
31 inputs=vertexOutput, 36 inputs=vertexOutput,
32 outputs=fragOutput, 37 outputs=fragOutput,
34 main="""color = vertexColor;""" 39 main="""color = vertexColor;"""
35 ) 40 )
36 engine.setRenderer(engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0, 1))) 41 engine.setRenderer(engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0, 1)))
37 for scene in scenes.mitems: 42 for scene in scenes.mitems:
38 engine.addScene(scene, vertexInput) 43 engine.addScene(scene, vertexInput)
39 scene.addShaderGlobal("transform", Unit4) 44 scene.addShaderGlobal("projection", Unit4)
45 scene.addShaderGlobal("view", Unit4)
46 scene.addShaderGlobal("model", Unit4)
40 var 47 var
41 size = 1'f32 48 size = 1'f32
42 elevation = -float32(PI) / 3'f32 49 elevation = -float32(PI) / 3'f32
43 azimut = 0'f32 50 azimut = 0'f32
44 currentScene = 0 51 currentScene = 0
59 66
60 if engine.keyWasPressed(NumberRowExtra3): 67 if engine.keyWasPressed(NumberRowExtra3):
61 size = 1'f32 68 size = 1'f32
62 elevation = -float32(PI) / 3'f32 69 elevation = -float32(PI) / 3'f32
63 azimut = 0'f32 70 azimut = 0'f32
71 var ratio = engine.getWindow().size[0] / engine.getWindow().size[1]
64 72
65 size *= 1'f32 + engine.mouseWheel() * 0.05 73 size *= 1'f32 + engine.mouseWheel() * 0.05
66 azimut += engine.mouseMove().x / 180'f32 74 azimut += engine.mouseMove().x / 180'f32
67 elevation -= engine.mouseMove().y / 180'f32 75 elevation -= engine.mouseMove().y / 180'f32
76 scenes[currentScene].setShaderGlobal("projection", ortho(-ratio, ratio, -1, 1, -1, 1))
68 scenes[currentScene].setShaderGlobal( 77 scenes[currentScene].setShaderGlobal(
69 "transform", 78 "view",
70 scale3d(size, size, size) * rotate3d(elevation, newVec3f(1, 0, 0)) * rotate3d(azimut, Yf32) 79 scale3d(size, size, size) * rotate3d(elevation, newVec3f(1, 0, 0)) * rotate3d(azimut, Yf32)
71 ) 80 )
81 scenes[currentScene].setShaderGlobal("model", Unit4f32)
72 engine.renderScene(scenes[currentScene]) 82 engine.renderScene(scenes[currentScene])
73 engine.destroy() 83 engine.destroy()
74 84
75 85
76 when isMainModule: 86 when isMainModule: