Я хочу нарисовать все 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();
Ну, тот факт, что (0, 0) находится в верхнем левом углу экрана, дает положительный знак Х вправо (что соответствует обычным математическим представлениям), но заставляет положительный Y идти вниз (что не согласуется с обычные математические представления). Если вы хотите имитировать обычную функцию рисования математического поведения, где сферический квадрант 0º-90º лежит в верхней правой части, вы можете просто инвертировать координату Y.
Другими словами, попробуйте:
verts.push_back(nY - (sin(DEG_TO_RAD * i) * nR));
Других решений пока нет …