Objectives

Setup

Soil

-framework CoreFoundation

ImageCube

#pragma once
#include "actor.h"

struct ImageCube: public  Actor
{
  ImageCube();
  void render();
};
#include "libs.h"
#include "imagecube.h"

using namespace std;

Vector3 thevertices[][6] =
{
  { Vector3(-1.0f, 1.0f, 1.0f), Vector3(-1.0f, -1.0f, 1.0f), Vector3( 1.0f, -1.0f, 1.0f), Vector3( 1.0f, 1.0f, 1.0f)  },
  { Vector3( 1.0f, 1.0f,-1.0f), Vector3( 1.0f, -1.0f,-1.0f), Vector3(-1.0f, -1.0f,-1.0f), Vector3(-1.0f, 1.0f, -1.0f) },
  { Vector3(-1.0f, 1.0f,-1.0f), Vector3(-1.0f,  1.0f, 1.0f), Vector3( 1.0f,  1.0f, 1.0f), Vector3( 1.0f, 1.0f, -1.0f) },
  { Vector3( 1.0f,-1.0f,-1.0f), Vector3( 1.0f, -1.0f, 1.0f), Vector3(-1.0f, -1.0f, 1.0f), Vector3(-1.0f,-1.0f, -1.0f) },
  { Vector3( 1.0f,-1.0f, 1.0f), Vector3( 1.0f, -1.0f,-1.0f), Vector3( 1.0f,  1.0f,-1.0f), Vector3( 1.0f, 1.0f,  1.0f) },
  { Vector3(-1.0f, 1.0f, 1.0f), Vector3(-1.0f, 1.0f, -1.0f), Vector3(-1.0f, -1.0f,-1.0f), Vector3(-1.0f, -1.0f, 1.0f) }
};

void drawFace(Vector3 vertices[])
{
  vertices[0].render();
  vertices[1].render();
  vertices[2].render();
  vertices[3].render();
}

ImageCube::ImageCube()
{
}

void ImageCube::render()
{
  glPolygonMode(GL_FRONT,GL_FILL);
  glBegin( GL_QUADS);
  for (int i=0; i<6; i++)
  {
    drawFace(thevertices[i]);
  }
  glEnd();
  glPolygonMode(GL_FRONT,GL_LINE);
}
  actorName = "imagecube";
  actors.insert(actorName, new ImageCube());

Image Load

GLuint loadTexture(std::string filename);
GLuint loadTexture(string filename)
{
  GLuint tex_ID = SOIL_load_OGL_texture
           (filename.c_str(), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID,
            (SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y |
             SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT) );
  return tex_ID;
}
struct ImageCube: public  Actor
{
  int imageID;
  //...
}
ImageCube::ImageCube()
{
  imageID = loadTexture("city.png");
}

Image Bind

void ImageCube::render()
{
  glPolygonMode(GL_FRONT,GL_FILL);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, imageID);

  glBegin( GL_QUADS);
  for (int i=0; i<6; i++)
  {
    drawFace(thevertices[i]);
  }
  glEnd();

  glDisable(GL_TEXTURE_2D);
  glPolygonMode(GL_FRONT,GL_LINE);
}
void drawFace(Vector3 vertices[])
{
  glTexCoord2f(0.0, 0.0);
  vertices[0].render();
  glTexCoord2f(0.0, 1.0);
  vertices[1].render();
  glTexCoord2f(1.0, 1.0);
  vertices[2].render();
  glTexCoord2f(1.0, 0.0);
  vertices[3].render();
}

Sphere

#pragma once
#include "actor.h"

struct Sphere: public  Actor
{
  int imageID;

  Sphere();
  void render();
};
#include "libs.h"
#include "sphere.h"
#include "materials.h"

using namespace std;

Sphere::Sphere()
{
  imageID = loadTexture("earth.jpg");
}

void Sphere::render()
{
  glPolygonMode(GL_FRONT,GL_FILL);
  glEnable(GL_TEXTURE_2D);

  GLUquadric *qobj = gluNewQuadric();
  gluQuadricTexture(qobj,GL_TRUE);
  glBindTexture(GL_TEXTURE_2D, imageID);

  glPushMatrix();
    Vector3(2,2,2).translate();
    gluSphere(qobj,1,50,50);
  glPopMatrix();

  gluDeleteQuadric(qobj);

  glPolygonMode(GL_FRONT,GL_LINE);
  glDisable(GL_TEXTURE_2D);
}
  gluQuadricTexture(qobj,GL_TRUE);
  glBindTexture(GL_TEXTURE_2D, imageID);
  glPushMatrix();
    Vector3(2,2,2).translate();
    gluSphere(qobj,1,50,50);
  glPopMatrix();

Planets

struct Sphere: public  Actor
{
  int     imageID;
  Vector3 position;

  Sphere(Vector3 position, std::string imagefile);
  void render();
};
Sphere::Sphere(Vector3 position, string imagefilename)
: position (position)
{
  imageID = loadTexture(imagefilename);
}

void Sphere::render()
{
  //...
  glPushMatrix();
    position.translate();
    gluSphere(qobj,1,50,50);
  glPopMatrix();
  //..
}
  actorName = "earth";
  actors.insert(actorName, new Sphere(Vector3(2,2,2), "earth.jpg"));

Exercises

Multiple Images on each cube

Mapping Saturn: