Code:
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <IL/il.h>
float xRotate=0, yRotate=0;
float xPos=0, yPos=-2, zPos=-0;
GLUquadricObj *quadric;
float angle=0;
GLfloat lightColor0[]={1, 1, 1, 1};
GLfloat lightPos0[]={0, 20, 0};
ILuint sky, grass;
ILboolean success;
GLuint skyimage, grasstex;
void initRendering()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_COLOR_MATERIAL);
}
void initVars()
{
quadric=gluNewQuadric();
gluQuadricOrientation(quadric, GLU_INSIDE);
gluQuadricNormals(quadric, GLU_SMOOTH);
gluQuadricDrawStyle(quadric, GLU_FILL);
gluQuadricTexture(quadric, GL_TRUE);
}
void handleResize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (double)w / (double)h, 1.0, 200.0);
}
void handleKeypress(unsigned char a, int x, int y)
{
switch(a)
{
case 97: xPos+=0.1; break;
case 100: xPos-=0.1; break;
case 115: zPos+=0.1; break;
case 119: zPos-=0.1; break;
}
}
void handleKeyPressSpecial(unsigned char a, int x, int y)
{
switch(a)
{
case GLUT_KEY_LEFT: xPos+=0.1; break;
case GLUT_KEY_RIGHT: xPos-=0.1; break;
case GLUT_KEY_UP: zPos+=0.1; break;
case GLUT_KEY_DOWN: zPos-=0.1; break;
}
}
void handleMouse(int button, int state, int x, int y)
{
}
void drawScene()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(angle,xRotate, yRotate, 0);
glTranslatef(xPos, yPos, zPos);
GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);
ilBindImage(sky);
glBindTexture(GL_TEXTURE_2D, skyimage);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
ilGetData());
gluSphere(quadric, 50, 50, 50);
ilBindImage(grass);
glBindTexture(GL_TEXTURE_2D, grasstex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
ilGetData());
glBegin(GL_QUADS);
glNormal3f(0, 1, 0);
glTexCoord2f(10,10);
glVertex3f(50,0,50);
glTexCoord2f(0,10);
glVertex3f(50,0,-50);
glTexCoord2f(0,0);
glVertex3f(-50,0,-50);
glTexCoord2f(10,0);
glVertex3f(-50,0,50);
glEnd();
glutSwapBuffers();
}
void loadTex()
{
ilGenImages(1, &sky);
ilBindImage(sky);
success=ilLoadImage("skydometex.jpg");
if(success)
{
ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE);
glGenTextures(1, &skyimage);
}
ilGenImages(1, &grass);
ilBindImage(grass);
success=ilLoadImage("grass.jpg");
if(success)
{
ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE);
glGenTextures(1, &grasstex);
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
glutInitWindowSize(800,600);
glutCreateWindow("Najmocniji program na svetu");
initRendering();
initVars();
ilInit();
loadTex();
glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutSpecialFunc(handleKeyPressSpecial);
glutReshapeFunc(handleResize);
glutMouseFunc(handleMouse);
//glutMotionFunc(handleMouseMotion);
glutMainLoop();
}
Any help would be appreciated.