So, I downloaded OpenGL 3.7, and I placed the glut.dll in the right place, the header file in the right place, the lib file in the right place etc.
But my conflict is that I used a different version of OpenGL at my camp because the header 3.7 header doesn't recognize some of the code.
And if you know the solution and can run the code, here is the whole code if you're curious.
// openGL stuff
#include <list>
#include <time.h>
#include <windows.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <cstdio>
#include <iostream>
#define MSIZE 5
using namespace std;
void init();
void display();
void keyboard();
class Character {
GLfloat x, y, z;
public:
Character(GLfloat _cx, GLfloat _cy, GLfloat _cz)
{
x = _cx;
y = _cy;
z = _cz;
}
Character(const Character& b)
{
x = b.x;
y = b.y;
z = b.z;
}
void draw()
{
glShadeModel(GL_SMOOTH);
glPushMatrix();
//glRotatef(cspin, 0.0, 0.0, 1.0);
//cspin ++;
glTranslatef(0.0, 0.0, -.25);
glColor4f(1.0, 0.0, 1.0, 0.0);
glutSolidTeapot(5.0);
glDisable(GL_LIGHTING);
glPopMatrix();
}
};
class Cell {
public:
GLfloat x, y, z;
GLfloat width, depth, height;
GLfloat red, green, blue;
Cell(){
x = -1;
y = -1;
z = -1;
red = ((float) rand()) / RAND_MAX;
green = ((float) rand()) / RAND_MAX;
blue = ((float) rand()) / RAND_MAX;
}
Cell(const Cell& cell){
x=cell.x;
y=cell.y;
z=cell.z;
red = cell.red;
green = cell.green;
blue = cell.blue;
}
bool adjacent(Cell& cell)
{
GLfloat dx = abs(x-cell.x);
GLfloat dy = abs(y-cell.y);
GLfloat dz = abs(z-cell.z);
return (dx == 1 && dy == 0 && dz == 0) ||
(dy == 1 && dx == 0 && dz == 0) ||
(dz == 1 && dx == 0 && dy == 0);
}
bool equals (Cell& cell)
{
return(x==cell.x && y == cell.y && z == cell.z);
}
void draw()
{
/*glFrontFace(GL_CW);
glBegin(GL_QUADS);
glColor4f(0.0, 1.0, 1.0, 0.7);
glVertex3f(x, y, z);
glVertex3f(x + width, y, z);
glVertex3f(x + width, y + height, z);
glVertex3f(x, y + height, z);
glColor4f(1.0, 0.0, 0.0, 0.7);
glVertex3f(x, y, z);
glVertex3f(x, y + height, z);
glVertex3f(x, y + height, z + depth);
glVertex3f(x, y, z + depth);
glColor4f(1.0, 1.0, 0.0, 0.7);
glVertex3f(x, y, z);
glVertex3f(x, y, z + depth);
glVertex3f(x + width, y, z + depth);
glVertex3f(x + width, y, z);
glColor4f(0.0, 1.0, 1.0, 0.7);
glVertex3f(x + width, y + height, z + depth);
glVertex3f(x + width, y, z + depth);
glVertex3f(x, y, z + depth);
glVertex3f(x, y + height, z + depth);
glColor4f(1.0, 0.0, 0.0, 0.7);
glVertex3f(x + width, y, z + depth);
glVertex3f(x + width, y + height, z + depth);
glVertex3f(x + width, y + height, z);
glVertex3f(x + width, y, z);
glColor4f(1.0, 1.0, 0.0, 0.7);
glVertex3f(x + width, y + height, z);
glVertex3f(x + width, y + height, z + depth);
glVertex3f(x, y + height, z + depth);
glVertex3f(x, y + height, z);
glEnd();*/
}
//int operator<(Cell& );
};
typedef list<Cell> CLIST;
class CellSet{
//CLIST set;
public:
CLIST set;
CellSet(){}
CellSet(Cell cell) {
set.push_front(cell);
}
CellSet(const CellSet& set2){
set.assign(set2.set.begin(),set2.set.end());
}
bool member(Cell& cell){
for(CLIST::iterator i=set.begin();i!=set.end();++i) {
if (cell.equals(*i)){
return true;
}
}
return false;
}
CellSet& merge(CellSet& set2)
{
//se
for(CLIST::iterator i=set2.set.begin();i!=set2.set.end();++i) {
CLIST::iterator j=set.begin();
if (!member(*i))
{
set.push_front(*i);
}
}
return *this;
}
CellSet& difference(CellSet& set2)
{
for(CLIST::iterator i=set2.set.begin();i!=set2.set.end();++i) {
CLIST::iterator j=set.begin();
while (j!=set.end()&& !(*i).equals(*j)) {
++j;
}
if(j!=set.end())
{
set.erase(j);
}
}
return *this;
}
bool empty(){
return set.empty();
}
CellSet& intersect(CellSet& set2){
for(CLIST::iterator i=set.begin();i!=set.end();++i) {
CLIST::iterator j=set2.set.begin();
while (j!=set2.set.end()&& !(*i).equals(*j)) {
++j;
}
if(j==set2.set.end())
{
set.erase(i);
}
}
return *this;
}
bool subset(CellSet& set2){
CLIST::iterator i;
for(i=set.begin();i!=set.end();++i) {
if (! set2.member(*i)){
return false;
}
}
return true;
}
bool equals(CellSet& set2){
CLIST::iterator i;
return (subset(set2) && set2.subset(*this));
}
CLIST::iterator get(int index){
CLIST::iterator i;
for (i=set.begin();index > 0 && i != set.end();++i, --index);
return i;
}
};
typedef list<CellSet> CSLIST;
class CSSet {
//CSLIST set;
public:
CSLIST set;
CSSet(){}
CSSet(CellSet cell) {
set.push_front(cell);
}
CSSet(const CSSet& set2){
set.assign(set2.set.begin(),set2.set.end());
}
bool member(CellSet& cell){
for(CSLIST::iterator i=set.begin();i!=set.end();++i) {
if (cell.equals(*i)){
return true;
}
}
return false;
}
CSSet& merge(CSSet& set2)
{
//se
for(CSLIST::iterator i=set2.set.begin();i!=set2.set.end();++i) {
CSLIST::iterator j=set.begin();
if (!member(*i))
{
set.push_front(*i);
}
}
return *this;
}
CSSet& difference(CSSet& set2)
{
for(CSLIST::iterator i=set2.set.begin();i!=set2.set.end();++i) {
CSLIST::iterator j=set.begin();
while (j!=set.end()&& !(*i).equals(*j)) {
++j;
}
if(j!=set.end())
{
set.erase(j);
}
}
return *this;
}
bool empty(){
return set.empty();
}
CSSet& intersect(CSSet& set2){
for(CSLIST::iterator i=set.begin();i!=set.end();++i) {
CSLIST::iterator j=set2.set.begin();
while (j!=set2.set.end()&& !(*i).equals(*j)) {
++j;
}
if(j==set2.set.end())
{
set.erase(i);
}
}
return *this;
}
bool subset(CSSet& set2){
CSLIST::iterator i;
for(i=set.begin();i!=set.end();++i) {
if (! set2.member(*i)){
return false;
}
}
return true;
}
bool equals(CSSet& set2){
CSLIST::iterator i;
return (subset(set2) && set2.subset(*this));
}
CSLIST::iterator get(int index){
CSLIST::iterator i;
for (i=set.begin();index > 0 && i != set.end();++i, --index);
return i;
}
};
/*int operator<(Cell& cell1, Cell& cell2) {
return cell1.getID() < cell2.getID();
}*/
//typedef list<CSET> CSSET;
CSSet walls;
GLfloat cspin = 0.0;
GLfloat x = 0.25, y = 0.25, z = 0.25;
GLfloat xspin = 0.0, yspin = 0.0, zspin = 0.0;
CellSet maze;
//Cell cells[MSIZE][MSIZE][MSIZE];
bool intersectWall(CellSet wall) {
Cell cell1 = *(wall.get(0));
Cell cell2 = *(wall.get(1));
GLfloat cx = cell1.x, cy = cell1.y, cz = cell1.z;
//
GLfloat dx = 1, dy = 1, dz = 1;
if (cell1.x != cell2.x){
dx=0;
cx += (cell1.x < cell2.x ? 1 : 0);
}
if (cell1.y != cell2.y){
dy=0;
cy += (cell1.y < cell2.y ? 1 : 0);
}
if (cell1.z != cell2.z){
dz=0;
cz += (cell1.z < cell2.z ? 1 : 0);
}
//
GLfloat px = x - 0.05, py = y - 0.05, pz = z - 0.05;
GLfloat pw = 0.1, ph = 0.1, pd = 0.1;
// x1 = cx, y1 = cy, z1 = cz, width1 = dx, height1 = dy, depth1 = dz
// x2 = px, y2 = cy, z2 = cz, width2 = pw, height2 = ph, depth2 = pz
return !(cx>px+pw || cx + dx<px)&&
!(cy>py+ph || cy + dy<py)&&
!(cz>pz+pd || cz + dz<pz);
//glFrontFace(GL_CW);
//cout << cx << endl;
//glBegin(GL_QUADS);
//glColor3f(1.0, 1.0, 1.0);
/*if (dz == 0 || dy == 0) {
glVertex3f(cx, cy, cz);
glVertex3f(cx + dx, cy, cz);
glVertex3f(cx + dx, cy + dy, cz + dz);
glVertex3f(cx, cy + dy, cz + dz);
}
if (dx == 0) {
glVertex3f(cx, cy, cz);
glVertex3f(cx + dx, cy + dy, cz);
glVertex3f(cx + dx, cy + dy, cz + dz);
glVertex3f(cx, cy, cz + dz);
}*/
//glEnd();
}
void drawWall(CellSet wall) {
Cell cell1 = *(wall.get(0));
Cell cell2 = *(wall.get(1));
GLfloat cx = cell1.x, cy = cell1.y, cz = cell1.z;
//
GLfloat dx = 1, dy = 1, dz = 1;
if (cell1.x != cell2.x){
dx=0;
cx += (cell1.x < cell2.x ? 1 : 0);
}
if (cell1.y != cell2.y){
dy=0;
cy += (cell1.y < cell2.y ? 1 : 0);
}
if (cell1.z != cell2.z){
dz=0;
cz += (cell1.z < cell2.z ? 1 : 0);
}
//glFrontFace(GL_CW);
//cout << cx << endl;
glColor3f((cell1.red + cell2.red) / 2,(cell1.green + cell2.green) / 2, (cell1.blue + cell2.blue) / 2);
/*glBegin(GL_QUADS);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f(1.0, 1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glEnd();*/
glBegin(GL_QUADS);
//glColor3f(1.0, 1.0, 1.0);
if (dz == 0 || dy == 0) {
glVertex3f(cx, cy, cz);
glVertex3f(cx + dx, cy, cz);
glVertex3f(cx + dx, cy + dy, cz + dz);
glVertex3f(cx, cy + dy, cz + dz);
}
if (dx == 0) {
glVertex3f(cx, cy, cz);
glVertex3f(cx, cy + dy, cz);
glVertex3f(cx, cy + dy, cz + dz);
glVertex3f(cx, cy, cz + dz);
}
glEnd();
}
/* W x,y,z W
0,1,1 1,1,1 1,1,1
xy walls
xz walls
yz walls
*/
GLfloat tx = 0.0, ty = 0.0, tz = 0.0;
GLfloat cx = 0.0, cy = 0.0, cz = -10.0;
/*typedef list<Building> BLIST;
BLIST bl;*/
/*void draw()
{
glShadeModel(GL_SMOOTH);
glPushMatrix();
glRotatef(cspin, 0.0, 0.0, 1.0);
cspin ++;
glColor3f(1.0, 1.0, 0.0);
glutSolidCube(5.0);
glutSolidTorus(1.0, 2.0, 2.0, 20);
glDisable(GL_LIGHTING);
glPopMatrix();
}*/
bool intersectWalls()
{
for(CSLIST::iterator i = walls.set.begin(); i != walls.set.end(); ++i)
{
if (intersectWall(*i)) return true;
}
return false;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
//glLoadIdentity();
glPushMatrix();
//glTranslatef(x, y, z);
//glTranslatef(-x, -y, -z);
glRotatef(xspin, 1.0, 0.0, 0.0);
glRotatef(yspin, 0.0, 1.0, 0.0);
glRotatef(zspin, 0.0, 0.0, 1.0);
glTranslatef(-x, -y, -z);
//glTranslatef(-x, -y, -z);
/*glRotatef(xspin, 1.0, 0.0, 0.0);
glRotatef(yspin, 0.0, 1.0, 0.0);
glRotatef(zspin, 0.0, 0.0, 1.0);*/
//gluPerspective(30.0, 4.0 / 3.0 , 0.5, MSIZE + 1);
//glTranslatef(0, 0, -1.5);
//glRotatef(cspin, 0.0, 1.0, 0.0);
glColor4f(1.0, 1.0, 1.0, 0.0);
//cspin += 0.5;
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(x, y, z); // - 1.5);
glRotatef(-xspin, 1.0, 0.0, 0.0);
glRotatef(-yspin, 0.0, 1.0, 0.0);
glRotatef(-zspin, 0.0, 0.0, 1.0);
glTranslatef(0, 0, -1.5);
//glRotatef(xspin, 0.0, 1.0, 0.0);
//glRotatef(cspin, 0.0, -4.0, 0.0);
//glRotatef(cspin, 0.0, 0.0, -4.0);
glutSolidTeapot(0.1);
glPopMatrix();
//Character player(cx, cy, cz);
//player.draw();
CSLIST::iterator i;
for(i = walls.set.begin(); i != walls.set.end(); ++i)
{
drawWall((*i));
}
//glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
//glMatrixMode(GL_MODELVIEW);
glFlush();
glutPostRedisplay();
}
void keyboard() {
if (GetAsyncKeyState(0x57) & 0x8000)
{
y += 0.01;
if(intersectWalls()) y -= 0.01;
else cout << y << endl;
//cout << z << endl;
//yspin = 90;
//xspin = 0;
//yspin = 0;
//zspin = 0;
}
if (GetAsyncKeyState(0x41) & 0x8000)
{
x -= 0.01;
if(intersectWalls()) x += 0.01;
//yspin = 270;
//xspin = 0;
//xspin = 0;
//yspin = 0;
//zspin = 0;
}
if (GetAsyncKeyState(0x44) & 0x8000)
{
x += 0.01;
if(intersectWalls()) x -= 0.01;
//xspin = 0;
//yspin = 0;
//zspin = 0;
}
if (GetAsyncKeyState(0x53) & 0x8000)
{
y-= 0.01;
if(intersectWalls()) y += 0.01;
//cout << z << endl;
//xspin = 0;
//yspin = 0;
//zspin = 0;
}
if (GetAsyncKeyState(0x20) & 0x8000)
{
tx = cx;
ty = cy;
tz = cz + 20;
}
if (GetAsyncKeyState(0x26) & 0x8000)
{
z -= 0.01;
//xspin = 180; //++;//; = 180;
//yspin = 0;
//zspin = 180;
//zspin = 180;
if(intersectWalls()) z += 0.01;
//xspin = 180;
}
if (GetAsyncKeyState(0x28) & 0x8000)
{
z += 0.01;
if(intersectWalls()) z -= 0.01;
//xspin = 0;
//yspin = 0;
//zspin = 0;
}
}
void init() {
glEnable(GL_DEPTH_TEST);
//glEnable(GL_BLEND);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glOrtho(-0.5, 0.5, -0.5, 0.5, -5, 5);
gluPerspective(30.0, 4.0 / 3.0 , 0.5, MSIZE + 1);
glMatrixMode(GL_MODELVIEW);
//glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0);
glLoadIdentity();
//makedense(-500.0, -500.0, -500.0, 1000.0, 1000.0, 1000.0,
// -500.0, -500.0, -500.0, 1000.0, 1000.0, 1000.0);
glEnable(GL_FOG);
{
GLint fogMode;
GLfloat fogColor[4] = {0.0, 0.0, 0.0, 1.0};
fogMode = GL_EXP;
glFogi(GL_FOG_MODE, fogMode);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, 0.5);
glHint(GL_FOG_HINT, GL_DONT_CARE);
glFogf(GL_FOG_START, 1.0);
glFogf(GL_FOG_END, 10.0);
}
glClearColor(0.0, 0.0, 0.0, 1.0);
}
/*int main(int argc, char **argv)
{
//srand(time(NULL));
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("Paul is so awesome you are freaking out");
init();
glutDisplayFunc(display);
glutIdleFunc(keyboard);
//glutMouseFunc(mouse);
glutMainLoop();
return 0;
}*/
int main(int argc, char *argv[])
{
CSSet conn;
srand(time(NULL));
for(int x=0;x<MSIZE;x++)
{
for(int y=0;y<MSIZE;++y)
{
for(int z=0;z<MSIZE;++z)
{
Cell cell;
cell.x = x;
cell.y = y;
cell.z = z;
if (cell.x == 0){
CellSet edge;
Cell cell2 = cell;
cell2.x = -1;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
else if (cell.x == MSIZE-1){
CellSet edge;
Cell cell2 = cell;
cell2.x = MSIZE;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
if (cell.y == 0){
CellSet edge;
Cell cell2 = cell;
cell2.y = -1;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
else if (cell.y == MSIZE-1){
CellSet edge;
Cell cell2 = cell;
cell2.y = MSIZE;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
if (cell.z == 0){
CellSet edge;
Cell cell2 = cell;
cell2.z = -1;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
else if (cell.z == MSIZE-1){
CellSet edge;
Cell cell2 = cell;
cell2.z = MSIZE;
edge.merge(CellSet(cell));
edge.merge(CellSet(cell2));
walls.merge(CSSet(edge));
}
//if (cell.x)
maze.merge(CellSet(cell));
CellSet initial(cell);
conn.merge(CSSet(initial));
}
}
}
for(CLIST::iterator i = maze.set.begin();i!=maze.set.end(); ++i)
{
for(CLIST::iterator j =maze.set.begin(); j!=maze.set.end(); ++j)
{
if((*i).adjacent(*j)) {
CellSet edge;
edge.merge(CellSet(*i));
edge.merge(CellSet(*j));
walls.merge(CSSet(edge));
}
}
}
while(conn.set.size()>1)
{
int _size = conn.set.size();
int i = rand()%walls.set.size();
CSSet wallset;
CSLIST::iterator wall = walls.get(i);
CSLIST::iterator cset = conn.set.begin();
while(cset!=conn.set.end()) {
for (CLIST::iterator j=(*wall).set.begin(); j !=(*wall).set.end(); ++j)
{
if( (*cset).member(*j)) {
wallset.merge(CSSet(*cset));
}
}
++cset;
}
if (wallset.set.size() > 1) {
conn.difference(wallset);
CellSet merged;
for (CSLIST::iterator j=wallset.set.begin(); j != wallset.set.end(); ++j)
{
merged.merge(*j);
}
conn.merge(CSSet(merged));
walls.difference(CSSet(*wall));
}
if (conn.set.size() != _size) { cout << conn.set.size() << endl;}
}
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("Paul is so awesome you are freaking out");
init();
glutDisplayFunc(display);
glutIdleFunc(keyboard);
//glutMouseFunc(mouse);
glutMainLoop();
return 0;
}