2010-11-16 6 views
4

J'essaye de dessiner un cercle en c en utilisant opengl, c'est plus petit que celui montré. Le problème est que je ne peux pas sembler trouver comment réduire la taille de celui-ci ... Quelqu'un peut-il m'aider?Comment dessiner un cercle plus petit dans opengl en utilisant ce code comme point de départ?

#define GLUT_DISABLE_ATEXIT_HACK 
#include <GL/gl.h> 
#include <GL/glut.h> 
#include <stdio.h> 

#include <math.h> 
#define PI 3.1415926535898 
GLint circle_points =100; 
// This is the draw function. 
void draw() 
{ 

glClear(GL_COLOR_BUFFER_BIT); 
double angle = 2* PI/circle_points ; 
glPolygonMode(GL_FRONT, GL_FILL); 
glColor3f(0.2, 0.5, 0.5); 
glBegin(GL_POLYGON); 
    double angle1=0.0; 
    glVertex2d(cos(0.0) , sin(0.0)); 
    int i; 
    for (i=0 ; i< circle_points ;i++) 
    { 
     printf("angle = %f \n" , angle1); 
     glVertex2d(cos(angle1),sin(angle1)); 
     angle1 += angle ; 
    } 
glEnd(); 
glFlush(); 
} 

void init() 
{ 
glClearColor(0.0,0.0,0.0,0.0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0); 
} 

void keyboard (unsigned char key , int x, int y) 
{ 
exit(0); 

} 

void main(int argc,char **argv) 
{ 
    glutInit(&argc,argv); 
glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB); 
glutInitWindowSize(250,250); 
glutInitWindowPosition(100,100); 
glutCreateWindow("ch06"); 
init(); 
glutKeyboardFunc(keyboard); 
glutDisplayFunc(draw); 
     glutMainLoop(); 
} 

Répondre

5

Vous pouvez changer la ligne:

glVertex2d(cos(angle1),sin(angle1)); 

à:

glVertex2d(0.25f * cos(angle1),0.25f * sin(angle1)); 

Cela va dessiner un cercle avec un rayon de 0,25 au lieu de 1.

Edit: Comme repéré par Dasen, vous devez également ajouter le 0.25f * à la ligne:

glVertex2d(cos(0.0),sin(0.0)); 
+0

merci, je devais aussi changer la ligne qui disait: glVertex2d (cos (0.0), sin (0.0)); Mais votre réponse l'a à peu près cloué. merci – dasen

1

Vous pouvez bien sûr aussi préfixer le code de dessin avec:

glScalef(0.25f, 0.25f, 1.0f); 

qui va changer votre matrice modelview, donc il est préférable de conserver également à l'aide de la pile de la matrice:

glPushMatrix(); 
glScalef(0.25, 0.25f, 1.0f); 
/* drawing code goes here. */ 
glPopMatrix(); 
Questions connexes