def create_fbo(): fbo = gu.Framebuffer( { GL_COLOR_ATTACHMENT0: gu.RenderbufferMultisample(16, GL_RGB8, W, H), } ) fbo2 = gu.Framebuffer( { GL_COLOR_ATTACHMENT0: gu.Renderbuffer(GL_RGB8, W, H), } ) fbo.bind() return fbo, fbo2
def __init__(self, models_cad_files, samples=1, vertex_tmp_store_folder='.', clamp=False): self._samples = samples self._context = gu.OffscreenContext() # FBO W, H = Renderer.MAX_FBO_WIDTH, Renderer.MAX_FBO_HEIGHT self._fbo = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.Texture(GL_TEXTURE_2D, 1, GL_RGB8, W, H), GL_COLOR_ATTACHMENT1: gu.Texture(GL_TEXTURE_2D, 1, GL_R32F, W, H), GL_DEPTH_ATTACHMENT: gu.Renderbuffer(GL_DEPTH_COMPONENT32F, W, H) }) self._fbo_depth = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.Texture(GL_TEXTURE_2D, 1, GL_RGB8, W, H), GL_COLOR_ATTACHMENT1: gu.Texture(GL_TEXTURE_2D, 1, GL_R32F, W, H), GL_DEPTH_ATTACHMENT: gu.Renderbuffer(GL_DEPTH_COMPONENT32F, W, H) }) glNamedFramebufferDrawBuffers( self._fbo.id, 2, np.array((GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1), dtype=np.uint32)) glNamedFramebufferDrawBuffers( self._fbo_depth.id, 2, np.array((GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1), dtype=np.uint32)) if self._samples > 1: self._render_fbo = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.TextureMultisample(self._samples, GL_RGB8, W, H, True), GL_COLOR_ATTACHMENT1: gu.TextureMultisample(self._samples, GL_R32F, W, H, True), GL_DEPTH_STENCIL_ATTACHMENT: gu.RenderbufferMultisample(self._samples, GL_DEPTH32F_STENCIL8, W, H) }) glNamedFramebufferDrawBuffers( self._render_fbo.id, 2, np.array((GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1), dtype=np.uint32)) self._fbo.bind() # VAO attributes = gu.geo.load_meshes_sixd(models_cad_files, vertex_tmp_store_folder, recalculate_normals=False) vertices = [] indices = [] for vertex, normal, color, faces in attributes: indices.append(faces.flatten()) vertices.append( np.hstack((vertex, normal, color / 255.0)).flatten()) indices = np.hstack(indices).astype(np.uint32) vertices = np.hstack(vertices).astype(np.float32) vao = gu.VAO( { (gu.Vertexbuffer(vertices), 0, 9 * 4): [(0, 3, GL_FLOAT, GL_FALSE, 0 * 4), (1, 3, GL_FLOAT, GL_FALSE, 3 * 4), (2, 3, GL_FLOAT, GL_FALSE, 6 * 4)] }, gu.EBO(indices)) vao.bind() # IBO vertex_count = [np.prod(vert[3].shape) for vert in attributes] instance_count = np.ones(len(attributes)) first_index = [ sum(vertex_count[:i]) for i in xrange(len(vertex_count)) ] vertex_sizes = [vert[0].shape[0] for vert in attributes] base_vertex = [ sum(vertex_sizes[:i]) for i in xrange(len(vertex_sizes)) ] base_instance = np.zeros(len(attributes)) ibo = gu.IBO(vertex_count, instance_count, first_index, base_vertex, base_instance) ibo.bind() gu.Shader.shader_folder = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'shader') # if clamp: # shader = gu.Shader('depth_shader_phong.vs', 'depth_shader_phong_clamped.frag') # else: shader = gu.Shader('depth_shader_phong.vs', 'depth_shader_phong.frag') shader.compile_and_use() self._scene_buffer = gu.ShaderStorage(0, gu.Camera().data, True) self._scene_buffer.bind() glEnable(GL_DEPTH_TEST) glClearColor(0.0, 0.0, 0.0, 1.0)
def __init__(self, models_cad_files, samples=1, vertex_tmp_store_folder='.', vertex_scale=1.): self._samples = samples self._context = gu.OffscreenContext() # FBO W, H = Renderer.MAX_FBO_WIDTH, Renderer.MAX_FBO_HEIGHT self._fbo = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.Texture(GL_TEXTURE_2D, 1, GL_RGB8, W, H), GL_COLOR_ATTACHMENT1: gu.Texture(GL_TEXTURE_2D, 1, GL_R32F, W, H), GL_DEPTH_ATTACHMENT: gu.Renderbuffer(GL_DEPTH_COMPONENT32F, W, H) }) self._fbo_depth = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.Texture(GL_TEXTURE_2D, 1, GL_RGB8, W, H), GL_COLOR_ATTACHMENT1: gu.Texture(GL_TEXTURE_2D, 1, GL_R32F, W, H), GL_DEPTH_ATTACHMENT: gu.Renderbuffer(GL_DEPTH_COMPONENT32F, W, H) }) glNamedFramebufferDrawBuffers( self._fbo.id, 2, np.array((GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1), dtype=np.uint32)) glNamedFramebufferDrawBuffers( self._fbo_depth.id, 2, np.array((GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1), dtype=np.uint32)) if self._samples > 1: self._render_fbo = gu.Framebuffer({ GL_COLOR_ATTACHMENT0: gu.TextureMultisample(self._samples, GL_RGB8, W, H, True), GL_DEPTH_ATTACHMENT: gu.RenderbufferMultisample(self._samples, GL_DEPTH_COMPONENT32F, W, H) }) # VAO vert_norms = gu.geo.load_meshes(models_cad_files, vertex_tmp_store_folder, recalculate_normals=True) vertices = np.empty(0, dtype=np.float32) for vert_norm in vert_norms: _verts = vert_norm[0] * vertex_scale vertices = np.hstack((vertices, np.hstack( (_verts, vert_norm[1])).reshape(-1))) vao = gu.VAO({ (gu.Vertexbuffer(vertices), 0, 6 * 4): [(0, 3, GL_FLOAT, GL_FALSE, 0 * 4), (1, 3, GL_FLOAT, GL_FALSE, 3 * 4)] }) sizes = [vert[0].shape[0] for vert in vert_norms] offsets = [sum(sizes[:i]) for i in xrange(len(sizes))] ibo = gu.IBO(sizes, np.ones(len(vert_norms)), offsets, np.zeros(len(vert_norms))) gu.Shader.shader_folder = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'shader') shader = gu.Shader('cad_shader.vs', 'cad_shader.frag') shader.compile() self._scene_buffer = gu.ShaderStorage(0, gu.Camera().data, True) self._fbo.bind() self._scene_buffer.bind() vao.bind() ibo.bind() shader.use() glEnable(GL_DEPTH_TEST) glClearColor(0.0, 0.0, 0.0, 1.0)