Почему я не могу найти свой шейдер «default.vert» в каталоге? OpenGl Python [дубликат]Python

Программы на Python
Ответить
Anonymous
 Почему я не могу найти свой шейдер «default.vert» в каталоге? OpenGl Python [дубликат]

Сообщение Anonymous »

Итак, я начинаю изучать шейдеры с помощью Python и openGL и следую этому руководству:
и у меня есть эти коды:
  • test.py

Код: Выделить всё

import pygame as pg
import moderngl as mgl
import sys
import ctypes
from model import Triangle

import time, math
#classes
class GraphicEngine:
def __init__(self, win_size=(1000,1000)):
#init pygame modules
pg.init()
#window size manager
self.WIN_SIZE = win_size
#opengl attribute with pygame
pg.display.gl_set_attribute(pg.GL_CONTEXT_MAJOR_VERSION, 3)
pg.display.gl_set_attribute(pg.GL_CONTEXT_MINOR_VERSION, 3)
pg.display.gl_set_attribute(pg.GL_CONTEXT_PROFILE_MASK, pg.GL_CONTEXT_PROFILE_CORE)
#opengl context creation
pg.display.set_mode(self.WIN_SIZE, flags=pg.OPENGL | pg.DOUBLEBUF)
#detect current opengl for usage
self.ctx = mgl.create_context()
#create an object to help track time
self.clock = pg.time.Clock()
#scene
self.scene = Triangle(self)

def check_events(self):
for event in pg.event.get():
if event.type == pg.QUIT or (event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE):
self.scene.destroy()
pg.quit()
sys.exit()

def render(self):
#busy with rendering everything on screen
#clear framebuffer
self.ctx.clear(color=(0.01,0.9,0.7))
#render scene
self.scene.render()
#swap buffers
pg.display.flip()

def render_screen(self):

return (r,g,b)

def run(self):
#runs every frame and control the whole thinggy : =>  manager
while True:
self.check_events()
self.render()
self.clock.tick(120)

if __name__ == "__main__":
#window size
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

#run game
game = GraphicEngine(win_size=screensize)
game.run()
  • model.py :

Код: Выделить всё

class Triangle():
def __init__(self, app):
self.app = app
self.ctx = app.ctx
self.vbo = self.get_vbo()
self.shader_program = self.get_shader_program('default')
self.vao = self.get_vao()

def render(self):
self.vao.render()

def destroy(self):
self.vbo.release()
self.shader_program.release()
self.vao.release()

def get_vao(self):
vao = self.ctx.vertex_array(self.shader_program, [(self.vbo, '3f','in_position')])
return vao

def get_vertex_data(self):
vertex_data = [(-0.6, -0.8, 0.0), (0.0, 0.8, 0.0), (0.6, -0.8, 0.0)]
vertex_data = np.array(vertex_data, dtype = 'f4')
return vertex_data

def get_vbo(self):
#instantiate the tringle in a vertex buffer in GPU
vertex_data = self.get_vertex_data()
vbo = self.ctx.buffer(vertex_data)
return vbo

def get_shader_program(self, shader_name):

with open(f'shaders/{shader_name}.vert') as file:
vertex_shader = file.read()
with open(f'shaders/{shader_name}.frag') as file:
fragment_shader = file.read()

program = self.ctx.program(vertex_shader=vertex_shader, fragment_shader=fragment_shader)
return program
  • default.vert внутри файла «шейдеров»

Код: Выделить всё

layout (location = 0) in vec3 in_position;

void main(){
gl_position = vec4(in_position, 1.0);
}
  • default.frag внутри файла "шейдеров"

Код: Выделить всё

layout (location = 0) out vec4 fragColor;

void main(){
vec3 color = vec3(1,0,0)
fragColor = vec4(color, 1.0)
}
Изображение, показывающее управление репозиторием
и ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "c:\Users\test\Documents\dumb_project\python_shaders\OpenGL\test.py", line 62, in 
game = GraphicEngine(win_size=screensize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\test\Documents\dumb_project\python_shaders\OpenGL\test.py", line 27, in __init__
self.scene = Triangle(self)
^^^^^^^^^^^^^^
File "c:\Users\test\Documents\dumb_project\python_shaders\OpenGL\model.py", line 8, in __init__
self.shader_program = self.get_shader_program('default')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\test\Documents\dumb_project\python_shaders\OpenGL\model.py", line 36, in get_shader_program
with open(f'shaders/{shader_name}.vert') as file:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'shaders/default.vert'
Итак, он говорит, что не может найти папку, и я понятия не имею, почему, поэтому вот мой вопрос: D
Знаете ли вы, почему появляется эта ошибка?
спасибо
и хорошего дня!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ngl-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»