OpenGL:在代码中生成椭圆

时间:2015-05-13 20:37:08

标签: c++ opengl

我一直在尝试使用OpenGL生成一个椭圆,我觉得我有一些非常错误的东西。我试图使用椭圆生成代码,但为了简单起见,我设置了主轴和次轴的长度相等。这应该给我一个圆圈,但不知何故不是用OpenGL渲染的东西,我不确定是什么问题。

所以代码如下:

glPushAttrib(GL_CURRENT_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glLineWidth(2.0);

// Draw center
glBegin(GL_POINTS);
glVertex2d(0, 0);
glEnd();

glBegin(GL_LINE_LOOP);
// This should generate a circle
for (GLfloat i = 0; i < 360; i++)
{
    float x = cos(i*M_PI/180.f) * 0.5; // keep the axes radius same
    float y = sin(i*M_PI/180.f) * 0.5;
    glVertex2f(x, y);
}

glEnd();
glPopAttrib();

据我所知,这应该会生成一个圆圈。然而。我得到的东西就像附图,这不是一个圆圈。我不确定我做错了什么。

enter image description here

1 个答案:

答案 0 :(得分:2)

它是剪辑空间中的一个圆圈。请注意,水平范围是屏幕宽度的一半,垂直范围是屏幕高度的一半。将剪辑空间(两个轴上的-1到1)映射到屏幕空间的视口转换基本上执行缩放和平移,这会导致圆的变形。

为防止这种情况发生,您需要设置适当的投影变换,例如:与let handler = { get(target,name) { return `Value for attribute ${name}` } } let x = new Proxy({},handler); console.log(x.lskdjoau); // produces message: "Value of attribute 'lskdjoau'"