Mercurial > games > semicongine
view examples/alotof_triangles.nim @ 519:03a94b905f1a
did: refactor Matrix names
author | Sam <sam@basx.dev> |
---|---|
date | Fri, 20 Jan 2023 16:36:52 +0700 |
parents | 5d406c17bbcb |
children | d7d9420ba675 |
line wrap: on
line source
import std/times import std/strutils import std/math import std/random import std/enumerate import semicongine type VertexDataA = object position11: PositionAttribute[TVec2[float32]] color22: ColorAttribute[TVec3[float32]] Uniforms = object dt: Descriptor[float32] proc globalUpdate(engine: var Engine, dt: float32) = discard proc randomtransform(): TMat33[float32] = let randomscale = scale2d(float32(rand(1.0) + 0.5), float32(rand(1.0) + 0.5)) let randomrotate = rotate2d(float32(rand(2 * PI))) let randomtranslate = translate2d(float32(rand(1.6) - 0.8), float32(rand(1.6) - 0.8)) result = randomtranslate * randomrotate * randomscale when isMainModule: randomize() var myengine = igniteEngine("A lot of triangles") const baseTriangle = [ TVec3([-0.1'f32, -0.1'f32, 1'f32]), TVec3([ 0.1'f32, 0.1'f32, 1'f32]), TVec3([-0.1'f32, 0.1'f32, 1'f32]), ] var scene = new Thing for i in 1 .. 300: var randommesh = new Mesh[VertexDataA] let randomcolor1 = TVec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]) let transform1 = randomtransform() randommesh.vertexData = VertexDataA( position11: PositionAttribute[TVec2[float32]]( data: @[ TVec2[float32](transform1 * baseTriangle[0]), TVec2[float32](transform1 * baseTriangle[1]), TVec2[float32](transform1 * baseTriangle[2]), ] ), color22: ColorAttribute[TVec3[float32]]( data: @[randomcolor1, randomcolor1, randomcolor1] ) ) let randomcolor2 = TVec3([float32(rand(1)), float32(rand(1)), float32(rand(1))]) let transform2 = randomtransform() var randomindexedmesh = new IndexedMesh[VertexDataA, uint16] randomindexedmesh.vertexData = VertexDataA( position11: PositionAttribute[TVec2[float32]]( data: @[ TVec2[float32](transform2 * baseTriangle[0]), TVec2[float32](transform2 * baseTriangle[1]), TVec2[float32](transform2 * baseTriangle[2]), ] ), color22: ColorAttribute[TVec3[float32]]( data: @[randomcolor2, randomcolor2, randomcolor2] ) ) randomindexedmesh.indices = @[[0'u16, 1'u16, 2'u16]] var childthing = new Thing childthing.parts.add randommesh childthing.parts.add randomindexedmesh scene.children.add childthing const vertexShader = generateVertexShaderCode[VertexDataA, Uniforms]() const fragmentShader = generateFragmentShaderCode[VertexDataA]() var pipeline = setupPipeline[VertexDataA, float32, uint16]( myengine, scene, vertexShader, fragmentShader ) myengine.run(pipeline, globalUpdate) pipeline.trash() myengine.trash()