this was my initial code
fileFunctions.h
unsigned char *LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader);
fileFunctions.cpp
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include “fileFunctions.h”
// Returns a pointer to the bitmap image of the bitmap specified
// by filename. Also returns the bitmap header information.
// No support for 8-bit bitmaps.
unsigned char *LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
{
FILE *filePtr;
BITMAPFILEHEADER bitmapFileHeader;
unsigned char bitmapImage;
int imageIdx = 0;
unsigned char tempRGB;
filePtr = fopen(filename, “rb”);
if (filePtr == NULL) return NULL;
fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);
fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);
bitmapImage = (unsigned char)malloc(bitmapInfoHeader->biSizeImage);
fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr);
for (imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx+=3)
{
tempRGB = bitmapImage[imageIdx];
bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
bitmapImage[imageIdx + 2] = tempRGB;
}
return bitmapImage;
}
Planets.cpp
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include “fileFunctions.h”
using namespace std;
GLUquadricObj mercury;
GLuint txtMercury;
BITMAPINFOHEADER bitmapInfoHeader;
unsigned char bitmapData;
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D,txtMercury);
gluSphere(mercury, 1.0, 32, 32);
glFlush();
}
void init(void) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-4.0,4.0,-4.0,4.0,0.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
bitmapData = LoadBitmapFile(“Venus.bmp”,&bitmapInfoHeader);
glGenTextures(1,&txtMercury);
glBindTexture(GL_TEXTURE_2D,txtMercury);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,bitmapInfoHeader.biWidth,bitmapInfoHeader.biHeight,0,GL_RGB,GL_UNSIGNED_BYTE, bitmapData);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
mercury=gluNewQuadric();
gluQuadricTexture(mercury,GLU_TRUE);
gluQuadricDrawStyle(mercury,GLU_FILL);
gluQuadricNormals(mercury,GLU_SMOOTH);
free(bitmapData);
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800,800);
glutInitWindowPosition(100,100);
glutCreateWindow(“20918381 Planets”);
init();
glutDisplayFunc(display);
glutMainLoop();
}
this is how it is now:
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include “fileFunctions.h”
using namespace std;
GLfloat viewangle = 0, tippangle = 0;
GLfloat xAngle = 0.0, yAngle = 0.0, zAngle = 0.0;
GLfloat d[3] = {0.1, 0.1, 0.1};
float angle[6];
GLuint textureID[9];
GLUquadricObj *sun;
GLUquadricObj *mercury;
GLUquadricObj *venus;
GLUquadricObj *earth;
GLUquadricObj *earthmoon;
GLUquadricObj *mercurymoon;
GLUquadricObj *uranus;
GLUquadricObj *uranusmoon;
GLUquadricObj *bianca;
BITMAPINFOHEADER bitmapInfoHeader;
unsigned char* bitmapData;
void drawSun(){
glBindTexture(GL_TEXTURE_2D,textureID[0]);
glRotatef(angle[0],0.0,1,0.0);
gluSphere(sun, 1.0, 32, 32);
}
void drawMercury(){
glBindTexture(GL_TEXTURE_2D,textureID[1]);
glRotatef(angle[1],0.0,1,0.0);
gluSphere(mercury, 0.5, 32, 32);
}
void drawVenus(){
}
void drawEarth(){
}
void drawEarthMoon(){
}
void drawMercuryMoon(){
}
void drawUranus(){
}
void drawUranusMoon(){
}
void drawBianca(){
}
void rotate(){
angle[0]+=0.005;
if (angle[0]>360)angle[0]-=360;
angle[1]+= 0.05;
if (angle[1]>360) angle[1]-=360;
glutPostRedisplay();
}
void Special_Keys (int key, int x, int y)
{
switch (key) {
case GLUT_KEY_LEFT : viewangle -= 5; break;
case GLUT_KEY_RIGHT: viewangle += 5; break;
case GLUT_KEY_UP : tippangle -= 5; break;
case GLUT_KEY_DOWN : tippangle += 5; break;
}
glutPostRedisplay();
}
void keyPressed(unsigned char key, int x, int y){
switch (key) {
case ‘j’ : d[0] += 0.1; break;
case ‘k’ : d[1] += 0.1; break;
case ‘l’ : d[2] += 0.1; break;
case 'x' : xAngle += 5; break;
case 'y' : yAngle += 5; break;
case 'z' : zAngle += 5; break;
}
glutPostRedisplay();
}
void display() {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable (GL_DEPTH_TEST);
glLoadIdentity();
gluLookAt(3.0,3.0,3.0, 0.0,0.0,0.0, 0.0,1,0.0);
glRotatef (tippangle, 1,0,0); // Up and down arrow keys ‘tip’ view.
glRotatef (viewangle, 0,1,0); // Right/left arrow keys ‘turn’ view.
GLfloat light_pos[] = {0.0,0.0,0.0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
GLfloat ambient[] = {1,1,1};
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glPushMatrix ();
glTranslatef (d[0], d[1], d[2]); // Move box down X axis.
drawSun();
glTranslatef(0.5,0.5,-2);
drawMercury();
glRotatef (zAngle, 0,0,1);
glRotatef (yAngle, 0,1,0);
glRotatef (xAngle, 1,0,0);
glPopMatrix ();
glFlush();
glutSwapBuffers();
}
void init(void) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-4.0,4.0,-4.0,4.0,0.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glGenTextures(9, textureID);
for(int i=0;i<9;i++) {
glBindTexture(GL_TEXTURE_2D,textureID[i]);
char imageName[50]={'\0'};
sprintf(imageName, "image%d.bmp",i);
unsigned char* bitmapData = LoadBitmapFile(imageName, &bitmapInfoHeader);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,bitmapInfoHeader.biWidth,bitmapInfoHeader.biHeight,0,GL_RGB,GL_UNSIGNED_BYTE, bitmapData);
free(bitmapData);
}
sun=gluNewQuadric();
mercury=gluNewQuadric();
venus=gluNewQuadric();
earth=gluNewQuadric();
earthmoon=gluNewQuadric();
mercurymoon=gluNewQuadric();
uranus=gluNewQuadric();
uranusmoon=gluNewQuadric();
bianca=gluNewQuadric();
gluQuadricTexture(sun,GLU_TRUE);
gluQuadricDrawStyle(sun,GLU_FILL);
gluQuadricNormals(sun,GLU_SMOOTH);
gluQuadricTexture(mercury,GLU_TRUE);
gluQuadricDrawStyle(mercury,GLU_FILL);
gluQuadricNormals(mercury,GLU_SMOOTH);
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800,800);
glutInitWindowPosition(100,100);
glutCreateWindow(“20918381 Planets”);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
angle[0]=0;
angle[1]=0;
glutIdleFunc(rotate);
glutKeyboardFunc(keyPressed);
glutSpecialFunc(Special_Keys);
init();
glutDisplayFunc(display);
glutMainLoop();
}