FunWithElectronics.com
          - Collection of Information for those with Electronics as a Hobby
Up one level (OpenGL Programming)

My room programmed in OpenGL





/**
  Compile with:    gcc -o Rommet Rommet.c -lSDL -lGL -lGLU 	
		   In Ubuntu need to install libsdl-dev (apt-get install libsdl-dev)
		   A moose.bmp file is needed in the same directory. It is the poster on the wall above the desk


 **/

#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>


GLfloat xvinkel = 0;
GLfloat yvinkel = -58.400078;
GLfloat zvinkel = 0;
GLfloat pitch = 0;
GLfloat xtranslate = -2.861058;
GLfloat ytranslate = -1.000000;
GLfloat ztranslate = -2.451329;
GLfloat fwidth = 0.01;
GLfloat fdist = 0.017;
//xtranslate: -2.861058, ztranslate -2.451329, ytranslate -1.000000, yvinkel -58.400078
GLuint texture;

#define true 1
#define false 0
#define BREDDE 3.6
#define DYBDE 2.9

static float svart[] = {0,0,0,1};
static float vindufarge[] = {0.8,1.0,0.97};
static float trefarge[] = {0.55,0.35,0.11};
//static float lystre[] = {0.98,0.96,0.74};
//static float lystre[] = {0.85,0.47,0.13};
static float lystre[] = {0.86,0.62,0.12};
static float hvit[] = {1,1,1,1};
static float nestensvart[] = {0.25,0.25,0.25,1};
static float veggfarge[] = {0.9,0.9,0.9,1};
static float golvfarge[] = {0.73,0.65,0.26};
static float rod[] = {0.5,0,0};
static float gulfarge[] = {1,1,0,1};
static float skinning[] = {100};
static float morkblaa[] = {0.016,0.216,0.518};
unsigned int pulten, rommet;
GLfloat skuffz = 0;
GLuint lister;

void lagkube(float,float,float);

void draw()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glLoadIdentity();
	static GLfloat red[4] = {0.8,0.1,0.0,1.0};
	static GLfloat green[4] = {0.0,0.8,0.2,1.0};
	GLfloat pos2[4] = {0,0,0,1};
	glRotatef(pitch,1,0,0);
	glRotatef(yvinkel,0,1,0);	
	glTranslatef(xtranslate,ytranslate,ztranslate);

	glPushMatrix();
	glCallList(rommet);
	glPushMatrix();			//skuff
	static GLfloat pos[4] = {0,0,0,1};
	static GLfloat grey[4] = {0.8,0.8,0.7,1};
//	glDisable(GL_LIGHT1);
	glPushMatrix();
		glTranslatef(1,2.05,1.5);
		glLightfv(GL_LIGHT1,GL_POSITION,pos);
		glMaterialfv(GL_FRONT,GL_EMISSION,hvit);
		glBegin(GL_QUADS);	
			glVertex3f(0,0,0);
			glVertex3f(0,0,0.3);
			glVertex3f(0.3,0,0.3);
			glVertex3f(0.3,0,0);
		glEnd();
		glMaterialfv(GL_FRONT,GL_EMISSION,svart);
		glLightfv(GL_LIGHT1,GL_DIFFUSE,grey);
		glLightfv(GL_LIGHT1,GL_SPECULAR,grey);
	glPopMatrix();
		glTranslatef(0.1,0,0.1);
		glTranslatef(0.02,0,0.78);
		glTranslatef(1.26,0,0);
		glTranslatef(-0.4,0.17,-0.03);
		glTranslatef(0.01,0.01,0);
		glTranslatef(-0.15,0.2,-0.15);
		glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
		glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
		glTranslatef(0,0,skuffz);
				lagkube(0.37,0.14,0.65-0.09);
			
					glBegin(GL_QUADS);
						glNormal3f(0,0,1);
						glVertex3f(0,0,0);
						glVertex3f(0.37,0,0);
						glVertex3f(0.37,0.14,0);
						glVertex3f(0,0.14,0);
					glEnd();
					glMaterialfv(GL_FRONT,GL_DIFFUSE,svart);
					glMaterialfv(GL_FRONT,GL_AMBIENT,svart);
					glBegin(GL_QUADS);
						glVertex3f(0.14,0.07,0.02);
						glVertex3f(0.22,0.07,0.02);
						glVertex3f(0.22,0.09,0.02);
						glVertex3f(0.14,0.09,0.02);
					glEnd();
	glPopMatrix();
	glPopMatrix();


	glFlush();
	SDL_GL_SwapBuffers();

}



void lagvindu(float x,float y, int tvers)
{
	glMaterialfv(GL_FRONT,GL_DIFFUSE,vindufarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,vindufarge);

	if (tvers)
	{
		glBegin(GL_QUADS); //vindu
			glVertex3f(0.0,0.0,0);
			glVertex3f(0.0,0.0,-x);
			glVertex3f(0.0,y,-x);
			glVertex3f(0.0,y,0);
		glEnd();

		glMaterialfv(GL_FRONT,GL_DIFFUSE,trefarge);
		glMaterialfv(GL_FRONT,GL_AMBIENT,trefarge);
		glBegin(GL_QUADS);			//vinduskarm
			glVertex3f(0.0,-0.05,0.05);
			glVertex3f(0.0,-0.05,-x-0.05);
			glVertex3f(0.0,-0.01,-x-0.05);
			glVertex3f(0.0,-0.01,0.05);

			glVertex3f(0.0,y+0.01,0.05);
			glVertex3f(0.0,y+0.01,-x-0.05);
			glVertex3f(0.0,y+0.05,-x-0.05);
			glVertex3f(0.0,y+0.05,0.05);

			glVertex3f(0.0,-0.01,0+0.05);
			glVertex3f(0,-0.01,0.01);
			glVertex3f(0,y+0.01,0.01);
			glVertex3f(0,y+0.01,+0.05);

			glVertex3f(0.0,-0.01,-x-0.05);
			glVertex3f(0,-0.01,-x-0.01);
			glVertex3f(0,y+0.01,-x-0.01);
			glVertex3f(0,y+0.01,-x-0.05);
		glEnd();

	}
	else 
	{
		glBegin(GL_QUADS); //vindu
			glVertex3f(0.0,0.0,0);
			glVertex3f(x,0.0,0);
			glVertex3f(x,y,0);
			glVertex3f(0.0,y,0);
		glEnd();

	}
}

void lagpinne(float h, float tykkelse)
{
	glPushMatrix();
	glBegin(GL_QUADS);
		glNormal3f(0,0,1);
		glVertex3f(0,0,0);
		glVertex3f(tykkelse,0,0);
		glVertex3f(tykkelse,h,0);
		glVertex3f(0,h,0);

		glNormal3f(1,0,0);
		glVertex3f(tykkelse,0,0);
		glVertex3f(tykkelse,0,-tykkelse);
		glVertex3f(tykkelse,h,-tykkelse);
		glVertex3f(tykkelse,h,0);

		glNormal3f(0,0,-1);
		glVertex3f(tykkelse,0,-tykkelse);
		glVertex3f(0,0,-tykkelse);
		glVertex3f(0,h,-tykkelse);
		glVertex3f(tykkelse,h,-tykkelse);

		glNormal3f(-1,0,0);
		glVertex3f(0,0,-tykkelse);
		glVertex3f(0,0,0);
		glVertex3f(0,h,0);
		glVertex3f(0,h,-tykkelse);
	glEnd();
	glPopMatrix();
}

void lagkube(float x, float y, float z)
{
	glPushMatrix();
	glBegin(GL_QUADS);
		glNormal3f(1,0,0);
		glVertex3f(x,0,0);
		glVertex3f(x,0,-z);
		glVertex3f(x,y,-z);
		glVertex3f(x,y,0);

		glNormal3f(0,1,0);
		glVertex3f(x,y,0);
		glVertex3f(x,y,-z);
		glVertex3f(0,y,-z);
		glVertex3f(0,y,0);

		glNormal3f(-1,0,0);
		glVertex3f(0,y,0);
		glVertex3f(0,y,-z);
		glVertex3f(0,0,-z);
		glVertex3f(0,0,0);

		glNormal3f(0,-1,0);
		glVertex3f(0,0,0);
		glVertex3f(0,0,-z);
		glVertex3f(x,0,-z);
		glVertex3f(x,0,0);
	glEnd();
	glPopMatrix();
}


void lagkube2(float x, float y, float z)
{
	glPushMatrix();
	glBegin(GL_QUADS);
		glNormal3f(1,0,0);
		glVertex3f(x,0,0);
		glVertex3f(x,0,-z);
		glVertex3f(x,y,-z);
		glVertex3f(x,y,0);

		glNormal3f(0,1,0);
		glVertex3f(x,y,0);
		glVertex3f(x,y,-z);
		glVertex3f(0,y,-z);
		glVertex3f(0,y,0);

		glNormal3f(-1,0,0);
		glVertex3f(0,y,0);
		glVertex3f(0,y,-z);
		glVertex3f(0,0,-z);
		glVertex3f(0,0,0);

		glNormal3f(0,-1,0);
		glVertex3f(0,0,0);
		glVertex3f(0,0,-z);
		glVertex3f(x,0,-z);
		glVertex3f(x,0,0);

		glNormal3f(0,0,1);
		glVertex3f(0,0,0);
		glVertex3f(x,0,0);
		glVertex3f(x,y,0);
		glVertex3f(0,y,0);

		glNormal3f(0,0,-1);
		glVertex3f(0,0,-z);
		glVertex3f(x,0,-z);
		glVertex3f(x,y,-z);
		glVertex3f(0,y,-z);
	glEnd();
	glPopMatrix();
}

