Mercurial > games > semicongine
diff examples/alotof_triangles.nim @ 21:316923e9247c
add: clean examples, update build configs
author | Sam <sam@basx.dev> |
---|---|
date | Tue, 10 Jan 2023 00:24:37 +0700 |
parents | |
children | b45a5d338cd0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/alotof_triangles.nim Tue Jan 10 00:24:37 2023 +0700 @@ -0,0 +1,78 @@ +import std/random + +import zamikongine/engine +import zamikongine/math/vector +import zamikongine/math/matrix +import zamikongine/vertex +import zamikongine/mesh +import zamikongine/thing +import zamikongine/shader + +type + VertexDataA = object + position11: VertexAttribute[Vec2[float32]] + color22: VertexAttribute[Vec3[float32]] + +when isMainModule: + randomize() + var myengine = igniteEngine() + const baseTriangle = [ + Vec3([-0.3'f32, -0.3'f32, 1'f32]), + Vec3([ 0.3'f32, 0.3'f32, 1'f32]), + Vec3([-0.3'f32, 0.3'f32, 1'f32]), + ] + + var scene = new Thing + + for i in 1 .. 300: + var randommesh = new Mesh[VertexDataA] + # TODO: create randomized position11 from baseTriangle with random transformation matrix + var transform = (Mat33[float32]().randomized() * 2'f32) - 1'f32 + randommesh.vertexData = VertexDataA( + position11: VertexAttribute[Vec2[float32]]( + data: @[ + Vec2[float32](transform * baseTriangle[0]), + Vec2[float32](transform * baseTriangle[1]), + Vec2[float32](transform * baseTriangle[2]), + ] + ), + color22: VertexAttribute[Vec3[float32]]( + data: @[ + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + ] + ) + ) + + var randomindexedmesh = new IndexedMesh[VertexDataA, uint16] + randomindexedmesh.vertexData = VertexDataA( + position11: VertexAttribute[Vec2[float32]]( + data: @[ + Vec2[float32](transform * baseTriangle[0]), + Vec2[float32](transform * baseTriangle[1]), + Vec2[float32](transform * baseTriangle[2]), + ] + ), + color22: VertexAttribute[Vec3[float32]]( + data: @[ + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + Vec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]), + ] + ) + ) + randomindexedmesh.indices = @[[0'u16, 1'u16, 2'u16], [0'u16, 2'u16, 1'u16]] + var childthing = new Thing + childthing.parts.add randommesh + childthing.parts.add randomindexedmesh + scene.children.add childthing + + setupPipeline[VertexDataA, uint16]( + myengine, + scene, + generateVertexShaderCode[VertexDataA]("main", "position11", "color22"), + generateFragmentShaderCode[VertexDataA]("main"), + ) + myengine.fullThrottle() + myengine.trash()