@yann1nnn

Почему возникает проблема при использовании PyOpenGL и GLFW?

Я хочу использовать 3д пространство для создания собственной игры, нов возникает данная ошибка:

Traceback (most recent call last):
  File "C:\Users\Home PC\PycharmProjects\TowerDef\main.py", line 35, in <module>
    main()
  File "C:\Users\Home PC\PycharmProjects\TowerDef\main.py", line 27, in main
    render.draw()  # Вызываем функцию отрисовки из модуля render
  File "C:\Users\Home PC\PycharmProjects\TowerDef\code\render.py", line 23, in draw
    glEnd()
  File "C:\Users\Home PC\PycharmProjects\TowerDef\venv\lib\site-packages\OpenGL\latebind.py", line 63, in __call__
    return self.wrapperFunction( self.baseFunction, *args, **named )
  File "C:\Users\Home PC\PycharmProjects\TowerDef\venv\lib\site-packages\OpenGL\GL\exceptional.py", line 45, in glEnd
    return baseFunction( )
  File "C:\Users\Home PC\PycharmProjects\TowerDef\venv\lib\site-packages\OpenGL\platform\baseplatform.py", line 415, in __call__
    return self( *args, **named )
  File "C:\Users\Home PC\PycharmProjects\TowerDef\venv\lib\site-packages\OpenGL\error.py", line 234, in glCheckError
    baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
	err = 1282,
	description = b'\xed\xe5\xe4\xee\xef\xf3\xf1\xf2\xe8\xec\xe0\xff \xee\xef\xe5\xf0\xe0\xf6\xe8\xff',
	baseOperation = glEnd,
	cArguments = ()
)

Код проекта:

import glfw
from OpenGL.GL import *
from code import render  # Импортируем модуль render из папки code

def main():
    # Инициализация GLFW
    if not glfw.init():
        return

    # Создание окна
    glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
    glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 3)
    glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)

    window = glfw.create_window(800, 600, "OpenGL 3D Space", None, None)
    if not window:
        glfw.terminate()
        return

    glfw.make_context_current(window)

    # Основной цикл приложения
    while not glfw.window_should_close(window):
        glfw.poll_events()

        # Здесь можно добавить код для отрисовки 3D пространства с использованием PyOpenGL
        render.draw()  # Вызываем функцию отрисовки из модуля render

        glfw.swap_buffers(window)

    # Завершение работы
    glfw.terminate()

if __name__ == "__main__":
    main()


from OpenGL.GL import *
from OpenGL.GLUT import *

def render_3d_space():
    # Инициализация OpenGL
    glutInit()
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
    glutCreateWindow("OpenGL 3D Space")

    # Здесь можно добавить код для отрисовки 3D пространства с использованием PyOpenGL

    glutDisplayFunc(draw)
    glutMainLoop()

def draw():
    # Здесь добавьте код для отрисовки вашего 3D пространства

    # Пример: рисование треугольника
    glBegin(GL_TRIANGLES)
    glVertex3f(-1.0, -1.0, 0.0)
    glVertex3f(1.0, -1.0, 0.0)
    glVertex3f(0.0, 1.0, 0.0)
    glEnd()

if __name__ == "__main__":
    render_3d_space()
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
includedlibrary
@includedlibrary
Если сменить версию OpenGL с 3.3 на 2.1, всё заработает. glBegin, glEnd - старые методы, они больше не работают, начиная с версии 3.3.
#!/usr/bin/env python3

import glfw
from OpenGL.GL import *

def draw():
    # Здесь добавьте код для отрисовки вашего 3D пространства

    # Пример: рисование треугольника
    glBegin(GL_TRIANGLES)
    glVertex3f(-1.0, -1.0, 0.0)
    glVertex3f(1.0, -1.0, 0.0)
    glVertex3f(0.0, 1.0, 0.0)
    glEnd()

def main():
    # Инициализация GLFW
    if not glfw.init():
        return

    # Создание окна
    glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 2)
    glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1)

    window = glfw.create_window(800, 600, "OpenGL 3D Space", None, None)
    if not window:
        glfw.terminate()
        return

    glfw.make_context_current(window)

    # Основной цикл приложения
    while not glfw.window_should_close(window):
        glfw.poll_events()

        # Здесь можно добавить код для отрисовки 3D пространства с использованием PyOpenGL
        draw()  # Вызываем функцию отрисовки из модуля render

        glfw.swap_buffers(window)

    # Завершение работы
    glfw.terminate()

if __name__ == "__main__":
    main()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы