Mercurial > games > semicongine
comparison examples/E10_pong.nim @ 538:c1f16a095637
add: color functions + gamma correction
author | Sam <sam@basx.dev> |
---|---|
date | Tue, 07 Feb 2023 12:20:04 +0700 |
parents | 21c276c0a968 |
children | 8bfcaed87cd6 |
comparison
equal
deleted
inserted
replaced
537:f5af3c5421c5 | 538:c1f16a095637 |
---|---|
7 transform: ModelTransformAttribute | 7 transform: ModelTransformAttribute |
8 Uniforms = object | 8 Uniforms = object |
9 view: ViewProjectionTransform | 9 view: ViewProjectionTransform |
10 | 10 |
11 const | 11 const |
12 barcolor = Vec3([1'f, 0'f, 0'f]) | 12 barcolor = RGBfromHex("5A3F00").gamma(2.2) |
13 barSize = 0.1'f | 13 barSize = 0.1'f |
14 barWidth = 0.01'f | 14 barWidth = 0.01'f |
15 ballcolor = Vec3([0'f, 0'f, 0'f]) | 15 ballcolor = RGBfromHex("B17F08").gamma(2.2) |
16 levelRatio = 1 | 16 levelRatio = 1 |
17 ballSize = 0.01'f | 17 ballSize = 0.01'f |
18 backgroundColor = RGBAfromHex("FAC034").gamma(2.2) | |
19 ballSpeed = 60'f | |
18 | 20 |
19 var | 21 var |
20 uniforms = Uniforms() | 22 uniforms = Uniforms() |
21 pipeline: RenderPipeline[Vertex, Uniforms] | 23 pipeline: RenderPipeline[Vertex, Uniforms] |
22 level: Thing | 24 level: Thing |
23 ballVelocity = Vec2([1'f, 1'f]).normalized * 30'f | 25 ballVelocity = Vec2([1'f, 1'f]).normalized * ballSpeed |
24 | 26 |
25 proc globalUpdate(engine: var Engine; t, dt: float32) = | 27 proc globalUpdate(engine: var Engine; t, dt: float32) = |
26 var height = float32(engine.vulkan.frameSize.y) / float32( | 28 var height = float32(engine.vulkan.frameSize.y) / float32( |
27 engine.vulkan.frameSize.x) | 29 engine.vulkan.frameSize.x) |
28 var width = 1'f | 30 var width = 1'f |
42 ball.transform = ball.transform * translate3d(ballVelocity[0] * dt, | 44 ball.transform = ball.transform * translate3d(ballVelocity[0] * dt, |
43 ballVelocity[1] * dt, 0'f) | 45 ballVelocity[1] * dt, 0'f) |
44 | 46 |
45 # loose | 47 # loose |
46 if ball.transform.col(3).x - ballSize/2 <= 0: | 48 if ball.transform.col(3).x - ballSize/2 <= 0: |
47 ballVelocity = Vec2([1'f, 1'f]).normalized * 30'f | 49 ballVelocity = Vec2([1'f, 1'f]).normalized * ballSpeed |
48 ball.transform[0, 3] = 0.5 | 50 ball.transform[0, 3] = width / 2 |
49 ball.transform[1, 3] = 0.5 | 51 ball.transform[1, 3] = height / 2 |
50 | 52 |
51 # bounce level | 53 # bounce level |
52 if ball.transform.col(3).x + ballSize/2 > width: ballVelocity[ | 54 if ball.transform.col(3).x + ballSize/2 > width: ballVelocity[ |
53 0] = -ballVelocity[0] | 55 0] = -ballVelocity[0] |
54 if ball.transform.col(3).y - ballSize/2 <= 0: ballVelocity[1] = -ballVelocity[1] | 56 if ball.transform.col(3).y - ballSize/2 <= 0: ballVelocity[1] = -ballVelocity[1] |
66 ballVelocity[0] = abs(ballVelocity[0]) | 68 ballVelocity[0] = abs(ballVelocity[0]) |
67 | 69 |
68 | 70 |
69 when isMainModule: | 71 when isMainModule: |
70 var myengine = igniteEngine("Pong") | 72 var myengine = igniteEngine("Pong") |
71 myengine.fps = 60 | 73 myengine.maxFPS = 61 |
72 level = newThing("Level") | 74 level = newThing("Level") |
73 var playerbarmesh = quad[Vertex, Vec2, float32]() | 75 var playerbarmesh = quad[Vertex, Vec2, float32]() |
74 playerbarmesh.vertexData.color.data = @[barcolor, barcolor, barcolor, barcolor] | 76 playerbarmesh.vertexData.color.data = @[barcolor, barcolor, barcolor, barcolor] |
75 playerbarmesh.vertexData.transform.data = @[Unit44] | 77 playerbarmesh.vertexData.transform.data = @[Unit44] |
76 var playerbar = newThing("playerbar", playerbarmesh) | 78 var playerbar = newThing("playerbar", playerbarmesh) |
97 myengine, | 99 myengine, |
98 level, | 100 level, |
99 vertexShader, | 101 vertexShader, |
100 fragmentShader | 102 fragmentShader |
101 ) | 103 ) |
102 pipeline.clearColor = Vec4([1.0'f, 1.0'f, 1.0'f, 1.0'f]) | 104 pipeline.clearColor = backgroundColor |
103 # show something | 105 # show something |
104 myengine.run(pipeline, globalUpdate) | 106 myengine.run(pipeline, globalUpdate) |
105 pipeline.trash() | 107 pipeline.trash() |
106 myengine.trash() | 108 myengine.trash() |