Hi,
I am trying to design a room thats 19ft long, 8ft high and 11ft deep. I can’t seem to be able to set my camera(eye) at the center of the room and be able to look around and see all the walls from the inside.
#include "../shared/gltools.h"
#include "../shared/glframe.h"
#include "../shared/math3d.cpp"
#include <math.h>
GLFrame frameCamera;
//used following coordinates to keep eye at (0,0,0)
GLfloat vertices[8][3]=
{
{-9.5,-4.0,-6.5},//1
{-9.5,-4.0,6.5},
{-9.5,4.0,-6.5},//3
{-9.5,4.0,6.5},
{9.5,-4.0,-6.5},//5
{9.5,-4.0,6.5},
{9.5,4.0,-6.5},//7
{9.5,4.0,6.5}
}, angles[3]={0.0f};
GLfloat color[8][3]=
{
{1,1,1},
{0,0,0},
{0,0,1},
{0,1,0},
{1,0,0},
{0,1,1},
{1,0,1},
{1,1,0}
};
GLint axis;
void display();
void SpecialKeys(int, int, int);
void keyboard(unsigned char key, int x, int y);
void myInit();
void reshape(int w, int h);
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(600,600);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
glutCreateWindow("My Room");
myInit();
glutDisplayFunc(display);
glutSpecialFunc(SpecialKeys);
glutKeyboardFunc(keyboard);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
frameCamera.ApplyCameraTransform();
glBegin(GL_QUADS);
//front face - white
glColor3fv(color[0]);
glVertex3fv(vertices[4]);
glColor3fv(color[0]);
glVertex3fv(vertices[8]);
glColor3fv(color[0]);
glVertex3fv(vertices[6]);
glColor3fv(color[0]);
glVertex3fv(vertices[2]);
//back face - black
glColor3fv(color[1]);
glVertex3fv(vertices[7]);
glColor3fv(color[1]);
glVertex3fv(vertices[3]);
glColor3fv(color[1]);
glVertex3fv(vertices[1]);
glColor3fv(color[1]);
glVertex3fv(vertices[5]);
//right face - green
glColor3fv(color[3]);
glVertex3fv(vertices[7]);
glColor3fv(color[3]);
glVertex3fv(vertices[8]);
glColor3fv(color[3]);
glVertex3fv(vertices[6]);
glColor3fv(color[3]);
glVertex3fv(vertices[5]);
//left face - blue
glColor3fv(color[2]);
glVertex3fv(vertices[4]);
glColor3fv(color[2]);
glVertex3fv(vertices[2]);
glColor3fv(color[2]);
glVertex3fv(vertices[1]);
glColor3fv(color[2]);
glVertex3fv(vertices[3]);
//top face - red
glColor3fv(color[4]);
glVertex3fv(vertices[4]);
glColor3fv(color[4]);
glVertex3fv(vertices[3]);
glColor3fv(color[4]);
glVertex3fv(vertices[7]);
glColor3fv(color[4]);
glVertex3fv(vertices[8]);
//bottom face - cyan
glColor3fv(color[5]);
glVertex3fv(vertices[5]);
glColor3fv(color[5]);
glVertex3fv(vertices[6]);
glColor3fv(color[5]);
glVertex3fv(vertices[2]);
glColor3fv(color[5]);
glVertex3fv(vertices[1]);
//glTranslatef(0.0f,0.0f,0.0f);
glEnd();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
case 'q':
case 'Q':
exit(0);
case 'x':
case 'X':
axis=0; break;
case 'y':
case 'Y':
axis=1;break;
case 'z':
case 'Z':
axis=2; break;
}
}
void myInit()
{
glClearColor(0.7,0.7,0.7,1);
glEnable(GL_DEPTH);
glEnable(GL_CULL_FACE);
}
void reshape(int w, int h)
{
GLfloat fAspect;
GLfloat windowWidth, windowHeight;
if(h==0)
h=1;
if(w <= h)
{
windowHeight = 3.0f*(GLfloat)h/(GLfloat)w;
windowWidth = 3.0f;
}
else
{
windowWidth = 3.0f *(GLfloat)w/(GLfloat)h;
windowHeight = 3.0f;
}
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(??, windowWidth, ??, windowHeight, ??, ??);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
void SpecialKeys(int key, int x, int y)
{
if(key == GLUT_KEY_UP)
frameCamera.RotateLocalX(0.001f);
if(key == GLUT_KEY_DOWN)
frameCamera.RotateLocalX(-0.001f);
if(key == GLUT_KEY_LEFT)
frameCamera.RotateLocalY(0.001);
if(key == GLUT_KEY_RIGHT)
frameCamera.RotateLocalY(-0.001);
// Refresh the Window
glutPostRedisplay();
}
This is my first program using OpenGL and I think my problem lies with my glOrtho funtion, but am not sure hence i posted my entire program.
Any help will be much appriciated.
Or a link to a section of this forum with the solution would be great too.
Thanks,
T