Рисование квадранта круга

Я хочу нарисовать все 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, 0) находится в верхнем левом углу экрана, дает положительный знак Х вправо (что соответствует обычным математическим представлениям), но заставляет положительный Y идти вниз (что не согласуется с обычные математические представления). Если вы хотите имитировать обычную функцию рисования математического поведения, где сферический квадрант 0º-90º лежит в верхней правой части, вы можете просто инвертировать координату Y.

Другими словами, попробуйте:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector