если я вызываю функцию DrawFilledCircleo (), она делает овал, а не круг, даже если я поставлю glBegin (GL_LINE_LOOP); это всегда делает овал
void drawFilledCircle(GLfloat x, GLfloat y, GLfloat radius){
int i;
int triangleAmount = 20; //# of triangles used to draw circle
//GLfloat radius = 0.8f; //radius
GLfloat twicePi = 2.0f * PI;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x, y); // center of circle
for(i = 0; i <= triangleAmount;i++) {
glVertex2f(
x + (radius * cos(i * twicePi / triangleAmount)),
y + (radius * sin(i * twicePi / triangleAmount))
);
}
glEnd();
}
я пробовал разные функции для рисования кругов, но это всегда делает овал.
я поместил это в:
static void Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, widthX, heightY);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
texture[0] = SOIL_load_OGL_texture // load an image file directly as a new OpenGL texture
(
"img.jpg",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT
);
// allocate a texture name
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
drawFilledCircle(0.5f,0.5f,0.1f);
glutSwapBuffers();
}
ОБНОВИТЬ :
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInit(&argc, argv);
glutInitWindowSize(widthX, heightY);
glutCreateWindow("earthQuake");
glutReshapeFunc(resize);
glutDisplayFunc(Draw);
glutKeyboardFunc(keyPressed);
glutKeyboardUpFunc(keyUp);
/////////////////////////////////////
glEnable(GL_TEXTURE_2D);
// glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
//glClearDepth(1.0f);
//glEnable(GL_DEPTH_TEST);
// glDepthFunc(GL_LEQUAL);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glutMainLoop();
ширинаX = 800; высота Y = 400;
Скорее всего, у вас смещены окна просмотра и размеры окон.
Следующий ответ может быть полезным:
https://stackoverflow.com/a/15725280/3301533
РЕДАКТИРОВАТЬ:
Благодаря этому коду:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
У тебя есть овал. Попробуйте изменить это на:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-widthX/2, width/X2, -heightY/2, heightY/2, -1, 1);
В предыдущем ответе был показан способ получения круга с побочным эффектом необходимости изменения координат. Я думаю, что это решение, как правило, более удобно, так как вы все еще можете рисовать с теми же координатами, которые у вас уже были:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double aspectRatio = (double)width / (double)height;
glOrtho(-aspectRatio, aspectRatio, -1.0, 1.0, -1.0, 1.0);