gpt4 book ai didi

c++ - opengl绘制椭圆而不是圆形

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:48 25 4
gpt4 key购买 nike

如果我调用函数 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();
}

我尝试了不同的函数来画圆,但它总是画成 Oval 。

我把它放在:

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;

最佳答案

很可能您的视口(viewport)和窗口大小比率未对齐。

以下回答可能会有帮助: 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);

关于c++ - opengl绘制椭圆而不是圆形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24452919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com