37e885f02e
We can now select a LED on the screen and get the index of the LED. To get the right index, we use the color picking technique mentioned in the OpenGL RedBook. This works suprisingly pretty well (and fast!).
62 lines
1.3 KiB
C
62 lines
1.3 KiB
C
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <glut.h>
|
|
|
|
#include "config.h"
|
|
#include "display.h"
|
|
#include "input.h"
|
|
|
|
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};
|
|
|
|
float backgroundColor[] = {0.3, 0.3, 0.3, 0.4};
|
|
float light0Pos[] = {70, 70, 70, 0.0};
|
|
|
|
float lookX = 0.0, lookZ = 0.0;
|
|
float eyePos = 0.0, eyeAngle = 45.0;
|
|
|
|
GLUquadricObj *quadric;
|
|
|
|
extern void moveCameraPosition(float direction);
|
|
|
|
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");
|
|
|
|
glutDisplayFunc(display);
|
|
glutKeyboardFunc(keyboard);
|
|
glutSpecialFunc(keyboard_special);
|
|
glutMouseFunc(mouse);
|
|
|
|
glClearColor(0.0, 0.0, 0.0, 1.0);
|
|
glShadeModel(GL_SMOOTH);
|
|
|
|
// Lighting
|
|
glEnable(GL_LIGHTING);
|
|
glEnable(GL_DEPTH_TEST);
|
|
|
|
glEnable(GL_LIGHT0);
|
|
glLightfv(GL_LIGHT0, GL_POSITION, light0Pos);
|
|
glLightfv(GL_LIGHT0, GL_AMBIENT, backgroundColor);
|
|
|
|
glMatrixMode(GL_MODELVIEW);
|
|
moveCameraPosition(0); // Init the Position
|
|
|
|
|
|
quadric = gluNewQuadric();
|
|
gluQuadricNormals(quadric, GLU_SMOOTH);
|
|
gluQuadricDrawStyle(quadric, GLU_FILL);
|
|
|
|
glutMainLoop();
|
|
|
|
return 0;
|
|
}
|
|
|