Class: Rendering::DepthOfFieldEffect

Inherits:
Object
  • Object
show all
Includes:
Effect
Defined in:
lib/engine/rendering/post_processing/depth_of_field_effect.rb

Instance Attribute Summary

Attributes included from Effect

#enabled

Instance Method Summary collapse

Constructor Details

#initialize(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0) ⇒ DepthOfFieldEffect

Returns a new instance of DepthOfFieldEffect.



7
8
9
10
11
12
13
# File 'lib/engine/rendering/post_processing/depth_of_field_effect.rb', line 7

def initialize(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0)
  @focus_distance = focus_distance
  @focus_range = focus_range
  @blur_amount = blur_amount
  @near = near
  @far = far
end

Instance Method Details

#apply(rt_a, rt_b, screen_quad) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/engine/rendering/post_processing/depth_of_field_effect.rb', line 15

def apply(rt_a, rt_b, screen_quad)
  Engine::GL.Disable(Engine::GL::DEPTH_TEST)

  blur_pass(rt_a, rt_b, [1.0, 0.0], screen_quad)  # horizontal
  blur_pass(rt_b, rt_a, [0.0, 1.0], screen_quad)  # vertical

  rt_a
end

#blur_pass(source_rt, dest_rt, direction, screen_quad) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/engine/rendering/post_processing/depth_of_field_effect.rb', line 24

def blur_pass(source_rt, dest_rt, direction, screen_quad)
  dest_rt.bind
  material.set_vec2("direction", direction)
  material.set_runtime_texture("screenTexture", source_rt.color_texture)
  material.set_runtime_texture("depthTexture", PostProcessingEffect.depth_texture)
  screen_quad.draw_with_material(material)
end