OpenGL / Android — Настройка 2D ортогональной системы координат OpenGL, которая соответствует пикселям экрана

#java #android #math #graphics #opengl-es

#java #Android #математика #графика #opengl-es

Вопрос:

Я пытаюсь нарисовать несколько кругов на экране, используя OpenGL ES 1.5 для Android. Они рисуют, но я хочу иметь возможность вводить x = 300, y = 500, и это нарисует окружность с центром в этой координате (например, в (300,500) пикселе на экране). В настоящее время я рисую и перевожу круги, но это неточно, я не знаю, как получить это именно там, где я хочу: вот несколько неработающих кодов из моей последней попытки:

 //doesn't take w/h ratio into consideration, not sure how to implement that
gl.glViewport(0, 0, windowWidth, windowHeight);
gl.glOrthof(0,windowWidth,   0, windowHeight,    1, 2);
GLU.gluLookAt(gl,   0, 0, 5,    0, 0, 0,    0, 1, 0);

//And for drawing a circle, with the desired x and y coordinates:
for (int j = 0; j amp;lt number_Triangles; j  ) {
  x = Math.cos(theta)   xCoor;
  y = Math.sin(theta)   yCoor;
  z = 1;
 theta  = 2 * Math.PI / (number_Triangles);
}
  

Комментарии:

1. «но это не точно»: что вы имеете в виду?

2. Координаты окружностей не совпадают с координатами x, y, которые я сгенерировал с помощью моего редактора уровней. Они были перекошены и смещены от центра, и я ищу точный контроль.

Ответ №1:

Если вы создаете 2D-графику, я бы рекомендовал gluOrtho2D (слева, справа, снизу, сверху). Таким образом, у вас есть точный контроль над тем, какие координаты будут отображаться на каждом краю вашего экрана.

Так, например, вы могли бы иметь:

gl.glViewport(0,0,windowWidth, windowHeight); GLU.gluOrtho2D(-2.0f, 2.0f, -2.0f, 2.0f);

для (int j = …..