void lagkube3(float x, float y, float z)
{
	glPushMatrix();
	glBegin(GL_QUADS);
		glNormal3f(1,0,0);
		glVertex3f(x,0,0);
		glVertex3f(x,0,-z);
		glVertex3f(x,y,-z);
		glVertex3f(x,y,0);


		glNormal3f(-1,0,0);
		glVertex3f(0,y,0);
		glVertex3f(0,y,-z);
		glVertex3f(0,0,-z);
		glVertex3f(0,0,0);

		glNormal3f(0,-1,0);
		glVertex3f(0,0,0);
		glVertex3f(0,0,-z);
		glVertex3f(x,0,-z);
		glVertex3f(x,0,0);
	glEnd();
	glPopMatrix();
}


void laghylle()
{
	glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
	glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
	glPushMatrix();
		lagkube2(0.03,0.8,0.4);   //nedre del
		glTranslatef(0.98,0,0);
		lagkube2(0.03,0.8,0.4);
		glTranslatef(-0.98,0,0);
		glPushMatrix();
			glTranslatef(0,0.1,-0.015);
			lagkube2(0.98,0.03,0.4-0.015);
			glTranslatef(0,0.26,0);
			lagkube2(0.98,0.03,0.4-0.015);
			glTranslatef(0,0.4,0);
			lagkube2(0.98,0.03,0.4-0.015);
		glPopMatrix();

		glTranslatef(0,0.8,-0.16);		//øvre del
		lagkube2(0.03,0.96,0.24);
		glTranslatef(0.98,0,0);
		lagkube2(0.03,0.96,0.24);
		glTranslatef(-0.98,0,0);
		glPushMatrix();
			glTranslatef(0,0.4,0);
			lagkube2(0.98,0.03,0.24);
			glTranslatef(0,0.26,0);
			lagkube2(0.98,0.03,0.24);
			glTranslatef(0,0.26,0);
			lagkube2(0.98,0.03,0.24);
		glPopMatrix();

	glPopMatrix();
}


