Hello everybody,
I have an important question, I want to draw a sphere using glut and visual c++. Here is my code :
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
#include <gl\glut.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <list>
using namespace std;
static float tx=0.0,ty=0.0,tz=0.0;
static float rx=0.0,ry=0.0,rz=0.0;
bool Tx,Ty,Tz,Rx,Ry,Rz;
float ambC[4] = {0.5,0.5,0.5,1};
float diffC[4] = {0.1,0.1,0.1,1.0};
float specC[4] = {0.2,0.2,0.2,1.0};
float ambH[4] = {0.0,0.0,1.0,1.0};
float diffH[4] = {0.1,0.1,0.1,1.0};
float specH[4] = {0.2,0.2,0.2,1.0};
double a=0;
int LightPos[4] = {0,0,3,1};
int MatSpec [4] = {1,1,1,1};
void redraw(){
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,-10,0,0,0,0,1,0);
glRotated(a,0,1,0);
glLightiv(GL_LIGHT0,GL_POSITION,LightPos);
if(Tx){
glTranslatef(tx,0,0);
}
else if(Ty){
glTranslatef(0,ty,0);
}
else if(Tz){
glTranslatef(0,0,tz);
}
else if(Rx){
glRotatef(rx,1.0,0.0,0.0);
}
else if(Ry)glRotatef(ry,0.0,1.0,0.0);
else if(Rz)glRotatef(rz,0.0,0.0,1.0);
glColor3f(0.0,0.0,1.0);
GLUquadricObj *quad=gluNewQuadric();
glMaterialfv(GL_FRONT, GL_SPECULAR, specC);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffC);
glMaterialfv(GL_FRONT, GL_AMBIENT, ambC);
gluQuadricDrawStyle(quad,GLU_FILL);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
gluSphere(quad, 1, 100,100);
a=+1;
glutSwapBuffers();
glutPostRedisplay();
}
void processNormalKeys(unsigned char key, int x, int y) {
/*
Echap : sortir
x: translation on x
y: translation on y
z: translation on z
X: translation on - x
Y: translation on - y
Z: translation on - z
1: rotation x angle >0
2: rotation x angle <0
3: rotation y angle >0
4: rotation y angle <0
5: rotation z angle >0
6: rotation z angle <0
*/
if (key == 27)
exit(0);
else if(key==120){
tx=tx+0.1;
Tx=true;
Ty=false;
Tz=false;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==88){
tx=tx-0.1;
Tx=true;
Ty=false;
Tz=false;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==121){
ty=ty+0.1;
Tx=false;
Ty=true;
Tz=false;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==89){
ty=ty-0.1;
Tx=false;
Ty=true;
Tz=false;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==122){
tz=tz+0.1;
Tx=false;
Ty=false;
Tz=true;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==90){
tz=tz-0.1;
Tx=false;
Ty=false;
Tz=true;
Rx=false;
Ry=false;
Rz=false;
glutPostRedisplay();
}
else if(key==49){
rx=rx+0.5;
Tx=false;
Ty=false;
Tz=false;
Rx=true;
Ry=false;
Rz=false;
}
else if(key==50){
rx=rx-0.5;
Tx=false;
Ty=false;
Tz=false;
Rx=true;
Ry=false;
Rz=false;
}
else if(key==51){
ry=ry+0.5;
Tx=false;
Ty=false;
Tz=false;
Rx=false;
Ry=true;
Rz=false;
}
else if (key==52){
ry=ry-0.5;
Tx=false;
Ty=false;
Tz=false;
Rx=false;
Ry=true;
Rz=false;
}
else if (key==53){
rz=rz+1.0;
Tx=false;
Ty=false;
Tz=false;
Rx=false;
Ry=false;
Rz=true;
}
else if (key==54){
rz=rz-1.0;
Tx=false;
Ty=false;
Tz=false;
Rx=false;
Ry=false;
Rz=true;
}
}
void reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,float(width)/float(height),0,100); glMatrixMode(GL_MODELVIEW);
}
void initGL(){
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_CULL_FACE);
glShadeModel(GL_SMOOTH);
}
int main( int argc, char *argv[ ], char *envp[ ] ){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
glutCreateWindow("OpenGL");
glutReshapeFunc(reshape);
glutDisplayFunc(redraw);
glutKeyboardFunc(processNormalKeys);
initGL();
glutMainLoop();
return 1;
}
When i execute this code, my sphere is perforated, I don’t know why !
Please help me!
Thanks