Как нарисовать меньший круг в opengl, используя этот код в качестве отправной точки? - PullRequest
4 голосов
/ 16 ноября 2010

Я пытаюсь нарисовать круг в c, используя opengl, он меньше, чем показанный.Проблема в том, что я не могу найти, как уменьшить его размер ... Кто-нибудь может мне помочь?

#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();
 }

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Вы можете изменить линию:

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

на:

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

Это нарисует круг с радиусом 0,25 вместо 1.

Редактировать: Как заметил Dasen, вам также нужно добавить 0.25f * к строке:

    glVertex2d(cos(0.0),sin(0.0)); 
1 голос
/ 16 ноября 2010

Конечно, вы также можете добавить код для рисования следующим образом:

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

Это изменит вашу матрицу вида модели, поэтому лучше также сохранить ее, используя стек матрицы:

glPushMatrix();
glScalef(0.25, 0.25f, 1.0f);
/* drawing code goes here. */
glPopMatrix();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...