绘制一个圆圈的象限

时间:2013-07-08 06:33:25

标签: c++ opengl geometry

我想分别绘制所有1/4的圆,但是我的窗口设置,原点位于左上角(0,0)。无论如何,我可以绕过再次反转屏幕?

我目前的实施是:

//nX: x
//nY: y
//nR: radius
//verts: std::vector<int>
//indices: std::vector<uint32_t>

verts.push_back(nX + nR); verts.push_back(nY + nR);
for (int i = 270; i >= 360; i -= slice_count)
{
    verts.push_back(nX + cos(DEG_TO_RAD * i) * nR);
    verts.push_back(nY + sin(DEG_TO_RAD * i) * nR);
}


//...
//rest of the code are index manipulation

glDrawElements(GL_TRIANGLE_STRIP, indices.size(), GL_UNSIGNED_INT, &indices[0]);

这个只会画

| -   
|      -
|        -
|           -
|             -
|               -
|                -
|                 -
|                  -
|                   -
|____________________

如果我开始从270到360的旋转只是为了进行上面的绘图,它会让我感到困惑。你可以建议任何方式来缓解我的困惑吗?它在逻辑上也不对,对吧?


这是我制作的新测试代码。

glBegin(GL_TRIANGLE_FAN);
    glVertex2i(500, 400);
    for (int i = 360; i >= 270; --i)
    {
        int ax = (500 + cos(DEG_TO_RAD * i) * 100);
        int ay = (400 + sin(DEG_TO_RAD * i) * 100);
        glVertex2i(ax, -ay);
    }
glEnd();

1 个答案:

答案 0 :(得分:1)

嗯,(0,0)位于屏幕左上方这一事实使得X向右(这与通常的数学表示形式一致),但是正Y向下(这不是与通常的数学表示一致)。如果你想模仿通常的函数绘制数学的行为,在0º-90º球体象限位于右上方,你可以只反转Y坐标。

换句话说,试试:

verts.push_back(nY - (sin(DEG_TO_RAD * i) * nR));