comparison examples/E03_hello_cube.nim @ 1132:7f2c477ae1f4

merge
author sam <sam@basx.dev>
date Thu, 23 May 2024 02:26:37 +0700
parents d6c27f0ed3e4
children 71315636ba82
comparison
equal deleted inserted replaced
1131:99869a2b8a53 1132:7f2c477ae1f4
1 #
2 # TODO: Needs Depth-Buffer first!
3 #
4 #
5 #
6 #
7 #
8 #
9
10
11 import std/tables 1 import std/tables
12 import std/times 2 import std/times
13 3
14 import ../src/semicongine 4 import ../semicongine
15 5
16 const 6 const
17 TopLeftFront = newVec3f(-0.5'f32, -0.5'f32, -0.5'f32) 7 TopLeftFront = newVec3f(-0.5'f32, -0.5'f32, -0.5'f32)
18 TopRightFront = newVec3f(0.5'f32, -0.5'f32, -0.5'f32) 8 TopRightFront = newVec3f(0.5'f32, -0.5'f32, -0.5'f32)
19 BottomRightFront = newVec3f(0.5'f32, 0.5'f32, -0.5'f32) 9 BottomRightFront = newVec3f(0.5'f32, 0.5'f32, -0.5'f32)
22 TopRightBack = newVec3f(-0.5'f32, -0.5'f32, 0.5'f32) 12 TopRightBack = newVec3f(-0.5'f32, -0.5'f32, 0.5'f32)
23 BottomRightBack = newVec3f(-0.5'f32, 0.5'f32, 0.5'f32) 13 BottomRightBack = newVec3f(-0.5'f32, 0.5'f32, 0.5'f32)
24 BottomLeftBack = newVec3f(0.5'f32, 0.5'f32, 0.5'f32) 14 BottomLeftBack = newVec3f(0.5'f32, 0.5'f32, 0.5'f32)
25 const 15 const
26 cube_pos = @[ 16 cube_pos = @[
27 TopLeftFront, TopRightFront, BottomRightFront, BottomLeftFront, # front 17 TopLeftFront, TopRightFront, BottomRightFront, BottomLeftFront, # front
28 TopLeftBack, TopRightBack, BottomRightBack, BottomLeftBack, # back 18 TopLeftBack, TopRightBack, BottomRightBack, BottomLeftBack, # back
29 TopLeftBack, TopLeftFront, BottomLeftFront, BottomLeftBack, # left 19 TopLeftBack, TopLeftFront, BottomLeftFront, BottomLeftBack, # left
30 TopRightBack, TopRightFront, BottomRightFront, BottomRightBack, # right 20 TopRightBack, TopRightFront, BottomRightFront, BottomRightBack, # right
31 TopLeftBack, TopRightBack, TopRightFront, TopLeftFront, # top 21 TopLeftBack, TopRightBack, TopRightFront, TopLeftFront, # top
32 BottomLeftFront, BottomRightFront, BottomRightBack, BottomLeftBack, # bottom 22 BottomLeftFront, BottomRightFront, BottomRightBack, BottomLeftBack, # bottom
33 ] 23 ]
34 R = newVec4f(1, 0, 0, 1) 24 R = newVec4f(1, 0, 0, 1)
35 G = newVec4f(0, 1, 0, 1) 25 G = newVec4f(0, 1, 0, 1)
36 B = newVec4f(0, 0, 1, 1) 26 B = newVec4f(0, 0, 1, 1)
52 when isMainModule: 42 when isMainModule:
53 var myengine = initEngine("Hello cube") 43 var myengine = initEngine("Hello cube")
54 44
55 const 45 const
56 shaderConfiguration = createShaderConfiguration( 46 shaderConfiguration = createShaderConfiguration(
57 inputs=[ 47 name = "default shader",
48 inputs = [
58 attr[Vec3f]("position"), 49 attr[Vec3f]("position"),
59 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), 50 attr[Vec4f]("color", memoryPerformanceHint = PreferFastWrite),
60 ], 51 ],
61 intermediates=[attr[Vec4f]("outcolor")], 52 intermediates = [attr[Vec4f]("outcolor")],
62 uniforms=[ 53 uniforms = [
63 attr[Mat4]("projection"), 54 attr[Mat4]("projection"),
64 attr[Mat4]("view"), 55 attr[Mat4]("view"),
65 attr[Mat4]("model"), 56 attr[Mat4]("model"),
66 ], 57 ],
67 outputs=[attr[Vec4f]("color")], 58 outputs = [attr[Vec4f]("color")],
68 vertexCode="""outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""", 59 vertexCode = """outcolor = color; gl_Position = (Uniforms.projection * Uniforms.view * Uniforms.model) * vec4(position, 1);""",
69 fragmentCode="color = outcolor;", 60 fragmentCode = "color = outcolor;",
70 ) 61 )
71 myengine.initRenderer({"default": shaderConfiguration}.toTable) 62 var matDef = MaterialType(name: "default material", vertexAttributes: {"position": Vec3F32, "color": Vec4F32}.toTable)
72 var cube = Scene(name: "scene", meshes: @[newMesh(positions=cube_pos, indices=tris, colors=cube_color, material=Material(name: "default"))]) 63 var cube = Scene(name: "scene", meshes: @[newMesh(positions = cube_pos, indices = tris, colors = cube_color, material = matDef.initMaterialData(name = "default"))])
73 cube.addShaderGlobal("projection", Unit4f32) 64 cube.addShaderGlobal("projection", Unit4f32)
74 cube.addShaderGlobal("view", Unit4f32) 65 cube.addShaderGlobal("view", Unit4f32)
75 cube.addShaderGlobal("model", Unit4f32) 66 cube.addShaderGlobal("model", Unit4f32)
76 myengine.addScene(cube) 67 myengine.initRenderer({matDef: shaderConfiguration})
68 myengine.loadScene(cube)
77 69
78 var t: float32 = cpuTime() 70 var t: float32 = cpuTime()
79 while myengine.updateInputs() == Running and not myengine.keyWasPressed(Escape): 71 while myengine.UpdateInputs() and not KeyWasPressed(Escape):
80 setShaderGlobal(cube, "model", translate(0'f32, 0'f32, 10'f32) * rotate(t, Yf32)) 72 setShaderGlobal(cube, "model", translate(0'f32, 0'f32, 10'f32) * rotate(t, Yf32))
81 setShaderGlobal(cube, "projection", 73 setShaderGlobal(cube, "projection",
82 perspective( 74 perspective(
83 float32(PI / 4), 75 float32(PI / 4),
84 float32(myengine.getWindow().size[0]) / float32(myengine.getWindow().size[0]), 76 float32(myengine.GetWindow().size[0]) / float32(myengine.GetWindow().size[1]),
85 0.1'f32, 77 0.1'f32,
86 100'f32 78 100'f32
87 ) 79 )
88 ) 80 )
89 t = cpuTime() 81 t = cpuTime()