Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по GLSL | Python | OpenGL

Сергей Макаров Ученик (214), на голосовании 2 дня назад
Всем здравствуйте!
Делаю по видео: https://www.youtube.com/watch?v=iCuNaOyhMMY&t=56s
Хочу запустить, но вылезают ошибки:

2025-01-18 18:29:31,102 - moderngl_window - INFO - Attempting to load window class: moderngl_window.context.pyglet.Window
2025-01-18 18:29:31,646 - moderngl_window.context.base.window - INFO - Context Version:
2025-01-18 18:29:31,646 - moderngl_window.context.base.window - INFO - ModernGL: 5.12.0
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - vendor: NVIDIA Corporation
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - renderer: NVIDIA GeForce GTX 750 Ti/PCIe/SSE2
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - version: 3.3.0 NVIDIA 560.94
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - python: 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - platform: win32
2025-01-18 18:29:31,647 - moderngl_window.context.base.window - INFO - code: 330
2025-01-18 18:29:31,655 - moderngl_window.loaders.program.separate - INFO - Loading: C:\Users\79638\OneDrive\Рабочий стол\ultra3d\programs\vertex.glsl
2025-01-18 18:29:31,655 - moderngl_window.loaders.program.separate - INFO - Loading: C:\Users\79638\OneDrive\Рабочий стол\ultra3d\programs\fragment.glsl
Traceback (most recent call last):
File "C:\Users\79638\OneDrive\Рабочий стол\ultra3d\main.py", line 22, in <module>
mglw.run _window_config(App)
File "C:\Users\79638\AppData\Local\Programs\Python\Python312\Lib\site-packages\moderngl_window\__init__.py", line 201, in run_window_config
run_window_config_instance(config)
File "C:\Users\79638\AppData\Local\Programs\Python\Python312\Lib\site-packages\moderngl_window\__init__.py", line 295, in run_window_config_instance
window.render(current_time, delta)
File "C:\Users\79638\AppData\Local\Programs\Python\Python312\Lib\site-packages\moderngl_window\context\base\window.py", line 778, in render
self.render_func(time, frame_time)
File "C:\Users\79638\AppData\Local\Programs\Python\Python312\Lib\site-packages\moderngl_window\context\base\window.py", line 1195, in on_render
raise NotImplementedError("WindowConfig.on_render not implemented")
NotImplementedError: WindowConfig.on_render not implemented


Что мне делать?
Голосование за лучший ответ
Дерокс Офф Ученик (207) 1 месяц назад
Ошибка говорит о том, что в вашем классе WindowConfig не реализован метод on_render. Это обязательный метод для работы с рендерингом, и его необходимо реализовать, чтобы приложение могло корректно работать.

Чтобы исправить ошибку, выполните следующие шаги:

Реализуйте метод on_render в вашем классе WindowConfig: В вашем коде должен быть класс, который настраивает окно и обрабатывает рендеринг. Он должен выглядеть примерно так:

import moderngl_window as mglw

class App(mglw.WindowConfig):
gl_version = (3, 3)
title = "My Application"
window_size = (800, 600)

def __init__(self, **kwargs):
super().__init__(**kwargs)
# Инициализация других параметров, если необходимо

def on_render(self, time, frame_time):
# Ваш код для рендеринга
# Например:
self.ctx.clear() # Очистить экран
# Ваши рендеринг команды
# self.ctx.draw(...)
# или
# self.program.use() # Использование программы для рендеринга

if __name__ == "__main__":
mglw.run _window_config(App)

Проверьте, что метод on_render определен правильно: Убедитесь, что в вашем классе App (или аналогичном) имеется метод on_render, и он правильно обрабатывает процесс рендеринга, используя OpenGL контекст.

Добавьте логику рендеринга: Внутри метода on_render вы должны писать код для рендеринга сцены. Это может включать очистку экрана, использование шейдеров и рисование объектов на экране.

import moderngl_window as mglw

class App(mglw.WindowConfig):
gl_version = (3, 3)
title = "3D Application"
window_size = (800, 600)

def __init__(self, **kwargs):
super().__init__(**kwargs)
self.program = self.load_program('vertex.glsl', 'fragment.glsl') # Пример загрузки шейдеров

def on_render(self, time, frame_time):
# Очистить экран перед рендерингом
self.ctx.clear()

# Применить программу шейдера
self.program.use()

# Добавьте команды рендеринга, например, рисование объектов:
# self.ctx.draw(...)

if __name__ == "__main__":
mglw.run _window_config(App)

В этом примере:

Метод on_render очищает экран и затем использует программу шейдеров для рендеринга.
Используются шейдеры, загруженные из файлов vertex.glsl и fragment.glsl.
Если у вас нет шейдеров или других объектов, код может быть адаптирован под вашу задачу, но в любом случае метод on_render обязателен для работы с рендерингом в moderngl_window.
Сергей МакаровУченик (214) 1 месяц назад
Заработало, спасибо!
Видимо, у ютубера была ниже версия и в ней было по другому
Похожие вопросы