From 2694d9988f1051106c3fe860c4523dd41c0f1948 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Mon, 31 Oct 2011 00:25:07 +0100 Subject: [PATCH] Implement the LED voltage switch. LEDs can now be switched on or off with the mouse. The current state of the LEd cube is saved in a array which can be easily printed out to STDOUT. --- editor/src/config.h | 4 ++++ editor/src/display.c | 16 ++++++++-------- editor/src/display.h | 2 +- editor/src/input.c | 11 +++++++++-- editor/src/main.c | 16 +++++++++++----- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/editor/src/config.h b/editor/src/config.h index 6937709..ae1ea1b 100644 --- a/editor/src/config.h +++ b/editor/src/config.h @@ -26,9 +26,13 @@ extern float innerWireMaterial[]; // Movement extern float lookX, lookZ; extern float eyePos, eyeAngle; +extern int ledOrientation; // Objects extern GLUquadricObj *quadric; +// LED data +extern int currentFrame[27]; + #endif diff --git a/editor/src/display.c b/editor/src/display.c index 11f1cf5..b009d74 100644 --- a/editor/src/display.c +++ b/editor/src/display.c @@ -5,22 +5,22 @@ #include "display.h" -void drawLEDs(int orientation, int mode) { +void drawLEDs(int mode) { int x, y, z; - int colorIndex = 0; + int ledIndex = 0; - if (orientation == TOP_ORIENTATION) { + if (ledOrientation == TOP_ORIENTATION) { glRotatef(90, 2, 0, 0); } for (z=-10; z<=10; z+=10) // Ebene for (y=-10; y<=10; y+=10) // Zeile for (x=-10; x<=10; x+=10) { // Spalte + ledIndex++; if (mode == PICKING_MODE) { - glColor3ub(0, 0, colorIndex*8); - colorIndex++; + glColor3ub(0, 0, ledIndex*8); } else { - glMaterialfv(GL_FRONT, GL_AMBIENT, (z == 0 ? ledOnMaterial : ledOffMaterial)); + glMaterialfv(GL_FRONT, GL_AMBIENT, (currentFrame[ledIndex-1] == 1 ? ledOnMaterial : ledOffMaterial)); } glPushMatrix(); @@ -79,7 +79,7 @@ void setScene() { // OpenGL Display function void display() { setScene(); - drawLEDs(TOP_ORIENTATION, RENDER_MODE); + drawLEDs(RENDER_MODE); drawWires(); glutSwapBuffers(); } @@ -90,7 +90,7 @@ void displayPickingObjects() { glDisable(GL_DITHER); glDisable(GL_LIGHTING); - drawLEDs(TOP_ORIENTATION, PICKING_MODE); + drawLEDs(PICKING_MODE); glEnable(GL_LIGHTING); glEnable(GL_DITHER); diff --git a/editor/src/display.h b/editor/src/display.h index 99de370..54e4cf2 100644 --- a/editor/src/display.h +++ b/editor/src/display.h @@ -2,7 +2,7 @@ #define _DISPLAY_H -void drawLEDs(int orientation, int mode); +void drawLEDs(int mode); void drawWires(); void display(); diff --git a/editor/src/input.c b/editor/src/input.c index 0632dbb..31cf7b5 100644 --- a/editor/src/input.c +++ b/editor/src/input.c @@ -6,6 +6,7 @@ #include "input.h" #include "display.h" + void moveCameraPosition(float direction) { eyePos += direction; if (eyePos > 360.0) eyePos = 0.0; @@ -49,14 +50,20 @@ void keyboard_special(int key, int x, int y) { void mouse(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { - int viewport[4]; + int position, viewport[4]; GLubyte pixel[3]; displayPickingObjects(); glGetIntegerv(GL_VIEWPORT, viewport); glReadPixels(x, viewport[3]-y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, (void*)pixel); - printf("%d\n", pixel[2]/8); // Selected LED + position = ((int)pixel[2]/8)-1; // Selected LED + + printf("%d\n", position); + currentFrame[position] = currentFrame[position] == 0 ? 1 : 0; + printf("%d\n", currentFrame[position]); + + display(); } } diff --git a/editor/src/main.c b/editor/src/main.c index 3a1861c..83c5f2c 100644 --- a/editor/src/main.c +++ b/editor/src/main.c @@ -1,4 +1,3 @@ - #include #include #include @@ -7,28 +6,35 @@ #include "display.h" #include "input.h" + +// Materials float ledOnMaterial[] = {0.0, 0.0, 1.0, 1.0}; float ledOffMaterial[] = {0.1, 0.1, 0.1, 0.0}; - float wireMaterial[] = {0.7, 0.7, 0.7, 1.0}; float innerWireMaterial[] = {0.2, 0.2, 0.2, 0.3}; +// Colors float backgroundColor[] = {0.3, 0.3, 0.3, 0.4}; -float light0Pos[] = {70, 70, 70, 0.0}; +// Positions +float light0Pos[] = {70, 70, 70, 0.0}; float lookX = 0.0, lookZ = 0.0; float eyePos = 0.0, eyeAngle = 45.0; +int ledOrientation = TOP_ORIENTATION; +// Objects GLUquadricObj *quadric; -extern void moveCameraPosition(float direction); +// LED data +int currentFrame[27] = {0}; + int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); - glutCreateWindow("CTHN LEDCube Editor"); + glutCreateWindow("CTHN LEDCube Editor v0.1"); glutDisplayFunc(display); glutKeyboardFunc(keyboard);