From 19defa9be56588803bbae0f38e2f271a91b9d690 Mon Sep 17 00:00:00 2001 From: mattkae Date: Sat, 22 Jan 2022 13:03:12 -0500 Subject: Rendering the square for the spring rectangle --- 2d/softbody/softbody_2/SpringRectangle.h | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 2d/softbody/softbody_2/SpringRectangle.h (limited to '2d/softbody/softbody_2/SpringRectangle.h') diff --git a/2d/softbody/softbody_2/SpringRectangle.h b/2d/softbody/softbody_2/SpringRectangle.h new file mode 100644 index 0000000..b45bd3c --- /dev/null +++ b/2d/softbody/softbody_2/SpringRectangle.h @@ -0,0 +1,63 @@ +#include "../../../shared_cpp/Renderer2d.h" +#include "../../../shared_cpp/types.h" +#include "../../../shared_cpp/mathlib.h" + + +struct SoftbodyRectangle { + float32 width = 100; + float32 height = 100; + + // Represents the density of springs that will be in the rectangle. + int32 springDensity = 10; + + int32 numSubdivisions = 0; + + Mesh2d mesh; + + void load(Renderer2d* renderer) { + int32 numVertices = springDensity * springDensity; // Each subdivision is a square. + int32 numIndices = 6 * ((springDensity - 1) * (springDensity - 1)); + auto vertices = new Vertex2d[numVertices]; + auto indices = new GLuint[numIndices]; + + int32 vIdx = 0; + int32 iIdx = 0; + float32 inverseDensity = 1.f / springDensity; + float32 halfInv = inverseDensity - (inverseDensity / 2.f); + for (int32 y = 0; y < springDensity; y++) { // Rows + for (int32 x = 0; x < springDensity; x++) { // Columns + Vector2 position = Vector2(x * inverseDensity - halfInv, y * inverseDensity- halfInv); + vertices[vIdx] = { position, Vector4(1, 0, 0, 1) }; + + if (y != springDensity - 1 && x != springDensity - 1) { + indices[iIdx++] = vIdx; + indices[iIdx++] = vIdx + 1; + indices[iIdx++] = vIdx + springDensity; + indices[iIdx++] = vIdx + springDensity; + indices[iIdx++] = vIdx + springDensity + 1; + indices[iIdx++] = vIdx + 1; + } + + vIdx++; + } + } + + mesh.load(vertices, numVertices, indices, numIndices, renderer); + mesh.model = Mat4x4().scale(Vector3(width, height, 0)).translateByVec2(Vector2(300, 400)); + + delete [] vertices; + delete [] indices; + } + + void update(float32 dtSeconds) { + + } + + void render(Renderer2d* renderer) { + mesh.render(renderer); + } + + void unload() { + mesh.unload(); + } +}; -- cgit v1.2.1