В настоящее время я программирую отображение основного полета, используя Python и OpenGL. Так как у меня нулевой опыт работы с OpenGL (и небольшой опыт работы с кодированием в целом) Я борюсь с самой простой реализацией функций, но до сих пор я получил это далеко:
Моя проблема сейчас заключается в том, чтобы вращать искусственный горизонт вокруг центральной точки области просмотра (400x240) в соответствии с данными крена. Мой видовой экран 800x480 с квадратом, представляющим искусственный горизонт, имеющий размер 1000x2880.
Отображение данных высоты тона легко, потому что 1 градус равен 8 пикселям на текстуре области просмотра / горизонта.
Numbers.p_offset = -Data.pitch*8
, который я могу просто добавить ко всем четырем y-координатам четырехугольника.
def horizon():
glBindTexture(GL_TEXTURE_2D, horizontexture)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_TEXTURE_2D)
glColor4f(1, 1, 1, 1)
glBegin(GL_QUADS)
glTexCoord2f(0, 1); glVertex2f(-100, -1200+Numbers.p_offset)
glTexCoord2f(1, 1); glVertex2f(900, -1200+Numbers.p_offset)
glTexCoord2f(1, 0); glVertex2f(900, 1680+Numbers.p_offset)
glTexCoord2f(0, 0); glVertex2f(-100, 1680+Numbers.p_offset)
glEnd()
glDisable(GL_TEXTURE_2D)
Что непросто, так это отобразить данные крена (- от 180 ° до 180 °) , так как изменение броска изменило бы x- и y-координату квада. Сначала необходимо применить смещение шага (чтобы сохранить вертикальную осевую линию квадра в центре области просмотра) , а затем поворот, соответствующий крену. Я не могу понять математику о том, как рассчитать смещение, вызванное броском, поэтому я ищу решение о том, как сделать это с некоторыми функциями OpenGL, о которых я пока не знаю.
Все учебники и вопросы / ответы, которые я нашел, были, в частности, вопросы о том, как вращать квад вокруг своей центральной точки, а не о другой координате.
Вопрос: Как можно вращать квад конкретная c координата в ортографической проекции c в OpenGL и Python?