void displaylister()
{
	lister = glGenLists(2);
	rommet = lister;
	pulten = lister+1;
	glNewList(pulten,GL_COMPILE);					//Pulten
	glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
	glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
	glPushMatrix();
	glTranslatef(0,0.7,0);
	glBegin(GL_QUADS);
		glNormal3f(0,1,0);
		glVertex3f(0,0,0.66);
		glVertex3f(1.25,0,0.66);
		glVertex3f(1.25,0,0);
		glVertex3f(0,0,0);

		glNormal3f(0,-1,0);
		glVertex3f(0,-0.04,0.66);
		glVertex3f(1.25,-0.04,0.66);
		glVertex3f(1.25,-0.04,0);
		glVertex3f(0,-0.04,0);

		glNormal3f(0,0,1);
		glVertex3f(0,-0.04,0.66);
		glVertex3f(1.25,-0.04,0.66);
		glVertex3f(1.25,0,0.66);
		glVertex3f(0,0,0.66);

		glNormal3f(1,0,0);
		glVertex3f(1.25,-0.04,0.66);
		glVertex3f(1.25,-0.04,0.0);
		glVertex3f(1.25,0,0.0);
		glVertex3f(1.25,0,0.66);
	glEnd();

	glPopMatrix();
	glPushMatrix();
		glTranslatef(0.02,0,0.78-0.15);
		lagpinne(0.7,0.05);
		glPushMatrix();
			glTranslatef(0,+0.2,0);
			lagkube(0.05,0.05,0.7-0.15);
		glPopMatrix();
		glTranslatef(1.26-0.15,0,0);
		lagpinne(0.7,0.05);
		glPushMatrix();
			glTranslatef(0,+0.2,0);
			lagkube(0.05,0.05,0.7-0.15);
			glTranslatef(-0.4,0.17,-0.03);
			lagkube(0.39,0.31,0.65-0.09);
			glPushMatrix();		//skuffer i pulten
				glTranslatef(0.01,0.01,0);
				glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
				glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
				glTranslatef(0,0.15,0);
				lagkube3(0.37,0.14,0.65-0.09);
				glBegin(GL_QUADS);
					glNormal3f(0,0,1);
					glVertex3f(0,0,0);
					glVertex3f(0.37,0,0);
					glVertex3f(0.37,0.14,0);
					glVertex3f(0,0.14,0);
				glEnd();
				glMaterialfv(GL_FRONT,GL_DIFFUSE,svart);
				glMaterialfv(GL_FRONT,GL_AMBIENT,svart);
				glBegin(GL_QUADS);
					glVertex3f(0.14,0.07,0.01);
					glVertex3f(0.22,0.07,0.01);
					glVertex3f(0.22,0.09,0.01);
					glVertex3f(0.14,0.09,0.01);
				glEnd();
				glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
				glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
			glPopMatrix();
		glPopMatrix();
		glTranslatef(0,0,-0.68+0.15);
		lagpinne(0.7,0.05);
		glTranslatef(-1.26+0.15,0,0);
		lagpinne(0.7,0.05);
	glPopMatrix();
	glPushMatrix();
		glTranslatef(2,1,2);

	glPopMatrix();
	glEndList();




	glNewList(rommet,GL_COMPILE);
	glPushMatrix();			//Rom start

	glMaterialfv(GL_FRONT,GL_DIFFUSE,nestensvart);
	glMaterialfv(GL_FRONT,GL_AMBIENT,svart);
	glBegin(GL_QUADS);    //vegger utvendig
		glNormal3f(0,0,-1);
		glVertex3f(0,0,0);
		glVertex3f(BREDDE,0,0);
		glVertex3f(BREDDE,2.44,0);
		glVertex3f(0,2.07,0);

		glNormal3f(0,0,1);
		glVertex3f(0,0,DYBDE);
		glVertex3f(BREDDE,0,DYBDE);
		glVertex3f(BREDDE,2.44,DYBDE);
		glVertex3f(0,2.07,DYBDE);

		glNormal3f(-1,0,0);
		glVertex3f(0,0,0);
		glVertex3f(0,0,DYBDE);
		glVertex3f(0,2.07,DYBDE);
		glVertex3f(0,2.07,0);

		glNormal3f(1,0,0);
		glVertex3f(BREDDE,0,0);
		glVertex3f(BREDDE,0,DYBDE);
		glVertex3f(BREDDE,2.44,DYBDE);
		glVertex3f(BREDDE,2.44,0);

		glNormal3f(0,1,0);   //tak utvendig
		glVertex3f(0,2.07,0);
		glVertex3f(BREDDE,2.44,0);
		glVertex3f(BREDDE,2.44,DYBDE);
		glVertex3f(0,2.07,DYBDE);

	glEnd();
	glMaterialfv(GL_FRONT,GL_DIFFUSE,veggfarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,veggfarge);
	//glPolygonStipple(stiplavegg);
	//glEnable(GL_POLYGON_STIPPLE);
	glBegin(GL_QUADS);    //vegger innvendig
		glNormal3f(0,0,1);
		glVertex3f(0.01,0,0.01);
		glVertex3f(BREDDE-0.01,0,0.01);
		glVertex3f(BREDDE-0.01,2.44-0.01,0.01);
		glVertex3f(0.01,2.07-0.01,0.01);

		glNormal3f(0,0,-1);
		glVertex3f(0.01,0,DYBDE-0.01);
		glVertex3f(BREDDE-0.01,0,DYBDE-0.01);
		glVertex3f(BREDDE-0.01,2.44,DYBDE-0.01);
		glVertex3f(0.01,2.07,DYBDE-0.01);

		glNormal3f(+1,0,0);
		glVertex3f(0.01,0,0.01);
		glVertex3f(0.01,0,DYBDE-0.01);
		glVertex3f(0.01,2.07,DYBDE-0.01);
		glVertex3f(0.01,2.07,0.01);

		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.01,0,0.01);
		glVertex3f(BREDDE-0.01,0,DYBDE-0.01);
		glVertex3f(BREDDE-0.01,2.44,DYBDE-0.01);
		glVertex3f(BREDDE-0.01,2.44,0.01);


		glNormal3f(0,-1,0);   //tak innvendig
		glVertex3f(0.01,2.07-0.01,0.01);
		glVertex3f(BREDDE-0.01,2.44-0.01,0.01);
		glVertex3f(BREDDE-0.01,2.44-0.01,DYBDE-0.01);
		glVertex3f(0.01,2.07-0.01,DYBDE-0.01);


	glEnd();
	glDisable(GL_POLYGON_STIPPLE);
	glMaterialfv(GL_FRONT,GL_AMBIENT,golvfarge);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,golvfarge);
	glBegin(GL_QUADS);
		glNormal3f(0,1,0);   //golvet
		glVertex3f(0,0,0);
		glVertex3f(BREDDE,0,0);
		glVertex3f(BREDDE,0,DYBDE);
		glVertex3f(0,0,DYBDE);
	glEnd();
	glPushMatrix();
	glTranslatef(0.02,0.75,DYBDE-0.1);  //vinduer
	glNormal3f(1,0,0);
	lagvindu(1.15,1.12,true);
	glTranslatef(-0.02,-0.75,-DYBDE+0.15);
	glTranslatef(0.02,0.75,DYBDE-0.23-1.15);
	glNormal3f(1,0,0);
	lagvindu(0.4,1.12,true);
	glTranslatef(-0.02,-0.75,-(DYBDE-0.2-1.3-0.1));
	glPopMatrix();
	glPushMatrix();
	//glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
	//glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
	glTranslatef(0.02,0.75+1.12+0.05,DYBDE-0.01);
	lagkube2(0.02,0.05,DYBDE-0.02);
	glTranslatef(0,-1.14-0.12,0);
	lagkube2(0.02,0.05,DYBDE-0.02);
	glPopMatrix();

	glMaterialfv(GL_FRONT,GL_DIFFUSE,rod);
	glMaterialfv(GL_FRONT,GL_AMBIENT,rod);
	glBegin(GL_QUADS); //dør
		glNormal3f(-1,0,0); //innvendig
		glVertex3f(BREDDE-0.02,0.05,0.03);
		glVertex3f(BREDDE-0.02,0.05,0.03+0.72);
		glVertex3f(BREDDE-0.02,1.90,0.03+0.72);
		glVertex3f(BREDDE-0.02,1.90,0.03);

		glNormal3f(1,0,0); //utvendig
		glVertex3f(BREDDE+0.02,0.05,0.03);
		glVertex3f(BREDDE+0.02,0.05,0.03+0.72);
		glVertex3f(BREDDE+0.02,1.90,0.03+0.72);
		glVertex3f(BREDDE+0.02,1.90,0.03);
	glEnd();
	glMaterialfv(GL_FRONT,GL_AMBIENT,vindufarge);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,vindufarge);
	glLineWidth(5);
	glBegin(GL_QUADS);
		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.03,1,0.10);
		glVertex3f(BREDDE-0.03,1,0.21);
		glVertex3f(BREDDE-0.03,1.02,0.21);
		glVertex3f(BREDDE-0.03,1.02,0.10);

		glNormal3f(1,0,0);	
		glVertex3f(BREDDE+0.03,1,0.10);
		glVertex3f(BREDDE+0.03,1,0.21);
		glVertex3f(BREDDE+0.03,1.02,0.21);
		glVertex3f(BREDDE+0.03,1.02,0.10);
	glEnd();

	glMaterialfv(GL_FRONT,GL_DIFFUSE,veggfarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,veggfarge);
	glBegin(GL_QUADS); //hylle over dør/vask
		glNormal3f(0,-1,0);
		glVertex3f(BREDDE-0.58,1.95,0.02);
		glVertex3f(BREDDE-0.02,1.95,0.02);
		glVertex3f(BREDDE-0.02,1.95,DYBDE-0.02);
		glVertex3f(BREDDE-0.58,1.95,DYBDE-0.02);

		glNormal3f(0,-1,0);
		glVertex3f(BREDDE-0.58,2.04,0.02);
		glVertex3f(BREDDE-0.02,2.04,0.02);
		glVertex3f(BREDDE-0.02,2.04,DYBDE-0.02);
		glVertex3f(BREDDE-0.58,2.04,DYBDE-0.02);

		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.58,1.95,0.02);
		glVertex3f(BREDDE-0.58,1.95,DYBDE-0.02);
		glVertex3f(BREDDE-0.58,2.04,DYBDE-0.02);
		glVertex3f(BREDDE-0.58,2.04,0.02);
	glEnd();
	glBegin(GL_QUADS);  //den lille veggen over hylla
		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.30,2.04,0.02);
		glVertex3f(BREDDE-0.30,2.04,DYBDE-0.02);
		glVertex3f(BREDDE-0.30,2.40,DYBDE-0.02);
		glVertex3f(BREDDE-0.30,2.40,0.02);
	glEnd();
	glMaterialfv(GL_FRONT,GL_DIFFUSE,veggfarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,veggfarge);
	glBegin(GL_QUADS);	//venstre vaskskap
		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.58,0.02,0.85);
		glVertex3f(BREDDE-0.58,0.02,0.85+0.63);
		glVertex3f(BREDDE-0.58,1.94,0.85+0.63);
		glVertex3f(BREDDE-0.58,1.94,0.85);

		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.02,0.02,0.85);
		glVertex3f(BREDDE-0.58,0.02,0.85);
		glVertex3f(BREDDE-0.58,1.94,0.85);
		glVertex3f(BREDDE-0.02,1.94,0.85);

		glNormal3f(0,0,1);
		glVertex3f(BREDDE-0.02,0.02,0.85+0.63);
		glVertex3f(BREDDE-0.58,0.02,0.85+0.63);
		glVertex3f(BREDDE-0.58,1.94,0.85+0.63);
		glVertex3f(BREDDE-0.02,1.94,0.85+0.63);
	glEnd();
	glMaterialfv(GL_FRONT,GL_AMBIENT,gulfarge);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,gulfarge);
	glBegin(GL_QUADS);
		glVertex3f(BREDDE-0.59,0.9,0.85+0.54);
		glVertex3f(BREDDE-0.59,0.8,0.85+0.54);
		glVertex3f(BREDDE-0.59,0.8,0.85+0.55);
		glVertex3f(BREDDE-0.59,0.9,0.85+0.55);
	glEnd();
	glMaterialfv(GL_FRONT,GL_DIFFUSE,veggfarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,veggfarge);
	//glTranslatef(0,0,1.67);
	glBegin(GL_QUADS);	//høyre vaskskap
		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.58,0.02,DYBDE-0.68);
		glVertex3f(BREDDE-0.58,0.02,DYBDE-0.05);
		glVertex3f(BREDDE-0.58,1.94,DYBDE-0.05);
		glVertex3f(BREDDE-0.58,1.94,DYBDE-0.68);

		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.02,0.02,DYBDE-0.68);
		glVertex3f(BREDDE-0.58,0.02,DYBDE-0.68);
		glVertex3f(BREDDE-0.58,1.94,DYBDE-0.68);
		glVertex3f(BREDDE-0.02,1.94,DYBDE-0.68);

		glNormal3f(0,0,1);
		glVertex3f(BREDDE-0.02,0.02,DYBDE-0.05);
		glVertex3f(BREDDE-0.58,0.02,DYBDE-0.05);
		glVertex3f(BREDDE-0.58,1.94,DYBDE-0.05);
		glVertex3f(BREDDE-0.02,1.94,DYBDE-0.05);
	glEnd();
	glMaterialfv(GL_FRONT,GL_AMBIENT,gulfarge);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,gulfarge);
	glBegin(GL_QUADS);
		glVertex3f(BREDDE-0.59,0.9,DYBDE-0.60);
		glVertex3f(BREDDE-0.59,0.8,DYBDE-0.60);
		glVertex3f(BREDDE-0.59,0.8,DYBDE-0.61);
		glVertex3f(BREDDE-0.59,0.9,DYBDE-0.61);
	glEnd();

	glMaterialfv(GL_FRONT,GL_DIFFUSE,vindufarge);
	glMaterialfv(GL_FRONT,GL_AMBIENT,vindufarge);
	glMaterialfv(GL_FRONT,GL_SPECULAR,hvit);

	glMaterialfv(GL_FRONT,GL_SHININESS,skinning);
	glBegin(GL_QUADS); //speil vask
		glNormal3f(-1,0,0);
		glVertex3f(BREDDE-0.02,1.3,1.58);
		glVertex3f(BREDDE-0.02,1.3,1.58+0.58);
		glVertex3f(BREDDE-0.02,1.6,1.58+0.58);
		glVertex3f(BREDDE-0.02,1.6,1.58);
	glEnd();
	glPushMatrix();
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.30,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.30,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();	
	glTranslatef(-0.32,0,0);
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();	
	glTranslatef(0,0.32,0);
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();	
	glTranslatef(0,0.32,0);
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();	
	glTranslatef(0.32,0,0);
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();	
	glTranslatef(0,-0.32,0);
	glBegin(GL_QUADS);   //stort speil
		glNormal3f(0,0,-1);
		glVertex3f(BREDDE-0.9,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,0.75,DYBDE-0.02);
		glVertex3f(BREDDE-0.9-0.3,1.05,DYBDE-0.02);
		glVertex3f(BREDDE-0.9,1.05,DYBDE-0.02);
	glEnd();
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,texture);	
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,hvit);
	glNormal3f(0,0,1);
	glPushMatrix();
	glTranslatef(0.2,0.45,0.05);
	glBegin(GL_QUADS);
		glTexCoord2i(0,1);
		glVertex3f(0,0,0);
		glTexCoord2i(1,1);
		glVertex3f(1,0,0);
		glTexCoord2i(1,0);
		glVertex3f(1,1,0);
		glTexCoord2i(0,0);
		glVertex3f(0,1,0);
	glEnd();
	glPopMatrix();
	glDisable(GL_TEXTURE_2D);

	glPopMatrix();
	glMaterialfv(GL_FRONT,GL_SPECULAR,svart);
	glMaterialfv(GL_FRONT,GL_SHININESS,svart);
	glPushMatrix();
	glTranslatef(0.1,0,0.1);
	glCallList(pulten);  //skrivepult

	/*glPushMatrix();
	  glTranslatef(0,0,1);
	  glCallList(pulten);
	  glPopMatrix();*/

	glTranslatef(1.3,0,0.37);  //hylle
	laghylle();
	glPopMatrix();
	glPushMatrix();
	glTranslatef(0.1,0,DYBDE-0.05);


	glPushMatrix();                  //Lager seng
	glPushMatrix();
	glTranslatef(0.2,0,-0.1);
	lagpinne(0.4,0.05);
	glTranslatef(0,0,-0.55);
	lagpinne(0.4,0.05);
	glTranslatef(1.65-0.15,0,0);
	lagpinne(0.4,0.05);
	glTranslatef(0,0,0.55);
	lagpinne(0.4,0.05);
	glPopMatrix();
	glPushMatrix();
	glTranslatef(0,0.4,0);
	glMaterialfv(GL_FRONT,GL_AMBIENT,morkblaa);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,morkblaa);
	lagkube2(1.85,0.1,0.75);
	glPushMatrix();
	glMaterialfv(GL_FRONT,GL_AMBIENT,lystre);
	glMaterialfv(GL_FRONT,GL_DIFFUSE,lystre);
	glBegin(GL_QUADS);
		glNormal3f(0,0,-1);
		glVertex3f(1.86,-0.08,-0.76);
		glVertex3f(0,-0.08,-0.76);
		glVertex3f(0,0.04,-0.76);
		glVertex3f(1.86,0.04,-0.76);

		glNormal3f(1,0,0);
		glVertex3f(1.86,-0.08,0);
		glVertex3f(1.86,-0.08,-0.76);
		glVertex3f(1.86,0.04,-0.76);
		glVertex3f(1.86,0.04,0);
	glEnd();
	glPopMatrix();
	glPopMatrix();
	glPopMatrix();			//Slutt på å lage seng

	glPopMatrix();
	glPopMatrix();		//Rom slutt
	glEndList();
}

void newfrustum(GLfloat h)
{
				glMatrixMode(GL_PROJECTION);
				glLoadIdentity();
				//gluPerspective(60.0f,1/h,0.1f,100.0f);
				glFrustum(-fwidth*h,fwidth*h,-fwidth,fwidth,fdist,10.0);
				glMatrixMode(GL_MODELVIEW);
}

void textures()
{
 SDL_Surface * bmpFile = SDL_LoadBMP("moose.bmp");

 glPixelStorei(GL_UNPACK_ALIGNMENT,4);
 glGenTextures(1,&texture);
 glBindTexture(GL_TEXTURE_2D,texture);
 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

 gluBuild2DMipmaps(GL_TEXTURE_2D, 3,bmpFile->w, bmpFile->h, GL_BGR_EXT, GL_UNSIGNED_BYTE,bmpFile->pixels);

SDL_FreeSurface(bmpFile);
}	

int main()
{

	Uint8 *keys;
	SDL_Surface *screen;
	SDL_Init(SDL_INIT_VIDEO);

	screen = SDL_SetVideoMode(800,600,16,SDL_OPENGL|SDL_RESIZABLE);
 SDL_WM_SetCaption("Rommet mitt", "Berg studentby");

	if(!screen)
	{
		fprintf(stderr,"Feil\n");
		SDL_Quit();
		exit(2);
	}

	static GLfloat pos[4] = {0,0,1,0};
	glLightfv(GL_LIGHT0,GL_POSITION,pos);
	static float ambientlys[] = {0.4,0.4,0.4,1};
	static float diffuselys[] = {0.6,0.6,0.6,1};
	glLightfv(GL_LIGHT0,GL_AMBIENT,ambientlys);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuselys);
	//glEnable(GL_CULL_FACE);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT1);
	//glClearDepth(1.0f);	
	//glEnable(GL_LIGHT1);
	glDepthFunc(GL_LEQUAL);	
	//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	glEnable(GL_DEPTH_TEST);
	glShadeModel(GL_SMOOTH);

	glClearColor(0,0,0,0.5);
	glEnable(GL_NORMALIZE);


	GLfloat h = (GLfloat)screen->w/ (GLfloat)screen->h;
	glViewport(0,0,(GLint)screen->w, (GLint) screen->h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	//gluPerspective(60.0f,1/h,0.1f,100.0f);
	glFrustum(-fwidth*h,fwidth*h,-fwidth,fwidth,fdist,10.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glTranslatef(0.0,0.0,0.0);
	textures();
	displaylister();



	int done = 0;
	SDL_WarpMouse(screen->w/2, screen->h/2);
	while(!done)
	{

		SDL_Event event;
		while(SDL_PollEvent(&event))
		{
			switch(event.type)
			{
				
				case SDL_MOUSEMOTION:
				if(320 - event.motion.x != 0)
				{
					yvinkel += (event.motion.x - screen->w/2) /5.0;
					if(yvinkel > 360) yvinkel -=360;
					if(yvinkel < 0) yvinkel +=360;
					SDL_WarpMouse(screen->w/2,screen->h/2);

				}
				if(240 - event.motion.y != 0) {
					pitch += (event.motion.y - screen->h/2) / 5.0;
					if(pitch < -90) pitch = -90;
					if(pitch > 90) pitch = 90;
					SDL_WarpMouse(screen->w / 2, screen->h / 2);
				}


				break;
				case SDL_VIDEORESIZE:
					screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, SDL_OPENGL|SDL_RESIZABLE);
					if (screen) {
						h = (GLfloat)screen->w/ (GLfloat)screen->h;
						glViewport(0,0,(GLint)screen->w, (GLint) screen->h);
						glMatrixMode(GL_PROJECTION);
						glLoadIdentity();
						glFrustum(-fwidth*h,fwidth*h,-fwidth,fwidth,fdist,10.0);
						//glFrustum(-5.0,5.0,-5*h,5*h,0.15,2.0);
						glMatrixMode(GL_MODELVIEW);
						glLoadIdentity();
						glTranslatef(0.0,0.0,-40.0);

					}
					break;
				case SDL_QUIT:
					done = 1;
					break;
			}
		}
		keys = SDL_GetKeyState(NULL);
		if(keys[SDLK_ESCAPE])
		{
			done = 1 ;
		}
		/*		if(keys[SDLK_UP])
				ztranslate += 0.2;	
				if(keys[SDLK_DOWN])
				ztranslate -= 0.2;	*/
		if(keys[SDLK_LEFT])
			yvinkel -= 0.8;	
		if(keys[SDLK_RIGHT])
			yvinkel += 0.8;	
		if(keys[SDLK_w]) {
			ztranslate += 0.02*cos(yvinkel*M_PI/180);
			xtranslate -= 0.02*sin(yvinkel*M_PI/180);	
		}
		if(keys[SDLK_s]){
			ztranslate -= 0.02*cos(yvinkel*M_PI/180);
			xtranslate += 0.02*sin(yvinkel*M_PI/180);
		}
		if(keys[SDLK_a]){
			xtranslate += 0.02*cos(yvinkel*M_PI/180);
			ztranslate += 0.02*sin(yvinkel*M_PI/180);	
		}
		if(keys[SDLK_d]){
			xtranslate -= 0.02*cos(yvinkel*M_PI/180);
			ztranslate -= 0.02*sin(yvinkel*M_PI/180);
		}
		if(keys[SDLK_r])
			ytranslate -= 0.02;	
		if(keys[SDLK_f])
			ytranslate += 0.02;
		if(keys[SDLK_j])
			skuffz += 0.01;
		if(keys[SDLK_k])
			skuffz -= 0.01;
		if(keys[SDLK_t])
			{
				h = (GLfloat)screen->w/ (GLfloat)screen->h;
				fwidth+=0.0001;
				newfrustum(h);
				printf("fwidth: %f\n",fwidth);
			}
		if(keys[SDLK_g])
			{
				h = (GLfloat)screen->w/ (GLfloat)screen->h;
				fwidth-=0.0001;
				newfrustum(h);
				printf("fwidth: %f\n",fwidth);
			}
		if(keys[SDLK_y])
			{
				h = (GLfloat)screen->w/ (GLfloat)screen->h;
				fdist+=0.0001;
				newfrustum(h);
				printf("fdist: %f\n",fdist);
			}
		if(keys[SDLK_h])
			{
				h = (GLfloat)screen->w/ (GLfloat)screen->h;
				fdist-=0.0001;
				newfrustum(h);
				printf("fdist: %f\n",fdist);
			}		
		if(keys[SDLK_F1])
			SDL_WM_ToggleFullScreen( screen );

		//		if (xvinkel > 360) xvinkel -= 360;
		//		else if (xvinkel < -360) xvinkel += 360;
		if (yvinkel > 360) yvinkel -= 360;
		else if (yvinkel < -360) yvinkel += 360;
		if (fdist < 0.001) fdist = 0.001;
		if (skuffz < 0) skuffz = 0;
		else if (skuffz > 0.5) skuffz = 0.5;
		//printf("xtranslate: %f, ztranslate %f, ytranslate %f, yvinkel %f\n",xtranslate,ztranslate,ytranslate,yvinkel);
		draw();
		usleep(4000);
	}
	SDL_Quit();
	return 0;

}



Add a comment:

Fill in number
Name:
Title:
Text:
 


Privacy | Contact