Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //http://www.youtube.com/user/thecplusplusguy
- //Thanks for the typed in code to Tapit85
- #include "functions.h"
- float camX = 0., camY = 0., camZ = 5.;
- float camYaw = 0.;
- float camPitch = 0.;
- enum {SKY_LEFT = 0, SKY_BACK, SKY_RIGHT, SKY_FRONT, SKY_TOP, SKY_BOTTOM};
- unsigned int skybox[6];
- #ifndef M_PI
- #define M_PI 3.1415926535
- #endif
- void initSkybox()
- {
- skybox[SKY_LEFT] = loadTexture("left.bmp");
- skybox[SKY_BACK] = loadTexture("back.bmp");
- skybox[SKY_RIGHT] = loadTexture("right.bmp");
- skybox[SKY_FRONT] = loadTexture("front.bmp");
- skybox[SKY_TOP] = loadTexture("top.bmp");
- skybox[SKY_BOTTOM] = loadTexture("bottom.bmp");
- }
- void killskybox()
- {
- glDeleteTextures(6,&skybox[0]);
- }
- void lockCamera()
- {
- if(camPitch > 90)
- camPitch = 90;
- if(camPitch < -90)
- camPitch = -90;
- if(camYaw < 0.)
- camYaw += 360.;
- if(camYaw > 360.)
- camYaw -= 360;
- }
- void moveCamera(float dist, float dir)
- {
- float rad = (camYaw+dir)*M_PI/180.;
- camX -= sin(rad)*dist;
- camZ -= cos(rad)*dist;
- }
- void moveCameraUp(float dist, float dir)
- {
- float rad = (camPitch+dir)*M_PI/180.;
- camY += sin(rad)*dist;
- }
- void Control(float movevel, float mousevel, bool mi)
- {
- if(mi)
- {
- int MidX = 320;
- int MidY = 240;
- SDL_ShowCursor(SDL_DISABLE);
- int tmpx, tmpy;
- SDL_GetMouseState(&tmpx, &tmpy);
- camYaw += mousevel*(MidX-tmpx);
- camPitch += mousevel*(MidY-tmpy);
- lockCamera();
- SDL_WarpMouse(MidX, MidY);
- Uint8* state = SDL_GetKeyState(NULL);
- if(state[SDLK_w])
- {
- if(camPitch!=90 && camPitch!=-90) // comment in if you want to be able to go up and down
- moveCamera(movevel,0.);
- moveCameraUp(movevel,0.); // comment in if you want to be able to go up and down
- }
- else if(state[SDLK_s])
- {
- if(camPitch!=90 && camPitch!=-90) // comment in if you want to be able to go up and down
- moveCamera(movevel,180.);
- moveCameraUp(movevel,180.); // comment in if you want to be able to go up and down
- }
- if(state[SDLK_a])
- moveCamera(movevel,90.);
- else if(state[SDLK_d])
- moveCamera(movevel,270.);
- }
- glRotatef(-camPitch,1.,0.,0.);
- glRotatef(-camYaw,0.,1.,0.);
- }
- void UpdateCamera()
- {
- glTranslatef(-camX,-camY,-camZ);
- }
- void drawCube(float size)
- {
- glBegin(GL_QUADS);
- // front face
- glColor3f(1.0,0.0,0.0);
- glVertex3f(size/2,size/2,size/2);
- glVertex3f(-size/2,size/2,size/2);
- glVertex3f(-size/2,-size/2,size/2);
- glVertex3f(size/2,-size/2,size/2);
- // left face
- glColor3f(0.0,1.0,0.0);
- glVertex3f(-size/2,size/2,size/2);
- glVertex3f(-size/2,-size/2,size/2);
- glVertex3f(-size/2,-size/2,-size/2);
- glVertex3f(-size/2,size/2,-size/2);
- // back face
- glColor3f(0.0,0.0,1.0);
- glVertex3f(size/2,size/2,-size/2);
- glVertex3f(-size/2,size/2,-size/2);
- glVertex3f(-size/2,-size/2,-size/2);
- glVertex3f(size/2,-size/2,-size/2);
- // right face
- glColor3f(1.0,1.0,0.0);
- glVertex3f(size/2,size/2,size/2);
- glVertex3f(size/2,-size/2,size/2);
- glVertex3f(size/2,-size/2,-size/2);
- glVertex3f(size/2,size/2,-size/2);
- // top face
- glColor3f(1.0,0.0,1.0);
- glVertex3f(size/2,size/2,size/2);
- glVertex3f(-size/2,size/2,size/2);
- glVertex3f(-size/2,size/2,-size/2);
- glVertex3f(size/2,size/2,-size/2);
- // bottom face
- glColor3f(0.0,1.0,1.0);
- glVertex3f(size/2,-size/2,size/2);
- glVertex3f(-size/2,-size/2,size/2);
- glVertex3f(-size/2,-size/2,-size/2);
- glVertex3f(size/2,-size/2,-size/2);
- glEnd();
- }
- void drawSkybox(float size)
- {
- glDisable(GL_LIGHTING);
- glDisable(GL_DEPTH_TEST);
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_BACK]);
- glBegin(GL_QUADS);
- // back face
- glTexCoord2f(0,0);
- glVertex3f(size/2,size/2,size/2);
- glTexCoord2f(1,0);
- glVertex3f(-size/2,size/2,size/2);
- glTexCoord2f(1,1);
- glVertex3f(-size/2,-size/2,size/2);
- glTexCoord2f(0,1);
- glVertex3f(size/2,-size/2,size/2);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_LEFT]);
- glBegin(GL_QUADS);
- // left face
- glTexCoord2f(0,0);
- glVertex3f(-size/2,size/2,size/2);
- glTexCoord2f(0,1);
- glVertex3f(-size/2,-size/2,size/2);
- glTexCoord2f(1,1);
- glVertex3f(-size/2,-size/2,-size/2);
- glTexCoord2f(1,0);
- glVertex3f(-size/2,size/2,-size/2);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_FRONT]);
- glBegin(GL_QUADS);
- // front face
- glTexCoord2f(1,0);
- glVertex3f(size/2,size/2,-size/2);
- glTexCoord2f(0,0);
- glVertex3f(-size/2,size/2,-size/2);
- glTexCoord2f(0,1);
- glVertex3f(-size/2,-size/2,-size/2);
- glTexCoord2f(1,1);
- glVertex3f(size/2,-size/2,-size/2);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_RIGHT]);
- glBegin(GL_QUADS);
- // right face
- glTexCoord2f(1,0);
- glVertex3f(size/2,size/2,size/2);
- glTexCoord2f(1,1);
- glVertex3f(size/2,-size/2,size/2);
- glTexCoord2f(0,1);
- glVertex3f(size/2,-size/2,-size/2);
- glTexCoord2f(0,0);
- glVertex3f(size/2,size/2,-size/2);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_TOP]);
- glBegin(GL_QUADS);
- // top face
- glTexCoord2f(1,0);
- glVertex3f(size/2,size/2,size/2);
- glTexCoord2f(0,0);
- glVertex3f(-size/2,size/2,size/2);
- glTexCoord2f(0,1);
- glVertex3f(-size/2,size/2,-size/2);
- glTexCoord2f(1,1);
- glVertex3f(size/2,size/2,-size/2);
- glEnd();
- glBindTexture(GL_TEXTURE_2D,skybox[SKY_BOTTOM]);
- glBegin(GL_QUADS);
- // bottom face
- glTexCoord2f(1,1);
- glVertex3f(size/2,-size/2,size/2);
- glTexCoord2f(0,1);
- glVertex3f(-size/2,-size/2,size/2);
- glTexCoord2f(0,0);
- glVertex3f(-size/2,-size/2,-size/2);
- glTexCoord2f(1,0);
- glVertex3f(size/2,-size/2,-size/2);
- glEnd();
- glEnable(GL_LIGHTING);
- glEnable(GL_DEPTH_TEST);
- glDisable(GL_TEXTURE_2D);
- }
- unsigned int loadTexture(const char* filename)
- {
- unsigned int num;
- glGenTextures(1,&num);
- SDL_Surface* img = SDL_LoadBMP(filename);
- glBindTexture(GL_TEXTURE_2D,num);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); // needed if you don't want to see the edges of the skybox
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); // needed if you don't want to see the edges of the skybox
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,img->w,img->h,0,GL_RGB,GL_UNSIGNED_SHORT_5_6_5,img->pixels);
- SDL_FreeSurface(img);
- return num;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement