From: Mark Slee Date: Tue, 6 Aug 2013 22:27:07 +0000 (-0700) Subject: Add rendering of cube frames, trailer, etc. X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=51d0d59a585389dffc7281cd5c64bde8a2632e16;p=SugarCubes.git Add rendering of cube frames, trailer, etc. --- diff --git a/_Internals.pde b/_Internals.pde index 88ea2e0..f81e6b2 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -34,7 +34,7 @@ import rwmidi.*; final int VIEWPORT_WIDTH = 900; final int VIEWPORT_HEIGHT = 700; -int targetFramerate = 45; +int targetFramerate = 60; int startMillis, lastMillis; GLucose glucose; @@ -58,6 +58,8 @@ DebugUI debugUI; // Camera variables float eyeR, eyeA, eyeX, eyeY, eyeZ, midX, midY, midZ; +final float FEET = 12; + void setup() { startMillis = lastMillis = millis(); @@ -154,22 +156,34 @@ void draw() { if (debugMode) { debugUI.maskColors(colors); } - + camera( eyeX, eyeY, eyeZ, midX, midY, midZ, 0, -1, 0 ); - stroke(#333333); - fill(#292929); - float yFloor = -2; + + float trailerWidth = 20*FEET; + float trailerDepth = 8*FEET; + float trailerHeight = 2*FEET; + noStroke(); + fill(#141414); + drawBox(0, -trailerHeight, 0, 0, 0, 0, trailerWidth, trailerHeight, trailerDepth, trailerHeight/2.); + fill(#070707); + stroke(#222222); beginShape(); - vertex(0, yFloor, 0); - vertex(glucose.model.xMax, yFloor, 0); - vertex(glucose.model.xMax, yFloor, glucose.model.zMax); - vertex(0, yFloor, glucose.model.zMax); - endShape(CLOSE); + vertex(0, 0, 0); + vertex(trailerWidth, 0, 0); + vertex(trailerWidth, 0, trailerDepth); + vertex(0, 0, trailerDepth); + endShape(); + noStroke(); + fill(#292929); + for (Cube c : glucose.model.cubes) { + drawCube(c); + } + noFill(); strokeWeight(2); beginShape(POINTS); @@ -182,6 +196,7 @@ void draw() { // 2D Overlay camera(); + noLights(); javax.media.opengl.GL gl= ((PGraphicsOpenGL)g).beginGL(); gl.glClear(javax.media.opengl.GL.GL_DEPTH_BUFFER_BIT); ((PGraphicsOpenGL)g).endGL(); @@ -199,6 +214,42 @@ void draw() { } } +void drawCube(Cube c) { + drawBox(c.x, c.y, c.z, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH, Cube.EDGE_HEIGHT, Cube.EDGE_WIDTH, Strip.CHANNEL_WIDTH); +} + +void drawBox(float x, float y, float z, float rx, float ry, float rz, float xd, float yd, float zd, float sw) { + pushMatrix(); + translate(x, y, z); + rotate(rx, 1, 0, 0); + rotate(ry / 180. * PI, 0, -1, 0); + rotate(rz, 0, 0, 1); + for (int i = 0; i < 4; ++i) { + float wid = (i % 2 == 0) ? xd : zd; + + beginShape(); + vertex(0, 0); + vertex(wid, 0); + vertex(wid, yd); + vertex(wid - sw, yd); + vertex(wid - sw, sw); + vertex(0, sw); + endShape(); + beginShape(); + vertex(0, sw); + vertex(0, yd); + vertex(wid - sw, yd); + vertex(wid - sw, yd - sw); + vertex(sw, yd - sw); + vertex(sw, sw); + endShape(); + + translate(wid, 0, 0); + rotate(HALF_PI, 0, -1, 0); + } + popMatrix(); +} + void drawUI() { if (uiOn) { ui.draw(); diff --git a/_Mappings.pde b/_Mappings.pde index 4db2330..2aa4b14 100644 --- a/_Mappings.pde +++ b/_Mappings.pde @@ -26,11 +26,40 @@ class SCMapping implements GLucose.Mapping { cubes[cubeIndex++] = new Cube(0, 2*Cube.EDGE_HEIGHT, -6, 0, 0, 0); cubes[cubeIndex++] = new Cube(-5, 3*Cube.EDGE_HEIGHT, -2, 0, -20, 0); - cubes[cubeIndex++] = new Cube(40, 0, 20, 0, 0, 0); - cubes[cubeIndex++] = new Cube(45, Cube.EDGE_HEIGHT, 10, 0, 20, 0); - cubes[cubeIndex++] = new Cube(40, 2*Cube.EDGE_HEIGHT, 14, 0, 0, 0); - cubes[cubeIndex++] = new Cube(35, 3*Cube.EDGE_HEIGHT, 18, 0, -20, 0); - cubes[cubeIndex++] = new Cube(40, 4*Cube.EDGE_HEIGHT, 13, 0, 0, 0); + cubes[cubeIndex++] = new Cube(40, 5, 20, 0, 0, 0); + cubes[cubeIndex++] = new Cube(45, 5+Cube.EDGE_HEIGHT, 10, 0, 20, 0); + cubes[cubeIndex++] = new Cube(40, 5+2*Cube.EDGE_HEIGHT, 14, 0, 0, 0); + cubes[cubeIndex++] = new Cube(35, 5+3*Cube.EDGE_HEIGHT, 18, 0, -20, 0); + cubes[cubeIndex++] = new Cube(40, 5+4*Cube.EDGE_HEIGHT, 13, 0, 0, 0); + + cubes[cubeIndex++] = new Cube(80, 0, 10, 0, 0, 0); + cubes[cubeIndex++] = new Cube(85, Cube.EDGE_HEIGHT, 0, 0, 20, 0); + cubes[cubeIndex++] = new Cube(80, 2*Cube.EDGE_HEIGHT, 4, 0, 0, 0); + cubes[cubeIndex++] = new Cube(75, 3*Cube.EDGE_HEIGHT, 8, 0, -20, 0); + cubes[cubeIndex++] = new Cube(80, 4*Cube.EDGE_HEIGHT, 3, 0, 0, 0); + + cubes[cubeIndex++] = new Cube(120, 10, 10, 0, 0, 0); + cubes[cubeIndex++] = new Cube(125, 10+Cube.EDGE_HEIGHT, 0, 0, 20, 0); + cubes[cubeIndex++] = new Cube(120, 10+2*Cube.EDGE_HEIGHT, 4, 0, 0, 0); + cubes[cubeIndex++] = new Cube(115, 10+3*Cube.EDGE_HEIGHT, 8, 0, -20, 0); + cubes[cubeIndex++] = new Cube(120, 10+4*Cube.EDGE_HEIGHT, 3, 0, 0, 0); + + cubes[cubeIndex++] = new Cube(160, 0, 30, 0, 0, 0); + cubes[cubeIndex++] = new Cube(165, Cube.EDGE_HEIGHT, 20, 0, 20, 0); + cubes[cubeIndex++] = new Cube(160, 2*Cube.EDGE_HEIGHT, 24, 0, 0, 0); + cubes[cubeIndex++] = new Cube(155, 3*Cube.EDGE_HEIGHT, 28, 0, -20, 0); + cubes[cubeIndex++] = new Cube(160, 4*Cube.EDGE_HEIGHT, 23, 0, 0, 0); + + cubes[cubeIndex++] = new Cube(200, 0, 10, 0, 0, 0); + cubes[cubeIndex++] = new Cube(205, Cube.EDGE_HEIGHT, 0, 0, 20, 0); + cubes[cubeIndex++] = new Cube(200, 2*Cube.EDGE_HEIGHT, 4, 0, 0, 0); + cubes[cubeIndex++] = new Cube(195, 3*Cube.EDGE_HEIGHT, 8, 0, -20, 0); + cubes[cubeIndex++] = new Cube(200, 4*Cube.EDGE_HEIGHT, 3, 0, 0, 0); + + cubes[cubeIndex++] = new Cube(200, 0, 10, 0, 0, 0); + cubes[cubeIndex++] = new Cube(205, Cube.EDGE_HEIGHT, 0, 0, 20, 0); + cubes[cubeIndex++] = new Cube(200, 2*Cube.EDGE_HEIGHT, 4, 0, 0, 0); + cubes[cubeIndex++] = new Cube(195, 3*Cube.EDGE_HEIGHT, 8, 0, -20, 0); if (true) { diff --git a/code/GLucose.jar b/code/GLucose.jar index 52e651b..19d2e16 100644 Binary files a/code/GLucose.jar and b/code/GLucose.jar differ