comparison examples/alotof_triangles.nim @ 22:b45a5d338cd0

did: improve alotof_triangles example, remove glslang lib, use only binary, easier cross-compilation
author Sam <sam@basx.dev>
date Wed, 11 Jan 2023 00:43:17 +0700
parents 316923e9247c
children b1b05d4efb52
comparison
equal deleted inserted replaced
21:316923e9247c 22:b45a5d338cd0
1 import std/math
1 import std/random 2 import std/random
2 3
3 import zamikongine/engine 4 import zamikongine/engine
4 import zamikongine/math/vector 5 import zamikongine/math/vector
5 import zamikongine/math/matrix 6 import zamikongine/math/matrix
11 type 12 type
12 VertexDataA = object 13 VertexDataA = object
13 position11: VertexAttribute[Vec2[float32]] 14 position11: VertexAttribute[Vec2[float32]]
14 color22: VertexAttribute[Vec3[float32]] 15 color22: VertexAttribute[Vec3[float32]]
15 16
17 proc randomtransform(): Mat33[float32] =
18 let randomscale = scale2d(float32(rand(1.0) + 0.5), float32(rand(1.0) + 0.5))
19 let randomrotate = rotate2d(float32(rand(2 * PI)))
20 let randomtranslate = translate2d(float32(rand(1.6) - 0.8), float32(rand(1.6) - 0.8))
21 result = randomtranslate * randomrotate * randomscale
22
16 when isMainModule: 23 when isMainModule:
17 randomize() 24 randomize()
18 var myengine = igniteEngine() 25 var myengine = igniteEngine()
19 const baseTriangle = [ 26 const baseTriangle = [
20 Vec3([-0.3'f32, -0.3'f32, 1'f32]), 27 Vec3([-0.1'f32, -0.1'f32, 1'f32]),
21 Vec3([ 0.3'f32, 0.3'f32, 1'f32]), 28 Vec3([ 0.1'f32, 0.1'f32, 1'f32]),
22 Vec3([-0.3'f32, 0.3'f32, 1'f32]), 29 Vec3([-0.1'f32, 0.1'f32, 1'f32]),
23 ] 30 ]
24 31
25 var scene = new Thing 32 var scene = new Thing
26 33
27 for i in 1 .. 300: 34 for i in 1 .. 300:
28 var randommesh = new Mesh[VertexDataA] 35 var randommesh = new Mesh[VertexDataA]
29 # TODO: create randomized position11 from baseTriangle with random transformation matrix 36 # TODO: create randomized position11 from baseTriangle with random transformation matrix
30 var transform = (Mat33[float32]().randomized() * 2'f32) - 1'f32 37 let transform1 = randomtransform()
31 randommesh.vertexData = VertexDataA( 38 randommesh.vertexData = VertexDataA(
32 position11: VertexAttribute[Vec2[float32]]( 39 position11: VertexAttribute[Vec2[float32]](
33 data: @[ 40 data: @[
34 Vec2[float32](transform * baseTriangle[0]), 41 Vec2[float32](transform1 * baseTriangle[0]),
35 Vec2[float32](transform * baseTriangle[1]), 42 Vec2[float32](transform1 * baseTriangle[1]),
36 Vec2[float32](transform * baseTriangle[2]), 43 Vec2[float32](transform1 * baseTriangle[2]),
37 ] 44 ]
38 ), 45 ),
39 color22: VertexAttribute[Vec3[float32]]( 46 color22: VertexAttribute[Vec3[float32]](
40 data: @[ 47 data: @[
41 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), 48 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]),
43 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), 50 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]),
44 ] 51 ]
45 ) 52 )
46 ) 53 )
47 54
55 let transform2 = randomtransform()
48 var randomindexedmesh = new IndexedMesh[VertexDataA, uint16] 56 var randomindexedmesh = new IndexedMesh[VertexDataA, uint16]
49 randomindexedmesh.vertexData = VertexDataA( 57 randomindexedmesh.vertexData = VertexDataA(
50 position11: VertexAttribute[Vec2[float32]]( 58 position11: VertexAttribute[Vec2[float32]](
51 data: @[ 59 data: @[
52 Vec2[float32](transform * baseTriangle[0]), 60 Vec2[float32](transform2 * baseTriangle[0]),
53 Vec2[float32](transform * baseTriangle[1]), 61 Vec2[float32](transform2 * baseTriangle[1]),
54 Vec2[float32](transform * baseTriangle[2]), 62 Vec2[float32](transform2 * baseTriangle[2]),
55 ] 63 ]
56 ), 64 ),
57 color22: VertexAttribute[Vec3[float32]]( 65 color22: VertexAttribute[Vec3[float32]](
58 data: @[ 66 data: @[
59 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), 67 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]),
60 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), 68 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]),
61 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), 69 Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]),
62 ] 70 ]
63 ) 71 )
64 ) 72 )
65 randomindexedmesh.indices = @[[0'u16, 1'u16, 2'u16], [0'u16, 2'u16, 1'u16]] 73 randomindexedmesh.indices = @[[0'u16, 1'u16, 2'u16]]
66 var childthing = new Thing 74 var childthing = new Thing
67 childthing.parts.add randommesh 75 childthing.parts.add randommesh
68 childthing.parts.add randomindexedmesh 76 childthing.parts.add randomindexedmesh
69 scene.children.add childthing 77 scene.children.add childthing
70 78